Commit 6bbe993f authored by Dominik Charousset's avatar Dominik Charousset

Fix linking of object libs and examples

parent 7e99d5c3
...@@ -72,6 +72,27 @@ endif() ...@@ -72,6 +72,27 @@ endif()
# -- compiler setup ------------------------------------------------------------ # -- compiler setup ------------------------------------------------------------
# Calls target_link_libraries for non-object library targets.
function(caf_target_link_libraries target access)
get_target_property(targetType ${target} TYPE)
if (NOT targetType STREQUAL OBJECT_LIBRARY)
target_link_libraries(${target} ${access} ${ARGN})
else()
# If we can't link against it, at least make sure to pull in INTERFACE
# includes and compiler options.
foreach(arg ${ARGN})
if (TARGET ${arg})
target_include_directories(
${target} PRIVATE
$<TARGET_PROPERTY:${arg},INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(
${target} PRIVATE
$<TARGET_PROPERTY:${arg},INTERFACE_COMPILE_OPTIONS>)
endif()
endforeach()
endif()
endfunction()
function(caf_set_default_properties) function(caf_set_default_properties)
foreach(target ${ARGN}) foreach(target ${ARGN})
if(MSVC) if(MSVC)
...@@ -95,10 +116,15 @@ function(caf_set_default_properties) ...@@ -95,10 +116,15 @@ function(caf_set_default_properties)
target_compile_options(${target} PRIVATE target_compile_options(${target} PRIVATE
-fsanitize=${CAF_SANITIZERS} -fsanitize=${CAF_SANITIZERS}
-fno-omit-frame-pointer) -fno-omit-frame-pointer)
target_link_libraries(${target} PRIVATE caf_target_link_libraries(${target} PRIVATE
-fsanitize=${CAF_SANITIZERS} -fsanitize=${CAF_SANITIZERS}
-fno-omit-frame-pointer) -fno-omit-frame-pointer)
endif() endif()
# All of our object libraries can end up in shared libs => PIC.
get_target_property(targetType ${target} TYPE)
if (targetType STREQUAL OBJECT_LIBRARY)
set_property(TARGET ${target} PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()
# We always place headers in the same directories and need to find generated # We always place headers in the same directories and need to find generated
# headers from the bin dir. # headers from the bin dir.
target_include_directories(${target} PRIVATE "${CMAKE_BINARY_DIR}" target_include_directories(${target} PRIVATE "${CMAKE_BINARY_DIR}"
...@@ -269,6 +295,7 @@ function(caf_export_and_install_lib component) ...@@ -269,6 +295,7 @@ function(caf_export_and_install_lib component)
string(TOUPPER "CAF_${component}_EXPORT" exportMacroName) string(TOUPPER "CAF_${component}_EXPORT" exportMacroName)
target_include_directories(libcaf_${component} INTERFACE target_include_directories(libcaf_${component} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<INSTALL_INTERFACE:include>) $<INSTALL_INTERFACE:include>)
generate_export_header( generate_export_header(
libcaf_${component} libcaf_${component}
......
...@@ -33,9 +33,9 @@ function(caf_core_set_default_properties) ...@@ -33,9 +33,9 @@ function(caf_core_set_default_properties)
caf_set_default_properties(${target}) caf_set_default_properties(${target})
target_compile_definitions(${target} PRIVATE libcaf_core_EXPORTS) target_compile_definitions(${target} PRIVATE libcaf_core_EXPORTS)
# Pull in public dependencies. # Pull in public dependencies.
target_link_libraries(${target} PUBLIC Threads::Threads) caf_target_link_libraries(${target} PUBLIC Threads::Threads)
if(MSVC) if(MSVC)
target_link_libraries(${target} PUBLIC iphlpapi) caf_target_link_libraries(${target} PUBLIC iphlpapi)
endif() endif()
endforeach() endforeach()
endfunction() endfunction()
...@@ -175,8 +175,6 @@ add_library(libcaf_core_obj OBJECT ${CAF_CORE_HEADERS} ...@@ -175,8 +175,6 @@ add_library(libcaf_core_obj OBJECT ${CAF_CORE_HEADERS}
src/uuid.cpp src/uuid.cpp
) )
set_property(TARGET libcaf_core_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
add_library(libcaf_core "${PROJECT_SOURCE_DIR}/cmake/dummy.cpp" add_library(libcaf_core "${PROJECT_SOURCE_DIR}/cmake/dummy.cpp"
$<TARGET_OBJECTS:libcaf_core_obj>) $<TARGET_OBJECTS:libcaf_core_obj>)
......
...@@ -18,9 +18,9 @@ function(caf_io_set_default_properties) ...@@ -18,9 +18,9 @@ function(caf_io_set_default_properties)
caf_set_default_properties(${target}) caf_set_default_properties(${target})
target_compile_definitions(${target} PRIVATE libcaf_io_EXPORTS) target_compile_definitions(${target} PRIVATE libcaf_io_EXPORTS)
# Pull in public dependencies. # Pull in public dependencies.
target_link_libraries(${target} PUBLIC CAF::core) caf_target_link_libraries(${target} PUBLIC CAF::core)
if(MSVC) if(MSVC)
target_link_libraries(${target} PUBLIC ws2_32 iphlpapi) caf_target_link_libraries(${target} PUBLIC ws2_32 iphlpapi)
endif() endif()
endforeach() endforeach()
endfunction() endfunction()
...@@ -70,8 +70,6 @@ add_library(libcaf_io_obj OBJECT ${CAF_IO_HEADERS} ...@@ -70,8 +70,6 @@ add_library(libcaf_io_obj OBJECT ${CAF_IO_HEADERS}
src/policy/udp.cpp src/policy/udp.cpp
) )
set_property(TARGET libcaf_io_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
add_library(libcaf_io add_library(libcaf_io
"${PROJECT_SOURCE_DIR}/cmake/dummy.cpp" "${PROJECT_SOURCE_DIR}/cmake/dummy.cpp"
$<TARGET_OBJECTS:libcaf_io_obj>) $<TARGET_OBJECTS:libcaf_io_obj>)
......
...@@ -16,7 +16,7 @@ function(caf_openssl_set_default_properties) ...@@ -16,7 +16,7 @@ function(caf_openssl_set_default_properties)
caf_set_default_properties(${target}) caf_set_default_properties(${target})
target_compile_definitions(${target} PRIVATE libcaf_openssl_EXPORTS) target_compile_definitions(${target} PRIVATE libcaf_openssl_EXPORTS)
# Pull in public dependencies. # Pull in public dependencies.
target_link_libraries(${target} PUBLIC caf_target_link_libraries(${target} PUBLIC
CAF::core CAF::io OpenSSL::SSL OpenSSL::Crypto) CAF::core CAF::io OpenSSL::SSL OpenSSL::Crypto)
endforeach() endforeach()
endfunction() endfunction()
...@@ -31,8 +31,6 @@ add_library(libcaf_openssl_obj OBJECT ${CAF_OPENSSL_HEADERS} ...@@ -31,8 +31,6 @@ add_library(libcaf_openssl_obj OBJECT ${CAF_OPENSSL_HEADERS}
src/openssl/session.cpp src/openssl/session.cpp
) )
set_property(TARGET libcaf_openssl_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
add_library(libcaf_openssl add_library(libcaf_openssl
"${PROJECT_SOURCE_DIR}/cmake/dummy.cpp" "${PROJECT_SOURCE_DIR}/cmake/dummy.cpp"
$<TARGET_OBJECTS:libcaf_openssl_obj>) $<TARGET_OBJECTS:libcaf_openssl_obj>)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment