[libcxx-commits] [libcxx] [libcxx] modules: compile library interface object files of `std` and `std.compat` modules into `libc++experimental.a` (PR #85832)

Jan Kokemüller via libcxx-commits libcxx-commits at lists.llvm.org
Tue Mar 19 10:50:56 PDT 2024


https://github.com/jiixyj updated https://github.com/llvm/llvm-project/pull/85832

>From 51293ece4ca7e587715e58d065686f4c2baabb89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Kokem=C3=BCller?= <jan.kokemueller at gmail.com>
Date: Sat, 24 Feb 2024 18:41:14 +0100
Subject: [PATCH 1/2] compile .cppm modules into libc++experimental.a

---
 libcxx/modules/CMakeLists.txt | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/libcxx/modules/CMakeLists.txt b/libcxx/modules/CMakeLists.txt
index 0dea8cfca94ac3..60a20b7a9dd114 100644
--- a/libcxx/modules/CMakeLists.txt
+++ b/libcxx/modules/CMakeLists.txt
@@ -211,7 +211,7 @@ file(RELATIVE_PATH LIBCXX_MODULE_RELATIVE_PATH
   ${CMAKE_INSTALL_PREFIX}/${LIBCXX_INSTALL_MODULES_DIR})
 configure_file(
   "modules.json.in"
-  "${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
+  "${LIBCXX_LIBRARY_DIR}/libc++experimental.modules.json"
   @ONLY
 )
 
@@ -229,6 +229,23 @@ if (LIBCXX_INSTALL_MODULES)
     )
   endforeach()
 
+  # Build the "library interface object files" as part of the library artifact.
+  # For now, this adds just the module initializer symbols for modules "std"
+  # and "std.compat".
+  target_sources(cxx_experimental PUBLIC FILE_SET CXX_MODULES
+    BASE_DIRS
+      "${LIBCXX_GENERATED_MODULE_DIR}"
+    FILES
+      "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
+      "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
+  )
+  set_source_files_properties(
+      "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
+      "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
+    TARGET_DIRECTORY cxx_experimental
+    PROPERTIES COMPILE_OPTIONS "-U_LIBCPP_BUILDING_LIBRARY;-Wno-reserved-module-identifier")
+  add_dependencies(cxx_experimental generate-cxx-modules)
+
   # Install the generated module files.
   install(FILES
       "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
@@ -240,7 +257,7 @@ if (LIBCXX_INSTALL_MODULES)
 
   # Install the module manifest.
   install(FILES
-      "${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
+      "${LIBCXX_LIBRARY_DIR}/libc++experimental.modules.json"
     DESTINATION "${LIBCXX_INSTALL_LIBRARY_DIR}"
     COMPONENT cxx-modules
     PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ

>From e2b55a46addd125c012bbb29545c82fcc58e8d34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Kokem=C3=BCller?= <jan.kokemueller at gmail.com>
Date: Tue, 19 Mar 2024 18:50:44 +0100
Subject: [PATCH 2/2] guard new code behind CMake version check

---
 libcxx/modules/CMakeLists.txt | 36 +++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/libcxx/modules/CMakeLists.txt b/libcxx/modules/CMakeLists.txt
index 60a20b7a9dd114..44f6ae420fbc04 100644
--- a/libcxx/modules/CMakeLists.txt
+++ b/libcxx/modules/CMakeLists.txt
@@ -229,22 +229,26 @@ if (LIBCXX_INSTALL_MODULES)
     )
   endforeach()
 
-  # Build the "library interface object files" as part of the library artifact.
-  # For now, this adds just the module initializer symbols for modules "std"
-  # and "std.compat".
-  target_sources(cxx_experimental PUBLIC FILE_SET CXX_MODULES
-    BASE_DIRS
-      "${LIBCXX_GENERATED_MODULE_DIR}"
-    FILES
-      "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
-      "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
-  )
-  set_source_files_properties(
-      "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
-      "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
-    TARGET_DIRECTORY cxx_experimental
-    PROPERTIES COMPILE_OPTIONS "-U_LIBCPP_BUILDING_LIBRARY;-Wno-reserved-module-identifier")
-  add_dependencies(cxx_experimental generate-cxx-modules)
+  if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.28.0")
+    # Build the "library interface object files" as part of the library artifact.
+    # For now, this adds just the module initializer symbols for modules "std"
+    # and "std.compat".
+    target_sources(cxx_experimental PUBLIC FILE_SET CXX_MODULES
+      BASE_DIRS
+        "${LIBCXX_GENERATED_MODULE_DIR}"
+      FILES
+        "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
+        "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
+    )
+    set_source_files_properties(
+        "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
+        "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
+      TARGET_DIRECTORY cxx_experimental
+      PROPERTIES COMPILE_OPTIONS "-U_LIBCPP_BUILDING_LIBRARY;-Wno-reserved-module-identifier")
+    add_dependencies(cxx_experimental generate-cxx-modules)
+  else()
+    message(WARNING "CMake 3.28.0 needed for module symbol support in libc++experimental")
+  endif()
 
   # Install the generated module files.
   install(FILES



More information about the libcxx-commits mailing list