[flang] Accept polymorphic component element in storage_size
[llvm-project.git] / libc / include / CMakeLists.txt
blobfc8e2bc7b49339ac1ec41a2b3127f8aa2ac66577
1 set(LIBC_INCLUDE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
2 include(LLVMLibCHeaderRules)
4 add_subdirectory(llvm-libc-macros)
5 add_subdirectory(llvm-libc-types)
7 add_header(
8   llvm_libc_common_h
9   HDR
10     __llvm-libc-common.h
13 add_gen_header(
14   ctype
15   DEF_FILE ctype.h.def
16   GEN_HDR ctype.h
17   DEPENDS
18     .llvm_libc_common_h
21 add_gen_header(
22   dirent
23   DEF_FILE dirent.h.def
24   GEN_HDR dirent.h
25   DEPENDS
26     .llvm_libc_common_h
27     .llvm-libc-types.DIR
28     .llvm-libc-types.ino_t
29     .llvm-libc-types.struct_dirent
32 add_gen_header(
33   fcntl
34   DEF_FILE fcntl.h.def
35   GEN_HDR fcntl.h
36   DEPENDS
37     .llvm_libc_common_h
38     .llvm-libc-macros.fcntl_macros
39     .llvm-libc-types.mode_t
42 add_gen_header(
43   fenv
44   DEF_FILE fenv.h.def
45   GEN_HDR fenv.h
46   DEPENDS
47     .llvm_libc_common_h
48     .llvm-libc-types.fenv_t
49     .llvm-libc-types.fexcept_t
52 add_gen_header(
53   inttypes
54   DEF_FILE inttypes.h.def
55   GEN_HDR inttypes.h
56   DEPENDS
57     .llvm_libc_common_h
58     .llvm-libc-types.imaxdiv_t
61 add_gen_header(
62   math
63   DEF_FILE math.h.def
64   GEN_HDR math.h
65   DEPENDS
66     .llvm_libc_common_h
67     .llvm-libc-types.double_t
68     .llvm-libc-types.float_t
71 # TODO: This should be conditional on POSIX networking being included.
72 file(MAKE_DIRECTORY "arpa")
74 add_gen_header(
75   arpa_inet
76   DEF_FILE arpa/inet.h.def
77   GEN_HDR arpa/inet.h
78   DEPENDS
79     .llvm_libc_common_h
82 add_gen_header(
83   assert
84   DEF_FILE assert.h.def
85   GEN_HDR assert.h
86   DEPENDS
87     .llvm_libc_common_h
90 add_gen_header(
91   setjmp
92   DEF_FILE setjmp.h.def
93   GEN_HDR setjmp.h
94   DEPENDS
95     .llvm_libc_common_h
96     .llvm-libc-types.jmp_buf
99 add_gen_header(
100   string
101   DEF_FILE string.h.def
102   GEN_HDR string.h
103   DEPENDS
104     .llvm_libc_common_h
105     .llvm-libc-macros.null_macro
106     .llvm-libc-types.size_t
109 add_gen_header(
110   strings
111   DEF_FILE strings.h.def
112   GEN_HDR strings.h
113   DEPENDS
114     .llvm_libc_common_h
115     .llvm-libc-types.size_t
118 add_gen_header(
119   time
120   DEF_FILE time.h.def
121   GEN_HDR time.h
122   DEPENDS
123     .llvm_libc_common_h
124     .llvm-libc-macros.time_macros
125     .llvm-libc-types.time_t
126     .llvm-libc-types.clock_t
127     .llvm-libc-types.clockid_t
128     .llvm-libc-types.struct_tm
129     .llvm-libc-types.struct_timespec
130     .llvm-libc-types.struct_timeval
133 add_gen_header(
134   threads
135   DEF_FILE threads.h.def
136   GEN_HDR threads.h
137   DEPENDS
138     .llvm_libc_common_h
139     .llvm-libc-types.__call_once_func_t
140     .llvm-libc-types.cnd_t
141     .llvm-libc-types.mtx_t
142     .llvm-libc-types.once_flag
143     .llvm-libc-types.thrd_start_t
144     .llvm-libc-types.thrd_t
145     .llvm-libc-types.tss_t
146     .llvm-libc-types.tss_dtor_t
149 add_gen_header(
150   errno
151   DEF_FILE errno.h.def
152   GEN_HDR errno.h
153   DEPENDS
154     .llvm-libc-macros.generic_error_number_macros
157 add_gen_header(
158   signal
159   DEF_FILE signal.h.def
160   PARAMS
161     platform_signal=../config/${LIBC_TARGET_OS}/signal.h.in
162   GEN_HDR signal.h
163   DATA_FILES
164     ../config/${LIBC_TARGET_OS}/signal.h.in
165   DEPENDS
166     .llvm-libc-macros.signal_macros
167     .llvm-libc-types.__sighandler_t
168     .llvm-libc-types.sigset_t
169     .llvm-libc-types.sig_atomic_t
170     .llvm-libc-types.stack_t
171     .llvm-libc-types.struct_sigaction
172     .llvm-libc-types.pid_t
175 add_gen_header(
176   stdio
177   DEF_FILE stdio.h.def
178   GEN_HDR stdio.h
179   DEPENDS
180     .llvm_libc_common_h
181     .llvm-libc-macros.file_seek_macros
182     .llvm-libc-macros.stdio_macros
183     .llvm-libc-types.cookie_io_functions_t
184     .llvm-libc-types.FILE
185     .llvm-libc-types.off_t
186     .llvm-libc-types.size_t
189 add_gen_header(
190   stdlib
191   DEF_FILE stdlib.h.def
192   GEN_HDR stdlib.h
193   DEPENDS
194     .llvm_libc_common_h
195     .llvm-libc-macros.stdlib_macros
196     .llvm-libc-types.__bsearchcompare_t
197     .llvm-libc-types.__qsortcompare_t
198     .llvm-libc-types.div_t
199     .llvm-libc-types.ldiv_t
200     .llvm-libc-types.lldiv_t
201     .llvm-libc-types.size_t
202     .llvm-libc-types.__atexithandler_t
205 add_gen_header(
206   unistd
207   DEF_FILE unistd.h.def
208   GEN_HDR unistd.h
209   DEPENDS
210     .llvm_libc_common_h
211     .llvm-libc-macros.file_seek_macros
212     .llvm-libc-macros.unistd_macros
213     .llvm-libc-types.__exec_argv_t
214     .llvm-libc-types.__exec_envp_t
215     .llvm-libc-types.off_t
216     .llvm-libc-types.pid_t
217     .llvm-libc-types.size_t
218     .llvm-libc-types.ssize_t
219     .llvm-libc-types.uid_t
220     .llvm-libc-types.__getoptargv_t
223 add_gen_header(
224   pthread
225   DEF_FILE pthread.h.def
226   GEN_HDR pthread.h
227   DEPENDS
228     .llvm_libc_common_h
229     .llvm-libc-types.__atfork_callback_t
230     .llvm-libc-types.__pthread_start_t
231     .llvm-libc-types.__pthread_tss_dtor_t
232     .llvm-libc-types.pthread_attr_t
233     .llvm-libc-types.pthread_key_t
234     .llvm-libc-types.pthread_mutex_t
235     .llvm-libc-types.pthread_mutexattr_t
236     .llvm-libc-types.pthread_once_t
237     .llvm-libc-types.__pthread_once_func_t
238     .llvm-libc-types.pthread_t
241 add_gen_header(
242   sched
243   DEF_FILE sched.h.def
244   GEN_HDR sched.h
245   DEPENDS
246     .llvm_libc_common_h
247     .llvm-libc-types.cpu_set_t
248     .llvm-libc-macros.sched_macros
251 add_gen_header(
252   spawn
253   DEF_FILE spawn.h.def
254   GEN_HDR spawn.h
255   DEPENDS
256     .llvm_libc_common_h
257     .llvm-libc-types.mode_t
258     .llvm-libc-types.pid_t
259     .llvm-libc-types.posix_spawnattr_t
260     .llvm-libc-types.posix_spawn_file_actions_t
263 # TODO: Not all platforms will have a include/sys directory. Add the sys
264 # directory and the targets for sys/*.h files conditional to the OS requiring
265 # them.
266 file(MAKE_DIRECTORY "sys")
268 add_gen_header(
269   sys_auxv
270   DEF_FILE sys/auxv.h.def
271   GEN_HDR sys/auxv.h
272   DEPENDS
273     .llvm_libc_common_h
274     .llvm-libc-macros.sys_auxv_macros
277 add_gen_header(
278   sys_ioctl
279   DEF_FILE sys/ioctl.h.def
280   GEN_HDR sys/ioctl.h
281   DEPENDS
282     .llvm_libc_common_h
283     .llvm-libc-macros.sys_ioctl_macros
286 add_gen_header(
287   sys_mman
288   DEF_FILE sys/mman.h.def
289   GEN_HDR sys/mman.h
290   DEPENDS
291     .llvm_libc_common_h
292     .llvm-libc-types.off_t
293     .llvm-libc-types.ssize_t
294     .llvm-libc-macros.sys_mman_macros
297 add_gen_header(
298   sys_prctl
299   DEF_FILE sys/prctl.h.def
300   GEN_HDR sys/prctl.h
301   DEPENDS
302     .llvm_libc_common_h
305 add_gen_header(
306   sys_random
307   DEF_FILE sys/random.h.def
308   GEN_HDR sys/random.h
309   DEPENDS
310     .llvm_libc_common_h
311     .llvm-libc-macros.sys_random_macros
312     .llvm-libc-types.ssize_t
313     .llvm-libc-types.size_t
316 add_gen_header(
317   sys_resource
318   DEF_FILE sys/resource.h.def
319   GEN_HDR sys/resource.h
320   DEPENDS
321     .llvm_libc_common_h
322     .llvm-libc-macros.sys_resource_macros
323     .llvm-libc-types.rlim_t
324     .llvm-libc-types.struct_rlimit
327 add_gen_header(
328   sys_stat
329   DEF_FILE sys/stat.h.def
330   GEN_HDR sys/stat.h
331   DEPENDS
332     .llvm_libc_common_h
333     .llvm-libc-macros.sys_stat_macros
334     .llvm-libc-types.mode_t
335     .llvm-libc-types.struct_stat
338 add_gen_header(
339   sys_select
340   DEF_FILE sys/select.h.def
341   GEN_HDR sys/select.h
342   DEPENDS
343     .llvm_libc_common_h
344     .llvm-libc-macros.sys_select_macros
345     .llvm-libc-types.fd_set
346     .llvm-libc-types.sigset_t
347     .llvm-libc-types.struct_timespec
348     .llvm-libc-types.struct_timeval
349     .llvm-libc-types.suseconds_t
350     .llvm-libc-types.time_t
351     .llvm-libc-types.ssize_t
354 add_gen_header(
355   sys_sendfile
356   DEF_FILE sys/sendfile.h.def
357   GEN_HDR sys/sendfile.h
358   DEPENDS
359     .llvm_libc_common_h
360     .llvm-libc-types.off_t
361     .llvm-libc-types.ssize_t
364 add_gen_header(
365   sys_socket
366   DEF_FILE sys/socket.h.def
367   GEN_HDR sys/socket.h
368   DEPENDS
369     .llvm_libc_common_h
370     .llvm-libc-macros.sys_socket_macros
373 add_gen_header(
374   sys_syscall
375   DEF_FILE sys/syscall.h.def
376   GEN_HDR sys/syscall.h
377   PARAMS
378     syscall_numbers=../config/${LIBC_TARGET_OS}/syscall_numbers.h.inc
379   DATA_FILES
380     ../config/${LIBC_TARGET_OS}/syscall_numbers.h.inc
383 add_gen_header(
384   sys_time
385   DEF_FILE sys/time.h.def
386   GEN_HDR sys/time.h
387   DEPENDS
388     .llvm_libc_common_h
389     .llvm-libc-types.struct_timeval
390     .llvm-libc-macros.sys_time_macros
393 add_gen_header(
394   sys_types
395   DEF_FILE sys/types.h.def
396   GEN_HDR sys/types.h
397   DEPENDS
398     .llvm_libc_common_h
399     .llvm-libc-types.blkcnt_t
400     .llvm-libc-types.blksize_t
401     .llvm-libc-types.clockid_t
402     .llvm-libc-types.dev_t
403     .llvm-libc-types.gid_t
404     .llvm-libc-types.ino_t
405     .llvm-libc-types.mode_t
406     .llvm-libc-types.nlink_t
407     .llvm-libc-types.off_t
408     .llvm-libc-types.pid_t
409     .llvm-libc-types.pthread_attr_t
410     .llvm-libc-types.pthread_key_t
411     .llvm-libc-types.pthread_mutex_t
412     .llvm-libc-types.pthread_mutexattr_t
413     .llvm-libc-types.pthread_once_t
414     .llvm-libc-types.pthread_t
415     .llvm-libc-types.size_t
416     .llvm-libc-types.ssize_t
417     .llvm-libc-types.suseconds_t
418     .llvm-libc-types.time_t
419     .llvm-libc-types.uid_t
422 add_gen_header(
423   sys_utsname
424   DEF_FILE sys/utsname.h.def
425   GEN_HDR sys/utsname.h
426   DEPENDS
427     .llvm_libc_common_h
428     .llvm-libc-types.struct_utsname
431 add_gen_header(
432   sys_wait
433   DEF_FILE sys/wait.h.def
434   GEN_HDR sys/wait.h
435   DEPENDS
436     .llvm_libc_common_h
437     .llvm-libc-macros.sys_wait_macros
438     .llvm-libc-types.pid_t
439     .llvm-libc-types.struct_rusage
442 add_gen_header(
443   termios
444   DEF_FILE termios.h.def
445   GEN_HDR termios.h
446   DEPENDS
447     .llvm_libc_common_h
448     .llvm-libc-macros.termios_macros
449     .llvm-libc-types.cc_t
450     .llvm-libc-types.speed_t
451     .llvm-libc-types.struct_termios
452     .llvm-libc-types.tcflag_t
455 if(NOT LLVM_LIBC_FULL_BUILD)
456   # We don't install headers in non-fullbuild mode.
457   return()
458 endif()
460 function(get_all_install_header_targets out_var)
461   set(all_deps ${ARGN})
462   foreach(target IN LISTS ARGN)
463     get_target_property(deps ${target} DEPS)
464     if(NOT deps)
465       continue()
466     endif()
467     list(APPEND all_deps ${deps})
468     get_all_install_header_targets(nested_deps ${deps})
469     list(APPEND all_deps ${nested_deps})
470   endforeach()
471   list(REMOVE_DUPLICATES all_deps)
472   set(${out_var} ${all_deps} PARENT_SCOPE)
473 endfunction(get_all_install_header_targets)
475 get_all_install_header_targets(all_install_header_targets ${TARGET_PUBLIC_HEADERS})
476 add_custom_target(libc-headers)
477 add_dependencies(libc-headers ${all_install_header_targets})
478 foreach(target IN LISTS all_install_header_targets)
479   get_target_property(header_file ${target} HEADER_FILE_PATH)
480   if(NOT header_file)
481     message(FATAL_ERROR "Installable header file '${target}' does not have the "
482                         "HEADER_FILE_PATH property set.")
483   endif()
484   file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_BINARY_DIR} ${header_file})
485   get_filename_component(nested_dir ${relative_path} DIRECTORY)
486   install(FILES ${header_file}
487           DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${nested_dir}
488           COMPONENT libc-headers)
489 endforeach()