From 90f3c23419efb5e9a2c961ad52100b1cef7c21b8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timo=20R=C3=B6hling?= Date: Tue, 25 Jan 2022 22:04:07 +0100 Subject: [PATCH] Fix library export for Debian Gbp-Pq: Name 0009-Fix-library-export-for-Debian.patch --- CMakeLists.txt | 24 +++++++-- filament/CMakeLists.txt | 54 ++++++++++++++------ filament/backend/CMakeLists.txt | 47 ++++++++++++------ filament/benchmark/CMakeLists.txt | 3 +- filament/test/CMakeLists.txt | 4 +- libs/bluegl/CMakeLists.txt | 2 +- libs/bluevk/CMakeLists.txt | 4 +- libs/camutils/CMakeLists.txt | 24 ++++++--- libs/filabridge/CMakeLists.txt | 34 ++++++++++--- libs/filaflat/CMakeLists.txt | 35 +++++++------ libs/filagui/CMakeLists.txt | 27 ++++++++-- libs/filamat/CMakeLists.txt | 61 ++++++++++++++++------- libs/filameshio/CMakeLists.txt | 30 ++++++++--- libs/geometry/CMakeLists.txt | 24 ++++++--- libs/gltfio/CMakeLists.txt | 54 +++++++++++++++----- libs/ibl/CMakeLists.txt | 45 +++++++++++------ libs/iblprefilter/CMakeLists.txt | 31 +++++++----- libs/image/CMakeLists.txt | 34 ++++++++----- libs/imageio/CMakeLists.txt | 26 +++++++--- libs/matdbg/CMakeLists.txt | 63 ++++++++++++------------ libs/math/CMakeLists.txt | 19 ++++--- libs/mathio/CMakeLists.txt | 23 ++++++--- libs/utils/CMakeLists.txt | 31 +++++++----- libs/viewer/CMakeLists.txt | 24 ++++++--- shaders/CMakeLists.txt | 10 +++- tools/cmgen/CMakeLists.txt | 4 +- tools/cso-lut/CMakeLists.txt | 2 +- tools/filamesh/CMakeLists.txt | 2 +- tools/glslminifier/CMakeLists.txt | 2 +- tools/matc/CMakeLists.txt | 4 +- tools/matinfo/CMakeLists.txt | 4 +- tools/mipgen/CMakeLists.txt | 2 +- tools/normal-blending/CMakeLists.txt | 2 +- tools/roughness-prefilter/CMakeLists.txt | 2 +- 34 files changed, 508 insertions(+), 249 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ce4192c..a95c557 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -577,15 +577,20 @@ endfunction() # 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 @@ -610,12 +615,10 @@ add_subdirectory(${FILAMENT}/filament) 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) @@ -653,7 +656,6 @@ if (IS_HOST_PLATFORM) add_subdirectory(${FILAMENT}/samples) - add_subdirectory(${EXTERNAL}/astcenc/tnt) add_subdirectory(${EXTERNAL}/etc2comp) include(debian/cmake/libassimp.cmake) @@ -674,3 +676,19 @@ endif() 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}) + diff --git a/filament/CMakeLists.txt b/filament/CMakeLists.txt index 09c77eb..514e430 100644 --- a/filament/CMakeLists.txt +++ b/filament/CMakeLists.txt @@ -345,31 +345,52 @@ list(APPEND DATA_BINS ${output_path}) # ================================================================================================== # 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 + $ + $ +) +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 + $ + $ +) +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) @@ -435,8 +456,8 @@ target_link_libraries(${TARGET} PRIVATE # 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 .) @@ -446,3 +467,4 @@ install(FILES "../LICENSE" DESTINATION .) add_subdirectory(backend) add_subdirectory(test) add_subdirectory(benchmark) + diff --git a/filament/backend/CMakeLists.txt b/filament/backend/CMakeLists.txt index 19fa52d..f61faee 100644 --- a/filament/backend/CMakeLists.txt +++ b/filament/backend/CMakeLists.txt @@ -193,23 +193,38 @@ add_definitions(-DSYSTRACE_TAG=2 ) # ================================================================================================== # 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 + $ + $ +) +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 + $ + $ +) +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. @@ -249,6 +264,7 @@ set(DUMMY_SRC "${VKSHADERS_DIR}/dummy.c") 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 @@ -259,15 +275,15 @@ if (ANDROID) 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) @@ -275,7 +291,7 @@ 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) @@ -283,6 +299,7 @@ if (FILAMENT_SUPPORTS_METAL) endif() if (LINUX) + target_link_libraries(${TARGET} PUBLIC Threads::Threads) target_link_libraries(${TARGET} PRIVATE dl) endif() @@ -343,9 +360,9 @@ target_link_libraries(${TARGET} PRIVATE # 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 diff --git a/filament/benchmark/CMakeLists.txt b/filament/benchmark/CMakeLists.txt index 3a1c57f..a4ac6ef 100644 --- a/filament/benchmark/CMakeLists.txt +++ b/filament/benchmark/CMakeLists.txt @@ -10,4 +10,5 @@ set(BENCHMARK_SRCS 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) diff --git a/filament/test/CMakeLists.txt b/filament/test/CMakeLists.txt index 6216701..5099da1 100644 --- a/filament/test/CMakeLists.txt +++ b/filament/test/CMakeLists.txt @@ -57,6 +57,6 @@ endif() 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) diff --git a/libs/bluegl/CMakeLists.txt b/libs/bluegl/CMakeLists.txt index 3f7ff83..b85c7f5 100644 --- a/libs/bluegl/CMakeLists.txt +++ b/libs/bluegl/CMakeLists.txt @@ -61,4 +61,4 @@ endif() # 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) diff --git a/libs/bluevk/CMakeLists.txt b/libs/bluevk/CMakeLists.txt index eca0cd1..7b7d4e1 100644 --- a/libs/bluevk/CMakeLists.txt +++ b/libs/bluevk/CMakeLists.txt @@ -25,14 +25,14 @@ include_directories(${PUBLIC_HDR_DIR}) 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}) diff --git a/libs/camutils/CMakeLists.txt b/libs/camutils/CMakeLists.txt index de50254..43ef1f2 100644 --- a/libs/camutils/CMakeLists.txt +++ b/libs/camutils/CMakeLists.txt @@ -23,13 +23,21 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) +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 @@ -44,13 +52,13 @@ endif() # ================================================================================================== # 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() diff --git a/libs/filabridge/CMakeLists.txt b/libs/filabridge/CMakeLists.txt index 4b2691c..da2dddd 100644 --- a/libs/filabridge/CMakeLists.txt +++ b/libs/filabridge/CMakeLists.txt @@ -20,17 +20,35 @@ set(SRCS # ================================================================================================== # Include and target definitions # ================================================================================================== -include_directories(${PUBLIC_HDR_DIR}) +add_library(${TARGET} SHARED ${PUBLIC_HDRS} ${SRCS}) +target_include_directories(${TARGET} PUBLIC + $ + $ +) -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 + $ + $ +) +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) diff --git a/libs/filaflat/CMakeLists.txt b/libs/filaflat/CMakeLists.txt index ce4927f..6a4a9e5 100644 --- a/libs/filaflat/CMakeLists.txt +++ b/libs/filaflat/CMakeLists.txt @@ -19,29 +19,28 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) +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) diff --git a/libs/filagui/CMakeLists.txt b/libs/filagui/CMakeLists.txt index fe5373e..683d022 100644 --- a/libs/filagui/CMakeLists.txt +++ b/libs/filagui/CMakeLists.txt @@ -75,14 +75,31 @@ list(APPEND RESGEN_SOURCE ${DUMMY_SRC}) # ================================================================================================== # 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 + $ + $ +) +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 diff --git a/libs/filamat/CMakeLists.txt b/libs/filamat/CMakeLists.txt index 9645004..a130f0c 100644 --- a/libs/filamat/CMakeLists.txt +++ b/libs/filamat/CMakeLists.txt @@ -84,18 +84,36 @@ include_directories(${PUBLIC_HDR_DIR}) 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 + $ + $ +) +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 + $ + $ +) +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. @@ -103,7 +121,7 @@ target_include_directories(${TARGET} PRIVATE ${spirv-tools_SOURCE_DIR}/include) 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() @@ -151,14 +169,14 @@ set(FILAMAT_DEPS 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 @@ -173,7 +191,9 @@ add_executable(${TARGET} ${SRCS}) 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 @@ -183,4 +203,7 @@ add_executable(${TARGET} ${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) + diff --git a/libs/filameshio/CMakeLists.txt b/libs/filameshio/CMakeLists.txt index 7e7dc4e..2bbf51f 100644 --- a/libs/filameshio/CMakeLists.txt +++ b/libs/filameshio/CMakeLists.txt @@ -18,25 +18,39 @@ set(SRCS src/MeshReader.cpp) # ================================================================================================== # 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 + $ + $ +) +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() diff --git a/libs/geometry/CMakeLists.txt b/libs/geometry/CMakeLists.txt index 37db5a9..dd13c29 100644 --- a/libs/geometry/CMakeLists.txt +++ b/libs/geometry/CMakeLists.txt @@ -20,13 +20,21 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) +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 @@ -41,13 +49,13 @@ endif() # ================================================================================================== # 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() diff --git a/libs/gltfio/CMakeLists.txt b/libs/gltfio/CMakeLists.txt index b759b0b..1f6ed14 100644 --- a/libs/gltfio/CMakeLists.txt +++ b/libs/gltfio/CMakeLists.txt @@ -106,6 +106,12 @@ set(DUMMY_SRC "${RESOURCE_DIR}/dummy.c") 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 @@ -157,29 +163,49 @@ set(DUMMY_SRC "${LITE_DIR}/dummy.c") 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 + $ + $ +) +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 @@ -194,9 +220,11 @@ if (NOT WEBGL AND NOT ANDROID AND NOT IOS) # ================================================================================================== # 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}) diff --git a/libs/ibl/CMakeLists.txt b/libs/ibl/CMakeLists.txt index 0719871..5faa579 100644 --- a/libs/ibl/CMakeLists.txt +++ b/libs/ibl/CMakeLists.txt @@ -31,32 +31,49 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) +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 + $ + $ +) +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}) diff --git a/libs/iblprefilter/CMakeLists.txt b/libs/iblprefilter/CMakeLists.txt index 6bf2237..b78b8c9 100644 --- a/libs/iblprefilter/CMakeLists.txt +++ b/libs/iblprefilter/CMakeLists.txt @@ -78,24 +78,33 @@ endif() # ================================================================================================== # 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 + $ + $ +) +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 @@ -133,5 +142,5 @@ target_link_libraries(${TARGET} PRIVATE # 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}) diff --git a/libs/image/CMakeLists.txt b/libs/image/CMakeLists.txt index 3f5072e..95e828d 100644 --- a/libs/image/CMakeLists.txt +++ b/libs/image/CMakeLists.txt @@ -26,13 +26,19 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) +set_target_properties(${TARGET} PROPERTIES + OUTPUT_NAME "filament_${TARGET}" + VERSION ${FILAMENT_VERSION} + SOVERSION ${FILAMENT_SOVERSION} +) +add_library(filament::${TARGET} ALIAS ${TARGET}) # ================================================================================================== # Compiler flags @@ -48,18 +54,24 @@ endif() # 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 + $ + $ +) +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() diff --git a/libs/imageio/CMakeLists.txt b/libs/imageio/CMakeLists.txt index 0c3a6a3..a57b379 100644 --- a/libs/imageio/CMakeLists.txt +++ b/libs/imageio/CMakeLists.txt @@ -24,16 +24,30 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) -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 diff --git a/libs/matdbg/CMakeLists.txt b/libs/matdbg/CMakeLists.txt index c8c5976..86f23ed 100644 --- a/libs/matdbg/CMakeLists.txt +++ b/libs/matdbg/CMakeLists.txt @@ -60,29 +60,45 @@ set(DUMMY_SRC "${RESOURCE_DIR}/dummy.c") 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 + $ + $ +) 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 @@ -98,22 +114,5 @@ endif() # ================================================================================================== # 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) diff --git a/libs/math/CMakeLists.txt b/libs/math/CMakeLists.txt index cdfe25c..c812501 100644 --- a/libs/math/CMakeLists.txt +++ b/libs/math/CMakeLists.txt @@ -37,16 +37,19 @@ set(SRCS src/dummy.cpp) # ================================================================================================== # 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 + $ + $ +) +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 @@ -58,7 +61,7 @@ add_executable(test_${TARGET} 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 @@ -71,4 +74,4 @@ add_executable(benchmark_${TARGET} ${BENCHMARK_SRCS}) 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) diff --git a/libs/mathio/CMakeLists.txt b/libs/mathio/CMakeLists.txt index fc55a4b..2d0b04d 100644 --- a/libs/mathio/CMakeLists.txt +++ b/libs/mathio/CMakeLists.txt @@ -22,15 +22,24 @@ set(SRCS src/ostream.cpp) # ================================================================================================== # 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 + $ + $ +) +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) diff --git a/libs/utils/CMakeLists.txt b/libs/utils/CMakeLists.txt index 2a115f0..38684c5 100644 --- a/libs/utils/CMakeLists.txt +++ b/libs/utils/CMakeLists.txt @@ -81,11 +81,19 @@ endif() # ================================================================================================== # 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 + $ + $ +) +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) @@ -98,8 +106,6 @@ if (WIN32) 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() @@ -116,13 +122,12 @@ target_compile_options(${TARGET} PRIVATE # ================================================================================================== # 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() # ================================================================================================== @@ -156,7 +161,7 @@ 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 diff --git a/libs/viewer/CMakeLists.txt b/libs/viewer/CMakeLists.txt index c9a3dcd..fe168d2 100644 --- a/libs/viewer/CMakeLists.txt +++ b/libs/viewer/CMakeLists.txt @@ -27,9 +27,21 @@ set(SRCS # ================================================================================================== # 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 + $ + $ +) +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 @@ -44,13 +56,13 @@ endif() # ================================================================================================== # 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() diff --git a/shaders/CMakeLists.txt b/shaders/CMakeLists.txt index fb4dda1..8b56e12 100644 --- a/shaders/CMakeLists.txt +++ b/shaders/CMakeLists.txt @@ -105,10 +105,16 @@ 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 $) +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} +) diff --git a/tools/cmgen/CMakeLists.txt b/tools/cmgen/CMakeLists.txt index c84f70f..27493d0 100644 --- a/tools/cmgen/CMakeLists.txt +++ b/tools/cmgen/CMakeLists.txt @@ -22,7 +22,7 @@ set(SRCS # ================================================================================================== 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 @@ -55,5 +55,5 @@ install(TARGETS ${TARGET} RUNTIME DESTINATION bin) # ================================================================================================== 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() diff --git a/tools/cso-lut/CMakeLists.txt b/tools/cso-lut/CMakeLists.txt index ead06a8..9f83f67 100644 --- a/tools/cso-lut/CMakeLists.txt +++ b/tools/cso-lut/CMakeLists.txt @@ -15,7 +15,7 @@ set(SRCS src/main.cpp) # ================================================================================================== 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 diff --git a/tools/filamesh/CMakeLists.txt b/tools/filamesh/CMakeLists.txt index 3cc8bda..f7eacd1 100644 --- a/tools/filamesh/CMakeLists.txt +++ b/tools/filamesh/CMakeLists.txt @@ -19,7 +19,7 @@ add_executable(${TARGET} ${SRCS}) 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 diff --git a/tools/glslminifier/CMakeLists.txt b/tools/glslminifier/CMakeLists.txt index 5a6837f..0549fbf 100644 --- a/tools/glslminifier/CMakeLists.txt +++ b/tools/glslminifier/CMakeLists.txt @@ -36,5 +36,5 @@ if (NOT ANDROID) 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() diff --git a/tools/matc/CMakeLists.txt b/tools/matc/CMakeLists.txt index cb8c934..8eef505 100644 --- a/tools/matc/CMakeLists.txt +++ b/tools/matc/CMakeLists.txt @@ -44,7 +44,7 @@ add_library(${TARGET} STATIC ${SRCS} ${HDRS}) 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 @@ -89,4 +89,4 @@ set(SRCS add_executable(${TARGET} ${SRCS}) -target_link_libraries(${TARGET} matlang gtest) +target_link_libraries(${TARGET} matlang GTest::gtest) diff --git a/tools/matinfo/CMakeLists.txt b/tools/matinfo/CMakeLists.txt index 17d948f..37b56f5 100644 --- a/tools/matinfo/CMakeLists.txt +++ b/tools/matinfo/CMakeLists.txt @@ -13,12 +13,12 @@ set(SRCS src/main.cpp) # ================================================================================================== 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 -target_include_directories(${TARGET} PRIVATE ${../glslang_SOURCE_DIR}/..) +#target_include_directories(${TARGET} PRIVATE ${../glslang_SOURCE_DIR}/..) # ================================================================================================= # Licenses diff --git a/tools/mipgen/CMakeLists.txt b/tools/mipgen/CMakeLists.txt index 2686b40..38fdc60 100644 --- a/tools/mipgen/CMakeLists.txt +++ b/tools/mipgen/CMakeLists.txt @@ -12,7 +12,7 @@ set(SRCS src/main.cpp) # 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 diff --git a/tools/normal-blending/CMakeLists.txt b/tools/normal-blending/CMakeLists.txt index 40be37f..73634ce 100644 --- a/tools/normal-blending/CMakeLists.txt +++ b/tools/normal-blending/CMakeLists.txt @@ -15,7 +15,7 @@ set(SRCS src/main.cpp) # ================================================================================================== 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 diff --git a/tools/roughness-prefilter/CMakeLists.txt b/tools/roughness-prefilter/CMakeLists.txt index 4112f81..fdbc3bb 100644 --- a/tools/roughness-prefilter/CMakeLists.txt +++ b/tools/roughness-prefilter/CMakeLists.txt @@ -15,7 +15,7 @@ set(SRCS src/main.cpp) # ================================================================================================== 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 -- 2.30.2