From 6dd4c08d4b0d3fcb7ccd82671e5ee92eadc92b03 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Tue, 21 Dec 2021 09:48:39 +0000 Subject: [PATCH] CMake: Make -static-libstdc++ configurable --- CMake/Platforms.cmake | 3 +-- CMake/platforms/haiku.cmake | 3 +++ CMake/platforms/vita.cmake | 1 + CMakeLists.txt | 3 +++ Source/CMakeLists.txt | 5 +++-- 5 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 CMake/platforms/haiku.cmake diff --git a/CMake/Platforms.cmake b/CMake/Platforms.cmake index 9db6ba0e4..077c75da1 100644 --- a/CMake/Platforms.cmake +++ b/CMake/Platforms.cmake @@ -5,8 +5,7 @@ if(WIN32) endif() if(HAIKU) - set(ASAN OFF) - set(UBSAN OFF) + include(platforms/haiku) endif() if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD|OpenBSD|DragonFly|NetBSD") diff --git a/CMake/platforms/haiku.cmake b/CMake/platforms/haiku.cmake new file mode 100644 index 000000000..a4ee673cc --- /dev/null +++ b/CMake/platforms/haiku.cmake @@ -0,0 +1,3 @@ +set(ASAN OFF) +set(UBSAN OFF) +set(DEVILUTIONX_STATIC_CXX_STDLIB OFF) diff --git a/CMake/platforms/vita.cmake b/CMake/platforms/vita.cmake index 0b690f783..e9614222b 100644 --- a/CMake/platforms/vita.cmake +++ b/CMake/platforms/vita.cmake @@ -1,5 +1,6 @@ set(ASAN OFF) set(UBSAN OFF) +set(DEVILUTIONX_STATIC_CXX_STDLIB OFF) set(BUILD_TESTING OFF) set(DISABLE_ZERO_TIER ON) set(PREFILL_PLAYER_NAME ON) diff --git a/CMakeLists.txt b/CMakeLists.txt index c356d09ba..5aa1737bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ cmake_dependent_option(PIE "Generate position-independent code" OFF "BUILD_TESTI option(MACOSX_STANDALONE_APP_BUNDLE "Generate a portable app bundle to use on other devices (requires sudo)" OFF) option(USE_SDL1 "Use SDL1.2 instead of SDL2" OFF) option(NONET "Disable network support" OFF) +RELEASE_OPTION(DEVILUTIONX_STATIC_CXX_STDLIB "Link C++ standard library statically (if available)") cmake_dependent_option(DISABLE_TCP "Disable TCP multiplayer option" OFF "NOT NONET" ON) cmake_dependent_option(DISABLE_ZERO_TIER "Disable ZeroTier multiplayer option" OFF "NOT NONET" ON) cmake_dependent_option(PACKET_ENCRYPTION "Encrypt network packets" ON "NOT NONET" OFF) @@ -169,6 +170,8 @@ if(NOT DISABLE_LTO) endif() if(GPERF) + set(DEVILUTIONX_STATIC_CXX_STDLIB OFF) + if(GPERF_HEAP_FIRST_GAME_ITERATION) set(GPERF_HEAP_MAIN ON) endif() diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 9b9ab5bdb..8fd2b26f5 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -363,8 +363,9 @@ if(GPERF) target_link_libraries(libdevilutionx PUBLIC ${GPERFTOOLS_LIBRARIES}) endif() -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND NOT GPERF AND NOT HAIKU AND NOT VITA) - target_link_libraries(libdevilutionx PUBLIC "$<$>:-static-libgcc;-static-libstdc++>") +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + genex_for_option(DEVILUTIONX_STATIC_CXX_STDLIB) + target_link_libraries(libdevilutionx PUBLIC $<${DEVILUTIONX_STATIC_CXX_STDLIB_GENEX}:-static-libgcc;-static-libstdc++>) endif() if(WIN32)