fixes linker isseu using whole-archive
This commit is contained in:
parent
94e46b9968
commit
edba497fa1
|
@ -1,10 +1,12 @@
|
||||||
cmake_minimum_required(VERSION 3.12)
|
cmake_minimum_required(VERSION 3.12)
|
||||||
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
project(dbt-rise-tgc VERSION 1.0.0)
|
project(dbt-rise-tgc VERSION 1.0.0)
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
include(flink)
|
||||||
|
|
||||||
find_package(elfio QUIET)
|
find_package(elfio QUIET)
|
||||||
find_package(Boost COMPONENTS coroutine)
|
find_package(Boost COMPONENTS coroutine)
|
||||||
|
@ -82,8 +84,8 @@ if(TARGET jsoncpp::jsoncpp)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC jsoncpp)
|
target_link_libraries(${PROJECT_NAME} PUBLIC jsoncpp)
|
||||||
endif()
|
endif()
|
||||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC -Wl,--whole-archive dbt-rise-core -Wl,--no-whole-archive)
|
target_force_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-core)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-core)
|
target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-core)
|
||||||
endif()
|
endif()
|
||||||
|
@ -154,7 +156,7 @@ if(WITH_TCC)
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE WITH_TCC)
|
target_compile_definitions(${PROJECT_NAME} PRIVATE WITH_TCC)
|
||||||
endif()
|
endif()
|
||||||
# Links the target exe against the libraries
|
# Links the target exe against the libraries
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-tgc)
|
target_force_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-tgc)
|
||||||
if(TARGET Boost::program_options)
|
if(TARGET Boost::program_options)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::program_options)
|
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::program_options)
|
||||||
else()
|
else()
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# according to https://github.com/horance-liu/flink.cmake/tree/master
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
|
function(target_do_force_link_libraries target visibility lib)
|
||||||
|
if(MSVC)
|
||||||
|
target_link_libraries(${target} ${visibility} "/WHOLEARCHIVE:${lib}")
|
||||||
|
elseif(APPLE)
|
||||||
|
target_link_libraries(${target} ${visibility} -Wl,-force_load ${lib})
|
||||||
|
else()
|
||||||
|
target_link_libraries(${target} ${visibility} -Wl,--whole-archive ${lib} -Wl,--no-whole-archive)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(target_force_link_libraries target)
|
||||||
|
cmake_parse_arguments(FLINK
|
||||||
|
""
|
||||||
|
""
|
||||||
|
"PUBLIC;INTERFACE;PRIVATE"
|
||||||
|
${ARGN}
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach(lib IN LISTS FLINK_PUBLIC)
|
||||||
|
target_do_force_link_libraries(${target} PUBLIC ${lib})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
foreach(lib IN LISTS FLINK_INTERFACE)
|
||||||
|
target_do_force_link_libraries(${target} INTERFACE ${lib})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
foreach(lib IN LISTS FLINK_PRIVATE)
|
||||||
|
target_do_force_link_libraries(${target} PRIVATE ${lib})
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
Loading…
Reference in New Issue