소스 검색

Genex-LINK_GROUP: Add support feature RESCAN on BSD systems

Marc Chevrier 3 년 전
부모
커밋
d658332782

+ 3 - 2
Help/release/dev/rescan-static-libraries.rst

@@ -1,5 +1,6 @@
 rescan-static-libraries
 -----------------------
 
-* The :genex:`LINK_GROUP` generator expression gained the ability to manage
-  circular references between static libraries by using ``RESCAN`` feature.
+* The :genex:`LINK_GROUP` generator expression gained the ability to manage, on
+  ``Linux`` and ``BSD`` systems, circular references between static libraries
+  by using ``RESCAN`` feature.

+ 4 - 4
Help/variable/LINK_GROUP_PREDEFINED_FEATURES.txt

@@ -15,8 +15,8 @@ static libraries, the following feature can be used:
   ``-z rescan-start`` and ``-z rescan-end``).
 
   Using this feature has a significant performance cost. It is best to use it
-  only when there are unavoidable circular references between two or more static
-  libraries.
+  only when there are unavoidable circular references between two or more
+  static libraries.
 
-  This feature is available on ``Linux`` and ``SunOS`` platforms as well as
-  ``Windows`` when ``GNU`` toolchain is used.
+  This feature is available on ``Linux``, ``BSD``, and ``SunOS`` target
+  platforms as well as ``Windows`` when ``GNU`` toolchain is used.

+ 7 - 0
Modules/Platform/FreeBSD.cmake

@@ -53,4 +53,11 @@ endif()
 set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE)
 
 
+# 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)
+
+
 include(Platform/UnixPaths)

+ 7 - 0
Modules/Platform/NetBSD.cmake

@@ -39,4 +39,11 @@ endif()
 set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE)
 
 
+# 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)
+
+
 include(Platform/UnixPaths)

+ 1 - 1
Tests/RunCMake/target_link_libraries-LINK_GROUP/RunCMakeTest.cmake

@@ -63,7 +63,7 @@ if ((RunCMake_GENERATOR MATCHES "Makefiles|Ninja|Xcode"
 endif()
 
 # Feature RESCAN
-if (CMAKE_SYSTEM_NAME STREQUAL "Linux"
+if (CMAKE_SYSTEM_NAME MATCHES "Linux|BSD"
     OR (CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND (NOT CMAKE_C_COMPILER_ID STREQUAL "SunPro" OR CMAKE_C_COMPILER_VERSION VERSION_GREATER "5.9"))
     OR (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "GNU"))
   run_cmake(rescan)