You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.8 KiB
136 lines
4.8 KiB
#!/bin/bash
|
|
|
|
# This script serves two purposes. First, it can bootstrap the standalone
|
|
# Blueprint to generate the minibp binary. To do this simply run the script
|
|
# with no arguments from the desired build directory.
|
|
#
|
|
# It can also be invoked from another script to bootstrap a custom Blueprint-
|
|
# based build system. To do this, the invoking script must first set some or
|
|
# all of the following environment variables, which are documented below where
|
|
# their default values are set:
|
|
#
|
|
# BOOTSTRAP
|
|
# WRAPPER
|
|
# SRCDIR
|
|
# BLUEPRINTDIR
|
|
# BUILDDIR
|
|
# NINJA_BUILDDIR
|
|
# GOROOT
|
|
#
|
|
# The invoking script should then run this script, passing along all of its
|
|
# command line arguments.
|
|
|
|
set -e
|
|
|
|
EXTRA_ARGS=""
|
|
|
|
# BOOTSTRAP should be set to the path of the bootstrap script. It can be
|
|
# either an absolute path or one relative to the build directory (which of
|
|
# these is used should probably match what's used for SRCDIR).
|
|
if [ -z "$BOOTSTRAP" ]; then
|
|
BOOTSTRAP="${BASH_SOURCE[0]}"
|
|
|
|
# WRAPPER should only be set if you want a ninja wrapper script to be
|
|
# installed into the builddir. It is set to blueprint's blueprint.bash
|
|
# only if BOOTSTRAP and WRAPPER are unset.
|
|
[ -z "$WRAPPER" ] && WRAPPER="`dirname "${BOOTSTRAP}"`/blueprint.bash"
|
|
fi
|
|
|
|
# SRCDIR should be set to the path of the root source directory. It can be
|
|
# either an absolute path or a path relative to the build directory. Whether
|
|
# its an absolute or relative path determines whether the build directory can
|
|
# be moved relative to or along with the source directory without re-running
|
|
# the bootstrap script.
|
|
[ -z "$SRCDIR" ] && SRCDIR=`dirname "${BOOTSTRAP}"`
|
|
|
|
# BLUEPRINTDIR should be set to the path to the blueprint source. It generally
|
|
# should start with SRCDIR.
|
|
[ -z "$BLUEPRINTDIR" ] && BLUEPRINTDIR="${SRCDIR}"
|
|
|
|
# BUILDDIR should be set to the path to store build results. By default, this
|
|
# is the current directory, but it may be set to an absolute or relative path.
|
|
[ -z "$BUILDDIR" ] && BUILDDIR=.
|
|
|
|
# NINJA_BUILDDIR should be set to the path to store the .ninja_log/.ninja_deps
|
|
# files. By default this is the same as $BUILDDIR.
|
|
[ -z "$NINJA_BUILDDIR" ] && NINJA_BUILDDIR="${BUILDDIR}"
|
|
|
|
# TOPNAME should be set to the name of the top-level Blueprints file
|
|
[ -z "$TOPNAME" ] && TOPNAME="Blueprints"
|
|
|
|
# These variables should be set by auto-detecting or knowing a priori the host
|
|
# Go toolchain properties.
|
|
[ -z "$GOROOT" ] && GOROOT=`go env GOROOT`
|
|
|
|
usage() {
|
|
echo "Usage of ${BOOTSTRAP}:"
|
|
echo " -h: print a help message and exit"
|
|
echo " -b <builddir>: set the build directory"
|
|
echo " -t: run tests"
|
|
echo " -n: use validations to depend on tests"
|
|
}
|
|
|
|
# Parse the command line flags.
|
|
while getopts ":b:hnt" opt; do
|
|
case $opt in
|
|
b) BUILDDIR="$OPTARG";;
|
|
n) USE_VALIDATIONS=true;;
|
|
t) RUN_TESTS=true;;
|
|
h)
|
|
usage
|
|
exit 1
|
|
;;
|
|
\?)
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
usage
|
|
exit 1
|
|
;;
|
|
:)
|
|
echo "Option -$OPTARG requires an argument." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# If RUN_TESTS is set, behave like -t was passed in as an option.
|
|
[ ! -z "$RUN_TESTS" ] && EXTRA_ARGS="${EXTRA_ARGS} -t"
|
|
|
|
# If $USE_VALIDATIONS is set, pass --use-validations.
|
|
[ ! -z "$USE_VALIDATIONS" ] && EXTRA_ARGS="${EXTRA_ARGS} --use-validations"
|
|
|
|
# If EMPTY_NINJA_FILE is set, have the primary build write out a 0-byte ninja
|
|
# file instead of a full length one. Useful if you don't plan on executing the
|
|
# build, but want to verify the primary builder execution.
|
|
[ ! -z "$EMPTY_NINJA_FILE" ] && EXTRA_ARGS="${EXTRA_ARGS} --empty-ninja-file"
|
|
|
|
# Allow the caller to pass in a list of module files
|
|
if [ -z "${BLUEPRINT_LIST_FILE}" ]; then
|
|
BLUEPRINT_LIST_FILE="${BUILDDIR}/.bootstrap/bplist"
|
|
fi
|
|
EXTRA_ARGS="${EXTRA_ARGS} -l ${BLUEPRINT_LIST_FILE}"
|
|
|
|
mkdir -p $BUILDDIR/.minibootstrap
|
|
|
|
echo "bootstrapBuildDir = $BUILDDIR" > $BUILDDIR/.minibootstrap/build.ninja
|
|
echo "topFile = $SRCDIR/$TOPNAME" >> $BUILDDIR/.minibootstrap/build.ninja
|
|
echo "extraArgs = $EXTRA_ARGS" >> $BUILDDIR/.minibootstrap/build.ninja
|
|
echo "builddir = $NINJA_BUILDDIR" >> $BUILDDIR/.minibootstrap/build.ninja
|
|
echo "include $BLUEPRINTDIR/bootstrap/build.ninja" >> $BUILDDIR/.minibootstrap/build.ninja
|
|
|
|
if [ ! -f "$BUILDDIR/.minibootstrap/build-globs.ninja" ]; then
|
|
touch "$BUILDDIR/.minibootstrap/build-globs.ninja"
|
|
fi
|
|
|
|
echo "BLUEPRINT_BOOTSTRAP_VERSION=2" > $BUILDDIR/.blueprint.bootstrap
|
|
echo "SRCDIR=\"${SRCDIR}\"" >> $BUILDDIR/.blueprint.bootstrap
|
|
echo "BLUEPRINTDIR=\"${BLUEPRINTDIR}\"" >> $BUILDDIR/.blueprint.bootstrap
|
|
echo "NINJA_BUILDDIR=\"${NINJA_BUILDDIR}\"" >> $BUILDDIR/.blueprint.bootstrap
|
|
echo "GOROOT=\"${GOROOT}\"" >> $BUILDDIR/.blueprint.bootstrap
|
|
echo "TOPNAME=\"${TOPNAME}\"" >> $BUILDDIR/.blueprint.bootstrap
|
|
|
|
touch "${BUILDDIR}/.out-dir"
|
|
|
|
if [ ! -z "$WRAPPER" ]; then
|
|
cp $WRAPPER $BUILDDIR/
|
|
fi
|