270 lines
7 KiB
Text
270 lines
7 KiB
Text
|
# 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_MODULE_STD_SOURCES
|
|||
|
std/algorithm.inc
|
|||
|
std/any.inc
|
|||
|
std/array.inc
|
|||
|
std/atomic.inc
|
|||
|
std/barrier.inc
|
|||
|
std/bit.inc
|
|||
|
std/bitset.inc
|
|||
|
std/cassert.inc
|
|||
|
std/cctype.inc
|
|||
|
std/cerrno.inc
|
|||
|
std/cfenv.inc
|
|||
|
std/cfloat.inc
|
|||
|
std/charconv.inc
|
|||
|
std/chrono.inc
|
|||
|
std/cinttypes.inc
|
|||
|
std/climits.inc
|
|||
|
std/clocale.inc
|
|||
|
std/cmath.inc
|
|||
|
std/codecvt.inc
|
|||
|
std/compare.inc
|
|||
|
std/complex.inc
|
|||
|
std/concepts.inc
|
|||
|
std/condition_variable.inc
|
|||
|
std/coroutine.inc
|
|||
|
std/csetjmp.inc
|
|||
|
std/csignal.inc
|
|||
|
std/cstdarg.inc
|
|||
|
std/cstddef.inc
|
|||
|
std/cstdint.inc
|
|||
|
std/cstdio.inc
|
|||
|
std/cstdlib.inc
|
|||
|
std/cstring.inc
|
|||
|
std/ctime.inc
|
|||
|
std/cuchar.inc
|
|||
|
std/cwchar.inc
|
|||
|
std/cwctype.inc
|
|||
|
std/deque.inc
|
|||
|
std/exception.inc
|
|||
|
std/execution.inc
|
|||
|
std/expected.inc
|
|||
|
std/filesystem.inc
|
|||
|
std/flat_map.inc
|
|||
|
std/flat_set.inc
|
|||
|
std/format.inc
|
|||
|
std/forward_list.inc
|
|||
|
std/fstream.inc
|
|||
|
std/functional.inc
|
|||
|
std/future.inc
|
|||
|
std/generator.inc
|
|||
|
std/hazard_pointer.inc
|
|||
|
std/initializer_list.inc
|
|||
|
std/iomanip.inc
|
|||
|
std/ios.inc
|
|||
|
std/iosfwd.inc
|
|||
|
std/iostream.inc
|
|||
|
std/istream.inc
|
|||
|
std/iterator.inc
|
|||
|
std/latch.inc
|
|||
|
std/limits.inc
|
|||
|
std/list.inc
|
|||
|
std/locale.inc
|
|||
|
std/map.inc
|
|||
|
std/mdspan.inc
|
|||
|
std/memory.inc
|
|||
|
std/memory_resource.inc
|
|||
|
std/mutex.inc
|
|||
|
std/new.inc
|
|||
|
std/numbers.inc
|
|||
|
std/numeric.inc
|
|||
|
std/optional.inc
|
|||
|
std/ostream.inc
|
|||
|
std/print.inc
|
|||
|
std/queue.inc
|
|||
|
std/random.inc
|
|||
|
std/ranges.inc
|
|||
|
std/ratio.inc
|
|||
|
std/rcu.inc
|
|||
|
std/regex.inc
|
|||
|
std/scoped_allocator.inc
|
|||
|
std/semaphore.inc
|
|||
|
std/set.inc
|
|||
|
std/shared_mutex.inc
|
|||
|
std/source_location.inc
|
|||
|
std/span.inc
|
|||
|
std/spanstream.inc
|
|||
|
std/sstream.inc
|
|||
|
std/stack.inc
|
|||
|
std/stacktrace.inc
|
|||
|
std/stdexcept.inc
|
|||
|
std/stdfloat.inc
|
|||
|
std/stop_token.inc
|
|||
|
std/streambuf.inc
|
|||
|
std/string.inc
|
|||
|
std/string_view.inc
|
|||
|
std/strstream.inc
|
|||
|
std/syncstream.inc
|
|||
|
std/system_error.inc
|
|||
|
std/text_encoding.inc
|
|||
|
std/thread.inc
|
|||
|
std/tuple.inc
|
|||
|
std/type_traits.inc
|
|||
|
std/typeindex.inc
|
|||
|
std/typeinfo.inc
|
|||
|
std/unordered_map.inc
|
|||
|
std/unordered_set.inc
|
|||
|
std/utility.inc
|
|||
|
std/valarray.inc
|
|||
|
std/variant.inc
|
|||
|
std/vector.inc
|
|||
|
std/version.inc
|
|||
|
)
|
|||
|
|
|||
|
set(LIBCXX_MODULE_STD_COMPAT_SOURCES
|
|||
|
std.compat/cassert.inc
|
|||
|
std.compat/cctype.inc
|
|||
|
std.compat/cerrno.inc
|
|||
|
std.compat/cfenv.inc
|
|||
|
std.compat/cfloat.inc
|
|||
|
std.compat/cinttypes.inc
|
|||
|
std.compat/climits.inc
|
|||
|
std.compat/clocale.inc
|
|||
|
std.compat/cmath.inc
|
|||
|
std.compat/csetjmp.inc
|
|||
|
std.compat/csignal.inc
|
|||
|
std.compat/cstdarg.inc
|
|||
|
std.compat/cstddef.inc
|
|||
|
std.compat/cstdint.inc
|
|||
|
std.compat/cstdio.inc
|
|||
|
std.compat/cstdlib.inc
|
|||
|
std.compat/cstring.inc
|
|||
|
std.compat/ctime.inc
|
|||
|
std.compat/cuchar.inc
|
|||
|
std.compat/cwchar.inc
|
|||
|
std.compat/cwctype.inc
|
|||
|
)
|
|||
|
|
|||
|
# TODO MODULES the CMakeLists.txt in the build directory is only temporary.
|
|||
|
# This allows using as available in the build directory. Once build systems
|
|||
|
# have proper support for the installed files this will be removed.
|
|||
|
if ("${LIBCXX_GENERATED_INCLUDE_DIR}" STREQUAL "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}")
|
|||
|
# This typically happens when the target is not installed.
|
|||
|
set(LIBCXX_CONFIGURED_INCLUDE_DIRS "${LIBCXX_GENERATED_INCLUDE_DIR}")
|
|||
|
else()
|
|||
|
# It's important that the arch directory be included first so that its header files
|
|||
|
# which interpose on the default include dir be included instead of the default ones.
|
|||
|
set(LIBCXX_CONFIGURED_INCLUDE_DIRS
|
|||
|
"${LIBCXX_GENERATED_INCLUDE_TARGET_DIR};${LIBCXX_GENERATED_INCLUDE_DIR}"
|
|||
|
)
|
|||
|
endif()
|
|||
|
configure_file(
|
|||
|
"CMakeLists.txt.in"
|
|||
|
"${LIBCXX_GENERATED_MODULE_DIR}/CMakeLists.txt"
|
|||
|
@ONLY
|
|||
|
)
|
|||
|
|
|||
|
set(LIBCXX_MODULE_STD_INCLUDE_SOURCES)
|
|||
|
foreach(file ${LIBCXX_MODULE_STD_SOURCES})
|
|||
|
set(
|
|||
|
LIBCXX_MODULE_STD_INCLUDE_SOURCES
|
|||
|
"${LIBCXX_MODULE_STD_INCLUDE_SOURCES}#include \"${file}\"\n"
|
|||
|
)
|
|||
|
endforeach()
|
|||
|
|
|||
|
configure_file(
|
|||
|
"std.cppm.in"
|
|||
|
"${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
|
|||
|
@ONLY
|
|||
|
)
|
|||
|
|
|||
|
set(LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES)
|
|||
|
foreach(file ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
|
|||
|
set(
|
|||
|
LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES
|
|||
|
"${LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES}#include \"${file}\"\n"
|
|||
|
)
|
|||
|
endforeach()
|
|||
|
|
|||
|
configure_file(
|
|||
|
"std.compat.cppm.in"
|
|||
|
"${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
|
|||
|
@ONLY
|
|||
|
)
|
|||
|
|
|||
|
set(_all_modules)
|
|||
|
list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/CMakeLists.txt")
|
|||
|
list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm")
|
|||
|
list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm")
|
|||
|
foreach(file ${LIBCXX_MODULE_STD_SOURCES} ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
|
|||
|
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}
|
|||
|
)
|
|||
|
|
|||
|
# Configure the modules manifest.
|
|||
|
# Use the relative path between the installation and the module in the json
|
|||
|
# file. This allows moving the entire installation to a different location.
|
|||
|
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "")
|
|||
|
set(BASE_DIRECTORY "/")
|
|||
|
else()
|
|||
|
set(BASE_DIRECTORY ${CMAKE_INSTALL_PREFIX})
|
|||
|
endif()
|
|||
|
cmake_path(ABSOLUTE_PATH LIBCXX_INSTALL_LIBRARY_DIR
|
|||
|
BASE_DIRECTORY ${BASE_DIRECTORY}
|
|||
|
OUTPUT_VARIABLE ABS_LIBRARY_DIR)
|
|||
|
cmake_path(ABSOLUTE_PATH LIBCXX_INSTALL_MODULES_DIR
|
|||
|
BASE_DIRECTORY ${BASE_DIRECTORY}
|
|||
|
OUTPUT_VARIABLE ABS_MODULES_DIR)
|
|||
|
file(RELATIVE_PATH LIBCXX_MODULE_RELATIVE_PATH
|
|||
|
${ABS_LIBRARY_DIR}
|
|||
|
${ABS_MODULES_DIR})
|
|||
|
configure_file(
|
|||
|
"modules.json.in"
|
|||
|
"${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
|
|||
|
@ONLY
|
|||
|
)
|
|||
|
|
|||
|
# Dummy library to make modules an installation component.
|
|||
|
add_library(cxx-modules INTERFACE)
|
|||
|
add_dependencies(cxx-modules generate-cxx-modules)
|
|||
|
|
|||
|
if (LIBCXX_INSTALL_MODULES)
|
|||
|
foreach(file ${LIBCXX_MODULE_STD_SOURCES} ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
|
|||
|
get_filename_component(dir ${file} DIRECTORY)
|
|||
|
install(FILES ${file}
|
|||
|
DESTINATION "${LIBCXX_INSTALL_MODULES_DIR}/${dir}"
|
|||
|
COMPONENT cxx-modules
|
|||
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
|||
|
)
|
|||
|
endforeach()
|
|||
|
|
|||
|
# Install the generated module files.
|
|||
|
install(FILES
|
|||
|
"${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
|
|||
|
"${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
|
|||
|
DESTINATION "${LIBCXX_INSTALL_MODULES_DIR}"
|
|||
|
COMPONENT cxx-modules
|
|||
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
|||
|
)
|
|||
|
|
|||
|
# Install the module manifest.
|
|||
|
install(FILES
|
|||
|
"${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
|
|||
|
DESTINATION "${LIBCXX_INSTALL_LIBRARY_DIR}"
|
|||
|
COMPONENT cxx-modules
|
|||
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
|||
|
)
|
|||
|
|
|||
|
if (NOT CMAKE_CONFIGURATION_TYPES)
|
|||
|
add_custom_target(install-cxx-modules
|
|||
|
DEPENDS cxx-modules
|
|||
|
COMMAND "${CMAKE_COMMAND}"
|
|||
|
-DCMAKE_INSTALL_COMPONENT=cxx-modules
|
|||
|
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
|
|||
|
# Stripping is a no-op for modules
|
|||
|
add_custom_target(install-cxx-modules-stripped DEPENDS install-cxx-modules)
|
|||
|
endif()
|
|||
|
endif()
|