From 04318680fb6c36aca0ec8029d94dab0e960ac69a Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 21 Apr 2017 16:30:36 +0200 Subject: Add machine test, bootstrap/environment scripts --- etc/bootstrap/bbot-bootstrap-msvc.bat | 164 ++++++++++++++++++++++++++++++++++ etc/bootstrap/bbot-bootstrap.service | 33 +++++++ etc/bootstrap/bbot-bootstrap.sh | 131 +++++++++++++++++++++++++++ etc/buildfile | 8 ++ etc/environment/default | 26 ++++++ etc/environment/default-msvc.bat | 56 ++++++++++++ 6 files changed, 418 insertions(+) create mode 100644 etc/bootstrap/bbot-bootstrap-msvc.bat create mode 100644 etc/bootstrap/bbot-bootstrap.service create mode 100755 etc/bootstrap/bbot-bootstrap.sh create mode 100644 etc/buildfile create mode 100755 etc/environment/default create mode 100644 etc/environment/default-msvc.bat (limited to 'etc') 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=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 []" + +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 -- cgit v1.1