199 lines
6.2 KiB
Bash
199 lines
6.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
CI_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
|
|
|
|
# print versions
|
|
bash --version
|
|
if [ ! -z "$CXX" ]; then $CXX -v; fi
|
|
cmake --version
|
|
CMAKE_VERSION=$(cmake --version | head -n1 | cut -d' ' -f3)
|
|
|
|
################################################
|
|
|
|
OPTS_ARGS+=("t:") ## See --target
|
|
OPTS_ARGS+=("j:") ## Thread usage
|
|
OPTS_ARGS+=("c:") ## See --cargs
|
|
OPTS_ARGS+=("v") ## See --verbose
|
|
OPTL_ARGS+=("components:") ## Specify cmake component(s) to enable
|
|
OPTL_ARGS+=("config:") ## Specify cmake configuration during the build step
|
|
OPTL_ARGS+=("target:") ## Specify target(s) to build
|
|
OPTL_ARGS+=("build-dir:") ## Build directory
|
|
OPTL_ARGS+=("cargs:") ## args to pass directly to cmake generation step
|
|
OPTL_ARGS+=("build-type:") ## Release, Debug, etc.
|
|
OPTL_ARGS+=("verbose") ## Verbose build output
|
|
|
|
# Defaults
|
|
declare -A PARMS
|
|
PARMS[--components]=core,bin
|
|
PARMS[--target]=install
|
|
PARMS[--build-dir]=build
|
|
|
|
if [[ $RUNNER_NAME == *"8c-32g-300h"* ]]; then
|
|
# ASWF github actions runners have 8 threads
|
|
PARMS[-j]=8
|
|
else
|
|
# Github actions runners have 2 threads
|
|
# https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners
|
|
if [[ $CXX == "g++" ]]; then
|
|
# GCC hits memory limits on runners, build in serial
|
|
PARMS[-j]=1
|
|
else
|
|
PARMS[-j]=2
|
|
fi
|
|
fi
|
|
|
|
# Available options for --components
|
|
declare -A COMPONENTS
|
|
COMPONENTS['core']='OPENVDB_BUILD_CORE'
|
|
COMPONENTS['python']='OPENVDB_BUILD_PYTHON_MODULE'
|
|
COMPONENTS['test']='OPENVDB_BUILD_UNITTESTS'
|
|
COMPONENTS['bin']='OPENVDB_BUILD_BINARIES'
|
|
COMPONENTS['view']='OPENVDB_BUILD_VDB_VIEW'
|
|
COMPONENTS['render']='OPENVDB_BUILD_VDB_RENDER'
|
|
COMPONENTS['hou']='OPENVDB_BUILD_HOUDINI_PLUGIN'
|
|
COMPONENTS['doc']='OPENVDB_BUILD_DOCS'
|
|
|
|
COMPONENTS['axcore']='OPENVDB_BUILD_AX'
|
|
COMPONENTS['axgr']='OPENVDB_BUILD_AX_GRAMMAR'
|
|
COMPONENTS['axbin']='OPENVDB_BUILD_AX_BINARIES'
|
|
COMPONENTS['axtest']='OPENVDB_BUILD_AX_UNITTESTS'
|
|
|
|
COMPONENTS['nano']='OPENVDB_BUILD_NANOVDB'
|
|
COMPONENTS['nanotest']='NANOVDB_BUILD_UNITTESTS'
|
|
COMPONENTS['nanoexam']='NANOVDB_BUILD_EXAMPLES'
|
|
COMPONENTS['nanobench']='NANOVDB_BUILD_BENCHMARK'
|
|
COMPONENTS['nanotool']='NANOVDB_BUILD_TOOLS'
|
|
|
|
################################################
|
|
|
|
HAS_PARM() {
|
|
if [ -z "${PARMS[$1]}" ]; then return 1
|
|
else return 0; fi
|
|
}
|
|
|
|
# Format to string and replace spaces with commas
|
|
LARGS_STR="${OPTL_ARGS[@]}"
|
|
LARGS_STR=${LARGS_STR// /,}
|
|
SARGS_STR="${OPTS_ARGS[@]}"
|
|
SARGS_STR=${SARGS_STR// /,}
|
|
|
|
# Parse all arguments and store them in an array, split by whitespace. Error if unsupported
|
|
ARGS="$(eval getopt --options=$SARGS_STR --longoptions=$LARGS_STR -- "$@")"
|
|
eval set -- "$ARGS"
|
|
|
|
# split into associative array
|
|
while true; do
|
|
case "$1" in
|
|
-v|--verbose) # options which dont take an argument
|
|
PARMS["$1"]="ON"; shift
|
|
;;
|
|
-[a-z]*|--[a-z]*) # all other arguments (key/values)
|
|
PARMS["$1"]="$2"; shift 2
|
|
;;
|
|
--)
|
|
shift; break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
################################################
|
|
|
|
# extract arguments
|
|
if HAS_PARM -t; then TARGET=${PARMS[-t]}; fi
|
|
if HAS_PARM --target; then
|
|
if [ -z $TARGET ]; then TARGET=${PARMS[--target]}
|
|
else TARGET+=","${PARMS[--target]}; fi
|
|
fi
|
|
if HAS_PARM -c; then CMAKE_EXTRA=${PARMS[-c]}; fi
|
|
if HAS_PARM --cargs; then
|
|
if [ -z $CMAKE_EXTRA ]; then CMAKE_EXTRA=${PARMS[--cargs]}
|
|
else CMAKE_EXTRA+=" "${PARMS[--cargs]}; fi
|
|
fi
|
|
BUILD_DIR=${PARMS[--build-dir]}
|
|
|
|
# handle whitespace
|
|
eval "CMAKE_EXTRA=($CMAKE_EXTRA)"
|
|
|
|
if HAS_PARM -v || HAS_PARM --verbose; then
|
|
# Using CMAKE_VERBOSE_MAKEFILE as well as `cmake --verbose` to
|
|
# support older versions of CMake.
|
|
CMAKE_EXTRA+=("-DCMAKE_VERBOSE_MAKEFILE=ON")
|
|
fi
|
|
if HAS_PARM --build-type; then
|
|
CMAKE_EXTRA+=("-DCMAKE_BUILD_TYPE=${PARMS[--build-type]}")
|
|
build_type="${PARMS[--build-type]}"
|
|
debug="Debug"
|
|
# Ignore case - if the build-type is Debug, we enable asserts
|
|
if [ "${build_type,,}" = "${debug,,}" ]; then
|
|
CMAKE_EXTRA+=("-DOPENVDB_ENABLE_ASSERTS=ON")
|
|
fi
|
|
fi
|
|
|
|
# Available components. If a component is not provided it is
|
|
# explicitly set to OFF.
|
|
IN_COMPONENTS=${PARMS[--components]}
|
|
IFS=', ' read -r -a IN_COMPONENTS <<< "$IN_COMPONENTS"
|
|
for comp in "${IN_COMPONENTS[@]}"; do
|
|
if [ -z ${COMPONENTS[$comp]} ]; then
|
|
echo "Invalid component passed to build \"$comp\""; exit -1
|
|
fi
|
|
done
|
|
# Build Components command
|
|
for comp in "${!COMPONENTS[@]}"; do
|
|
setting="OFF"
|
|
for in in "${IN_COMPONENTS[@]}"; do
|
|
if [[ $comp == "$in" ]]; then
|
|
setting="ON"; break
|
|
fi
|
|
done
|
|
CMAKE_EXTRA+=("-D${COMPONENTS[$comp]}=$setting")
|
|
done
|
|
|
|
################################################
|
|
|
|
# github actions runners have 8 threads
|
|
# https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners
|
|
export CMAKE_BUILD_PARALLEL_LEVEL=${PARMS[-j]}
|
|
echo "Build using ${CMAKE_BUILD_PARALLEL_LEVEL} threads"
|
|
|
|
# NOTE: --parallel only effects the number of projects build, not t-units.
|
|
# We support this with out own MSVC_MP_THREAD_COUNT option for MSVC.
|
|
# Alternatively it is mentioned that the following should work:
|
|
# cmake --build . -- /p:CL_MPcount=8
|
|
# However it does not seem to for our project.
|
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/20564
|
|
|
|
CMAKE_BUILD_CMD="cmake --build . --parallel ${PARMS[-j]} --target $TARGET --verbose"
|
|
|
|
if HAS_PARM --config; then
|
|
CMAKE_BUILD_CMD+=" --config ${PARMS[--config]}"
|
|
fi
|
|
|
|
################################################
|
|
|
|
mkdir -p ${BUILD_DIR}
|
|
cd ${BUILD_DIR}
|
|
|
|
# Report the cmake commands
|
|
set -x
|
|
|
|
# Note:
|
|
# - print and lod binary options are always on and can be toggles with: OPENVDB_BUILD_BINARIES=ON/OFF
|
|
# - always enabled the python tests with OPENVDB_BUILD_PYTHON_UNITTESTS if the python module is in use,
|
|
# regardless of the 'test' component being enabled or not (see the OPENVDB_BUILD_PYTHON_UNITTESTS option).
|
|
cmake \
|
|
-DOPENVDB_USE_DEPRECATED_ABI_10=ON \
|
|
-DOPENVDB_USE_DEPRECATED_ABI_11=ON \
|
|
-DOPENVDB_BUILD_VDB_PRINT=ON \
|
|
-DOPENVDB_BUILD_VDB_LOD=ON \
|
|
-DOPENVDB_BUILD_VDB_TOOL=ON \
|
|
-DOPENVDB_TOOL_USE_NANO=OFF \
|
|
-DOPENVDB_BUILD_PYTHON_UNITTESTS=ON \
|
|
-DMSVC_MP_THREAD_COUNT=${PARMS[-j]} \
|
|
"${CMAKE_EXTRA[@]}" \
|
|
..
|
|
|
|
$CMAKE_BUILD_CMD
|