Files
UnrealEngine/Engine/Source/ThirdParty/OpenVDB/openvdb-12.0.0/ci/build.sh
2025-05-18 13:04:45 +08:00

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