#!/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}"