Explorar el Código

cxxmodules: support new round of Clang patches

These patches now support the `-MF` output, so remove the `none` support
added just for the old patchset which did not use it.

Also update the flag name to `-fmodule-output=`.

Due to the new Clang module mapper flag, use a new experimental support
UUID as well.
Ben Boeckel hace 3 años
padre
commit
e84fcbcb0b

+ 4 - 3
.gitlab/ci/cxx_modules_rules_clang.cmake

@@ -3,11 +3,12 @@ set(CMake_TEST_CXXModules_UUID "a246741c-d067-4019-a8fb-3d16b0c9d1d3")
 set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
 set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
 string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE
 string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE
   "${CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS}"
   "${CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS}"
-  " -format=p1689 --p1689-targeted-file-name=<SOURCE> --p1689-targeted-output=<OBJECT> --"
+  " -format=p1689 --p1689-targeted-file-name=<SOURCE> --p1689-targeted-output=<OBJECT> "
+  " --p1689-makeformat-output=<DEP_FILE>"
+  " --"
   " <DEFINES> <INCLUDES> <FLAGS> -x c++ <SOURCE>"
   " <DEFINES> <INCLUDES> <FLAGS> -x c++ <SOURCE>"
+  " -MT <DYNDEP_FILE> -MD"
   " > <DYNDEP_FILE>")
   " > <DYNDEP_FILE>")
-# No support for `-MF` discovered dependencies in `clang-scan-deps`.
-set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_DEPFILE_FORMAT "none")
 set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "clang")
 set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "clang")
 set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG "@<MODULE_MAP_FILE>")
 set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG "@<MODULE_MAP_FILE>")
 
 

+ 1 - 1
Help/dev/experimental.rst

@@ -18,7 +18,7 @@ C++20 Module APIs
 =================
 =================
 
 
 Variable: ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
 Variable: ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
-Value: ``9629ab6c-6c0e-423f-bb9d-cc5ac4a22041``
+Value: ``2182bf5c-ef0d-489a-91da-49dbc3090d2a``
 
 
 In order to support C++20 modules, there are a number of behaviors that have
 In order to support C++20 modules, there are a number of behaviors that have
 CMake APIs to provide the required features to build and export them from a
 CMake APIs to provide the required features to build and export them from a

+ 1 - 1
Source/cmCxxModuleMapper.cxx

@@ -47,7 +47,7 @@ std::string CxxModuleMapContentClang(CxxModuleLocations const& loc,
       // extension.
       // extension.
       mm << "-x c++-module\n";
       mm << "-x c++-module\n";
 
 
-      mm << "-fsave-std-c++-module-file=" << *bmi_loc << '\n';
+      mm << "-fmodule-output=" << *bmi_loc << '\n';
       break;
       break;
     }
     }
   }
   }

+ 1 - 1
Source/cmExperimental.cxx

@@ -27,7 +27,7 @@ struct FeatureData
   bool Warned;
   bool Warned;
 } LookupTable[] = {
 } LookupTable[] = {
   // CxxModuleCMakeApi
   // CxxModuleCMakeApi
-  { "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041",
+  { "2182bf5c-ef0d-489a-91da-49dbc3090d2a",
     "CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API",
     "CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API",
     "CMake's C++ module support is experimental. It is meant only for "
     "CMake's C++ module support is experimental. It is meant only for "
     "experimentation and feedback to CMake developers.",
     "experimentation and feedback to CMake developers.",

+ 0 - 3
Source/cmNinjaTargetGenerator.cxx

@@ -562,9 +562,6 @@ cmNinjaRule GetScanRule(
   if (deptype == "msvc"_s) {
   if (deptype == "msvc"_s) {
     rule.DepType = deptype;
     rule.DepType = deptype;
     rule.DepFile.clear();
     rule.DepFile.clear();
-  } else if (deptype == "none"_s) {
-    rule.DepType.clear(); // no deps= for multiple outputs
-    rule.DepFile.clear();
   } else {
   } else {
     rule.DepType.clear(); // no deps= for multiple outputs
     rule.DepType.clear(); // no deps= for multiple outputs
     rule.DepFile = "$DEP_FILE";
     rule.DepFile = "$DEP_FILE";

+ 1 - 1
Tests/RunCMake/CXXModules/CMakeLists.txt

@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.23)
 cmake_minimum_required(VERSION 3.23)
 project(${RunCMake_TEST} NONE)
 project(${RunCMake_TEST} NONE)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 include(${RunCMake_TEST}.cmake)
 include(${RunCMake_TEST}.cmake)

+ 1 - 1
Tests/RunCMake/CXXModules/examples/cxx-modules-rules.cmake

@@ -1,4 +1,4 @@
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 if (NOT EXISTS "${CMake_TEST_MODULE_COMPILATION_RULES}")
 if (NOT EXISTS "${CMake_TEST_MODULE_COMPILATION_RULES}")
   message(FATAL_ERROR
   message(FATAL_ERROR

+ 1 - 1
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/test/CMakeLists.txt

@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.24)
 cmake_minimum_required(VERSION 3.24)
 project(cxx_modules_library NONE)
 project(cxx_modules_library NONE)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 find_package(export_bmi_and_interfaces REQUIRED)
 find_package(export_bmi_and_interfaces REQUIRED)
 
 

+ 1 - 1
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/test/CMakeLists.txt

@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.24)
 cmake_minimum_required(VERSION 3.24)
 project(cxx_modules_library NONE)
 project(cxx_modules_library NONE)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 find_package(export_bmi_and_interfaces REQUIRED)
 find_package(export_bmi_and_interfaces REQUIRED)
 
 

+ 1 - 1
Tests/RunCMake/CXXModules/examples/export-interface-build/test/CMakeLists.txt

@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.24)
 cmake_minimum_required(VERSION 3.24)
 project(cxx_modules_library NONE)
 project(cxx_modules_library NONE)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 find_package(export_interfaces REQUIRED)
 find_package(export_interfaces REQUIRED)
 
 

+ 1 - 1
Tests/RunCMake/CXXModules/examples/export-interface-install/test/CMakeLists.txt

@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.24)
 cmake_minimum_required(VERSION 3.24)
 project(cxx_modules_library NONE)
 project(cxx_modules_library NONE)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 find_package(export_interfaces REQUIRED)
 find_package(export_interfaces REQUIRED)
 
 

+ 1 - 1
Tests/RunCMake/target_sources/FileSetDefaultWrongTypeExperimental.cmake

@@ -1,6 +1,6 @@
 enable_language(C)
 enable_language(C)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 add_library(lib1 STATIC empty.c)
 add_library(lib1 STATIC empty.c)
 target_sources(lib1 PRIVATE FILE_SET UNKNOWN)
 target_sources(lib1 PRIVATE FILE_SET UNKNOWN)

+ 1 - 1
Tests/RunCMake/target_sources/FileSetWrongTypeExperimental.cmake

@@ -1,6 +1,6 @@
 enable_language(C)
 enable_language(C)
 
 
-set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "9629ab6c-6c0e-423f-bb9d-cc5ac4a22041")
+set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
 
 
 add_library(lib1 STATIC empty.c)
 add_library(lib1 STATIC empty.c)
 target_sources(lib1 PRIVATE FILE_SET a TYPE UNKNOWN)
 target_sources(lib1 PRIVATE FILE_SET a TYPE UNKNOWN)