From b3fc9a768831a5baada61ea523ab6db824241f7b Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Thu, 6 Mar 2025 20:09:48 -0500 Subject: [PATCH] Allow Rust to build core as a static lib (#3283) --- CMakeLists.txt | 2 ++ cmake/mbgl-core-deps.cmake | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 cmake/mbgl-core-deps.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index ca9977965..681ec3808 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1601,3 +1601,5 @@ endif() add_subdirectory(${PROJECT_SOURCE_DIR}/test) add_subdirectory(${PROJECT_SOURCE_DIR}/benchmark) add_subdirectory(${PROJECT_SOURCE_DIR}/render-test) + +include(cmake/mbgl-core-deps.cmake) diff --git a/cmake/mbgl-core-deps.cmake b/cmake/mbgl-core-deps.cmake new file mode 100644 index 000000000..3a51ab5bd --- /dev/null +++ b/cmake/mbgl-core-deps.cmake @@ -0,0 +1,33 @@ +# this file defines a target that will generate a mbgl-core-deps.txt which includes the linker +# flags that would need to be passed to an executable or library that links with +# the static mbgl-core library + +set(DUMMY_FILE "${CMAKE_BINARY_DIR}/dummy.cpp") +add_custom_command( + OUTPUT ${DUMMY_FILE} + COMMAND ${CMAKE_COMMAND} -E echo "int main() {}" > ${DUMMY_FILE} + COMMENT "Generating dummy.cpp" + VERBATIM +) + +# https://stackoverflow.com/questions/34165365/retrieve-all-link-flags-in-cmake +set(CMAKE_ECHO_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES}) +set(CMAKE_ECHO_FLAGS ${CMAKE_CXX_FLAGS}) +set(CMAKE_ECHO_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}) +set(CMAKE_ECHO_IMPLICIT_LINK_DIRECTORIES ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES}) +set( + CMAKE_ECHO_LINK_EXECUTABLE + " -E echo \" \" > " +) + +add_executable(mbgl-core-deps EXCLUDE_FROM_ALL "${DUMMY_FILE}") +target_link_libraries(mbgl-core-deps mbgl-core) +add_custom_target(generate_dummy DEPENDS ${DUMMY_FILE}) +add_dependencies(mbgl-core-deps generate_dummy) + +set_target_properties( + mbgl-core-deps + PROPERTIES + LINKER_LANGUAGE ECHO + SUFFIX ".txt" +)