ソースを参照

Merge topic 'make-LINK_OPTIONS-position' into release-4.2

8fa4a4bf67 Makefiles: Position target-wide link flags consistently with other generators

Acked-by: Kitware Robot <[email protected]>
Merge-request: !11355
Brad King 1 ヶ月 前
コミット
d2800671d9

+ 5 - 3
Source/cmMakefileLibraryTargetGenerator.cxx

@@ -176,7 +176,6 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
   }
 
   std::string extraFlags;
-  this->GetTargetLinkFlags(extraFlags, linkLanguage);
   this->LocalGenerator->AppendTargetCreationLinkFlags(
     extraFlags, this->GeneratorTarget, linkLanguage);
   this->LocalGenerator->AddConfigVariableFlags(
@@ -195,6 +194,8 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
   this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
     extraFlags, this->GeneratorTarget, linkLanguage);
 
+  this->GetTargetLinkFlags(extraFlags, linkLanguage);
+
   this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
 }
 
@@ -214,7 +215,6 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
     cmStrCat("CMAKE_", linkLanguage, "_CREATE_SHARED_MODULE");
 
   std::string extraFlags;
-  this->GetTargetLinkFlags(extraFlags, linkLanguage);
   this->LocalGenerator->AppendTargetCreationLinkFlags(
     extraFlags, this->GeneratorTarget, linkLanguage);
   this->LocalGenerator->AddConfigVariableFlags(
@@ -233,6 +233,8 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
   this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
     extraFlags, this->GeneratorTarget, linkLanguage);
 
+  this->GetTargetLinkFlags(extraFlags, linkLanguage);
+
   this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
 }
 
@@ -244,12 +246,12 @@ void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
     cmStrCat("CMAKE_", linkLanguage, "_CREATE_MACOSX_FRAMEWORK");
 
   std::string extraFlags;
-  this->GetTargetLinkFlags(extraFlags, linkLanguage);
   this->LocalGenerator->AppendTargetCreationLinkFlags(
     extraFlags, this->GeneratorTarget, linkLanguage);
   this->LocalGenerator->AddConfigVariableFlags(
     extraFlags, "CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS", this->GeneratorTarget,
     cmBuildStep::Link, linkLanguage, this->GetConfigName());
+  this->GetTargetLinkFlags(extraFlags, linkLanguage);
 
   this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
 }

+ 2 - 1
Tests/RunCMake/CMakeLists.txt

@@ -1014,7 +1014,8 @@ add_RunCMake_test(target_link_libraries-LINKER-prefix -DCMAKE_SYSTEM_NAME=${CMAK
                                                       -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
                                                       -DCMAKE_C_COMPILER_FRONTEND_VARIANT=${CMAKE_C_COMPILER_FRONTEND_VARIANT})
 add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
-add_RunCMake_test(target_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
+add_RunCMake_test(target_link_options -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+                                      -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
                                       -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
 set_property(TEST RunCMake.target_link_options APPEND
   PROPERTY LABELS "CUDA")

+ 12 - 0
Tests/RunCMake/target_link_options/RunCMakeTest.cmake

@@ -32,6 +32,18 @@ if (NOT CMAKE_C_COMPILER_ID STREQUAL "Intel")
   run_cmake_target(LINK_OPTIONS exe LinkOptions_exe --config Release)
   run_cmake_target(LINK_OPTIONS dollar-option LinkOptions_dollar_exe --config Release)
 
+  if(CMAKE_SYSTEM_NAME MATCHES "(Linux|Darwin)" AND
+      RunCMake_GENERATOR MATCHES "(Ninja|Makefiles)")
+
+    run_cmake(position_LINK_OPTIONS)
+
+    run_cmake_target(position_LINK_OPTIONS shared LinkOptions_shared ${VERBOSE})
+    run_cmake_target(position_LINK_OPTIONS module LinkOptions_module ${VERBOSE})
+    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+      run_cmake_target(position_LINK_OPTIONS framework LinkOptions_framework ${VERBOSE})
+    endif()
+  endif()
+
   run_cmake(genex_LINK_LANGUAGE)
 
   run_cmake_target(genex_LINK_LANGUAGE interface LinkOptions_shared_interface --config Release)

+ 4 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS-framework-check.cmake

@@ -0,0 +1,4 @@
+
+if (NOT actual_stdout MATCHES "BADFLAG_GLOBAL(\.[a-z]+)? +(-)?BADFLAG_PRIVATE")
+  set (RunCMake_TEST_FAILED "options order is not respected.")
+endif()

+ 1 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS-framework-result.txt

@@ -0,0 +1 @@
+.*

+ 4 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS-module-check.cmake

@@ -0,0 +1,4 @@
+
+if (NOT actual_stdout MATCHES "BADFLAG_GLOBAL(\.[a-z]+)? +(-)?BADFLAG_PRIVATE")
+  set (RunCMake_TEST_FAILED "options order is not respected.")
+endif()

+ 1 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS-module-result.txt

@@ -0,0 +1 @@
+.*

+ 4 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS-shared-check.cmake

@@ -0,0 +1,4 @@
+
+if (NOT actual_stdout MATCHES "BADFLAG_GLOBAL(\.[a-z]+)? +(-)?BADFLAG_PRIVATE")
+  set (RunCMake_TEST_FAILED "options order is not respected.")
+endif()

+ 1 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS-shared-result.txt

@@ -0,0 +1 @@
+.*

+ 28 - 0
Tests/RunCMake/target_link_options/position_LINK_OPTIONS.cmake

@@ -0,0 +1,28 @@
+
+enable_language(C)
+
+set(obj "${CMAKE_C_OUTPUT_EXTENSION}")
+if(BORLAND)
+  set(pre -)
+endif()
+
+set(CMAKE_VERBOSE_MAKEFILE TRUE)
+set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES FALSE)
+
+# shared configuration
+string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${pre}BADFLAG_GLOBAL${obj}")
+add_library(LinkOptions_shared SHARED LinkOptionsLib.c)
+target_link_options(LinkOptions_shared PRIVATE ${pre}BADFLAG_PRIVATE${obj})
+
+# module configuration
+string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${pre}BADFLAG_GLOBAL${obj}")
+add_library(LinkOptions_module MODULE LinkOptionsLib.c)
+target_link_options(LinkOptions_module PRIVATE ${pre}BADFLAG_PRIVATE${obj})
+
+if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+  # framework configuration
+  string(APPEND CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS " ${pre}BADFLAG_GLOBAL${obj}")
+  add_library(LinkOptions_framework SHARED LinkOptionsLib.c)
+  set_property(TARGET LinkOptions_framework PROPERTY FRAMEWORK TRUE)
+  target_link_options(LinkOptions_framework PRIVATE ${pre}BADFLAG_PRIVATE${obj})
+endif()