# External dependencies
# ==================================================================================================
find_package(GTest REQUIRED)
+find_package(astcenc REQUIRED)
find_package(tsl-robin-map REQUIRED)
find_package(meshoptimizer REQUIRED)
find_package(draco REQUIRED)
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package(Threads REQUIRED)
if(IS_HOST_PLATFORM)
find_package(PNG REQUIRED)
find_package(SDL2 REQUIRED)
find_package(ZLIB REQUIRED)
find_package(tinyexr REQUIRED)
endif()
+include(debian/cmake/imgui.cmake)
+include(debian/cmake/stb.cmake)
# ==================================================================================================
# Sub-projects
add_subdirectory(${FILAMENT}/shaders)
add_subdirectory(${EXTERNAL}/civetweb/tnt)
add_subdirectory(${EXTERNAL}/hat-trie/tnt)
-include(debian/cmake/imgui.cmake)
add_subdirectory(${EXTERNAL}/smol-v/tnt)
include(debian/cmake/benchmark.cmake)
add_subdirectory(${EXTERNAL}/cgltf/tnt)
include(debian/cmake/jsmn.cmake)
-include(debian/cmake/stb.cmake)
add_subdirectory(${EXTERNAL}/getopt)
if (FILAMENT_BUILD_FILAMAT OR IS_HOST_PLATFORM)
add_subdirectory(${FILAMENT}/samples)
- add_subdirectory(${EXTERNAL}/astcenc/tnt)
add_subdirectory(${EXTERNAL}/etc2comp)
include(debian/cmake/libassimp.cmake)
if (NOT CMAKE_CROSSCOMPILING)
export(TARGETS matc cmgen filamesh mipgen resgen glslminifier FILE ${IMPORT_EXECUTABLES})
endif()
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file(debian/cmake/package-config.cmake.in filamentConfig.cmake
+ INSTALL_DESTINATION ${FILAMENT_CMAKEDIR}
+ NO_SET_AND_CHECK_MACRO
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO
+)
+write_basic_package_version_file(filamentConfigVersion.cmake
+ VERSION ${FILAMENT_VERSION}
+ COMPATIBILITY SameMinorVersion
+)
+install(EXPORT filamentTargets NAMESPACE filament:: DESTINATION ${FILAMENT_CMAKEDIR})
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/filamentConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/filamentConfigVersion.cmake DESTINATION ${FILAMENT_CMAKEDIR})
+install(FILES debian/cmake/imgui.cmake DESTINATION ${FILAMENT_CMAKEDIR})
+install(FILES debian/cmake/stb.cmake DESTINATION ${FILAMENT_CMAKEDIR})
+
# ==================================================================================================
# Includes & target definition
# ==================================================================================================
-# specify where our headers are
-include_directories(${PUBLIC_HDR_DIR})
-include_directories(${GENERATION_ROOT})
-include_directories(src)
# we're building a library
-add_library(${TARGET} STATIC ${PRIVATE_HDRS} ${PUBLIC_HDRS} ${SRCS} ${DATA_BINS})
+add_library(${TARGET} SHARED ${PRIVATE_HDRS} ${PUBLIC_HDRS} ${SRCS} ${DATA_BINS})
# specify where the public headers of this library are
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_include_directories(${TARGET} PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${GENERATION_ROOT}
+)
+set_target_properties(${TARGET} PROPERTIES
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+add_library(filament::${TARGET} ALIAS ${TARGET})
+
+add_library(${TARGET}_headers INTERFACE)
+target_include_directories(${TARGET}_headers INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+set_target_properties(${TARGET}_headers PROPERTIES
+ EXPORT_NAME "${TARGET}::headers"
+)
+target_compile_features(${TARGET}_headers INTERFACE cxx_std_17)
+add_library(filament::${TARGET}::headers ALIAS ${TARGET}_headers)
# ==================================================================================================
# Dependencies
# ==================================================================================================
-target_link_libraries(${TARGET} PUBLIC backend)
-target_link_libraries(${TARGET} PUBLIC math)
-target_link_libraries(${TARGET} PUBLIC utils)
-target_link_libraries(${TARGET} PUBLIC geometry) # TODO: remove this dependency after deprecating VertexBuffer::populateTangentQuaternions
-target_link_libraries(${TARGET} PUBLIC filaflat)
-target_link_libraries(${TARGET} PUBLIC filabridge)
-target_link_libraries(${TARGET} PUBLIC ibl-lite)
+target_link_libraries(${TARGET} PUBLIC filament::backend)
+target_link_libraries(${TARGET} PUBLIC filament::math)
+target_link_libraries(${TARGET} PUBLIC filament::utils)
+target_link_libraries(${TARGET} PUBLIC filament::filabridge::headers)
+target_link_libraries(${TARGET} PRIVATE filament::geometry)
+target_link_libraries(${TARGET} PRIVATE filament::filaflat)
+target_link_libraries(${TARGET} PRIVATE filament::filabridge)
+target_link_libraries(${TARGET} PRIVATE filament::ibl_lite)
if (FILAMENT_ENABLE_MATDBG)
- target_link_libraries(${TARGET} PUBLIC matdbg)
+ target_link_libraries(${TARGET} PRIVATE filament::matdbg)
add_definitions(-DFILAMENT_ENABLE_MATDBG=1)
else()
add_definitions(-DFILAMENT_ENABLE_MATDBG=0)
# Installation
# ==================================================================================================
set(INSTALL_TYPE ARCHIVE)
-install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/filament DESTINATION include)
+install(TARGETS ${TARGET} ${TARGET}_headers DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/filament DESTINATION ${FILAMENT_INCLUDEDIR})
install(FILES "README.md" DESTINATION .)
install(FILES "../LICENSE" DESTINATION .)
add_subdirectory(backend)
add_subdirectory(test)
add_subdirectory(benchmark)
+
# ==================================================================================================
# Includes & target definition
# ==================================================================================================
-# specify where our headers are
-include_directories(${PUBLIC_HDR_DIR})
-include_directories(src)
-include_directories(${GENERATION_ROOT})
-
# we're building a library
-add_library(${TARGET} STATIC ${PRIVATE_HDRS} ${PUBLIC_HDRS} ${SRCS})
+add_library(${TARGET} SHARED ${PRIVATE_HDRS} ${PUBLIC_HDRS} ${SRCS})
# specify where the public headers of this library are
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_include_directories(${TARGET} PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${GENERATION_ROOT}
+)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Expose a header-only target to minimize dependencies.
# ==================================================================================================
add_library(${TARGET}_headers INTERFACE)
-target_include_directories(${TARGET}_headers INTERFACE ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET}_headers INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+set_target_properties(${TARGET}_headers PROPERTIES
+ EXPORT_NAME "${TARGET}::headers"
+)
+add_library(filament::${TARGET}::headers ALIAS ${TARGET}_headers)
# ==================================================================================================
# Build SPIRV snippets used by the Vulkan backend.
add_custom_command(OUTPUT ${DUMMY_SRC} COMMAND echo "//" > ${DUMMY_SRC})
add_library(vkshaders STATIC ${DUMMY_SRC} ${RESGEN_SOURCE})
+set_target_properties(vkshaders PROPERTIES OUTPUT_NAME "filament_vkshaders" VERSION ${FILAMENT_VERSION})
# ==================================================================================================
# Dependencies
endif()
if (FILAMENT_USE_SWIFTSHADER)
- target_link_libraries(${TARGET} PUBLIC ${SWIFTSHADER_VK})
+ target_link_libraries(${TARGET} PRIVATE ${SWIFTSHADER_VK})
endif()
if (APPLE AND NOT IOS)
target_link_libraries(${TARGET} PRIVATE "-framework Cocoa")
endif()
-target_link_libraries(${TARGET} PUBLIC math)
-target_link_libraries(${TARGET} PUBLIC utils)
+target_link_libraries(${TARGET} PUBLIC filament::math)
+target_link_libraries(${TARGET} PUBLIC filament::utils)
# Android, iOS, and WebGL do not use bluegl.
if(NOT IOS AND NOT ANDROID AND NOT WEBGL)
endif()
if (FILAMENT_SUPPORTS_VULKAN)
- target_link_libraries(${TARGET} PUBLIC bluevk vkmemalloc vkshaders)
+ target_link_libraries(${TARGET} PRIVATE bluevk vkmemalloc vkshaders smol-v)
endif()
if (FILAMENT_SUPPORTS_METAL)
endif()
if (LINUX)
+ target_link_libraries(${TARGET} PUBLIC Threads::Threads)
target_link_libraries(${TARGET} PRIVATE dl)
endif()
# Installation
# ==================================================================================================
set(INSTALL_TYPE ARCHIVE)
-install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
-install(TARGETS vkshaders ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/backend DESTINATION include)
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(TARGETS vkshaders backend_headers DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/backend DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Test
add_executable(benchmark_filament ${BENCHMARK_SRCS})
-target_link_libraries(benchmark_filament PRIVATE benchmark_main utils math filament)
+target_include_directories(benchmark_filament PRIVATE ../src)
+target_link_libraries(benchmark_filament PRIVATE benchmark_main filament::utils filament::math filament::filament)
add_executable(test_material_parser
filament_test_material_parser.cpp
${RESGEN_SOURCE})
-target_link_libraries(test_material_parser PRIVATE filament gtest)
+target_link_libraries(test_material_parser PRIVATE filament::filament filament::filaflat GTest::gtest)
target_compile_options(test_material_parser PRIVATE ${COMPILER_FLAGS})
-target_include_directories(test_material_parser PRIVATE ${RESOURCE_DIR})
+target_include_directories(test_material_parser PRIVATE ${RESOURCE_DIR} ../src)
# and we're linking against the libraries below, importing their public headers
target_link_libraries(test_${TARGET} LINK_PUBLIC ${TARGET})
-target_link_libraries(test_${TARGET} LINK_PUBLIC gtest)
+target_link_libraries(test_${TARGET} LINK_PUBLIC GTest::gtest)
add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_link_libraries(${TARGET} utils math)
+target_link_libraries(${TARGET} filament::utils filament::math)
target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
# test_bluevk is not supported on mobile or Windows
if (NOT ANDROID AND NOT IOS AND NOT WIN32)
add_executable(test_bluevk tests/test_bluevk_sdl.cpp)
- target_link_libraries(test_bluevk PRIVATE dl bluevk sdl2)
+ target_link_libraries(test_bluevk PRIVATE dl bluevk SDL2::SDL2)
endif()
install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
+target_link_libraries(${TARGET} PUBLIC filament::math)
-target_link_libraries(${TARGET} PUBLIC math)
-
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Compiler flags
# ==================================================================================================
# Installation
# ==================================================================================================
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/camutils DESTINATION include)
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/camutils DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Tests
# ==================================================================================================
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
add_executable(test_${TARGET} tests/test_camutils.cpp)
- target_link_libraries(test_${TARGET} PRIVATE camutils gtest)
+ target_link_libraries(test_${TARGET} PRIVATE filament::camutils GTest::gtest)
endif()
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_link_libraries(${TARGET} PRIVATE filament::utils)
+target_link_libraries(${TARGET} PUBLIC filament::math)
+target_link_libraries(${TARGET} PUBLIC filament::backend::headers)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+add_library(filament::${TARGET} ALIAS ${TARGET})
-target_link_libraries(${TARGET} utils)
-target_link_libraries(${TARGET} math)
-target_link_libraries(${TARGET} backend_headers)
+add_library(${TARGET}_headers INTERFACE)
+target_include_directories(${TARGET}_headers INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+set_target_properties(${TARGET}_headers PROPERTIES
+ EXPORT_NAME "${TARGET}::headers"
+)
+add_library(filament::${TARGET}::headers ALIAS ${TARGET}_headers)
# ==================================================================================================
# Installation
# ==================================================================================================
-install(DIRECTORY ${PUBLIC_HDR_DIR}/filament DESTINATION include)
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
+install(DIRECTORY ${PUBLIC_HDR_DIR}/filament DESTINATION ${FILAMENT_INCLUDEDIR})
+install(TARGETS ${TARGET} ${TARGET}_headers DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-
-add_library(${TARGET} ${HDRS} ${SRCS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
-
-target_link_libraries(${TARGET} filabridge utils)
+add_library(${TARGET} SHARED ${HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_link_libraries(${TARGET} PRIVATE filament::filabridge)
+target_link_libraries(${TARGET} PUBLIC filament::utils)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
if (FILAMENT_SUPPORTS_VULKAN)
- target_link_libraries(${TARGET} smol-v)
-endif()
-
-# ==================================================================================================
-# Compiler flags
-# ==================================================================================================
-if (NOT WIN32)
- target_compile_options(${TARGET} PRIVATE
- -fvisibility=hidden
- )
+ target_link_libraries(${TARGET} PRIVATE smol-v)
endif()
# ==================================================================================================
# Installation
# ==================================================================================================
# We do not need filaflat headers in the install directory
-# install(DIRECTORY ${PUBLIC_HDR_DIR}/filaflat DESTINATION include)
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
+install(DIRECTORY ${PUBLIC_HDR_DIR}/filaflat DESTINATION ${FILAMENT_INCLUDEDIR})
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-include_directories(${GENERATION_ROOT})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS} ${RESGEN_SOURCE})
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS} ${RESGEN_SOURCE})
+target_link_libraries(${TARGET} PUBLIC filament::imgui filament::stb filament::filament)
-target_link_libraries(${TARGET} PUBLIC imgui filament)
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_include_directories(${TARGET} PRIVATE
+ ${GENERATION_ROOT}
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+
+# ==================================================================================================
+# Installation
+# ==================================================================================================
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/filagui DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Compiler flags
include_directories(${CMAKE_BINARY_DIR})
# Filamat
-add_library(${TARGET} STATIC ${HDRS} ${PRIVATE_HDRS} ${SRCS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
-target_link_libraries(${TARGET} shaders filabridge utils smol-v)
+add_library(${TARGET} SHARED ${HDRS} ${PRIVATE_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+target_link_libraries(${TARGET} PRIVATE filament::shaders filament::filabridge smol-v)
+target_link_libraries(${TARGET} PUBLIC filament::utils)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# Filamat Lite
-add_library(filamat_lite STATIC ${HDRS} ${LITE_PRIVATE_HDRS} ${LITE_SRCS})
-target_include_directories(filamat_lite PUBLIC ${PUBLIC_HDR_DIR})
-target_link_libraries(filamat_lite shaders filabridge utils)
-
-# We are being naughty and accessing private headers here
-# For spirv-tools, we're just following glslang's example
-target_include_directories(${TARGET} PRIVATE ${spirv-tools_SOURCE_DIR}/include)
+add_library(filamat_lite SHARED ${HDRS} ${LITE_PRIVATE_HDRS} ${LITE_SRCS})
+target_include_directories(filamat_lite PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_link_libraries(filamat_lite PRIVATE filament::shaders filament::filabridge)
+target_link_libraries(filamat_lite PUBLIC filament::utils)
+target_compile_features(filamat_lite PUBLIC cxx_std_17)
+set_target_properties(filamat_lite PROPERTIES
+ OUTPUT_NAME "filament_filamat_lite"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::filamat_lite ALIAS filamat_lite)
# glslang libraries have circular dependencies. To make sure the proper object are part of the link
# we need to force archive re-scan on new symbol dependencies via start/end-group.
if (APPLE OR MSVC)
target_link_libraries(${TARGET} glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl)
else()
- target_link_libraries(${TARGET}
+ target_link_libraries(${TARGET} PRIVATE
-Wl,--start-group glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl -Wl,--end-group)
endif()
spirv-cross-msl
)
-set(FILAMAT_COMBINED_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libfilamat_combined.a")
-combine_static_libs(filamat "${FILAMAT_COMBINED_OUTPUT}" "${FILAMAT_DEPS}")
+#set(FILAMAT_COMBINED_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libfilamat_combined.a")
+#combine_static_libs(filamat "${FILAMAT_COMBINED_OUTPUT}" "${FILAMAT_DEPS}")
-set(FILAMAT_LIB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}filamat${CMAKE_STATIC_LIBRARY_SUFFIX})
-install(FILES "${FILAMAT_COMBINED_OUTPUT}" DESTINATION lib/${DIST_DIR} RENAME ${FILAMAT_LIB_NAME})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/filamat DESTINATION include)
+#set(FILAMAT_LIB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}filamat${CMAKE_STATIC_LIBRARY_SUFFIX})
+#install(FILES "${FILAMAT_COMBINED_OUTPUT}" DESTINATION lib/${DIST_DIR} RENAME ${FILAMAT_LIB_NAME})
+install(DIRECTORY ${PUBLIC_HDR_DIR}/filamat DESTINATION ${FILAMENT_INCLUDEDIR})
-install(TARGETS filamat_lite ARCHIVE DESTINATION lib/${DIST_DIR})
+install(TARGETS ${TARGET} filamat_lite DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
# ==================================================================================================
# Tests
target_include_directories(${TARGET} PRIVATE src)
-target_link_libraries(${TARGET} filamat gtest)
+target_link_libraries(${TARGET} PRIVATE filament::backend filament::filabridge filament::filamat GTest::gtest)
+target_link_libraries(${TARGET} PRIVATE
+ -Wl,--start-group glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl -Wl,--end-group)
set(TARGET test_filamat_lite)
set(SRCS
target_include_directories(${TARGET} PRIVATE src)
-target_link_libraries(${TARGET} filamat_lite gtest)
+target_link_libraries(${TARGET} PRIVATE filament::backend filament::filabridge filament::filamat_lite GTest::gtest)
+target_link_libraries(${TARGET} PRIVATE
+ -Wl,--start-group glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl -Wl,--end-group)
+
# ==================================================================================================
# Includes and target definition
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
target_link_libraries(${TARGET}
- PRIVATE meshoptimizer
- PUBLIC filament # Public only because the filamesh API needs Box.h
+ PRIVATE
+ filament::filament
+ meshoptimizer::meshoptimizer
+ PUBLIC
+ filament::math
+ filament::utils
+ filament::filament::headers # Public only because the filamesh API needs Box.h
+)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Installation
# ==================================================================================================
set(INSTALL_TYPE ARCHIVE)
-install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
-install(FILES ${DIST_HDRS} DESTINATION include/${TARGET})
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(FILES ${DIST_HDRS} DESTINATION ${FILAMENT_INCLUDEDIR}/${TARGET})
# ==================================================================================================
# Tests
# ==================================================================================================
if (NOT IOS AND NOT WEBGL AND NOT ANDROID)
add_executable(test_${TARGET} tests/test_filamesh.cpp )
- target_link_libraries(test_${TARGET} PRIVATE filameshio gtest)
+ target_link_libraries(test_${TARGET} PRIVATE filament::filament filament::filameshio GTest::gtest)
endif()
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
+target_link_libraries(${TARGET} PUBLIC filament::math filament::utils)
-target_link_libraries(${TARGET} PUBLIC math utils)
-
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Compiler flags
# ==================================================================================================
# Installation
# ==================================================================================================
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/geometry DESTINATION include)
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/geometry DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Tests
# ==================================================================================================
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
add_executable(test_transcoder tests/test_transcoder.cpp)
- target_link_libraries(test_transcoder PRIVATE ${TARGET} gtest)
+ target_link_libraries(test_transcoder PRIVATE ${TARGET} GTest::gtest)
endif()
add_custom_command(OUTPUT ${DUMMY_SRC} COMMAND echo "//" > ${DUMMY_SRC})
add_library(gltfio_resources ${DUMMY_SRC} ${RESGEN_SOURCE})
+set_target_properties(gltfio_resources PROPERTIES
+ OUTPUT_NAME "filament_gltfio_resources"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::gltfio_resources ALIAS gltfio_resources)
# ==================================================================================================
# Build "lite" resources library, which contains only a few materials
add_custom_command(OUTPUT ${DUMMY_SRC} COMMAND echo "//" > ${DUMMY_SRC})
add_library(gltfio_resources_lite ${DUMMY_SRC} ${RESGEN_SOURCE})
+set_target_properties(gltfio_resources_lite PROPERTIES
+ OUTPUT_NAME "filament_gltfio_resources_lite"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::gltfio_resources_lite ALIAS gltfio_resources_lite)
# ==================================================================================================
# Build the "core" library (no filamat)
# ==================================================================================================
include_directories(${PUBLIC_HDR_DIR} ${RESOURCE_DIR})
-link_libraries(math utils filament cgltf stb geometry gltfio_resources tsl trie)
-
-add_library(gltfio_core STATIC ${PUBLIC_HDRS} ${SRCS})
-target_include_directories(gltfio_core PUBLIC ${PUBLIC_HDR_DIR})
-
-target_compile_definitions(gltfio_core PUBLIC -DGLTFIO_DRACO_SUPPORTED=1)
-target_link_libraries(gltfio_core PUBLIC dracodec)
+add_library(gltfio_core SHARED ${PUBLIC_HDRS} ${SRCS})
+target_include_directories(gltfio_core PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(gltfio_core PUBLIC cxx_std_17)
+target_compile_definitions(gltfio_core PRIVATE -DGLTFIO_DRACO_SUPPORTED=1)
+target_link_libraries(gltfio_core PRIVATE ${DRACO_LIBRARIES})
+target_link_libraries(gltfio_core PRIVATE filament::math filament::utils filament::filament cgltf filament::stb filament::geometry filament::gltfio_resources tsl::robin_map trie)
+set_target_properties(gltfio_core PROPERTIES
+ OUTPUT_NAME "filament_gltfio_core"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::gltfio_core ALIAS gltfio_core)
if (NOT WEBGL AND NOT ANDROID AND NOT IOS)
# ==================================================================================================
# Link the core library with additional dependencies to create the "full" library
# ==================================================================================================
- add_library(${TARGET} STATIC ${PUBLIC_HDRS} src/MaterialGenerator.cpp)
- target_link_libraries(${TARGET} PUBLIC filamat gltfio_core)
- target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+ add_library(${TARGET} SHARED ${PUBLIC_HDRS} src/MaterialGenerator.cpp)
+ target_link_libraries(${TARGET} PUBLIC filament::filamat filament::gltfio_core)
+ target_link_libraries(${TARGET} PRIVATE filament::math filament::utils filament::filament cgltf stb filament::geometry filament::gltfio_resources tsl::robin_map trie)
+ target_compile_features(${TARGET} PUBLIC cxx_std_17)
+ set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+ )
# ==================================================================================================
# Compiler flags
# ==================================================================================================
# Installation
# ==================================================================================================
- install(TARGETS ${TARGET} gltfio_core gltfio_resources gltfio_resources_lite ARCHIVE DESTINATION lib/${DIST_DIR})
- install(DIRECTORY ${PUBLIC_HDR_DIR}/gltfio DESTINATION include)
-
+ install(TARGETS ${TARGET} gltfio_core gltfio_resources gltfio_resources_lite DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+ # The Image.h header is only needed within Filament and does not need to be distributed.
+ install(DIRECTORY ${PUBLIC_HDR_DIR}/gltfio
+ DESTINATION ${FILAMENT_INCLUDEDIR}
+ PATTERN "Image.h" EXCLUDE)
else()
install(TARGETS gltfio_core gltfio_resources gltfio_resources_lite ARCHIVE DESTINATION lib/${DIST_DIR})
# ==================================================================================================
# Target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-
-add_library(${TARGET} ${PUBLIC_HDRS} ${PRIVATE_HDRS} ${SRCS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
-target_link_libraries(${TARGET} math utils)
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${PRIVATE_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_link_libraries(${TARGET} PUBLIC filament::math filament::utils)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
-add_library(${TARGET}-lite ${PUBLIC_HDRS} ${PRIVATE_HDRS} ${SRCS})
-target_compile_definitions(${TARGET}-lite PUBLIC -DFILAMENT_IBL_LITE=1)
-target_include_directories(${TARGET}-lite PUBLIC ${PUBLIC_HDR_DIR})
-target_link_libraries(${TARGET}-lite math utils)
+add_library(${TARGET}_lite SHARED ${PUBLIC_HDRS} ${PRIVATE_HDRS} ${SRCS})
+target_compile_definitions(${TARGET}_lite PUBLIC -DFILAMENT_IBL_LITE=1)
+target_compile_features(${TARGET}_lite PUBLIC cxx_std_17)
+target_include_directories(${TARGET}_lite PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_link_libraries(${TARGET}_lite PUBLIC filament::math filament::utils)
+set_target_properties(${TARGET}_lite PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}_lite"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET}_lite ALIAS ${TARGET}_lite)
# ==================================================================================================
# Compile options and optimizations
# ==================================================================================================
if (MSVC)
target_compile_options(${TARGET} PRIVATE /fp:fast)
- target_compile_options(${TARGET}-lite PRIVATE /fp:fast)
+ target_compile_options(${TARGET}_lite PRIVATE /fp:fast)
else()
target_compile_options(${TARGET} PRIVATE -ffast-math)
- target_compile_options(${TARGET}-lite PRIVATE -ffast-math)
+ target_compile_options(${TARGET}_lite PRIVATE -ffast-math)
endif()
# ==================================================================================================
# Installation
# ==================================================================================================
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
-install(TARGETS ${TARGET}-lite ARCHIVE DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/ibl DESTINATION include)
+install(TARGETS ${TARGET} ${TARGET}_lite DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/ibl DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Includes & target definition
# ==================================================================================================
-# specify where our headers are
-include_directories(${PUBLIC_HDR_DIR})
-include_directories(${GENERATION_ROOT})
-include_directories(src)
# we're building a library
-add_library(${TARGET} STATIC ${PRIVATE_HDRS} ${PUBLIC_HDRS} ${SRCS})
+add_library(${TARGET} SHARED ${PRIVATE_HDRS} ${PUBLIC_HDRS} ${SRCS})
# specify where the public headers of this library are
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_include_directories(${TARGET} PRIVATE
+ ${GENERATION_ROOT}
+ ${CMAKE_CURRENT_SOURCEDIR}/src
+)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_iblprefilter"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Dependencies
# ==================================================================================================
-target_link_libraries(${TARGET} PUBLIC math)
-target_link_libraries(${TARGET} PUBLIC utils)
-target_link_libraries(${TARGET} PUBLIC filament)
+target_link_libraries(${TARGET} PRIVATE filament::math)
+target_link_libraries(${TARGET} PUBLIC filament::utils)
+target_link_libraries(${TARGET} PUBLIC filament::filament)
# ==================================================================================================
# Compiler flags
# Installation
# ==================================================================================================
set(INSTALL_TYPE ARCHIVE)
-install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/filament-iblprefilter DESTINATION include)
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/filament-iblprefilter DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-
-target_link_libraries(${TARGET} PUBLIC math utils)
-
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+target_link_libraries(${TARGET} PUBLIC filament::math filament::utils)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Compiler flags
# Expose header-only utilities to lean-and-mean client projects.
# ==================================================================================================
add_library(image_headers INTERFACE)
-target_include_directories(image_headers INTERFACE ${PUBLIC_HDR_DIR})
+target_include_directories(image_headers INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+set_target_properties(image_headers PROPERTIES EXPORT_NAME "image::headers")
+target_compile_features(image_headers INTERFACE cxx_std_17)
+add_library(filament::image::headers ALIAS image_headers)
# ==================================================================================================
# Installation
# ==================================================================================================
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/image DESTINATION include)
+install(TARGETS ${TARGET} image_headers DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/image DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Tests
# ==================================================================================================
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
add_executable(test_${TARGET} tests/test_image.cpp)
- target_link_libraries(test_${TARGET} PRIVATE image imageio gtest)
+ target_link_libraries(test_${TARGET} PRIVATE filament::image filament::imageio GTest::gtest)
endif()
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
-target_link_libraries(${TARGET} PUBLIC image math png tinyexr utils z astcenc stb EtcLib)
+target_link_libraries(${TARGET} PUBLIC filament::image filament::math filament::utils)
+target_link_libraries(${TARGET} PRIVATE PNG::PNG tinyexr::tinyexr astcenc::astcenc filament::stb EtcLib Threads::Threads)
if (WIN32)
target_link_libraries(${TARGET} PRIVATE wsock32)
endif()
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
+
+# ==================================================================================================
+# Installation
+# ==================================================================================================
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/imageio DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Transitive macro definitions
add_custom_command(OUTPUT ${DUMMY_SRC} COMMAND echo "//" > ${DUMMY_SRC})
add_library(matdbg_resources ${DUMMY_SRC} ${RESGEN_SOURCE})
+set_target_properties(matdbg_resources PROPERTIES
+ OUTPUT_NAME "filament_matdbg_resources"
+ VERSION ${FILAMENT_VERSION}
+)
+add_library(filament::matdbg_resources ALIAS matdbg_resources)
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR} ${RESOURCE_DIR})
-
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
target_link_libraries(${TARGET} PUBLIC
- utils
- filaflat
- filabridge
- backend_headers
+ filament::backend::headers
+ filament::filaflat
+ filament::filamat
+ filament::utils
+)
+target_link_libraries(${TARGET} PRIVATE
+ filament::filabridge
civetweb
- utils
+ glslang
+ filament::matdbg_resources
SPIRV
- SPIRV-Tools
spirv-cross-glsl
- matdbg_resources
+ SPIRV-Tools
+ smol-v
)
-
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+target_include_directories(${TARGET} PRIVATE ${RESOURCE_DIR} ${filamat_SOURCE_DIR}/src)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Compiler flags
# ==================================================================================================
# Installation
# ==================================================================================================
-
-# matdbg has dependencies on non-installed libraries. Here we bundle them all together into a single
-# library that gets copied into the installation folder so users are only required to link against
-# matdbg.
-set(MATDBG_DEPS
- matdbg
- matdbg_resources
- civetweb
- SPIRV-Tools
- spirv-cross-core
- spirv-cross-glsl
- )
-
-set(MATDBG_COMBINED_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libmatdbg_combined.a")
-combine_static_libs(matdbg "${MATDBG_COMBINED_OUTPUT}" "${MATDBG_DEPS}")
-
-set(MATDBG_LIB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}matdbg${CMAKE_STATIC_LIBRARY_SUFFIX})
-install(FILES "${MATDBG_COMBINED_OUTPUT}" DESTINATION lib/${DIST_DIR} RENAME ${MATDBG_LIB_NAME})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/matdbg DESTINATION include)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/matdbg DESTINATION ${FILAMENT_INCLUDEDIR})
+install(TARGETS ${TARGET} matdbg_resources DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_compile_options(${TARGET} PRIVATE ${OPTIMIZATION_FLAGS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+add_library(${TARGET} INTERFACE)
+target_include_directories(${TARGET} INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} INTERFACE cxx_std_17)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Installation
# ==================================================================================================
-install(DIRECTORY ${PUBLIC_HDR_DIR}/math DESTINATION include)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/math DESTINATION ${FILAMENT_INCLUDEDIR})
+install(TARGETS ${TARGET} EXPORT filamentTargets)
# ==================================================================================================
# Tests
tests/test_vec.cpp
tests/test_quat.cpp
)
-target_link_libraries(test_${TARGET} PRIVATE math gtest)
+target_link_libraries(test_${TARGET} PRIVATE filament::math GTest::gtest)
# ==================================================================================================
# Benchmarks
target_compile_options(benchmark_${TARGET} PRIVATE ${OPTIMIZATION_FLAGS})
-target_link_libraries(benchmark_${TARGET} PRIVATE benchmark_main utils math)
+target_link_libraries(benchmark_${TARGET} PRIVATE benchmark_main filament::utils filament::math)
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_compile_options(${TARGET} PRIVATE ${OPTIMIZATION_FLAGS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
-target_link_libraries(${TARGET} PRIVATE math)
+target_link_libraries(${TARGET} PUBLIC filament::math)
+
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Installation
# ==================================================================================================
-install(DIRECTORY ${PUBLIC_HDR_DIR}/mathio DESTINATION include)
-
+install(DIRECTORY ${PUBLIC_HDR_DIR}/mathio DESTINATION ${FILAMENT_INCLUDEDIR})
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
# ==================================================================================================
# Includes and target definition
# ==================================================================================================
-include_directories(${PUBLIC_HDR_DIR})
-
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
-target_link_libraries(${TARGET} PUBLIC tsl)
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_link_libraries(${TARGET} PUBLIC tsl::robin_map)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
+add_library(filament::${TARGET} ALIAS ${TARGET})
if (ANDROID)
target_link_libraries(${TARGET} PUBLIC log)
endif()
if (LINUX)
- set(THREADS_PREFER_PTHREAD_FLAG ON)
- find_package(Threads REQUIRED)
target_link_libraries(${TARGET} PRIVATE Threads::Threads)
target_link_libraries(${TARGET} PRIVATE dl atomic)
endif()
# ==================================================================================================
# Installation
# ==================================================================================================
-set(INSTALL_TYPE ARCHIVE)
-install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
-install(FILES ${DIST_HDRS} DESTINATION include/${TARGET})
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(FILES ${DIST_HDRS} DESTINATION ${FILAMENT_INCLUDEDIR}/${TARGET})
if (LINUX OR ANDROID)
- install(FILES ${DIST_LINUX_HDRS} DESTINATION include/${TARGET_LINUX})
+ install(FILES ${DIST_LINUX_HDRS} DESTINATION ${FILAMENT_INCLUDEDIR}/${TARGET_LINUX})
else()
- install(FILES ${DIST_GENERIC_HDRS} DESTINATION include/${TARGET_GENERIC})
+ install(FILES ${DIST_GENERIC_HDRS} DESTINATION ${FILAMENT_INCLUDEDIR}/${TARGET_GENERIC})
endif()
# ==================================================================================================
add_executable(test_${TARGET} ${TEST_SRCS})
-target_link_libraries(test_${TARGET} PRIVATE gtest utils tsl math)
+target_link_libraries(test_${TARGET} PRIVATE GTest::gtest filament::utils filament::math)
# ==================================================================================================
# Benchmarks
# ==================================================================================================
# Include and target definitions
# ==================================================================================================
-add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
-target_link_libraries(${TARGET} PUBLIC imgui filament gltfio_core filagui jsmn civetweb)
-target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
+add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS})
+
+target_link_libraries(${TARGET} PUBLIC filament::filament)
+target_link_libraries(${TARGET} PRIVATE filament::imgui filament::gltfio_core filament::filagui jsmn civetweb)
+
+target_include_directories(${TARGET} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${FILAMENT_INCLUDEDIR}>
+)
+target_compile_features(${TARGET} PUBLIC cxx_std_17)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
# ==================================================================================================
# Compiler flags
# ==================================================================================================
# Installation
# ==================================================================================================
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
-install(DIRECTORY ${PUBLIC_HDR_DIR}/viewer DESTINATION include)
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+install(DIRECTORY ${PUBLIC_HDR_DIR}/viewer DESTINATION ${FILAMENT_INCLUDEDIR})
# ==================================================================================================
# Tests
# ==================================================================================================
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
add_executable(test_settings tests/test_settings.cpp)
- target_link_libraries(test_settings PRIVATE ${TARGET} gtest)
+ target_link_libraries(test_settings PRIVATE ${TARGET} GTest::gtest)
endif()
# Include and target definitions
# ==================================================================================================
add_library(${TARGET} STATIC ${RESGEN_SOURCE})
-target_include_directories(${TARGET} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
+target_include_directories(${TARGET} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+add_library(filament::${TARGET} ALIAS ${TARGET})
# ==================================================================================================
# Installation
# ==================================================================================================
-install(TARGETS ${TARGET} ARCHIVE DESTINATION lib/${DIST_DIR})
+install(TARGETS ${TARGET} DESTINATION ${FILAMENT_LIBDIR} EXPORT filamentTargets)
+set_target_properties(${TARGET} PROPERTIES
+ OUTPUT_NAME "filament_${TARGET}"
+ VERSION ${FILAMENT_VERSION}
+ SOVERSION ${FILAMENT_SOVERSION}
+)
# ==================================================================================================
add_executable(${TARGET} ${HDRS} ${SRCS})
-target_link_libraries(${TARGET} PRIVATE math utils ibl z image imageio getopt)
+target_link_libraries(${TARGET} PRIVATE math utils ibl image imageio getopt Threads::Threads)
# ==================================================================================================
# Compile options and optimizations
# ==================================================================================================
if (NOT ANDROID)
add_executable(test_${TARGET} tests/test_cmgen.cpp)
- target_link_libraries(test_${TARGET} PRIVATE image imageio gtest)
+ target_link_libraries(test_${TARGET} PRIVATE image imageio GTest::gtest)
endif()
# ==================================================================================================
add_executable(${TARGET} ${HDRS} ${SRCS})
-target_link_libraries(${TARGET} PRIVATE math utils z image imageio getopt)
+target_link_libraries(${TARGET} PRIVATE math utils ZLIB::ZLIB image imageio getopt)
# ==================================================================================================
# Compile options and optimizations
target_link_libraries(${TARGET} PUBLIC math)
target_link_libraries(${TARGET} PUBLIC utils)
target_link_libraries(${TARGET} PUBLIC assimp)
-target_link_libraries(${TARGET} PRIVATE getopt filameshio meshoptimizer)
+target_link_libraries(${TARGET} PRIVATE getopt filameshio meshoptimizer::meshoptimizer)
# ==================================================================================================
# Compile options and optimizations
tests/test_glslminifier.cpp
)
target_include_directories(test_${TARGET} PRIVATE src)
- target_link_libraries(test_${TARGET} PRIVATE gtest)
+ target_link_libraries(test_${TARGET} PRIVATE GTest::gtest)
endif()
target_include_directories(${TARGET} PUBLIC src)
target_include_directories(${TARGET} PRIVATE ${filamat_SOURCE_DIR}/src)
-target_link_libraries(${TARGET} getopt filamat filabridge utils)
+target_link_libraries(${TARGET} getopt filamat filabridge utils glslang smol-v)
# =================================================================================================
# Licenses
add_executable(${TARGET} ${SRCS})
-target_link_libraries(${TARGET} matlang gtest)
+target_link_libraries(${TARGET} matlang GTest::gtest)
# ==================================================================================================
add_executable(${TARGET} ${SRCS})
-target_link_libraries(${TARGET} matdbg filaflat backend_headers utils getopt SPIRV-Tools spirv-cross-glsl)
+target_link_libraries(${TARGET} matdbg filaflat filabridge backend_headers utils getopt SPIRV-Tools spirv-cross-glsl glslang)
# glslang contains a copy of the SPIRV headers, so let's just use those. The leading ".." in the
# following variable refers to the project name that we define in glslang/tnt, and the trailing ".."
# in the path allows us to do #include <SPIRV/disassemble.h>
-target_include_directories(${TARGET} PRIVATE ${../glslang_SOURCE_DIR}/..)
+#target_include_directories(${TARGET} PRIVATE ${../glslang_SOURCE_DIR}/..)
# =================================================================================================
# Licenses
# Target definitions
# ==================================================================================================
add_executable(${TARGET} ${SRCS})
-target_link_libraries(${TARGET} PRIVATE math utils z image imageio getopt)
+target_link_libraries(${TARGET} PRIVATE math utils ZLIB::ZLIB image imageio getopt)
# =================================================================================================
# Licenses
# ==================================================================================================
add_executable(${TARGET} ${HDRS} ${SRCS})
-target_link_libraries(${TARGET} PRIVATE math utils z image imageio getopt)
+target_link_libraries(${TARGET} PRIVATE math utils ZLIB::ZLIB image imageio getopt)
# ==================================================================================================
# Compile options and optimizations
# ==================================================================================================
add_executable(${TARGET} ${HDRS} ${SRCS})
-target_link_libraries(${TARGET} PRIVATE math utils z image imageio getopt)
+target_link_libraries(${TARGET} PRIVATE math utils ZLIB::ZLIB image imageio getopt)
# ==================================================================================================
# Compile options and optimizations