diff options
-rw-r--r-- | CMakeLists.txt | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index a2838f9..8d3a6c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,30 +7,44 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) endif() get_directory_property(parent_directory PARENT_DIRECTORY) -set(is_root $<NOT:parent_directory>) +set(is_root_project $<NOT:parent_directory>) + +function(use_static_runtime_msvc target) + target_compile_options(${target} PRIVATE + $<$<CONFIG:Debug>:/MTd> + $<$<CONFIG:Release>:/MT>) +endfunction() + +function(use_static_runtime_gcc target) + get_target_property(type ${target} TYPE) + if(type STREQUAL EXECUTABLE) + target_link_libraries(${target} PRIVATE -static) + endif() +endfunction() function(use_static_runtime target) - if(TARGET ${target} AND is_root) - if(MSVC) - target_compile_options(${target} PRIVATE - $<$<CONFIG:Release>:/MT> - $<$<CONFIG:Debug>:/MTd>) - elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - get_target_property(type ${target} TYPE) - if(type STREQUAL EXECUTABLE) - target_link_libraries(${target} PRIVATE -static) - endif() - endif() + if(MSVC) + use_static_runtime_msvc(${target}) + elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + use_static_runtime_gcc(${target}) + endif() +endfunction() + +function(strip_symbol_table_gcc target) + target_link_libraries(${target} PRIVATE $<$<CONFIG:Release>:-s>) +endfunction() + +function(strip_symbol_table target) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + strip_symbol_table_gcc(${target}) endif() endfunction() macro(add_executable target) _add_executable(${ARGV}) - if(TARGET ${target}) + if(TARGET ${target} AND is_root_project) use_static_runtime(${target}) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - target_link_libraries(${target} PRIVATE $<$<CONFIG:Release>:-s>) - endif() + strip_symbol_table(${target}) endif() endmacro() @@ -53,7 +67,9 @@ use_static_runtime(libaes) if(MSVC) target_compile_definitions(libaes PRIVATE _CRT_SECURE_NO_WARNINGS) -elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) target_compile_options(libaes PUBLIC -mssse3 -maes) endif() |