MetaCore/cmake/MetaCoreFilament.cmake
2026-06-17 09:04:20 +08:00

71 lines
2.6 KiB
CMake

# Filament SDK configuration for MetaCore
set(METACORE_FILAMENT_ROOT "${CMAKE_SOURCE_DIR}/third_party/filament_installed" CACHE PATH "Path to installed Filament SDK")
set(METACORE_FILAMENT_INCLUDE_DIR "${METACORE_FILAMENT_ROOT}/include")
set(METACORE_FILAMENT_LIB_DIR "${METACORE_FILAMENT_ROOT}/lib/x86_64")
function(metacore_use_filament target_name)
if(NOT TARGET ${target_name})
message(FATAL_ERROR "Target ${target_name} does not exist.")
endif()
message(STATUS "Linking Filament to ${target_name}")
if(WIN32)
set(_filament_libs
"${METACORE_FILAMENT_LIB_DIR}/filament.lib"
"${METACORE_FILAMENT_LIB_DIR}/backend.lib"
"${METACORE_FILAMENT_LIB_DIR}/utils.lib"
"${METACORE_FILAMENT_LIB_DIR}/filabridge.lib"
"${METACORE_FILAMENT_LIB_DIR}/filaflat.lib"
"${METACORE_FILAMENT_LIB_DIR}/filamat.lib"
"${METACORE_FILAMENT_LIB_DIR}/shaders.lib"
"${METACORE_FILAMENT_LIB_DIR}/bluegl.lib"
"${METACORE_FILAMENT_LIB_DIR}/gltfio.lib"
"${METACORE_FILAMENT_LIB_DIR}/gltfio_core.lib"
"${METACORE_FILAMENT_LIB_DIR}/ktxreader.lib"
"${METACORE_FILAMENT_LIB_DIR}/abseil.lib"
"${METACORE_FILAMENT_LIB_DIR}/perfetto.lib"
"${METACORE_FILAMENT_LIB_DIR}/dracodec.lib"
"${METACORE_FILAMENT_LIB_DIR}/geometry.lib"
"${METACORE_FILAMENT_LIB_DIR}/smol-v.lib"
"${METACORE_FILAMENT_LIB_DIR}/zstd.lib"
opengl32.lib
gdi32.lib
user32.lib
shlwapi.lib
)
else()
find_package(OpenGL REQUIRED)
find_package(Threads REQUIRED)
file(GLOB _filament_static_libs CONFIGURE_DEPENDS
"${METACORE_FILAMENT_LIB_DIR}/lib*.a"
)
set(_filament_libs
-Wl,--start-group
${_filament_static_libs}
-Wl,--end-group
OpenGL::GL
Threads::Threads
${CMAKE_DL_LIBS}
)
endif()
target_include_directories(${target_name} PRIVATE "${METACORE_FILAMENT_INCLUDE_DIR}")
target_link_libraries(${target_name} PRIVATE ${_filament_libs})
# Filament 需要 C++17 或更高版本
target_compile_features(${target_name} PRIVATE cxx_std_17)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(${target_name} PRIVATE -fpermissive)
endif()
if(MSVC)
target_compile_definitions(${target_name} PRIVATE
WIN32_LEAN_AND_MEAN
_CRT_SECURE_NO_WARNINGS
)
endif()
endfunction()