| if (CMAKE_VERSION VERSION_LESS 3.26) |
| message(WARNING "The libc++ modules won't be available because the CMake version is too old. Update to CMake 3.26 or later.") |
| return() |
| endif() |
| |
| # The headers of Table 24: C++ library headers [tab:headers.cpp] |
| # and the headers of Table 25: C++ headers for C library facilities [tab:headers.cpp.c] |
| set(LIBCXX_SOURCES_MODULE_STD |
| std.cppm |
| std/algorithm.cppm |
| std/any.cppm |
| std/array.cppm |
| std/atomic.cppm |
| std/barrier.cppm |
| std/bit.cppm |
| std/bitset.cppm |
| std/cassert.cppm |
| std/cctype.cppm |
| std/cerrno.cppm |
| std/cfenv.cppm |
| std/cfloat.cppm |
| std/charconv.cppm |
| std/chrono.cppm |
| std/cinttypes.cppm |
| std/climits.cppm |
| std/clocale.cppm |
| std/cmath.cppm |
| std/codecvt.cppm |
| std/compare.cppm |
| std/complex.cppm |
| std/concepts.cppm |
| std/condition_variable.cppm |
| std/coroutine.cppm |
| std/csetjmp.cppm |
| std/csignal.cppm |
| std/cstdarg.cppm |
| std/cstddef.cppm |
| std/cstdint.cppm |
| std/cstdio.cppm |
| std/cstdlib.cppm |
| std/cstring.cppm |
| std/ctime.cppm |
| std/cuchar.cppm |
| std/cwchar.cppm |
| std/cwctype.cppm |
| std/deque.cppm |
| std/exception.cppm |
| std/execution.cppm |
| std/expected.cppm |
| std/filesystem.cppm |
| std/flat_map.cppm |
| std/flat_set.cppm |
| std/format.cppm |
| std/forward_list.cppm |
| std/fstream.cppm |
| std/functional.cppm |
| std/future.cppm |
| std/generator.cppm |
| std/hazard_pointer.cppm |
| std/initializer_list.cppm |
| std/iomanip.cppm |
| std/ios.cppm |
| std/iosfwd.cppm |
| std/iostream.cppm |
| std/iostream.cppm |
| std/istream.cppm |
| std/iterator.cppm |
| std/latch.cppm |
| std/limits.cppm |
| std/list.cppm |
| std/locale.cppm |
| std/map.cppm |
| std/mdspan.cppm |
| std/memory.cppm |
| std/memory_resource.cppm |
| std/mutex.cppm |
| std/new.cppm |
| std/numbers.cppm |
| std/numeric.cppm |
| std/optional.cppm |
| std/ostream.cppm |
| std/print.cppm |
| std/queue.cppm |
| std/random.cppm |
| std/ranges.cppm |
| std/ratio.cppm |
| std/rcu.cppm |
| std/regex.cppm |
| std/scoped_allocator.cppm |
| std/semaphore.cppm |
| std/set.cppm |
| std/shared_mutex.cppm |
| std/source_location.cppm |
| std/span.cppm |
| std/spanstream.cppm |
| std/sstream.cppm |
| std/stack.cppm |
| std/stacktrace.cppm |
| std/stdexcept.cppm |
| std/stdexcept.cppm |
| std/stdfloat.cppm |
| std/stop_token.cppm |
| std/streambuf.cppm |
| std/string.cppm |
| std/string_view.cppm |
| std/strstream.cppm |
| std/syncstream.cppm |
| std/system_error.cppm |
| std/text_encoding.cppm |
| std/thread.cppm |
| std/tuple.cppm |
| std/type_traits.cppm |
| std/typeindex.cppm |
| std/typeinfo.cppm |
| std/unordered_map.cppm |
| std/unordered_set.cppm |
| std/utility.cppm |
| std/valarray.cppm |
| std/variant.cppm |
| std/vector.cppm |
| std/version.cppm |
| ) |
| |
| # TODO MODULES the CMakeLists.txt in the install directory is only temporary |
| # When that is removed the configured file can use the substitution |
| # LIBCXX_GENERATED_INCLUDE_TARGET_DIR avoiding this set. |
| # Also clean up the parts needed to generate the install version. |
| set(LIBCXX_CONFIGURED_INCLUDE_DIR ${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}) |
| configure_file( |
| "CMakeLists.txt.in" |
| "${LIBCXX_GENERATED_MODULE_DIR}/CMakeLists.txt" |
| @ONLY |
| ) |
| |
| set(_all_modules "${LIBCXX_GENERATED_MODULE_DIR}/CMakeLists.txt") |
| foreach(file ${LIBCXX_SOURCES_MODULE_STD}) |
| set(src "${CMAKE_CURRENT_SOURCE_DIR}/${file}") |
| set(dst "${LIBCXX_GENERATED_MODULE_DIR}/${file}") |
| add_custom_command(OUTPUT ${dst} |
| DEPENDS ${src} |
| COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst} |
| COMMENT "Copying CXX module ${file}") |
| list(APPEND _all_modules "${dst}") |
| endforeach() |
| |
| add_custom_target(generate-cxx-modules |
| ALL DEPENDS |
| ${_all_modules} |
| ) |