]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
feat: Generalize STATIC_LINK option + fixes (#1058)
authorRafael Kitover <rkitover@gmail.com>
Tue, 7 Jun 2022 07:37:10 +0000 (07:37 +0000)
committerGitHub <noreply@github.com>
Tue, 7 Jun 2022 07:37:10 +0000 (09:37 +0200)
CMakeLists.txt
src/CMakeLists.txt

index c7d31bb56e118b17b9d645a239c5bbea54afa635..c54c4f01adf9dbb3cc338d5b33115bf296791a03 100644 (file)
@@ -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$<$<CONFIG:Debug>: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$<$<CONFIG:Debug>: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()
 
 #
index 161f127bd646001c2bacf44e76f849293c660e9a..dcb399fa6af6ce41faec4a21f5fc5fb5d43d090a 100644 (file)
@@ -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)