[RISCV] Relax march string order constraint (#78120)
[llvm-project.git] / libcxx / modules / CMakeLists.txt
blob0388c048dacb8b102dfa340452403d6c19eb1b9f
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 set(LIBCXX_MODULE_STD_INCLUDE_SOURCES)
141 foreach(file ${LIBCXX_MODULE_STD_SOURCES})
142   set(
143     LIBCXX_MODULE_STD_INCLUDE_SOURCES
144     "${LIBCXX_MODULE_STD_INCLUDE_SOURCES}#include \"${file}\"\n"
145   )
146 endforeach()
148 configure_file(
149   "std.cppm.in"
150   "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
151   @ONLY
154 set(LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES)
155 foreach(file ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
156   set(
157     LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES
158     "${LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES}#include \"${file}\"\n"
159   )
160 endforeach()
162 configure_file(
163   "std.compat.cppm.in"
164   "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
165   @ONLY
168 set(_all_modules)
169 list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm")
170 list(APPEND _all_modules "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm")
171 foreach(file ${LIBCXX_MODULE_STD_SOURCES} ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
172   set(src "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
173   set(dst "${LIBCXX_GENERATED_MODULE_DIR}/${file}")
174   add_custom_command(OUTPUT ${dst}
175     DEPENDS ${src}
176     COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
177     COMMENT "Copying CXX module ${file}")
178   list(APPEND _all_modules "${dst}")
179 endforeach()
181 add_custom_target(generate-cxx-modules
182   ALL DEPENDS
183     ${_all_modules}
186 # Configure the modules manifest.
187 # Use the relative path between the installation and the module in the json
188 # file. This allows moving the entire installation to a different location.
189 file(RELATIVE_PATH LIBCXX_MODULE_RELATIVE_PATH
190   ${CMAKE_INSTALL_PREFIX}/${LIBCXX_INSTALL_LIBRARY_DIR}
191   ${CMAKE_INSTALL_PREFIX}/${LIBCXX_INSTALL_MODULES_DIR})
192 configure_file(
193   "modules.json.in"
194   "${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
195   @ONLY
198 # Dummy library to make modules an installation component.
199 add_library(cxx-modules INTERFACE)
200 add_dependencies(cxx-modules generate-cxx-modules)
202 if (LIBCXX_INSTALL_MODULES)
203   foreach(file ${LIBCXX_MODULE_STD_SOURCES} ${LIBCXX_MODULE_STD_COMPAT_SOURCES})
204     get_filename_component(dir ${file} DIRECTORY)
205     install(FILES ${file}
206       DESTINATION "${LIBCXX_INSTALL_MODULES_DIR}/${dir}"
207       COMPONENT cxx-modules
208       PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
209     )
210   endforeach()
212   # Install the generated module files.
213   install(FILES
214       "${LIBCXX_GENERATED_MODULE_DIR}/std.cppm"
215       "${LIBCXX_GENERATED_MODULE_DIR}/std.compat.cppm"
216     DESTINATION "${LIBCXX_INSTALL_MODULES_DIR}"
217     COMPONENT cxx-modules
218     PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
219   )
221   # Install the module manifest.
222   install(FILES
223       "${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
224     DESTINATION "${LIBCXX_INSTALL_LIBRARY_DIR}"
225     COMPONENT cxx-modules
226     PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
227   )
229   if (NOT CMAKE_CONFIGURATION_TYPES)
230     add_custom_target(install-cxx-modules
231                       DEPENDS cxx-modules
232                       COMMAND "${CMAKE_COMMAND}"
233                               -DCMAKE_INSTALL_COMPONENT=cxx-modules
234                               -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
235     # Stripping is a no-op for modules
236     add_custom_target(install-cxx-modules-stripped DEPENDS install-cxx-modules)
237   endif()
238 endif()