184 lines
5.4 KiB
Bash
Executable File
184 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2020 The Marl Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
set -e # Fail on any error.
|
|
|
|
function show_cmds { set -x; }
|
|
function hide_cmds { { set +x; } 2>/dev/null; }
|
|
function status {
|
|
echo ""
|
|
echo "*****************************************************************"
|
|
echo "* $@"
|
|
echo "*****************************************************************"
|
|
echo ""
|
|
}
|
|
|
|
. /bin/using.sh # Declare the bash `using` function for configuring toolchains.
|
|
|
|
status "Fetching submodules"
|
|
git submodule update --init
|
|
|
|
status "Setting up environment"
|
|
using gcc-9 # Always update gcc so we get a newer standard library.
|
|
|
|
if [ "$BUILD_SYSTEM" == "cmake" ]; then
|
|
using cmake-3.17.2
|
|
|
|
SRC_DIR=$(pwd)
|
|
BUILD_DIR=/tmp/marl-build
|
|
INSTALL_DIR=${BUILD_DIR}/install
|
|
|
|
COMMON_CMAKE_FLAGS=""
|
|
COMMON_CMAKE_FLAGS+=" -DCMAKE_BUILD_TYPE=${BUILD_TYPE}"
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_BUILD_EXAMPLES=1"
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_BUILD_TESTS=1"
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_BUILD_BENCHMARKS=1"
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_WARNINGS_AS_ERRORS=1"
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_DEBUG_ENABLED=1"
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_BUILD_SHARED=${BUILD_SHARED:-0}"
|
|
COMMON_CMAKE_FLAGS+=" -DBENCHMARK_ENABLE_INSTALL=0"
|
|
COMMON_CMAKE_FLAGS+=" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}"
|
|
|
|
if [ "$BUILD_TOOLCHAIN" == "ndk" ]; then
|
|
using ndk-r21d
|
|
COMMON_CMAKE_FLAGS+=" -DANDROID_ABI=$BUILD_TARGET_ARCH"
|
|
COMMON_CMAKE_FLAGS+=" -DANDROID_NATIVE_API_LEVEL=18"
|
|
COMMON_CMAKE_FLAGS+=" -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake"
|
|
else # !ndk
|
|
if [ "$BUILD_TOOLCHAIN" == "clang" ]; then
|
|
using clang-10.0.0
|
|
fi
|
|
if [ "$BUILD_TARGET_ARCH" == "x86" ]; then
|
|
COMMON_CMAKE_FLAGS+=" -DCMAKE_CXX_FLAGS=-m32"
|
|
COMMON_CMAKE_FLAGS+=" -DCMAKE_C_FLAGS=-m32"
|
|
COMMON_CMAKE_FLAGS+=" -DCMAKE_ASM_FLAGS=-m32"
|
|
fi
|
|
fi
|
|
|
|
if [ "$BUILD_SANITIZER" == "asan" ]; then
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_ASAN=1"
|
|
elif [ "$BUILD_SANITIZER" == "msan" ]; then
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_MSAN=1"
|
|
elif [ "$BUILD_SANITIZER" == "tsan" ]; then
|
|
COMMON_CMAKE_FLAGS+=" -DMARL_TSAN=1"
|
|
fi
|
|
|
|
|
|
# clean
|
|
# Ensures BUILD_DIR is empty.
|
|
function clean {
|
|
if [ -d ${BUILD_DIR} ]; then
|
|
rm -fr ${BUILD_DIR}
|
|
fi
|
|
mkdir ${BUILD_DIR}
|
|
}
|
|
|
|
# build <description> <flags>
|
|
# Cleans build directory and performs a build using the provided CMake flags.
|
|
function build {
|
|
DESCRIPTION=$1
|
|
CMAKE_FLAGS=$2
|
|
|
|
status "Building ${DESCRIPTION}"
|
|
clean
|
|
cd ${BUILD_DIR}
|
|
show_cmds
|
|
cmake ${SRC_DIR} ${CMAKE_FLAGS} ${COMMON_CMAKE_FLAGS}
|
|
make --jobs=$(nproc)
|
|
hide_cmds
|
|
}
|
|
|
|
# test <description>
|
|
# Runs the pre-built unit tests (if not an NDK build).
|
|
function test {
|
|
DESCRIPTION=$1
|
|
|
|
status "Testing ${DESCRIPTION}"
|
|
cd ${BUILD_DIR}
|
|
show_cmds
|
|
if [ "$BUILD_TOOLCHAIN" != "ndk" ]; then
|
|
./marl-unittests
|
|
./fractal
|
|
./hello_task
|
|
./primes > /dev/null
|
|
./tasks_in_tasks
|
|
fi
|
|
hide_cmds
|
|
}
|
|
|
|
# install <description>
|
|
# Installs the pre-built library to ${INSTALL_DIR}.
|
|
function install {
|
|
DESCRIPTION=$1
|
|
|
|
status "Installing ${DESCRIPTION}"
|
|
cd ${BUILD_DIR}
|
|
show_cmds
|
|
make install
|
|
hide_cmds
|
|
}
|
|
|
|
# build <description> <flags>
|
|
# Cleans build directory and performs a build using the provided CMake
|
|
# flags, then runs tests.
|
|
function buildAndTest {
|
|
DESCRIPTION=$1
|
|
CMAKE_FLAGS=$2
|
|
build "$DESCRIPTION" "$CMAKE_FLAGS"
|
|
test "$DESCRIPTION"
|
|
}
|
|
|
|
# build <description> <flags>
|
|
# Cleans build directory and performs a build using the provided CMake
|
|
# flags, then installs the library to ${INSTALL_DIR}.
|
|
function buildAndInstall {
|
|
DESCRIPTION=$1
|
|
CMAKE_FLAGS=$2
|
|
build "$DESCRIPTION" "$CMAKE_FLAGS"
|
|
install "$DESCRIPTION"
|
|
}
|
|
|
|
if [ -n "$RUN_TESTS" ]; then
|
|
buildAndTest "marl with ucontext fibers" "-DMARL_FIBERS_USE_UCONTEXT=1"
|
|
buildAndTest "marl with assembly fibers" "-DMARL_FIBERS_USE_UCONTEXT=0"
|
|
fi
|
|
|
|
buildAndInstall "marl for install" "-DMARL_INSTALL=1"
|
|
|
|
if [ -n "$BUILD_ARTIFACTS" ]; then
|
|
status "Copying build artifacts"
|
|
show_cmds
|
|
tar -czvf "$BUILD_ARTIFACTS/build.tar.gz" -C "$INSTALL_DIR" .
|
|
hide_cmds
|
|
fi
|
|
|
|
elif [ "$BUILD_SYSTEM" == "bazel" ]; then
|
|
using bazel-3.1.0
|
|
|
|
show_cmds
|
|
bazel test //:tests --test_output=all
|
|
bazel run //examples:fractal
|
|
bazel run //examples:hello_task
|
|
bazel run //examples:primes > /dev/null
|
|
bazel run //examples:tasks_in_tasks
|
|
hide_cmds
|
|
else
|
|
status "Unknown build system: $BUILD_SYSTEM"
|
|
exit 1
|
|
fi
|
|
|
|
status "Done"
|