summaryrefslogtreecommitdiffstats
path: root/Modules/Platform
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@gmail.com>2022-03-02 16:32:44 (GMT)
committerMarc Chevrier <marc.chevrier@gmail.com>2022-03-05 11:40:26 (GMT)
commitb0fada9964589462127cfcc45f1c6f003c349ebc (patch)
tree597e818443e62c71b0ce178dab32c3d310159d80 /Modules/Platform
parenta950fd9553cc4a9457bbe701399fce09ed360151 (diff)
downloadCMake-b0fada9964589462127cfcc45f1c6f003c349ebc.zip
CMake-b0fada9964589462127cfcc45f1c6f003c349ebc.tar.gz
CMake-b0fada9964589462127cfcc45f1c6f003c349ebc.tar.bz2
Genex-LINK_GROUP: Add feature RESCAN
Feature RESCAN can be used to manage circular references between static libraries.
Diffstat (limited to 'Modules/Platform')
-rw-r--r--Modules/Platform/Linux.cmake8
-rw-r--r--Modules/Platform/SunOS.cmake10
-rw-r--r--Modules/Platform/Windows-GNU.cmake8
3 files changed, 26 insertions, 0 deletions
diff --git a/Modules/Platform/Linux.cmake b/Modules/Platform/Linux.cmake
index b5d5464..95102e1 100644
--- a/Modules/Platform/Linux.cmake
+++ b/Modules/Platform/Linux.cmake
@@ -19,6 +19,14 @@ foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
set(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic")
endforeach()
+
+# Features for LINK_GROUP generator expression
+## RESCAN: request the linker to rescan static libraries until there is
+## no pending undefined symbols
+set(CMAKE_LINK_GROUP_USING_RESCAN "LINKER:--start-group" "LINKER:--end-group")
+set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED TRUE)
+
+
# Debian policy requires that shared libraries be installed without
# executable permission. Fedora policy requires that shared libraries
# be installed with the executable permission. Since the native tools
diff --git a/Modules/Platform/SunOS.cmake b/Modules/Platform/SunOS.cmake
index 78eccf7..e01e892 100644
--- a/Modules/Platform/SunOS.cmake
+++ b/Modules/Platform/SunOS.cmake
@@ -7,6 +7,16 @@ if(CMAKE_SYSTEM MATCHES "SunOS-4")
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
endif()
+
+# Features for LINK_GROUP generator expression
+if (CMAKE_SYSTEM_VERSION VERSION_GREATER "5.9")
+ ## RESCAN: request the linker to rescan static libraries until there is
+ ## no pending undefined symbols
+ set(CMAKE_LINK_GROUP_USING_RESCAN "LINKER:-z,rescan-start" "LINKER:-z,rescan-end")
+ set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED TRUE)
+endif()
+
+
include(Platform/UnixPaths)
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
diff --git a/Modules/Platform/Windows-GNU.cmake b/Modules/Platform/Windows-GNU.cmake
index 51dc146..3c24c21 100644
--- a/Modules/Platform/Windows-GNU.cmake
+++ b/Modules/Platform/Windows-GNU.cmake
@@ -44,6 +44,14 @@ if("${_help}" MATCHES "GNU ld .* 2\\.1[1-6]")
set(__WINDOWS_GNU_LD_RESPONSE 0)
endif()
+
+# Features for LINK_GROUP generator expression
+## RESCAN: request the linker to rescan static libraries until there is
+## no pending undefined symbols
+set(CMAKE_LINK_GROUP_USING_RESCAN "LINKER:--start-group" "LINKER:--end-group")
+set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED TRUE)
+
+
macro(__windows_compiler_gnu lang)
# Create archiving rules to support large object file lists for static libraries.