[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