MetaCore/tools/build_filament_host_tools.sh
2026-07-22 16:08:48 +08:00

62 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
FILAMENT_TAG="v1.71.5"
FILAMENT_COMMIT="b0f2090cccf3c11f524ed8053746aba3de6be199"
WORK_ROOT="${PROJECT_ROOT}/build/filament-host-tools"
SOURCE_DIR="${METACORE_FILAMENT_SOURCE_DIR:-${WORK_ROOT}/source}"
BUILD_DIR="${METACORE_FILAMENT_BUILD_DIR:-${WORK_ROOT}/build}"
INSTALL_DIR="${METACORE_FILAMENT_INSTALL_DIR:-${WORK_ROOT}/install/bin}"
if [[ ! -f "${SOURCE_DIR}/CMakeLists.txt" ]]; then
mkdir -p "${WORK_ROOT}"
git clone --depth 1 --branch "${FILAMENT_TAG}" https://github.com/google/filament.git "${SOURCE_DIR}"
fi
ACTUAL_COMMIT="$(git -C "${SOURCE_DIR}" rev-parse HEAD)"
if [[ "${ACTUAL_COMMIT}" != "${FILAMENT_COMMIT}" ]]; then
echo "Filament source mismatch: expected ${FILAMENT_COMMIT}, got ${ACTUAL_COMMIT}" >&2
exit 2
fi
CLANG_C="${METACORE_FILAMENT_CC:-}"
CLANG_CXX="${METACORE_FILAMENT_CXX:-}"
if [[ -z "${CLANG_C}" || -z "${CLANG_CXX}" ]]; then
for version in 18 17 16 15; do
if [[ -x "/usr/bin/clang-${version}" && -x "/usr/bin/clang++-${version}" ]]; then
CLANG_C="/usr/bin/clang-${version}"
CLANG_CXX="/usr/bin/clang++-${version}"
break
fi
done
fi
if [[ ! -x "${CLANG_C}" || ! -x "${CLANG_CXX}" ]]; then
echo "A usable Clang toolchain was not found (Clang 15 or newer is recommended)." >&2
exit 3
fi
cmake -S "${SOURCE_DIR}" -B "${BUILD_DIR}" -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER="${CLANG_C}" \
-DCMAKE_CXX_COMPILER="${CLANG_CXX}" \
-DCMAKE_CXX_FLAGS=-stdlib=libc++ \
-DFILAMENT_SKIP_SAMPLES=ON \
-DFILAMENT_BUILD_TESTING=OFF \
-DFILAMENT_SUPPORTS_VULKAN=OFF \
-DFILAMENT_SUPPORTS_WAYLAND=OFF \
-DFILAMENT_SUPPORTS_XCB=OFF \
-DFILAMENT_SUPPORTS_XLIB=OFF \
-DFILAMENT_SKIP_SDL2=ON \
-DFILAMENT_ENABLE_LTO=OFF
cmake --build "${BUILD_DIR}" --target matc cmgen --parallel "${METACORE_FILAMENT_BUILD_JOBS:-2}"
mkdir -p "${INSTALL_DIR}"
cmake -E copy_if_different "${BUILD_DIR}/tools/matc/matc" "${INSTALL_DIR}/matc"
cmake -E copy_if_different "${BUILD_DIR}/tools/cmgen/cmgen" "${INSTALL_DIR}/cmgen"
"${INSTALL_DIR}/matc" --version
"${INSTALL_DIR}/cmgen" --help >/dev/null
echo "GLIBC-compatible Filament tools installed in ${INSTALL_DIR}"