diff options
author | Mark de Wever <koraq@xs4all.nl> | 2023-12-12 19:12:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-12 19:12:29 +0100 |
commit | 0e05904664d8b9191a0aecab683bb92609b6b57b (patch) | |
tree | 6d24536e75f4aa09bd5e8275bd4a119d4a37289d | |
parent | 31cf6df06febdf2483d224d2c9657497cac7d41f (diff) | |
download | llvm-0e05904664d8b9191a0aecab683bb92609b6b57b.zip llvm-0e05904664d8b9191a0aecab683bb92609b6b57b.tar.gz llvm-0e05904664d8b9191a0aecab683bb92609b6b57b.tar.bz2 |
[libc++][doc] Updates module information. (#75003)
Adds the std.compat module and add support for CMake 3.28.
-rw-r--r-- | libcxx/docs/Modules.rst | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/libcxx/docs/Modules.rst b/libcxx/docs/Modules.rst index a16b369..5099e60 100644 --- a/libcxx/docs/Modules.rst +++ b/libcxx/docs/Modules.rst @@ -38,8 +38,8 @@ What works ~~~~~~~~~~ * Building BMIs - * Running tests using the ``std`` module - * Using the ``std`` module in external projects + * Running tests using the ``std`` and ``std.compat`` module + * Using the ``std`` and ``std.compat`` module in external projects * The following "parts disabled" configuration options are supported * ``LIBCXX_ENABLE_LOCALIZATION`` @@ -65,10 +65,9 @@ Some of the current limitations * Requires CMake 3.26 for C++23 support * Requires CMake 3.27 for C++26 support * Requires Ninja 1.11 - * Requires a recent Clang 17 + * Requires Clang 17 * The path to the compiler may not be a symlink, ``clang-scan-deps`` does not handle that case properly - * Only C++23 and C++26 are tested * Libc++ is not tested with modules instead of headers * The module ``.cppm`` files are not installed * Clang supports modules using GNU extensions, but libc++ does not work using @@ -127,9 +126,13 @@ This is a small sample program that uses the module ``std``. It consists of a .. code-block:: cpp - import std; + import std; // When importing std.compat it's not needed to import std. + import std.compat; - int main() { std::cout << "Hello modular world\n"; } + int main() { + std::cout << "Hello modular world\n"; + ::printf("Hello compat modular world\n"); + } .. code-block:: cmake @@ -142,7 +145,6 @@ This is a small sample program that uses the module ``std``. It consists of a # Set language version used # - # At the moment only C++23 is tested. set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED YES) # Libc++ doesn't support compiler extensions for modules. @@ -153,12 +155,16 @@ This is a small sample program that uses the module ``std``. It consists of a # # This is required to write your own modules in your project. - if(CMAKE_VERSION VERSION_LESS "3.27.0") - set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a") + if(CMAKE_VERSION VERSION_LESS "3.28.0") + if(CMAKE_VERSION VERSION_LESS "3.27.0") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a") + else() + set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "aa1f7df0-828a-4fcd-9afc-2dc80491aca7") + endif() + set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) else() - set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "aa1f7df0-828a-4fcd-9afc-2dc80491aca7") + cmake_policy(VERSION 3.28) endif() - set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) # # Import the modules from libc++ @@ -169,18 +175,16 @@ This is a small sample program that uses the module ``std``. It consists of a std URL "file://${LIBCXX_BUILD}/modules/c++/v1/" DOWNLOAD_EXTRACT_TIMESTAMP TRUE + SYSTEM ) - FetchContent_GetProperties(std) - if(NOT std_POPULATED) - FetchContent_Populate(std) - add_subdirectory(${std_SOURCE_DIR} ${std_BINARY_DIR} EXCLUDE_FROM_ALL) - endif() + FetchContent_MakeAvailable(std) # # Adjust project compiler flags # add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fprebuilt-module-path=${CMAKE_BINARY_DIR}/_deps/std-build/CMakeFiles/std.dir/>) + add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fprebuilt-module-path=${CMAKE_BINARY_DIR}/_deps/std-build/CMakeFiles/std.compat.dir/>) add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-nostdinc++>) # The include path needs to be set to be able to use macros from headers. # For example from, the headers <cassert> and <version>. @@ -194,8 +198,9 @@ This is a small sample program that uses the module ``std``. It consists of a add_link_options($<$<COMPILE_LANGUAGE:CXX>:-nostdlib++>) add_link_options($<$<COMPILE_LANGUAGE:CXX>:-L${LIBCXX_BUILD}/lib>) add_link_options($<$<COMPILE_LANGUAGE:CXX>:-Wl,-rpath,${LIBCXX_BUILD}/lib>) - # Linking against std is required for CMake to get the proper dependencies + # Linking against the standard c++ library is required for CMake to get the proper dependencies. link_libraries(std c++) + link_libraries(std.compat c++) # # Add the project |