diff options
Diffstat (limited to 'etc')
-rw-r--r-- | etc/bootstrap/bbot-bootstrap-msvc.bat | 164 | ||||
-rw-r--r-- | etc/bootstrap/bbot-bootstrap.service | 33 | ||||
-rwxr-xr-x | etc/bootstrap/bbot-bootstrap.sh | 131 | ||||
-rw-r--r-- | etc/buildfile | 8 | ||||
-rwxr-xr-x | etc/environment/default | 26 | ||||
-rw-r--r-- | etc/environment/default-msvc.bat | 56 |
6 files changed, 418 insertions, 0 deletions
diff --git a/etc/bootstrap/bbot-bootstrap-msvc.bat b/etc/bootstrap/bbot-bootstrap-msvc.bat new file mode 100644 index 0000000..de8b297 --- /dev/null +++ b/etc/bootstrap/bbot-bootstrap-msvc.bat @@ -0,0 +1,164 @@ +@echo off + +rem file : etc/bootstrap/bbot-bootstrap-msvc.bat +rem copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +rem license : TBC; see accompanying LICENSE file + +setlocal EnableExtensions EnableDelayedExpansion + +set "MSVC=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community" +set "VCVARS=%MSVC%\VC\Auxiliary\Build\vcvars64.bat" + +set "BUILD=C:\tmp" +set "INSTALL=C:\build2" +set "BOOTSTRAP=C:\bootstrap" +set "ENVIRONMENT=C:\environment" + +set "TFTP=196.254.111.222" +rem set "TFTP=10.1.0.1:55123" +set "VERBOSE=3" + +rem If we already have the bbot worker, assume we are bootstrapped. +rem +if exist %INSTALL%\bin\bbot-worker.exe ( + set "PATH=%INSTALL%\bin;%PATH%" + bbot-worker.exe --startup --build %BUILD% --environment %ENVIRONMENT%^ + --tftp-host %TFTP% --verbose %VERBOSE% + goto end +) + +rem Setup the compiler for the toolchain. +rem +call "%VCVARS%" +if errorlevel 1 goto error + +rem Use bootstrap tools. +rem +set "PATH=%BOOTSTRAP%\bin;%PATH%" + +rem Show the steps we are performing. +rem +@echo on + +@rem +@rem Bootstrap the toolchain and then build bbot. +@rem +@if exist %BUILD%\bootstrap\ ( + rmdir /S /Q %BUILD%\bootstrap + @if errorlevel 1 goto error +) + +mkdir %BUILD%\bootstrap +@if errorlevel 1 goto error + +@if exist %INSTALL% ( + rmdir /S /Q %INSTALL% + @if errorlevel 1 goto error +) + +cd %BUILD%\bootstrap + +@rem +@rem Get the baseutils. +@rem +@rem We could be running on a new network which may take Windows some time +@rem to digest. And if we start before that happens, we will be hanging +@rem forever. +@rem +:restart +curl -s -S -O --connect-timeout 5 --max-time 30^ + "tftp://%tftp%/build2-baseutils-x86_64-windows.zip" +@if errorlevel 1 goto restart + +unzip -q build2-baseutils-x86_64-windows.zip +@if errorlevel 1 goto error + +del build2-baseutils-x86_64-windows.zip +@if errorlevel 1 goto error + +move build2-baseutils-*-x86_64-windows %INSTALL% +@if errorlevel 1 goto error + + +@rem +@rem Get the toolchain. +@rem +curl -s -S -O "tftp://%tftp%/build2-toolchain.tar.xz" +@if errorlevel 1 goto error + +tar -xf build2-toolchain.tar.xz +@if errorlevel 1 goto error + +del build2-toolchain.tar.xz +@if errorlevel 1 goto error + + +@rem +@rem Get the repository certificate fingerprint. +@rem +curl -s -S -O "tftp://%tftp%/trust" +@if errorlevel 1 goto error + +@set /P trust=<trust + +del trust +@if errorlevel 1 goto error + + +@rem +@rem Bootstrap and install the toolchain. +@rem +@for /D %%d in (build2-toolchain-*) do set "bstrap=%%d" +cd %bstrap% + +@rem Note: executing in a separate cmd.exe to preserve the echo mode. +@rem +cmd /C build-msvc.bat %INSTALL% %trust% +@if errorlevel 1 goto error + +cd .. +rmdir /S /Q %bstrap% +@if errorlevel 1 goto error + + +@rem +@rem Switch to the bootstrapped utilities/toolchain. +@rem +@set "PATH=%INSTALL%\bin;%PATH%" + + +@rem +@rem Build and install the bbot worker. +@rem +@for /D %%d in (build2-toolchain-*) do set "config=%%d" +cd %config% + +bpkg build --yes bbot +@if errorlevel 1 goto error + +bpkg install bbot +@if errorlevel 1 goto error + +cd .. +rmdir /S /Q %config% +@if errorlevel 1 goto error + +@rem +@rem Finish off by uploading the result manifest produced by the bbot worker. +@rem +bbot-worker --bootstrap >manifest +@if errorlevel 1 goto error + +curl -s -S --upload-file manifest "tftp://%tftp%/manifest" +@if errorlevel 1 goto error + +@echo off +goto end + +:error +@echo off +endlocal +exit /b 1 + +:end +endlocal diff --git a/etc/bootstrap/bbot-bootstrap.service b/etc/bootstrap/bbot-bootstrap.service new file mode 100644 index 0000000..ecb0da4 --- /dev/null +++ b/etc/bootstrap/bbot-bootstrap.service @@ -0,0 +1,33 @@ +[Unit] +Description=bbot worker bootstrap +After=default.target +Conflicts=getty@tty1.service + +[Service] +Type=idle +# Old versions of systemd have no 'infinity'. +TimeoutStartSec=6000min +RemainAfterExit=true +User=build +Group=build +# Old versions of systemd have no '~'. +WorkingDirectory=/home/build + +Environment=CXX=g++ +Environment=BUILD=/tmp +Environment=ENVIRONMENT=/home/build/environment + +ExecStart=/usr/local/bin/bbot-bootstrap.sh \ + --cxx ${CXX} \ + --build ${BUILD} \ + --environment ${ENVIRONMENT} + +StandardInput=tty-force +StandardOutput=inherit +StandardError=inherit +TTYPath=/dev/tty1 +TTYReset=yes +TTYVHangup=yes + +[Install] +WantedBy=default.target diff --git a/etc/bootstrap/bbot-bootstrap.sh b/etc/bootstrap/bbot-bootstrap.sh new file mode 100755 index 0000000..65deddc --- /dev/null +++ b/etc/bootstrap/bbot-bootstrap.sh @@ -0,0 +1,131 @@ +#!/bin/sh + +# file : etc/bootstrap/bbot-bootstrap.sh +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : TBC; see accompanying LICENSE file + +usage="Usage: $0 [<options>]" + +set -e # Exit on errors. + +diag () +{ + echo "$*" 1>&2 +} + +error () +{ + diag "$*" + exit 1 +} + +# Note that this function will execute a command with arguments that contain +# spaces but it will not print them as quoted (and neither does set -x). +# +run () +{ + diag "+ $@" + "$@" + if test "$?" -ne "0"; then + exit 1; + fi +} + +# Defaults that can be changed via command line. +# +cxx=g++ +build=/tmp +environment="$HOME/environment" + +# Parse options. +# +while test $# -ne 0; do + case $1 in + --cxx) + shift + if test $# -eq 0; then + error "missing C++ compiler after --cxx" + fi + cxx="$1" + shift + ;; + --build) + shift + if test $# -eq 0; then + error "missing build directory after --build" + fi + build="$1" + shift + ;; + --environment) + shift + if test $# -eq 0; then + error "missing environment directory after --environment" + fi + environment="$1" + shift + ;; + *) + error "unexpected argument '$1'" + ;; + esac +done + +# Defaults that can be changed for testing. +# +# Note: build_options is an array-like (expanded unquoted). +# +tftp="196.254.111.222" +install="/usr/local" +build_options= +verbose=3 + +#install="/tmp/bbot-install" +#tftp="127.0.0.1:55123" +#build_options="--install-dir $install" + +PATH="$install/bin:$PATH" +export PATH + +# If we already have the bbot worker, assume we are bootstrapped. +# +if bbot-worker --version >/dev/null 2>&1; then + exec bbot-worker --startup --build "$build" --environment "$environment" \ + --tftp-host "$tftp" --verbose "$verbose" +fi + +# Bootstrap the toolchain and then build bbot. +# +run rm -rf "$build/bootstrap" +run mkdir -p "$build/bootstrap" +run cd "$build/bootstrap" + +run curl -s -S -O "tftp://$tftp/build2-toolchain.tar.xz" +run tar -xf build2-toolchain.tar.xz +run rm build2-toolchain.tar.xz + +run curl -s -S -O "tftp://$tftp/trust" +trust="$(cat trust)" +run rm trust + +# Bootstrap and install the toolchain (by default into /usr/local using sudo). +# +bstrap="$(echo build2-toolchain-*)" +run cd "$bstrap" +run ./build.sh --trust "$trust" $build_options "$cxx" +run cd .. +run rm -r "$bstrap" + +# Build and install the bbot worker. +# +config="$(echo build2-toolchain-*)" +run cd "$config" +run bpkg build --yes bbot +run bpkg install bbot +run cd .. +run rm -r "$config" + +# Finish off by uploading the result manifest produced by the bbot worker. +# +run bbot-worker --bootstrap >manifest +run curl -s -S --upload-file manifest "tftp://$tftp/manifest" diff --git a/etc/buildfile b/etc/buildfile new file mode 100644 index 0000000..0c3b57b --- /dev/null +++ b/etc/buildfile @@ -0,0 +1,8 @@ +# file : etc/buildfile +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : TBC; see accompanying LICENSE file + +./: file{**} + +*: install = data/etc/ +*: install.subdirs = true # Recreate subdirectories. diff --git a/etc/environment/default b/etc/environment/default new file mode 100755 index 0000000..82107f6 --- /dev/null +++ b/etc/environment/default @@ -0,0 +1,26 @@ +#!/bin/sh + +# file : etc/environment/default +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : TBC; see accompanying LICENSE file + +# Environment setup script for C/C++ compilation. + +c=gcc +cxx=g++ + +# $1 - target +# $2 - bbot executable +# $3+ - bbot options + +set -e # Exit on errors. + +t="$1" +shift + +if test -n "$t"; then + echo "unknown target: $t" 1>&2 + exit 1 +fi + +exec "$@" cc config.c="$c" config.cxx="$cxx" diff --git a/etc/environment/default-msvc.bat b/etc/environment/default-msvc.bat new file mode 100644 index 0000000..64c325d --- /dev/null +++ b/etc/environment/default-msvc.bat @@ -0,0 +1,56 @@ +@echo off + +rem file : etc/environment/default-msvc.bat +rem copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +rem license : TBC; see accompanying LICENSE file + +rem +rem Environment setup script for C/C++ compilation with Visual Studio 15. +rem + +rem %1 - target +rem %2 - bbot executable +rem %3+ - bbot options + +setlocal EnableExtensions EnableDelayedExpansion + +set "MSVC=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community" + +set "VCVARS32=%MSVC%\VC\Auxiliary\Build\vcvarsamd64_x86.bat" +set "VCVARS64=%MSVC%\VC\Auxiliary\Build\vcvars64.bat" + +rem Based on target determine what we are building. If the target is +rem not specified, then we build 64-bit by default. +rem +rem Note that an empty argument is passed as "" (literal quotes). +rem +if "_%1_" == "_x86_64-microsoft-win32-msvc14.1_" ( + set "VCVARS=%VCVARS64%" +) else ( + if "_%1_" == "_i386-microsoft-win32-msvc14.1_" ( + set "VCVARS=%VCVARS32%" + ) else ( + if _%1_ == _""_ ( + set "VCVARS=%VCVARS64%" + ) else ( + echo error: unknown target %1 + goto error + ) + ) +) + +call "%VCVARS%" +if errorlevel 1 goto error + +%2 %3 %4 %5 %6 %7 %8 %9 cc config.c=cl config.cxx=cl +if errorlevel 1 goto error + +goto end + +:error +@echo off +endlocal +exit /b 1 + +:end +endlocal |