diff --git a/android/filament-android/CMakeLists.txt b/android/filament-android/CMakeLists.txt index 432af0892b..8086541e2b 100644 --- a/android/filament-android/CMakeLists.txt +++ b/android/filament-android/CMakeLists.txt @@ -1,14 +1,14 @@ cmake_minimum_required(VERSION 3.19) project(filament-android) -set(CMAKE_CXX_STANDARD 20) - option(FILAMENT_SUPPORTS_VULKAN "Enables Vulkan on Android" OFF) option(FILAMENT_ENABLE_FGVIEWER "Enables Frame Graph Viewer" OFF) option(FILAMENT_ENABLE_MATDBG "Enables Material debugger" OFF) option(FILAMENT_DISABLE_MATOPT "Disables material optimizations" OFF) option(FILAMENT_SUPPORTS_WEBGPU "Enables WebGPU on Android" OFF) +set(CMAKE_CXX_STANDARD 20) + set(FILAMENT_DIR ${FILAMENT_DIST_DIR}) add_library(filament STATIC IMPORTED) @@ -132,6 +132,14 @@ add_library(filament-jni SHARED ../common/NioUtils.cpp ) +target_include_directories(filament-jni PRIVATE + .. + ${FILAMENT_DIR}/include + ../../filament/backend/include + ../../third_party/robin-map + ../../third_party/perfetto + ../../libs/utils/include) + # Ordering is significant in the following list. The PRIVATE qualifier prevents transitive deps. target_link_libraries(filament-jni PRIVATE filament-generatePrefilterMipmap @@ -146,29 +154,21 @@ target_link_libraries(filament-jni PRIVATE android PRIVATE jnigraphics PRIVATE utils - PRIVATE perfetto - PRIVATE abseil + PRIVATE perfetto # needed only when FILAMENT_ENABLE_PERFETTO is defined + PRIVATE abseil # needed only when FILAMENT_USE_ABSEIL_LOGGING is defined PRIVATE zstd # libgeometry is PUBLIC because gltfio uses it. PUBLIC geometry - $<$:fgviewer> - $<$:matdbg> - $<$:filamat> - $<$:bluevk> - $<$:vkshaders> - $<$:webgpu_dawn> - $<$:smol-v> + PRIVATE $<$:fgviewer> + PRIVATE $<$:matdbg> + PRIVATE $<$:filamat> + PRIVATE $<$:bluevk> + PRIVATE $<$:vkshaders> + PRIVATE $<$:smol-v> + PRIVATE $<$:webgpu_dawn> ) -target_include_directories(filament-jni PRIVATE - .. - ${FILAMENT_DIR}/include - ../../filament/backend/include - ../../third_party/robin-map - ../../third_party/perfetto - ../../libs/utils/include) - # Force a relink when the version script is changed: set_target_properties(filament-jni PROPERTIES LINK_DEPENDS ${VERSION_SCRIPT}) diff --git a/android/filament-utils-android/CMakeLists.txt b/android/filament-utils-android/CMakeLists.txt index 305faa0587..9f201c8707 100644 --- a/android/filament-utils-android/CMakeLists.txt +++ b/android/filament-utils-android/CMakeLists.txt @@ -1,6 +1,12 @@ cmake_minimum_required(VERSION 3.19) project(filament-utils-android) +option(FILAMENT_SUPPORTS_VULKAN "Enables Vulkan on Android" OFF) +option(FILAMENT_ENABLE_FGVIEWER "Enables Frame Graph Viewer" OFF) +option(FILAMENT_ENABLE_MATDBG "Enables Material debugger" OFF) +option(FILAMENT_DISABLE_MATOPT "Disables material optimizations" OFF) +option(FILAMENT_SUPPORTS_WEBGPU "Enables WebGPU on Android" OFF) + set(CMAKE_CXX_STANDARD 20) set(FILAMENT_DIR ${FILAMENT_DIST_DIR}) @@ -32,7 +38,16 @@ add_library(iblprefilter STATIC IMPORTED) set_target_properties(iblprefilter PROPERTIES IMPORTED_LOCATION ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libfilament-iblprefilter.a) -set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libfilament-utils-jni.map") +add_library(utils STATIC IMPORTED) +set_target_properties(utils PROPERTIES IMPORTED_LOCATION + ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libutils.a) + +add_library(perfetto STATIC IMPORTED) +set_target_properties(perfetto PROPERTIES IMPORTED_LOCATION + ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libperfetto.a) + +set(VERSION_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/libfilament-utils-jni.map") +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,--version-script=${VERSION_SCRIPT}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384") add_library(filament-utils-jni SHARED @@ -55,22 +70,25 @@ add_library(filament-utils-jni SHARED target_compile_definitions(filament-utils-jni PUBLIC IMAGEIO_LITE=1) target_include_directories(filament-utils-jni PRIVATE - ${FILAMENT_DIR}/include .. + ${FILAMENT_DIR}/include ../../filament/backend/include ${IMAGEIO_DIR}/include ../../libs/utils/include) -set_target_properties(filament-utils-jni PROPERTIES LINK_DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/libfilament-utils-jni.symbols) +set_target_properties(filament-utils-jni PROPERTIES LINK_DEPENDS ${VERSION_SCRIPT}) # The ordering in the following list is important because CMake does not have dependency information. target_link_libraries(filament-utils-jni - gltfio-jni - civetweb - camutils - iblprefilter - image - ktxreader - viewer + PRIVATE gltfio-jni + PRIVATE civetweb + PRIVATE camutils + PRIVATE iblprefilter + PRIVATE image + PRIVATE filament-jni + PRIVATE ktxreader + PRIVATE viewer + PRIVATE log + PRIVATE utils + PRIVATE perfetto # needed only when FILAMENT_ENABLE_PERFETTO is defined ) diff --git a/android/gltfio-android/CMakeLists.txt b/android/gltfio-android/CMakeLists.txt index c3ebd6264e..344f7a6190 100644 --- a/android/gltfio-android/CMakeLists.txt +++ b/android/gltfio-android/CMakeLists.txt @@ -1,22 +1,27 @@ cmake_minimum_required(VERSION 3.19) project(gltfio-android) +option(FILAMENT_SUPPORTS_VULKAN "Enables Vulkan on Android" OFF) +option(FILAMENT_ENABLE_FGVIEWER "Enables Frame Graph Viewer" OFF) +option(FILAMENT_ENABLE_MATDBG "Enables Material debugger" OFF) +option(FILAMENT_DISABLE_MATOPT "Disables material optimizations" OFF) +option(FILAMENT_SUPPORTS_WEBGPU "Enables WebGPU on Android" OFF) + set(CMAKE_CXX_STANDARD 20) set(FILAMENT_DIR ${FILAMENT_DIST_DIR}) -set(GLTFIO_DIR ../../libs/gltfio) set(DRACO_DIR ../../third_party/draco) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../filament-android ${CMAKE_CURRENT_BINARY_DIR}/filament-android) +add_library(gltfio_core STATIC IMPORTED) +set_target_properties(gltfio_core PROPERTIES IMPORTED_LOCATION + ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libgltfio_core.a) + add_library(dracodec STATIC IMPORTED) set_target_properties(dracodec PROPERTIES IMPORTED_LOCATION ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libdracodec.a) -add_library(meshoptimizer STATIC IMPORTED) -set_target_properties(meshoptimizer PROPERTIES IMPORTED_LOCATION - ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libmeshoptimizer.a) - add_library(ktxreader STATIC IMPORTED) set_target_properties(ktxreader PROPERTIES IMPORTED_LOCATION ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libktxreader.a) @@ -29,10 +34,6 @@ add_library(basis_transcoder STATIC IMPORTED) set_target_properties(basis_transcoder PROPERTIES IMPORTED_LOCATION ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libbasis_transcoder.a) -add_library(zstd STATIC IMPORTED) -set_target_properties(zstd PROPERTIES IMPORTED_LOCATION - ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libzstd.a) - add_library(utils STATIC IMPORTED) set_target_properties(utils PROPERTIES IMPORTED_LOCATION ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libutils.a) @@ -49,60 +50,11 @@ add_library(uberarchive STATIC IMPORTED) set_target_properties(uberarchive PROPERTIES IMPORTED_LOCATION ${FILAMENT_DIR}/lib/${ANDROID_ABI}/libuberarchive.a) -set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map") +set(VERSION_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map") +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,--version-script=${VERSION_SCRIPT}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384") set(GLTFIO_SRCS - ${GLTFIO_DIR}/include/gltfio/Animator.h - ${GLTFIO_DIR}/include/gltfio/AssetLoader.h - ${GLTFIO_DIR}/include/gltfio/FilamentAsset.h - ${GLTFIO_DIR}/include/gltfio/FilamentInstance.h - ${GLTFIO_DIR}/include/gltfio/MaterialProvider.h - ${GLTFIO_DIR}/include/gltfio/NodeManager.h - ${GLTFIO_DIR}/include/gltfio/TrsTransformManager.h - ${GLTFIO_DIR}/include/gltfio/ResourceLoader.h - ${GLTFIO_DIR}/include/gltfio/TextureProvider.h - ${GLTFIO_DIR}/include/gltfio/math.h - - ${GLTFIO_DIR}/src/ArchiveCache.cpp - ${GLTFIO_DIR}/src/ArchiveCache.h - ${GLTFIO_DIR}/src/Animator.cpp - ${GLTFIO_DIR}/src/AssetLoader.cpp - ${GLTFIO_DIR}/src/DependencyGraph.cpp - ${GLTFIO_DIR}/src/DependencyGraph.h - ${GLTFIO_DIR}/src/DracoCache.cpp - ${GLTFIO_DIR}/src/DracoCache.h - ${GLTFIO_DIR}/src/FFilamentAsset.h - ${GLTFIO_DIR}/src/FFilamentInstance.h - ${GLTFIO_DIR}/src/FilamentAsset.cpp - ${GLTFIO_DIR}/src/FilamentInstance.cpp - ${GLTFIO_DIR}/src/FNodeManager.h - ${GLTFIO_DIR}/src/FTrsTransformManager.h - ${GLTFIO_DIR}/src/GltfEnums.h - ${GLTFIO_DIR}/src/Ktx2Provider.cpp - ${GLTFIO_DIR}/src/MaterialProvider.cpp - ${GLTFIO_DIR}/src/NodeManager.cpp - ${GLTFIO_DIR}/src/TrsTransformManager.cpp - ${GLTFIO_DIR}/src/ResourceLoader.cpp - ${GLTFIO_DIR}/src/StbProvider.cpp - ${GLTFIO_DIR}/src/TangentsJob.cpp - ${GLTFIO_DIR}/src/TangentsJob.h - ${GLTFIO_DIR}/src/UbershaderProvider.cpp - ${GLTFIO_DIR}/src/Utility.cpp - ${GLTFIO_DIR}/src/Utility.h - ${GLTFIO_DIR}/src/Wireframe.cpp - ${GLTFIO_DIR}/src/Wireframe.h - ${GLTFIO_DIR}/src/downcast.h - ${GLTFIO_DIR}/src/extended/AssetLoaderExtended.cpp - ${GLTFIO_DIR}/src/extended/AssetLoaderExtended.h - ${GLTFIO_DIR}/src/extended/ResourceLoaderExtended.cpp - ${GLTFIO_DIR}/src/extended/ResourceLoaderExtended.h - ${GLTFIO_DIR}/src/extended/TangentsJobExtended.cpp - ${GLTFIO_DIR}/src/extended/TangentsJobExtended.h - ${GLTFIO_DIR}/src/extended/TangentSpaceMeshWrapper.cpp - ${GLTFIO_DIR}/src/extended/TangentSpaceMeshWrapper.h - - src/main/cpp/Animator.cpp src/main/cpp/AssetLoader.cpp src/main/cpp/FilamentAsset.cpp @@ -120,24 +72,38 @@ set(GLTFIO_SRCS set(GLTFIO_INCLUDE_DIRS .. ${FILAMENT_DIR}/include - ../../filament/backend/include + ${FILAMENT_DIR}/backend/include ../../libs/gltfio/include - ../../third_party/zstd/lib ../../third_party/cgltf - ../../third_party/meshoptimizer/src ../../third_party/robin-map ../../third_party/stb - ../../third_party/perfetto ../../libs/utils/include ../../libs/ktxreader/include ) add_library(gltfio-jni SHARED ${GLTFIO_SRCS}) -target_include_directories(gltfio-jni PRIVATE ${GLTFIO_INCLUDE_DIRS}) -set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.symbols) -set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map) -target_link_libraries(gltfio-jni filament-jni utils perfetto uberzlib log stb ktxreader basis_transcoder zstd uberarchive) -target_link_libraries(gltfio-jni dracodec meshoptimizer) + target_compile_definitions(gltfio-jni PUBLIC GLTFIO_DRACO_SUPPORTED=1) + +target_include_directories(gltfio-jni PRIVATE ${GLTFIO_INCLUDE_DIRS}) target_include_directories(gltfio-jni PRIVATE ${DRACO_DIR}/src) target_include_directories(gltfio-jni PRIVATE ${DRACO_DIR}/tnt) + +# Force a relink when the version script is changed: +set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.symbols;${VERSION_SCRIPT}") + +# The ordering in the following list is important because CMake does not have dependency information. +target_link_libraries(gltfio-jni + PRIVATE gltfio_core + PRIVATE ktxreader + PUBLIC filament-jni + PRIVATE stb + PRIVATE basis_transcoder + PRIVATE uberarchive + PRIVATE dracodec + PRIVATE utils + PRIVATE uberzlib + PRIVATE perfetto # needed only when FILAMENT_ENABLE_PERFETTO is defined + PRIVATE log # needed only when perfetto above is used +)