@@ -21,7 +21,6 @@ option(MLN_USE_RUST "Use components in Rust" OFF)
2121option (MLN_TEXT_SHAPING_HARFBUZZ "Use haffbuzz to shape complex text" ON )
2222option (MLN_CREATE_AUTORELEASEPOOL "Create autoreleasepool in render loop" OFF )
2323option (MLN_CREATE_AMALGAMATION "Create static amalgamation of core (requires amerge)" OFF )
24- option (MLN_ANDROID_MULTI_BACKEND "Android only: build both OpenGL and Vulkan versions" OFF )
2524
2625include (cmake/validate-backend-options.cmake )
2726include (cmake/clang-tidy.cmake )
@@ -34,109 +33,12 @@ if(WIN32 AND NOT DEFINED ENV{MSYSTEM} AND NOT MLN_WITH_QT AND NOT CMAKE_SYSTEM_N
3433 set (CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR } /platform/windows/custom-toolchain.cmake)
3534endif ()
3635
37- if (MLN_ANDROID_MULTI_BACKEND)
38- if (NOT ANDROID )
39- message (FATAL_ERROR
40- "MLN_ANDROID_MULTI_BACKEND is only supported on Android." )
41- endif ()
42-
43- # Android: invoke the Android NDK CMakeLists twice via ExternalProject_Add
44- # (once per backend) and surface the results to AGP as two distinct
45- # add_library(SHARED) targets so both .so files end up in the AAR.
46- # Reached via add_subdirectory(...) from the Android src/cpp CMakeLists,
47- # whose project(MapLibreAndroid) is already in effect. We deliberately
48- # avoid calling our own project() here so the add_library targets below
49- # land in the AGP-invoked MapLibreAndroid root project — otherwise AGP's
50- # cmake-server query doesn't see them.
51- #
52- # The OpenGL target's output filename is the default "maplibre" (i.e.
53- # libmaplibre.so) so it matches the single-backend OpenGL AAR; Vulkan keeps
54- # the "-vulkan" suffix to disambiguate.
55- include (ExternalProject )
56-
57- set (_multi_android_source_dir ${CMAKE_CURRENT_SOURCE_DIR } /platform/android /MapLibreAndroid/src/cpp)
58-
59- set (_multi_forward_args
60- -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE }
61- -DANDROID_ABI=${ANDROID_ABI}
62- -DANDROID_PLATFORM=${ANDROID_PLATFORM}
63- -DANDROID_NDK=${ANDROID_NDK}
64- -DANDROID_TOOLCHAIN=${ANDROID_TOOLCHAIN}
65- -DANDROID_STL=${ANDROID_STL}
66- -DANDROID_CPP_FEATURES=${ANDROID_CPP_FEATURES}
67- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE }
68- -DMLN_ANDROID_MULTI_BACKEND=OFF )
69-
70- set (_multi_opengl_dir ${CMAKE_BINARY_DIR } /multi-opengl)
71- set (_multi_vulkan_dir ${CMAKE_BINARY_DIR } /multi-vulkan)
72-
73- set (_multi_android_lib_dir ${CMAKE_CURRENT_SOURCE_DIR } /platform/android /MapLibreAndroid)
74-
75- ExternalProject_Add (maplibre-opengl-build
76- SOURCE_DIR ${_multi_android_source_dir }
77- BINARY_DIR ${_multi_opengl_dir}
78- CMAKE_ARGS
79- ${_multi_forward_args}
80- -DMLN_WITH_OPENGL=ON
81- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${_multi_opengl_dir} /lib
82- "-DMLN_ANDROID_TOP_BINARY_DIR=${_multi_android_lib_dir} /${ANDROID_ABI} -opengl"
83- BUILD_COMMAND ${CMAKE_COMMAND } --build <BINARY_DIR > --target maplibre
84- INSTALL_COMMAND ""
85- BUILD_ALWAYS 1)
86-
87- ExternalProject_Add (maplibre-vulkan-build
88- SOURCE_DIR ${_multi_android_source_dir }
89- BINARY_DIR ${_multi_vulkan_dir}
90- CMAKE_ARGS
91- ${_multi_forward_args}
92- -DMLN_WITH_VULKAN=ON
93- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${_multi_vulkan_dir} /lib
94- "-DMLN_ANDROID_TOP_BINARY_DIR=${_multi_android_lib_dir} /${ANDROID_ABI} -vulkan"
95- BUILD_COMMAND ${CMAKE_COMMAND } --build <BINARY_DIR > --target maplibre
96- INSTALL_COMMAND ""
97- BUILD_ALWAYS 1)
98-
99- set (_multi_stub ${CMAKE_BINARY_DIR } /maplibre_multi_stub.cpp)
100- file (WRITE ${_multi_stub}
101- "extern \" C\" void maplibre_multi_backend_stub() {}\n " )
102-
103- add_library (maplibre-opengl SHARED ${_multi_stub} )
104- # Produce libmaplibre.so (not libmaplibre-opengl.so) so the OpenGL output
105- # matches the single-backend OpenGL AAR's library name.
106- set_target_properties (maplibre-opengl PROPERTIES OUTPUT_NAME maplibre)
107- add_dependencies (maplibre-opengl maplibre-opengl-build )
108- add_custom_command (TARGET maplibre-opengl POST_BUILD
109- COMMAND ${CMAKE_COMMAND } -E copy
110- ${_multi_opengl_dir} /lib/libmaplibre.so
111- $<TARGET_FILE :maplibre -opengl >
112- VERBATIM )
113-
114- add_library (maplibre-vulkan SHARED ${_multi_stub} )
115- add_dependencies (maplibre-vulkan maplibre-vulkan-build )
116- add_custom_command (TARGET maplibre-vulkan POST_BUILD
117- COMMAND ${CMAKE_COMMAND } -E copy
118- ${_multi_vulkan_dir} /lib/libmaplibre.so
119- $<TARGET_FILE :maplibre -vulkan >
120- VERBATIM )
121-
122- # AGP's defaultConfig nativeTargets always lists "maplibre"; provide a
123- # custom target so `cmake --build . --target maplibre` triggers both .so
124- # builds.
125- add_custom_target (maplibre DEPENDS maplibre-opengl maplibre-vulkan )
126-
127- install (TARGETS maplibre-opengl maplibre-vulkan LIBRARY DESTINATION lib)
128-
129- return ()
130- endif ()
131-
13236project ("MapLibre Native" LANGUAGES CXX C )
13337
13438set_property (GLOBAL PROPERTY USE_FOLDERS ON )
13539set_property (GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER MapLibre)
13640
137- if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
138- include (CTest )
139- endif ()
41+ include (CTest )
14042
14143if (NOT CMAKE_BUILD_TYPE )
14244 set (CMAKE_BUILD_TYPE Release)
0 commit comments