From: Rafael Kitover Date: Tue, 7 Jun 2022 07:37:10 +0000 (+0000) Subject: feat: Generalize STATIC_LINK option + fixes (#1058) X-Git-Tag: v4.7~207 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=40117091f7cdf6d3fc0a5733619ed465a755e7e2;p=thirdparty%2Fccache.git feat: Generalize STATIC_LINK option + fixes (#1058) --- diff --git a/CMakeLists.txt b/CMakeLists.txt index c7d31bb56..c54c4f01a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,12 +83,27 @@ include(GenerateVersionFile) # Static link configuration # -if(WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "GNU") - option(STATIC_LINK "Link statically with system libraries" ON) +set(STATIC_LINK_DEFAULT OFF) +if(WIN32) + set(STATIC_LINK_DEFAULT ON) endif() -if(MSVC AND STATIC_LINK) - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +option(STATIC_LINK "Prefer linking libraries statically" ${STATIC_LINK_DEFAULT}) + +if(STATIC_LINK) + list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 "${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(CMAKE_LINK_SEARCH_START_STATIC ON) + + # Link MSVC runtime statically. + if(MSVC) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + # Link MINGW runtime statically. + elseif(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) + list(APPEND CCACHE_EXTRA_LIBS -static-libgcc -static-libstdc++ -static -lwinpthread -dynamic) + # Link WIN32 clang libs statically. + elseif(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + list(APPEND CCACHE_EXTRA_LIBS -Wl,-Bstatic -lc++ -lunwind -Wl,-Bdynamic) + endif() endif() # diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 161f127bd..dcb399fa6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -44,17 +44,14 @@ endif() add_library(ccache_framework STATIC ${source_files}) if(WIN32) - target_link_libraries(ccache_framework PRIVATE "psapi") + list(APPEND CCACHE_EXTRA_LIBS psapi ws2_32) +endif() - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - if(STATIC_LINK) - target_link_libraries(ccache_framework PRIVATE -static-libgcc -static-libstdc++ -static winpthread -dynamic) - else() - target_link_libraries(ccache_framework PRIVATE winpthread) - endif() - elseif(STATIC_LINK AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_link_libraries(ccache_framework PRIVATE -static c++ -dynamic) - endif() +if(CCACHE_EXTRA_LIBS) + target_link_libraries( + ccache_framework + PRIVATE "${CCACHE_EXTRA_LIBS}" + ) endif() set(THREADS_PREFER_PTHREAD_FLAG ON)