[rtsan] Remove mkfifoat interceptor (#116997)
[llvm-project.git] / libcxx / modules / CMakeLists.txt
blobd47d19a4755317628184c8dd68bfa1b234e06a22
1 # The headers of Table 24: C++ library headers [tab:headers.cpp]
2 # and the headers of Table 25: C++ headers for C library facilities [tab:headers.cpp.c]
3 set(LIBCXX_MODULE_STD_SOURCES
4   std/algorithm.inc
5   std/any.inc
6   std/array.inc
7   std/atomic.inc
8   std/barrier.inc
9   std/bit.inc
10   std/bitset.inc
11   std/cassert.inc
12   std/cctype.inc
13   std/cerrno.inc
14   std/cfenv.inc
15   std/cfloat.inc
16   std/charconv.inc
17   std/chrono.inc
18   std/cinttypes.inc
19   std/climits.inc
20   std/clocale.inc
21   std/cmath.inc
22   std/codecvt.inc
23   std/compare.inc
24   std/complex.inc
25   std/concepts.inc
26   std/condition_variable.inc
27   std/coroutine.inc
28   std/csetjmp.inc
29   std/csignal.inc
30   std/cstdarg.inc
31   std/cstddef.inc
32   std/cstdint.inc
33   std/cstdio.inc
34   std/cstdlib.inc
35   std/cstring.inc
36   std/ctime.inc
37   std/cuchar.inc
38   std/cwchar.inc
39   std/cwctype.inc
40   std/deque.inc
41   std/exception.inc
42   std/execution.inc
43   std/expected.inc
44   std/filesystem.inc
45   std/flat_map.inc
46   std/flat_set.inc
47   std/format.inc
48   std/forward_list.inc
49   std/fstream.inc
50   std/functional.inc
51   std/future.inc
52   std/generator.inc
53   std/hazard_pointer.inc
54   std/initializer_list.inc
55   std/iomanip.inc
56   std/ios.inc
57   std/iosfwd.inc
58   std/iostream.inc
59   std/istream.inc
60   std/iterator.inc
61   std/latch.inc
62   std/limits.inc
63   std/list.inc
64   std/locale.inc
65   std/map.inc
66   std/mdspan.inc
67   std/memory.inc
68   std/memory_resource.inc
69   std/mutex.inc
70   std/new.inc
71   std/numbers.inc
72   std/numeric.inc
73   std/optional.inc
74   std/ostream.inc
75   std/print.inc
76   std/queue.inc
77   std/random.inc
78   std/ranges.inc
79   std/ratio.inc
80   std/rcu.inc
81   std/regex.inc
82   std/scoped_allocator.inc
83   std/semaphore.inc
84   std/set.inc
85   std/shared_mutex.inc
86   std/source_location.inc
87   std/span.inc
88   std/spanstream.inc
89   std/sstream.inc
90   std/stack.inc
91   std/stacktrace.inc
92   std/stdexcept.inc
93   std/stdfloat.inc
94   std/stop_token.inc
95   std/streambuf.inc
96   std/string.inc
97   std/string_view.inc
98   std/strstream.inc
99   std/syncstream.inc
100   std/system_error.inc
101   std/text_encoding.inc
102   std/thread.inc
103   std/tuple.inc
104   std/type_traits.inc
105   std/typeindex.inc
106   std/typeinfo.inc
107   std/unordered_map.inc
108   std/unordered_set.inc
109   std/utility.inc
110   std/valarray.inc
111   std/variant.inc
112   std/vector.inc
113   std/version.inc
116 set(LIBCXX_MODULE_STD_COMPAT_SOURCES
117   std.compat/cassert.inc
118   std.compat/cctype.inc
119   std.compat/cerrno.inc
120   std.compat/cfenv.inc
121   std.compat/cfloat.inc
122   std.compat/cinttypes.inc
123   std.compat/climits.inc
124   std.compat/clocale.inc
125   std.compat/cmath.inc
126   std.compat/csetjmp.inc
127   std.compat/csignal.inc
128   std.compat/cstdarg.inc
129   std.compat/cstddef.inc
130   std.compat/cstdint.inc
131   std.compat/cstdio.inc
132   std.compat/cstdlib.inc
133   std.compat/cstring.inc
134   std.compat/ctime.inc
135   std.compat/cuchar.inc
136   std.compat/cwchar.inc
137   std.compat/cwctype.inc
140 # TODO MODULES the CMakeLists.txt in the build directory is only temporary.
141 # This allows using as available in the build directory. Once build systems
142 # have proper support for the installed files this will be removed.
143 if ("${LIBCXX_GENERATED_INCLUDE_DIR}" STREQUAL "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}")
144   # This typically happens when the target is not installed.
145   set(LIBCXX_CONFIGURED_INCLUDE_DIRS "${LIBCXX_GENERATED_INCLUDE_DIR}")
146 else()
147   # It's important that the arch directory be included first so that its header files
148   # which interpose on the default include dir be included instead of the default ones.
149   set(LIBCXX_CONFIGURED_INCLUDE_DIRS
150     "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR};${LIBCXX_GENERATED_INCLUDE_DIR}"
151   )
152 endif()
153 configure_file(
154   "CMakeLists.txt.in"
155   "${LIBCXX_GENERATED_MODULE_DIR}/CMakeLists.txt"
156   @ONLY
159 set(LIBCXX_MODULE_STD_INCLUDE_SOURCES)
160 foreach(file ${LIBCXX_MODULE_STD_SOURCES})
161   set(
162     LIBCXX_MODULE_STD_INCLUDE_SOURCES
163     "${LIBCXX_MODULE_STD_INCLUDE_SOURCES}#include \"${file}\"\n"
164   )
165 endforeach()
167 configure_file(
168   "std.cppm.in"
169   "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
170   @ONLY
173 set(LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES)
174 foreach(file ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
175   set(
176     LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES
177     "${LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES}#include \"${file}\"\n"
178   )
179 endforeach()
181 configure_file(
182   "std.compat.cppm.in"
183   "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
184   @ONLY
187 set(_all_modules)
188 list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/CMakeLists.txt")
189 list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm")
190 list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm")
191 foreach(file ${LIBCXX_MODULE_STD_SOURCES} ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
192   set(src "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
193   set(dst "${LIBCXX_GENERATED_MODULE_DIR}/${file}")
194   add_custom_command(OUTPUT ${dst}
195     DEPENDS ${src}
196     COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
197     COMMENT "Copying CXX module ${file}")
198   list(APPEND _all_modules "${dst}")
199 endforeach()
201 add_custom_target(generate-cxx-modules
202   ALL DEPENDS
203     ${_all_modules}
206 # Configure the modules manifest.
207 # Use the relative path between the installation and the module in the json
208 # file. This allows moving the entire installation to a different location.
209 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "")
210   set(BASE_DIRECTORY "/")
211 else()
212   set(BASE_DIRECTORY ${CMAKE_INSTALL_PREFIX})
213 endif()
214 cmake_path(ABSOLUTE_PATH LIBCXX_INSTALL_LIBRARY_DIR
215   BASE_DIRECTORY ${BASE_DIRECTORY}
216   OUTPUT_VARIABLE ABS_LIBRARY_DIR)
217 cmake_path(ABSOLUTE_PATH LIBCXX_INSTALL_MODULES_DIR
218   BASE_DIRECTORY ${BASE_DIRECTORY}
219   OUTPUT_VARIABLE ABS_MODULES_DIR)
220 file(RELATIVE_PATH LIBCXX_MODULE_RELATIVE_PATH
221   ${ABS_LIBRARY_DIR}
222   ${ABS_MODULES_DIR})
223 configure_file(
224   "modules.json.in"
225   "${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
226   @ONLY
229 # Dummy library to make modules an installation component.
230 add_library(cxx-modules INTERFACE)
231 add_dependencies(cxx-modules generate-cxx-modules)
233 if (LIBCXX_INSTALL_MODULES)
234   foreach(file ${LIBCXX_MODULE_STD_SOURCES} ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
235     get_filename_component(dir ${file} DIRECTORY)
236     install(FILES ${file}
237       DESTINATION "${LIBCXX_INSTALL_MODULES_DIR}/${dir}"
238       COMPONENT cxx-modules
239       PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
240     )
241   endforeach()
243   # Install the generated module files.
244   install(FILES
245       "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
246       "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
247     DESTINATION "${LIBCXX_INSTALL_MODULES_DIR}"
248     COMPONENT cxx-modules
249     PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
250   )
252   # Install the module manifest.
253   install(FILES
254       "${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
255     DESTINATION "${LIBCXX_INSTALL_LIBRARY_DIR}"
256     COMPONENT cxx-modules
257     PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
258   )
260   if (NOT CMAKE_CONFIGURATION_TYPES)
261     add_custom_target(install-cxx-modules
262                       DEPENDS cxx-modules
263                       COMMAND "${CMAKE_COMMAND}"
264                               -DCMAKE_INSTALL_COMPONENT=cxx-modules
265                               -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
266     # Stripping is a no-op for modules
267     add_custom_target(install-cxx-modules-stripped DEPENDS install-cxx-modules)
268   endif()
269 endif()