diff --git a/libcxx/modules/CMakeLists.txt b/libcxx/modules/CMakeLists.txt index 0dea8cfca94ac3..44f6ae420fbc04 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,27 @@ if (LIBCXX_INSTALL_MODULES) ) endforeach() + 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 "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm" @@ -240,7 +261,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