11include (CheckCXXCompilerFlag )
2+ include (CheckLinkerFlag )
23
34option (MSVC_LINK_DYNAMIC_RUNTIME "Link against dynamic runtime" ON )
45option (MSVC_PARALLELBUILD "Use flag /MP" ON )
@@ -9,12 +10,22 @@ set(CMAKE_CXX_FLAGS_CLANG_ASAN_O2 "-fsanitize=address,undefined -fno-omit-frame-
910# add compiler flag, if not already present
1011macro (add_compiler_flag flag supportsFlag )
1112 check_cxx_compiler_flag (${flag} ${supportsFlag} )
12-
1313 if (${supportsFlag} AND NOT "${CMAKE_CXX_FLAGS} " MATCHES "${flag} " )
1414 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag} " )
1515 endif ()
1616endmacro ()
1717
18+ # add linker flag for shared libs and exe, if not already present
19+ macro (add_linker_flag flag supportsFlag )
20+ check_linker_flag (CXX ${flag} ${supportsFlag} )
21+ if (${supportsFlag} AND NOT "${CMAKE_SHARED_LINKER_FLAGS} " MATCHES "${flag} " )
22+ set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${flag} " )
23+ endif ()
24+ if (${supportsFlag} AND NOT "${CMAKE_EXE_LINKER_FLAGS} " MATCHES "${flag} " )
25+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag} " )
26+ endif ()
27+ endmacro ()
28+
1829# use CXX 17, disable gnu extensions
1930set (CMAKE_CXX_STANDARD 17)
2031set (CMAKE_CXX_EXTENSIONS FALSE )
@@ -95,6 +106,9 @@ else()
95106 # build shared libs always
96107 set (BUILD_SHARED_LIBS ON )
97108
109+ # do not optimize away seemingly unused libs, they might contain dynamic registration of builders
110+ add_linker_flag ("-Wl,--no-as-needed" supportsNoAsNeeded )
111+
98112 # link against dynamic boost libraries
99113 add_definitions (-DBOOST_ALL_DYN_LINK )
100114 add_definitions (-DBOOST_TEST_DYN_LINK )
0 commit comments