Browse Source

ObjC: Add _COMPILE_LAUNCHER support

Fixes: #20178
Cristian Adam 6 years ago
parent
commit
a05b9d4239

+ 1 - 1
Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst

@@ -2,7 +2,7 @@
 ------------------------
 ------------------------
 
 
 This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
 This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
-``Fortran``, or ``CUDA``.
+``Fortran``, ``OBJC``, ``OBJCXX``, or ``CUDA``.
 
 
 Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
 Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
 for a compiler launching tool. The :ref:`Makefile Generators` and the
 for a compiler launching tool. The :ref:`Makefile Generators` and the

+ 1 - 1
Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst

@@ -4,4 +4,4 @@ CMAKE_<LANG>_COMPILER_LAUNCHER
 Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
 Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
 This variable is used to initialize the property on each target as it is
 This variable is used to initialize the property on each target as it is
 created.  This is done only when ``<LANG>`` is ``C``, ``CXX``, ``Fortran``,
 created.  This is done only when ``<LANG>`` is ``C``, ``CXX``, ``Fortran``,
-or ``CUDA``.
+``OBJC``, ``OBJCXX``, or ``CUDA``.

+ 2 - 2
Source/cmMakefileTargetGenerator.cxx

@@ -733,8 +733,8 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(
     // See if we need to use a compiler launcher like ccache or distcc
     // See if we need to use a compiler launcher like ccache or distcc
     std::string compilerLauncher;
     std::string compilerLauncher;
     if (!compileCommands.empty() &&
     if (!compileCommands.empty() &&
-        (lang == "C" || lang == "CXX" || lang == "Fortran" ||
-         lang == "CUDA")) {
+        (lang == "C" || lang == "CXX" || lang == "Fortran" || lang == "CUDA" ||
+         lang == "OBJC" || lang == "OBJCXX")) {
       std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
       std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
       const char* clauncher =
       const char* clauncher =
         this->GeneratorTarget->GetProperty(clauncher_prop);
         this->GeneratorTarget->GetProperty(clauncher_prop);

+ 2 - 1
Source/cmNinjaTargetGenerator.cxx

@@ -702,7 +702,8 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang)
   // See if we need to use a compiler launcher like ccache or distcc
   // See if we need to use a compiler launcher like ccache or distcc
   std::string compilerLauncher;
   std::string compilerLauncher;
   if (!compileCmds.empty() &&
   if (!compileCmds.empty() &&
-      (lang == "C" || lang == "CXX" || lang == "Fortran" || lang == "CUDA")) {
+      (lang == "C" || lang == "CXX" || lang == "Fortran" || lang == "CUDA" ||
+       lang == "OBJC" || lang == "OBJCXX")) {
     std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
     std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
     const char* clauncher = this->GeneratorTarget->GetProperty(clauncher_prop);
     const char* clauncher = this->GeneratorTarget->GetProperty(clauncher_prop);
     if (clauncher && *clauncher) {
     if (clauncher && *clauncher) {

+ 2 - 0
Source/cmTarget.cxx

@@ -333,6 +333,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
     initProp("C_STANDARD");
     initProp("C_STANDARD");
     initProp("C_STANDARD_REQUIRED");
     initProp("C_STANDARD_REQUIRED");
     initProp("C_EXTENSIONS");
     initProp("C_EXTENSIONS");
+    initProp("OBJC_COMPILER_LAUNCHER");
     initProp("OBJC_STANDARD");
     initProp("OBJC_STANDARD");
     initProp("OBJC_STANDARD_REQUIRED");
     initProp("OBJC_STANDARD_REQUIRED");
     initProp("OBJC_EXTENSIONS");
     initProp("OBJC_EXTENSIONS");
@@ -344,6 +345,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
     initProp("CXX_STANDARD");
     initProp("CXX_STANDARD");
     initProp("CXX_STANDARD_REQUIRED");
     initProp("CXX_STANDARD_REQUIRED");
     initProp("CXX_EXTENSIONS");
     initProp("CXX_EXTENSIONS");
+    initProp("OBJCXX_COMPILER_LAUNCHER");
     initProp("OBJCXX_STANDARD");
     initProp("OBJCXX_STANDARD");
     initProp("OBJCXX_STANDARD_REQUIRED");
     initProp("OBJCXX_STANDARD_REQUIRED");
     initProp("OBJCXX_EXTENSIONS");
     initProp("OBJCXX_EXTENSIONS");

+ 3 - 0
Tests/RunCMake/CMakeLists.txt

@@ -530,6 +530,9 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
   if(CMAKE_Fortran_COMPILER)
   if(CMAKE_Fortran_COMPILER)
     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_Fortran=1)
     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_Fortran=1)
   endif()
   endif()
+  if (APPLE AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
+    list(APPEND CompilerLauncher_ARGS -DCMake_TEST_OBJC=1)
+  endif()
   add_RunCMake_test(CompilerLauncher)
   add_RunCMake_test(CompilerLauncher)
   add_RunCMake_test(ctest_labels_for_subprojects)
   add_RunCMake_test(ctest_labels_for_subprojects)
 endif()
 endif()

+ 1 - 0
Tests/RunCMake/CompilerLauncher/OBJC-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 1 - 0
Tests/RunCMake/CompilerLauncher/OBJC-launch-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 3 - 0
Tests/RunCMake/CompilerLauncher/OBJC-launch.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(OBJC.cmake)

+ 4 - 0
Tests/RunCMake/CompilerLauncher/OBJC.cmake

@@ -0,0 +1,4 @@
+enable_language(OBJC)
+set(CMAKE_OBJC_COMPILER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1")
+set(CMAKE_VERBOSE_MAKEFILE TRUE)
+add_executable(main main.m)

+ 1 - 0
Tests/RunCMake/CompilerLauncher/OBJCXX-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 1 - 0
Tests/RunCMake/CompilerLauncher/OBJCXX-launch-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 3 - 0
Tests/RunCMake/CompilerLauncher/OBJCXX-launch.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(OBJCXX.cmake)

+ 4 - 0
Tests/RunCMake/CompilerLauncher/OBJCXX.cmake

@@ -0,0 +1,4 @@
+enable_language(OBJCXX)
+set(CMAKE_OBJCXX_COMPILER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1")
+set(CMAKE_VERBOSE_MAKEFILE TRUE)
+add_executable(main main.mm)

+ 3 - 0
Tests/RunCMake/CompilerLauncher/RunCMakeTest.cmake

@@ -22,6 +22,9 @@ endif()
 if(CMake_TEST_Fortran)
 if(CMake_TEST_Fortran)
   list(APPEND langs Fortran)
   list(APPEND langs Fortran)
 endif()
 endif()
+if(CMake_TEST_OBJC)
+  list(APPEND langs OBJC OBJCXX)
+endif()
 
 
 foreach(lang ${langs})
 foreach(lang ${langs})
   run_compiler_launcher(${lang})
   run_compiler_launcher(${lang})

+ 4 - 0
Tests/RunCMake/CompilerLauncher/main.m

@@ -0,0 +1,4 @@
+int main(void)
+{
+  return 0;
+}

+ 4 - 0
Tests/RunCMake/CompilerLauncher/main.mm

@@ -0,0 +1,4 @@
+int main()
+{
+  return 0;
+}