Files
MapLibreParticleLab/platform/android/android.cmake
Bart Louwers 2a8ebc4906 core: rename mbgl directories to mln (#4511)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-22 20:50:14 +02:00

322 lines
11 KiB
CMake

if(NOT ANDROID_NDK_TOOLCHAIN_INCLUDED)
message(FATAL_ERROR "-- Toolchain file not included, see https://developer.android.com/ndk/guides/cmake")
endif()
target_compile_definitions(
mbgl-core
PUBLIC
)
include(${PROJECT_SOURCE_DIR}/vendor/icu.cmake)
include(${PROJECT_SOURCE_DIR}/vendor/sqlite.cmake)
# cmake-format: off
# Apply size optimizations for both Release and RelWithDebInfo configs.
# Android AGP maps the release build variant to RelWithDebInfo (not Release), so we must
# include RelWithDebInfo here to ensure these flags are actually applied.
set(_OPT_CONFIGS "$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>")
target_compile_options(mbgl-vendor-csscolorparser PRIVATE $<${_OPT_CONFIGS}:-Oz> $<${_OPT_CONFIGS}:-Qunused-arguments> $<${_OPT_CONFIGS}:-flto>)
target_compile_options(mbgl-vendor-icu PRIVATE $<${_OPT_CONFIGS}:-Oz> $<${_OPT_CONFIGS}:-Qunused-arguments> $<${_OPT_CONFIGS}:-flto>)
target_compile_options(mbgl-vendor-parsedate PRIVATE $<${_OPT_CONFIGS}:-Oz> $<${_OPT_CONFIGS}:-Qunused-arguments> $<${_OPT_CONFIGS}:-flto>)
target_compile_options(mbgl-vendor-sqlite PRIVATE $<${_OPT_CONFIGS}:-Oz> $<${_OPT_CONFIGS}:-Qunused-arguments> $<${_OPT_CONFIGS}:-flto>)
target_compile_options(mbgl-compiler-options INTERFACE $<${_OPT_CONFIGS}:-Oz> $<${_OPT_CONFIGS}:-Qunused-arguments> $<${_OPT_CONFIGS}:-flto>)
# cmake-format: on
target_link_libraries(
mbgl-compiler-options
INTERFACE
$<${_OPT_CONFIGS}:-O2>
$<${_OPT_CONFIGS}:-Wl,--icf=all>
$<${_OPT_CONFIGS}:-flto>
$<${_OPT_CONFIGS}:-fuse-ld=lld>
)
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/android/src/async_task.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/attach_env.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/attach_env.hpp
${PROJECT_SOURCE_DIR}/platform/android/src/bitmap.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/bitmap.hpp
${PROJECT_SOURCE_DIR}/platform/android/src/bitmap_factory.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/bitmap_factory.hpp
${PROJECT_SOURCE_DIR}/platform/android/src/image.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/jni.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/jni.hpp
${PROJECT_SOURCE_DIR}/platform/android/src/run_loop.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/run_loop_impl.hpp
${PROJECT_SOURCE_DIR}/platform/android/src/string_util.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/thread.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/timer.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/gfx/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/gfx/headless_frontend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/map/map_snapshotter.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/file_source_manager.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/file_source_request.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/local_file_request.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/local_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/mbtiles_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/main_resource_loader.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/offline.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/offline_database.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/offline_download.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/online_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/$<IF:$<BOOL:${MLN_WITH_PMTILES}>,pmtiles_file_source.cpp,pmtiles_file_source_stub.cpp>
${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/sqlite3.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/text/bidi.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/util/compression.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/util/filesystem.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/util/monotonic_timer.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/util/png_writer.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/util/thread_local.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/util/utf.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/layermanager/layer_manager.cpp
)
if(MLN_WITH_OPENGL)
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/default/src/mln/gl/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/linux/src/headless_backend_egl.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/gl_functions.cpp
)
endif()
if(MLN_WITH_VULKAN)
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/default/src/mln/vulkan/headless_backend.cpp
)
endif()
if(MLN_WITH_WEBGPU)
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/src/mln/webgpu/headless_backend.cpp
)
endif()
target_include_directories(
mbgl-core
PRIVATE ${PROJECT_SOURCE_DIR}/platform/default/include
)
target_link_libraries(
mbgl-core
PRIVATE
EGL
GLESv3
MapLibreNative::Base::jni.hpp
android
atomic
jnigraphics
log
mbgl-vendor-icu
mbgl-vendor-sqlite
z
)
add_library(
example-custom-layer MODULE
${PROJECT_SOURCE_DIR}/platform/android/src/example_custom_layer.cpp
)
target_include_directories(
example-custom-layer
PRIVATE ${PROJECT_SOURCE_DIR}/include
)
target_link_libraries(
example-custom-layer
PRIVATE
GLESv3
MapLibreNative::Base
log
mbgl-compiler-options
)
if(MLN_WITH_VULKAN)
add_library(
example-vulkan-custom-layer MODULE
${PROJECT_SOURCE_DIR}/platform/android/src/example_vulkan_custom_layer.cpp
)
target_include_directories(
example-vulkan-custom-layer
PRIVATE ${PROJECT_SOURCE_DIR}/include
)
target_link_libraries(
example-vulkan-custom-layer
PRIVATE
MapLibreNative::Base
log
mbgl-compiler-options
mbgl-vendor-vulkan-headers
)
endif()
add_library(
mbgl-test-runner SHARED
${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c
${PROJECT_SOURCE_DIR}/platform/android/src/test/test_runner.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/test_runner_common.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/text/local_glyph_rasterizer.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/collator_test_stub.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/number_format_test_stub.cpp
)
target_include_directories(
mbgl-test-runner
PRIVATE ${ANDROID_NDK}/sources/android/native_app_glue
${PROJECT_SOURCE_DIR}/platform/android/src
${PROJECT_SOURCE_DIR}/src
)
# this is needed because Android is not officially supported
# https://discourse.cmake.org/t/error-when-crosscompiling-with-whole-archive-target-link/9394
# https://cmake.org/cmake/help/latest/release/3.24.html#generator-expressions
set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE
"-Wl,--whole-archive <LIBRARY> -Wl,--no-whole-archive"
)
set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED True)
find_package(curl CONFIG)
target_link_libraries(
mbgl-test-runner
PRIVATE
MapLibreNative::Base::jni.hpp
mbgl-compiler-options
$<$<BOOL:${curl_FOUND}>:curl::curl_static>
$<LINK_LIBRARY:WHOLE_ARCHIVE,mbgl-test>
)
target_sources(
mbgl-test-runner
PRIVATE ${PROJECT_SOURCE_DIR}/platform/default/src/mln/storage/http_file_source.cpp
)
add_custom_command(
TARGET mbgl-test-runner PRE_BUILD
COMMAND
${CMAKE_COMMAND}
-E
make_directory
${PROJECT_SOURCE_DIR}/test/results
COMMAND
${CMAKE_COMMAND}
-E
tar
"chf"
"test/android/app/src/main/assets/data.zip"
--format=zip
--files-from=test/android/app/src/main/assets/to_zip.txt
COMMAND
${CMAKE_COMMAND}
-E
remove_directory
${PROJECT_SOURCE_DIR}/test/results
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_library(
mbgl-benchmark-runner SHARED
${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c
${PROJECT_SOURCE_DIR}/platform/android/src/test/benchmark_runner.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/test_runner_common.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/text/local_glyph_rasterizer.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/collator_test_stub.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/number_format_test_stub.cpp
${PROJECT_SOURCE_DIR}/platform/android/MapLibreAndroid/src/cpp/http_file_source.cpp
)
target_include_directories(
mbgl-benchmark-runner
PRIVATE ${ANDROID_NDK}/sources/android/native_app_glue ${PROJECT_SOURCE_DIR}/platform/android/src ${PROJECT_SOURCE_DIR}/src
)
target_link_libraries(
mbgl-benchmark-runner
PRIVATE
MapLibreNative::Base::jni.hpp
mbgl-compiler-options
$<LINK_LIBRARY:WHOLE_ARCHIVE,mbgl-benchmark>
)
add_custom_command(
TARGET mbgl-benchmark-runner PRE_BUILD
COMMAND
${CMAKE_COMMAND}
-E
make_directory
${PROJECT_SOURCE_DIR}/benchmark/results
COMMAND
${CMAKE_COMMAND}
-E
tar
"chf"
"benchmark/android/app/src/main/assets/data.zip"
--format=zip
--files-from=benchmark/android/app/src/main/assets/to_zip.txt
COMMAND
${CMAKE_COMMAND}
-E
remove_directory
${PROJECT_SOURCE_DIR}/benchmark/results
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_library(
mbgl-render-test-runner SHARED
${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c
${PROJECT_SOURCE_DIR}/platform/android/src/test/render_test_runner.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/test_runner_common.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mln/text/local_glyph_rasterizer.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/collator_test_stub.cpp
${PROJECT_SOURCE_DIR}/platform/android/src/test/number_format_test_stub.cpp
${PROJECT_SOURCE_DIR}/platform/android/MapLibreAndroid/src/cpp/http_file_source.cpp
)
if(MLN_WITH_VULKAN)
target_compile_definitions(mbgl-render-test-runner PRIVATE "MLN_RENDER_BACKEND_VULKAN=1")
endif()
target_include_directories(
mbgl-render-test-runner
PRIVATE ${ANDROID_NDK}/sources/android/native_app_glue ${PROJECT_SOURCE_DIR}/platform/android/src ${PROJECT_SOURCE_DIR}/src
)
target_link_libraries(
mbgl-render-test-runner
PRIVATE
MapLibreNative::Base::jni.hpp
android
log
mbgl-compiler-options
mbgl-render-test
)
add_custom_command(
TARGET mbgl-render-test-runner PRE_BUILD
COMMAND
${CMAKE_COMMAND}
-E
tar
"chf"
"render-test/android/app/src/main/assets/data.zip"
--format=zip
--files-from=render-test/android/app/src/main/assets/to_zip.txt
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
install(TARGETS mbgl-render-test-runner LIBRARY DESTINATION lib)