Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libc / include / CMakeLists.txt
blob9d170603ffa45cd34f227434eab036fe19e2be71
1 set(LIBC_INCLUDE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
2 set(LIBC_INCLUDE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
4 include(LLVMLibCHeaderRules)
6 # The GPU build wants to install files in the compiler's resource directory.
7 if(LIBC_TARGET_ARCHITECTURE_IS_GPU)
8   include(GetClangResourceDir)
9 endif()
11 add_subdirectory(llvm-libc-macros)
12 add_subdirectory(llvm-libc-types)
14 add_header(
15   llvm_libc_common_h
16   HDR
17     __llvm-libc-common.h
20 add_gen_header(
21   ctype
22   DEF_FILE ctype.h.def
23   GEN_HDR ctype.h
24   DEPENDS
25     .llvm_libc_common_h
28 add_gen_header(
29   dirent
30   DEF_FILE dirent.h.def
31   GEN_HDR dirent.h
32   DEPENDS
33     .llvm_libc_common_h
34     .llvm-libc-types.ino_t
35     .llvm-libc-types.DIR
36     .llvm-libc-types.struct_dirent
39 add_gen_header(
40   fcntl
41   DEF_FILE fcntl.h.def
42   GEN_HDR fcntl.h
43   DEPENDS
44     .llvm_libc_common_h
45     .llvm-libc-macros.fcntl_macros
46     .llvm-libc-types.mode_t
49 add_gen_header(
50   features
51   DEF_FILE features.h.def
52   GEN_HDR features.h
53   DEPENDS
54     .llvm_libc_common_h
55     .llvm-libc-macros.features_macros
58 add_gen_header(
59   fenv
60   DEF_FILE fenv.h.def
61   GEN_HDR fenv.h
62   DEPENDS
63     .llvm_libc_common_h
64     .llvm-libc-macros.fenv_macros
65     .llvm-libc-types.fenv_t
66     .llvm-libc-types.fexcept_t
69 add_gen_header(
70   inttypes
71   DEF_FILE inttypes.h.def
72   GEN_HDR inttypes.h
73   DEPENDS
74     .llvm_libc_common_h
75     .llvm-libc-types.imaxdiv_t
78 add_gen_header(
79   math
80   DEF_FILE math.h.def
81   GEN_HDR math.h
82   DEPENDS
83     .llvm_libc_common_h
84     .llvm-libc-macros.math_macros
85     .llvm-libc-types.double_t
86     .llvm-libc-types.float_t
89 # TODO: This should be conditional on POSIX networking being included.
90 file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/arpa)
92 add_gen_header(
93   arpa_inet
94   DEF_FILE arpa/inet.h.def
95   GEN_HDR arpa/inet.h
96   DEPENDS
97     .llvm_libc_common_h
100 add_gen_header(
101   assert
102   DEF_FILE assert.h.def
103   GEN_HDR assert.h
104   DEPENDS
105     .llvm_libc_common_h
108 add_gen_header(
109   setjmp
110   DEF_FILE setjmp.h.def
111   GEN_HDR setjmp.h
112   DEPENDS
113     .llvm_libc_common_h
114     .llvm-libc-types.jmp_buf
117 add_gen_header(
118   string
119   DEF_FILE string.h.def
120   GEN_HDR string.h
121   DEPENDS
122     .llvm_libc_common_h
123     .llvm-libc-macros.null_macro
124     .llvm-libc-types.size_t
127 add_gen_header(
128   strings
129   DEF_FILE strings.h.def
130   GEN_HDR strings.h
131   DEPENDS
132     .llvm_libc_common_h
133     .llvm-libc-types.size_t
136 add_gen_header(
137   time
138   DEF_FILE time.h.def
139   GEN_HDR time.h
140   DEPENDS
141     .llvm_libc_common_h
142     .llvm-libc-macros.time_macros
143     .llvm-libc-types.clock_t
144     .llvm-libc-types.time_t
145     .llvm-libc-types.struct_tm
146     .llvm-libc-types.struct_timespec
147     .llvm-libc-types.struct_timeval
148     .llvm-libc-types.clockid_t
151 add_gen_header(
152   threads
153   DEF_FILE threads.h.def
154   GEN_HDR threads.h
155   DEPENDS
156     .llvm_libc_common_h
157     .llvm-libc-types.__call_once_func_t
158     .llvm-libc-types.once_flag
159     .llvm-libc-types.cnd_t
160     .llvm-libc-types.mtx_t
161     .llvm-libc-types.thrd_t
162     .llvm-libc-types.thrd_start_t
163     .llvm-libc-types.tss_t
164     .llvm-libc-types.tss_dtor_t
167 add_gen_header(
168   errno
169   DEF_FILE errno.h.def
170   GEN_HDR errno.h
171   DEPENDS
172     .llvm-libc-macros.generic_error_number_macros
175 add_gen_header(
176   signal
177   DEF_FILE signal.h.def
178   PARAMS
179     platform_signal=../config/${LIBC_TARGET_OS}/signal.h.in
180   GEN_HDR signal.h
181   DATA_FILES
182     ../config/${LIBC_TARGET_OS}/signal.h.in
183   DEPENDS
184     .llvm-libc-macros.signal_macros
185     .llvm-libc-types.sig_atomic_t
186     .llvm-libc-types.sigset_t
187     .llvm-libc-types.struct_sigaction
188     .llvm-libc-types.union_sigval
189     .llvm-libc-types.siginfo_t
190     .llvm-libc-types.stack_t
191     .llvm-libc-types.pid_t
194 add_gen_header(
195   stdio
196   DEF_FILE stdio.h.def
197   GEN_HDR stdio.h
198   DEPENDS
199     .llvm_libc_common_h
200     .llvm-libc-macros.file_seek_macros
201     .llvm-libc-macros.stdio_macros
202     .llvm-libc-types.size_t
203     .llvm-libc-types.ssize_t
204     .llvm-libc-types.FILE
205     .llvm-libc-types.cookie_io_functions_t
208 add_gen_header(
209   stdlib
210   DEF_FILE stdlib.h.def
211   GEN_HDR stdlib.h
212   DEPENDS
213     .llvm_libc_common_h
214     .llvm-libc-macros.stdlib_macros
215     .llvm-libc-types.div_t
216     .llvm-libc-types.ldiv_t
217     .llvm-libc-types.lldiv_t
218     .llvm-libc-types.size_t
219     .llvm-libc-types.__bsearchcompare_t
220     .llvm-libc-types.__qsortcompare_t
221     .llvm-libc-types.__qsortrcompare_t
222     .llvm-libc-types.__atexithandler_t
225 add_gen_header(
226   unistd
227   DEF_FILE unistd.h.def
228   GEN_HDR unistd.h
229   DEPENDS
230     .llvm_libc_common_h
231     .llvm-libc-macros.file_seek_macros
232     .llvm-libc-macros.unistd_macros
233     .llvm-libc-types.__exec_argv_t
234     .llvm-libc-types.__exec_envp_t
235     .llvm-libc-types.off_t
236     .llvm-libc-types.pid_t
237     .llvm-libc-types.size_t
238     .llvm-libc-types.ssize_t
239     .llvm-libc-types.uid_t
240     .llvm-libc-types.__getoptargv_t
243 add_gen_header(
244   pthread
245   DEF_FILE pthread.h.def
246   GEN_HDR pthread.h
247   DEPENDS
248     .llvm_libc_common_h
249     .llvm-libc-types.__atfork_callback_t
250     .llvm-libc-types.__pthread_once_func_t
251     .llvm-libc-types.__pthread_start_t
252     .llvm-libc-types.__pthread_tss_dtor_t
253     .llvm-libc-types.pthread_attr_t
254     .llvm-libc-types.pthread_mutex_t
255     .llvm-libc-types.pthread_mutexattr_t
256     .llvm-libc-types.pthread_t
257     .llvm-libc-types.pthread_key_t
258     .llvm-libc-types.pthread_once_t
261 add_gen_header(
262   sched
263   DEF_FILE sched.h.def
264   GEN_HDR sched.h
265   DEPENDS
266     .llvm_libc_common_h
267     .llvm-libc-macros.sched_macros
268     .llvm-libc-types.cpu_set_t
269     .llvm-libc-types.pid_t
270     .llvm-libc-types.size_t
271     .llvm-libc-types.struct_sched_param
272     # Needed according to posix standard
273     .llvm-libc-types.time_t
274     .llvm-libc-types.struct_timespec
277 add_gen_header(
278   spawn
279   DEF_FILE spawn.h.def
280   GEN_HDR spawn.h
281   DEPENDS
282     .llvm_libc_common_h
283     .llvm-libc-types.mode_t
284     .llvm-libc-types.pid_t
285     .llvm-libc-types.posix_spawnattr_t
286     .llvm-libc-types.posix_spawn_file_actions_t
289 # TODO: Not all platforms will have a include/sys directory. Add the sys
290 # directory and the targets for sys/*.h files conditional to the OS requiring
291 # them.
292 file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/sys)
294 add_gen_header(
295   sys_auxv
296   DEF_FILE sys/auxv.h.def
297   GEN_HDR sys/auxv.h
298   DEPENDS
299     .llvm_libc_common_h
300     .llvm-libc-macros.sys_auxv_macros
303 add_gen_header(
304   sys_ioctl
305   DEF_FILE sys/ioctl.h.def
306   GEN_HDR sys/ioctl.h
307   DEPENDS
308     .llvm_libc_common_h
309     .llvm-libc-macros.sys_ioctl_macros
312 add_gen_header(
313   sys_mman
314   DEF_FILE sys/mman.h.def
315   GEN_HDR sys/mman.h
316   DEPENDS
317     .llvm_libc_common_h
318     .llvm-libc-macros.sys_mman_macros
319     .llvm-libc-types.off_t
320     .llvm-libc-types.size_t
321     .llvm-libc-types.ssize_t
324 add_gen_header(
325   sys_prctl
326   DEF_FILE sys/prctl.h.def
327   GEN_HDR sys/prctl.h
328   DEPENDS
329     .llvm_libc_common_h
332 add_gen_header(
333   sys_random
334   DEF_FILE sys/random.h.def
335   GEN_HDR sys/random.h
336   DEPENDS
337     .llvm_libc_common_h
338     .llvm-libc-macros.sys_random_macros
339     .llvm-libc-types.size_t
340     .llvm-libc-types.ssize_t
343 add_gen_header(
344   sys_resource
345   DEF_FILE sys/resource.h.def
346   GEN_HDR sys/resource.h
347   DEPENDS
348     .llvm_libc_common_h
349     .llvm-libc-macros.sys_resource_macros
350     .llvm-libc-types.rlim_t
351     .llvm-libc-types.struct_rlimit
354 add_gen_header(
355   sys_stat
356   DEF_FILE sys/stat.h.def
357   GEN_HDR sys/stat.h
358   DEPENDS
359     .llvm_libc_common_h
360     .llvm-libc-macros.sys_stat_macros
361     .llvm-libc-types.mode_t
362     .llvm-libc-types.dev_t
363     .llvm-libc-types.ino_t
364     .llvm-libc-types.nlink_t
365     .llvm-libc-types.uid_t
366     .llvm-libc-types.gid_t
367     .llvm-libc-types.off_t
368     .llvm-libc-types.struct_timespec
369     .llvm-libc-types.struct_timeval
370     .llvm-libc-types.blksize_t
371     .llvm-libc-types.blkcnt_t
372     .llvm-libc-types.struct_stat
375 add_gen_header(
376   sys_select
377   DEF_FILE sys/select.h.def
378   GEN_HDR sys/select.h
379   DEPENDS
380     .llvm_libc_common_h
381     .llvm-libc-macros.sys_select_macros
382     .llvm-libc-types.fd_set
383     .llvm-libc-types.sigset_t
384     .llvm-libc-types.suseconds_t
385     .llvm-libc-types.time_t
386     .llvm-libc-types.struct_timespec
387     .llvm-libc-types.struct_timeval
390 add_gen_header(
391   sys_sendfile
392   DEF_FILE sys/sendfile.h.def
393   GEN_HDR sys/sendfile.h
394   DEPENDS
395     .llvm_libc_common_h
396     .llvm-libc-types.off_t
397     .llvm-libc-types.size_t
398     .llvm-libc-types.ssize_t
401 add_gen_header(
402   sys_socket
403   DEF_FILE sys/socket.h.def
404   GEN_HDR sys/socket.h
405   DEPENDS
406     .llvm_libc_common_h
407     .llvm-libc-macros.sys_socket_macros
408     .llvm-libc-types.struct_sockaddr
409     .llvm-libc-types.sa_family_t
412 add_gen_header(
413   sys_syscall
414   DEF_FILE sys/syscall.h.def
415   GEN_HDR sys/syscall.h
416   PARAMS
417     syscall_numbers=../config/${LIBC_TARGET_OS}/syscall_numbers.h.inc
418   DATA_FILES
419     ../config/${LIBC_TARGET_OS}/syscall_numbers.h.inc
422 add_gen_header(
423   sys_time
424   DEF_FILE sys/time.h.def
425   GEN_HDR sys/time.h
426   DEPENDS
427     .llvm_libc_common_h
428     .llvm-libc-types.struct_timeval
429     .llvm-libc-macros.sys_time_macros
432 add_gen_header(
433   sys_types
434   DEF_FILE sys/types.h.def
435   GEN_HDR sys/types.h
436   DEPENDS
437     .llvm_libc_common_h
438     .llvm-libc-types.blkcnt_t
439     .llvm-libc-types.blksize_t
440     .llvm-libc-types.clockid_t
441     .llvm-libc-types.dev_t
442     .llvm-libc-types.gid_t
443     .llvm-libc-types.ino_t
444     .llvm-libc-types.mode_t
445     .llvm-libc-types.nlink_t
446     .llvm-libc-types.off_t
447     .llvm-libc-types.pid_t
448     .llvm-libc-types.pthread_attr_t
449     .llvm-libc-types.pthread_key_t
450     .llvm-libc-types.pthread_mutex_t
451     .llvm-libc-types.pthread_mutexattr_t
452     .llvm-libc-types.pthread_once_t
453     .llvm-libc-types.pthread_t
454     .llvm-libc-types.size_t
455     .llvm-libc-types.ssize_t
456     .llvm-libc-types.suseconds_t
457     .llvm-libc-types.time_t
458     .llvm-libc-types.uid_t
461 add_gen_header(
462   sys_utsname
463   DEF_FILE sys/utsname.h.def
464   GEN_HDR sys/utsname.h
465   DEPENDS
466     .llvm_libc_common_h
467     .llvm-libc-types.struct_utsname
470 add_gen_header(
471   sys_wait
472   DEF_FILE sys/wait.h.def
473   GEN_HDR sys/wait.h
474   DEPENDS
475     .llvm_libc_common_h
476     .llvm-libc-macros.sys_wait_macros
477     .llvm-libc-types.pid_t
478     .llvm-libc-types.struct_rusage
479     .llvm-libc-types.siginfo_t
482 add_gen_header(
483   termios
484   DEF_FILE termios.h.def
485   GEN_HDR termios.h
486   DEPENDS
487     .llvm_libc_common_h
488     .llvm-libc-macros.termios_macros
489     .llvm-libc-types.cc_t
490     .llvm-libc-types.pid_t
491     .llvm-libc-types.speed_t
492     .llvm-libc-types.struct_termios
493     .llvm-libc-types.tcflag_t
496 add_gen_header(
497   wchar
498   DEF_FILE wchar.h.def
499   GEN_HDR wchar.h
500   DEPENDS
501     .llvm_libc_common_h
502     .llvm-libc-macros.wchar_macros
503     .llvm-libc-types.size_t
504     .llvm-libc-types.wint_t
505     .llvm-libc-types.wchar_t
508 if(LIBC_TARGET_ARCHITECTURE_IS_GPU)
509   file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/gpu)
511   add_gen_header(
512     gpu_rpc
513     DEF_FILE gpu/rpc.h.def
514     GEN_HDR gpu/rpc.h
515     DEPENDS
516       .llvm_libc_common_h
517       .llvm-libc-types.rpc_opcodes_t
518   )
519 endif()
521 if(NOT LLVM_LIBC_FULL_BUILD)
522   # We don't install headers in non-fullbuild mode.
523   return()
524 endif()
526 function(get_all_install_header_targets out_var)
527   set(all_deps ${ARGN})
528   foreach(target IN LISTS ARGN)
529     get_target_property(deps ${target} DEPS)
530     if(NOT deps)
531       continue()
532     endif()
533     list(APPEND all_deps ${deps})
534     get_all_install_header_targets(nested_deps ${deps})
535     list(APPEND all_deps ${nested_deps})
536   endforeach()
537   list(REMOVE_DUPLICATES all_deps)
538   set(${out_var} ${all_deps} PARENT_SCOPE)
539 endfunction(get_all_install_header_targets)
541 get_all_install_header_targets(all_install_header_targets ${TARGET_PUBLIC_HEADERS})
542 add_library(libc-headers INTERFACE)
543 add_dependencies(libc-headers ${all_install_header_targets})
544 target_include_directories(libc-headers SYSTEM INTERFACE ${LIBC_INCLUDE_DIR})
546 foreach(target IN LISTS all_install_header_targets)
547   get_target_property(header_file ${target} HEADER_FILE_PATH)
548   if(NOT header_file)
549     message(FATAL_ERROR "Installable header file '${target}' does not have the "
550                         "HEADER_FILE_PATH property set.")
551   endif()
552   file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_DIR} ${header_file})
553   get_filename_component(nested_dir ${relative_path} DIRECTORY)
554   install(FILES ${header_file}
555           DESTINATION ${LIBC_INSTALL_INCLUDE_DIR}/${nested_dir}
556           COMPONENT libc-headers)
557   # The GPU optionally provides the supported declarations externally so
558   # offloading languages like CUDA and OpenMP know what is supported by libc. We
559   # install these in the compiler's resource directory at a preset location.
560   if(LIBC_TARGET_ARCHITECTURE_IS_GPU AND PACKAGE_VERSION)
561     get_target_property(decls_file ${target} DECLS_FILE_PATH)
562     if(NOT decls_file)
563       continue()
564     endif()
565     get_clang_resource_dir(resource_dir SUBDIR include)
566     file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_DIR} ${decls_file})
567     get_filename_component(nested_dir ${relative_path} DIRECTORY)
568     set(install_dir
569         ${CMAKE_INSTALL_PREFIX}/${resource_dir}/llvm_libc_wrappers/${nested_dir})
570     install(FILES ${decls_file}
571             DESTINATION ${install_dir}
572             COMPONENT libc-headers)
573   endif()
574 endforeach()