[clang-tidy][NFC]remove deps of clang in clang tidy test (#116588)
[llvm-project.git] / libc / include / CMakeLists.txt
blob91611026df105ca7edc69f4a746cf828c4e90f3b
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_OS_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 macro(add_header_macro TARGET_NAME YAML_FILE DEF_FILE GEN_HDR DEPENDS)
21   if (LIBC_USE_NEW_HEADER_GEN)
22     add_gen_header2(
23       ${TARGET_NAME}
24       YAML_FILE ${YAML_FILE}
25       DEF_FILE ${DEF_FILE}
26       GEN_HDR ${GEN_HDR}
27       ${DEPENDS}
28       ${ARGN}
29     )
30   else()
31     add_gen_header(
32       ${TARGET_NAME}
33       DEF_FILE ${DEF_FILE}
34       GEN_HDR ${GEN_HDR}
35       ${DEPENDS}
36       ${ARGN}
37     )
38   endif()
39 endmacro()
41 add_header_macro(
42   ctype
43   ../libc/newhdrgen/yaml/ctype.yaml
44   ctype.h.def
45   ctype.h
46   DEPENDS
47     .llvm_libc_common_h
48     .llvm-libc-types.locale_t
51 add_header_macro(
52   dirent
53   ../libc/newhdrgen/yaml/dirent.yaml
54   dirent.h.def
55   dirent.h
56   DEPENDS
57     .llvm_libc_common_h
58     .llvm-libc-types.ino_t
59     .llvm-libc-types.DIR
60     .llvm-libc-types.struct_dirent
63 add_header_macro(
64   fcntl
65   ../libc/newhdrgen/yaml/fcntl.yaml
66   fcntl.h.def
67   fcntl.h
68   DEPENDS
69     .llvm-libc-macros.fcntl_macros
70     .llvm-libc-types.mode_t
71     .llvm-libc-types.struct_flock
72     .llvm-libc-types.struct_flock64
73     .llvm-libc-types.off64_t
74     .llvm-libc-types.pid_t
75     .llvm-libc-types.off_t
76     .llvm_libc_common_h
79 add_header_macro(
80   dlfcn
81   ../libc/newhdrgen/yaml/dlfcn.yaml
82   dlfcn.h.def
83   dlfcn.h
84   DEPENDS
85     .llvm-libc-macros.dlfcn_macros
86     .llvm_libc_common_h
89 add_header_macro(
90   features
91   ../libc/newhdrgen/yaml/features.yaml
92   features.h.def
93   features.h
94   DEPENDS
95     .llvm_libc_common_h
96     .llvm-libc-macros.features_macros
99 add_header_macro(
100   fenv
101   ../libc/newhdrgen/yaml/fenv.yaml
102   fenv.h.def
103   fenv.h
104   DEPENDS
105     .llvm_libc_common_h
106     .llvm-libc-macros.fenv_macros
107     .llvm-libc-types.fenv_t
108     .llvm-libc-types.fexcept_t
111 add_header_macro(
112   inttypes
113   ../libc/newhdrgen/yaml/inttypes.yaml
114   inttypes.h.def
115   inttypes.h
116   DEPENDS
117     .llvm_libc_common_h
118     .llvm-libc-types.imaxdiv_t
119     .llvm-libc-macros.inttypes_macros
122 add_header_macro(
123   float
124   ../libc/newhdrgen/yaml/float.yaml
125   float.h.def
126   float.h
127   DEPENDS
128     .llvm-libc-macros.float_macros
131 add_header_macro(
132   stdint
133   ../libc/newhdrgen/yaml/stdint.yaml
134   stdint.h.def
135   stdint.h
136   DEPENDS
137     .llvm-libc-macros.stdint_macros
140 add_header_macro(
141   limits
142   ../libc/newhdrgen/yaml/limits.yaml
143   limits.h.def
144   limits.h
145   DEPENDS
146     .llvm-libc-macros.limits_macros
149 add_header_macro(
150   malloc
151   ../libc/newhdrgen/yaml/malloc.yaml
152   malloc.h.def
153   malloc.h
154   DEPENDS
155     .llvm_libc_common_h
156     .llvm-libc-macros.malloc_macros
159 add_header_macro(
160   math
161   ../libc/newhdrgen/yaml/math.yaml
162   math.h.def
163   math.h
164   DEPENDS
165     .llvm_libc_common_h
166     .llvm-libc-macros.float16_macros
167     .llvm-libc-macros.math_macros
168     .llvm-libc-macros.math_function_macros
169     .llvm-libc-types.double_t
170     .llvm-libc-types.float_t
171     .llvm-libc-types.float128
174 add_header_macro(
175   stdfix
176   ../libc/newhdrgen/yaml/stdfix.yaml
177   stdfix.h.def
178   stdfix.h
179   DEPENDS
180     .llvm-libc-macros.stdfix_macros
181     .llvm-libc-types.stdfix-types
184 # TODO: This should be conditional on POSIX networking being included.
185 file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/arpa)
187 add_header_macro(
188   arpa_inet
189   ../libc/newhdrgen/yaml/arpa/inet.yaml
190   arpa/inet.h.def
191   arpa/inet.h
192   DEPENDS
193     .llvm_libc_common_h
196 add_header_macro(
197   assert
198   ../libc/newhdrgen/yaml/assert.yaml
199   assert.h.def
200   assert.h
201   DEPENDS
202     .llvm_libc_common_h
203     .llvm-libc-macros.assert_macros
206 add_header_macro(
207   complex
208   ../libc/newhdrgen/yaml/complex.yaml
209   complex.h.def
210   complex.h
211   DEPENDS
212     .llvm_libc_common_h
213     .llvm-libc-macros.complex_macros
216 add_header_macro(
217   setjmp
218   ../libc/newhdrgen/yaml/setjmp.yaml
219   setjmp.h.def
220   setjmp.h
221   DEPENDS
222     .llvm_libc_common_h
223     .llvm-libc-types.jmp_buf
226 add_header_macro(
227   string
228   ../libc/newhdrgen/yaml/string.yaml
229   string.h.def
230   string.h
231   DEPENDS
232     .llvm_libc_common_h
233     .llvm-libc-macros.null_macro
234     .llvm-libc-types.size_t
237 add_header_macro(
238   strings
239   ../libc/newhdrgen/yaml/strings.yaml
240   strings.h.def
241   strings.h
242   DEPENDS
243     .llvm_libc_common_h
244     .llvm-libc-types.size_t
247 add_header_macro(
248   search
249   ../libc/newhdrgen/yaml/search.yaml
250   search.h.def
251   search.h
252   DEPENDS
253     .llvm_libc_common_h
254     .llvm-libc-types.ACTION
255     .llvm-libc-types.ENTRY
256     .llvm-libc-types.struct_hsearch_data
257     .llvm-libc-types.size_t
258     .llvm-libc-types.__lsearchcompare_t
261 add_header_macro(
262   time
263   ../libc/newhdrgen/yaml/time.yaml
264   time.h.def
265   time.h
266   DEPENDS
267     .llvm_libc_common_h
268     .llvm-libc-macros.time_macros
269     .llvm-libc-types.clock_t
270     .llvm-libc-types.time_t
271     .llvm-libc-types.struct_tm
272     .llvm-libc-types.struct_timespec
273     .llvm-libc-types.struct_timeval
274     .llvm-libc-types.clockid_t
277 add_header_macro(
278   threads
279   ../libc/newhdrgen/yaml/threads.yaml
280   threads.h.def
281   threads.h
282   DEPENDS
283     .llvm_libc_common_h
284     .llvm-libc-types.__call_once_func_t
285     .llvm-libc-types.once_flag
286     .llvm-libc-types.cnd_t
287     .llvm-libc-types.mtx_t
288     .llvm-libc-types.thrd_t
289     .llvm-libc-types.thrd_start_t
290     .llvm-libc-types.tss_t
291     .llvm-libc-types.tss_dtor_t
294 add_header_macro(
295   errno
296   ../libc/newhdrgen/yaml/errno.yaml
297   errno.h.def
298   errno.h
299   DEPENDS
300     .llvm-libc-macros.generic_error_number_macros
301     .llvm-libc-macros.error_number_macros
304 add_header_macro(
305   signal
306   ../libc/newhdrgen/yaml/signal.yaml
307   signal.h.def
308   signal.h
309   DEPENDS
310     .llvm-libc-macros.signal_macros
311     .llvm-libc-types.sig_atomic_t
312     .llvm-libc-types.sigset_t
313     .llvm-libc-types.struct_sigaction
314     .llvm-libc-types.union_sigval
315     .llvm-libc-types.siginfo_t
316     .llvm-libc-types.stack_t
317     .llvm-libc-types.pid_t
320 add_header_macro(
321   stdbit
322   ../libc/newhdrgen/yaml/stdbit.yaml
323   stdbit.h.def
324   stdbit.h
325   DEPENDS
326     .llvm_libc_common_h
327     .llvm-libc-macros.stdbit_macros
330 add_header_macro(
331   stdckdint
332   ../libc/newhdrgen/yaml/stdckdint.yaml
333   stdckdint.h.def
334   stdckdint.h
335   DEPENDS
336     .llvm_libc_common_h
337     .llvm-libc-macros.stdckdint_macros
340 add_header_macro(
341   stdio
342   ../libc/newhdrgen/yaml/stdio.yaml
343   stdio.h.def
344   stdio.h
345   DEPENDS
346     .llvm-libc-macros.file_seek_macros
347     .llvm-libc-macros.stdio_macros
348     .llvm-libc-types.FILE
349     .llvm-libc-types.cookie_io_functions_t
350     .llvm-libc-types.off_t
351     .llvm-libc-types.size_t
352     .llvm-libc-types.ssize_t
353     .llvm_libc_common_h
356 add_header_macro(
357   stdlib
358   ../libc/newhdrgen/yaml/stdlib.yaml
359   stdlib.h.def
360   stdlib.h
361   DEPENDS
362     .llvm_libc_common_h
363     .llvm-libc-macros.stdlib_macros
364     .llvm-libc-types.div_t
365     .llvm-libc-types.ldiv_t
366     .llvm-libc-types.lldiv_t
367     .llvm-libc-types.size_t
368     .llvm-libc-types.__bsearchcompare_t
369     .llvm-libc-types.__qsortcompare_t
370     .llvm-libc-types.__qsortrcompare_t
371     .llvm-libc-types.__atexithandler_t
372     .llvm-libc-types.locale_t
375 add_header_macro(
376   unistd
377   ../libc/newhdrgen/yaml/unistd.yaml
378   unistd.h.def
379   unistd.h
380   DEPENDS
381     .llvm_libc_common_h
382     .llvm-libc-macros.file_seek_macros
383     .llvm-libc-macros.unistd_macros
384     .llvm-libc-types.__exec_argv_t
385     .llvm-libc-types.__exec_envp_t
386     .llvm-libc-types.off_t
387     .llvm-libc-types.pid_t
388     .llvm-libc-types.size_t
389     .llvm-libc-types.ssize_t
390     .llvm-libc-types.uid_t
391     .llvm-libc-types.__getoptargv_t
394 add_header_macro(
395   pthread
396   ../libc/newhdrgen/yaml/pthread.yaml
397   pthread.h.def
398   pthread.h
399   DEPENDS
400     .llvm_libc_common_h
401     .llvm-libc-types.__atfork_callback_t
402     .llvm-libc-types.__pthread_once_func_t
403     .llvm-libc-types.__pthread_start_t
404     .llvm-libc-types.__pthread_tss_dtor_t
405     .llvm-libc-types.pthread_attr_t
406     .llvm-libc-types.pthread_condattr_t
407     .llvm-libc-types.pthread_key_t
408     .llvm-libc-types.pthread_mutex_t
409     .llvm-libc-types.pthread_mutexattr_t
410     .llvm-libc-types.pthread_once_t
411     .llvm-libc-types.pthread_rwlock_t
412     .llvm-libc-types.pthread_rwlockattr_t
413     .llvm-libc-types.pthread_spinlock_t
414     .llvm-libc-types.pthread_t
417 add_header_macro(
418   sched
419   ../libc/newhdrgen/yaml/sched.yaml
420   sched.h.def
421   sched.h
422   DEPENDS
423     .llvm_libc_common_h
424     .llvm-libc-macros.sched_macros
425     .llvm-libc-types.cpu_set_t
426     .llvm-libc-types.pid_t
427     .llvm-libc-types.size_t
428     .llvm-libc-types.struct_sched_param
429     # Needed according to posix standard
430     .llvm-libc-types.time_t
431     .llvm-libc-types.struct_timespec
434 add_header_macro(
435   spawn
436   ../libc/newhdrgen/yaml/spawn.yaml
437   spawn.h.def
438   spawn.h
439   DEPENDS
440     .llvm_libc_common_h
441     .llvm-libc-types.mode_t
442     .llvm-libc-types.pid_t
443     .llvm-libc-types.posix_spawnattr_t
444     .llvm-libc-types.posix_spawn_file_actions_t
447 add_header_macro(
448   link
449   ../libc/newhdrgen/yaml/link.yaml
450   link.h.def
451   link.h
452   DEPENDS
453     .llvm_libc_common_h
454     .llvm-libc-macros.link_macros
457 add_header_macro(
458   elf
459   ../libc/newhdrgen/yaml/elf.yaml
460   elf.h.def
461   elf.h
462   DEPENDS
463     .llvm-libc-macros.elf_macros
466 # TODO: Not all platforms will have a include/sys directory. Add the sys
467 # directory and the targets for sys/*.h files conditional to the OS requiring
468 # them.
469 file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/sys)
471 add_header_macro(
472   sys_auxv
473   ../libc/newhdrgen/yaml/sys/auxv.yaml
474   sys/auxv.h.def
475   sys/auxv.h
476   DEPENDS
477     .llvm_libc_common_h
478     .llvm-libc-macros.sys_auxv_macros
481 add_header_macro(
482   sys_epoll
483   ../libc/newhdrgen/yaml/sys/epoll.yaml
484   sys/epoll.h.def
485   sys/epoll.h
486   DEPENDS
487     .llvm_libc_common_h
488     .llvm-libc-types.struct_epoll_event
489     .llvm-libc-types.struct_epoll_data
490     .llvm-libc-types.sigset_t
491     .llvm-libc-macros.sys_epoll_macros
494 add_header_macro(
495   sys_ioctl
496   ../libc/newhdrgen/yaml/sys/ioctl.yaml
497   sys/ioctl.h.def
498   sys/ioctl.h
499   DEPENDS
500     .llvm_libc_common_h
501     .llvm-libc-macros.sys_ioctl_macros
504 add_header_macro(
505   sys_mman
506   ../libc/newhdrgen/yaml/sys/mman.yaml
507   sys/mman.h.def
508   sys/mman.h
509   DEPENDS
510     .llvm_libc_common_h
511     .llvm-libc-macros.sys_mman_macros
512     .llvm-libc-types.off_t
513     .llvm-libc-types.size_t
514     .llvm-libc-types.ssize_t
517 add_header_macro(
518   sys_prctl
519   ../libc/newhdrgen/yaml/sys/prctl.yaml
520   sys/prctl.h.def
521   sys/prctl.h
522   DEPENDS
523     .llvm_libc_common_h
526 add_header(
527   sys_queue
528   HDR
529     sys/queue.h
530   DEPENDS
531     .llvm-libc-macros.sys_queue_macros
534 add_header_macro(
535   sys_random
536   ../libc/newhdrgen/yaml/sys/random.yaml
537   sys/random.h.def
538   sys/random.h
539   DEPENDS
540     .llvm_libc_common_h
541     .llvm-libc-macros.sys_random_macros
542     .llvm-libc-types.size_t
543     .llvm-libc-types.ssize_t
546 add_header_macro(
547   sys_resource
548   ../libc/newhdrgen/yaml/sys/resource.yaml
549   sys/resource.h.def
550   sys/resource.h
551   DEPENDS
552     .llvm_libc_common_h
553     .llvm-libc-macros.sys_resource_macros
554     .llvm-libc-types.rlim_t
555     .llvm-libc-types.struct_rlimit
558 add_header_macro(
559   sys_stat
560   ../libc/newhdrgen/yaml/sys/stat.yaml
561   sys/stat.h.def
562   sys/stat.h
563   DEPENDS
564     .llvm_libc_common_h
565     .llvm-libc-macros.sys_stat_macros
566     .llvm-libc-types.mode_t
567     .llvm-libc-types.dev_t
568     .llvm-libc-types.ino_t
569     .llvm-libc-types.nlink_t
570     .llvm-libc-types.uid_t
571     .llvm-libc-types.gid_t
572     .llvm-libc-types.off_t
573     .llvm-libc-types.struct_timespec
574     .llvm-libc-types.struct_timeval
575     .llvm-libc-types.blksize_t
576     .llvm-libc-types.blkcnt_t
577     .llvm-libc-types.struct_stat
580 add_header_macro(
581   sys_select
582   ../libc/newhdrgen/yaml/sys/select.yaml
583   sys/select.h.def
584   sys/select.h
585   DEPENDS
586     .llvm_libc_common_h
587     .llvm-libc-macros.sys_select_macros
588     .llvm-libc-types.fd_set
589     .llvm-libc-types.sigset_t
590     .llvm-libc-types.suseconds_t
591     .llvm-libc-types.time_t
592     .llvm-libc-types.struct_timespec
593     .llvm-libc-types.struct_timeval
596 add_header_macro(
597   sys_sendfile
598   ../libc/newhdrgen/yaml/sys/sendfile.yaml
599   sys/sendfile.h.def
600   sys/sendfile.h
601   DEPENDS
602     .llvm_libc_common_h
603     .llvm-libc-types.off_t
604     .llvm-libc-types.size_t
605     .llvm-libc-types.ssize_t
608 add_header_macro(
609   sys_socket
610   ../libc/newhdrgen/yaml/sys/socket.yaml
611   sys/socket.h.def
612   sys/socket.h
613   DEPENDS
614     .llvm_libc_common_h
615     .llvm-libc-macros.sys_socket_macros
616     .llvm-libc-types.sa_family_t
617     .llvm-libc-types.socklen_t
618     .llvm-libc-types.struct_iovec
619     .llvm-libc-types.struct_msghdr
620     .llvm-libc-types.struct_sockaddr
621     .llvm-libc-types.struct_sockaddr_un
624 add_header_macro(
625   sys_statvfs
626   ../libc/newhdrgen/yaml/sys/statvfs.yaml
627   sys/statvfs.h.def
628   sys/statvfs.h
629   DEPENDS
630     .llvm_libc_common_h
631     .llvm-libc-types.struct_statvfs
634 add_header_macro(
635   sys_syscall
636   ../libc/newhdrgen/yaml/sys/syscall.yaml
637   sys/syscall.h.def
638   sys/syscall.h
639   DEPENDS
642 add_header_macro(
643   sys_time
644   ../libc/newhdrgen/yaml/sys/time.yaml
645   sys/time.h.def
646   sys/time.h
647   DEPENDS
648     .llvm_libc_common_h
649     .llvm-libc-types.struct_timeval
650     .llvm-libc-macros.sys_time_macros
653 add_header_macro(
654   sys_types
655   ../libc/newhdrgen/yaml/sys/types.yaml
656   sys/types.h.def
657   sys/types.h
658   DEPENDS
659     .llvm_libc_common_h
660     .llvm-libc-types.blkcnt_t
661     .llvm-libc-types.blksize_t
662     .llvm-libc-types.clockid_t
663     .llvm-libc-types.dev_t
664     .llvm-libc-types.gid_t
665     .llvm-libc-types.ino_t
666     .llvm-libc-types.mode_t
667     .llvm-libc-types.nlink_t
668     .llvm-libc-types.off_t
669     .llvm-libc-types.pid_t
670     .llvm-libc-types.pthread_attr_t
671     .llvm-libc-types.pthread_key_t
672     .llvm-libc-types.pthread_mutex_t
673     .llvm-libc-types.pthread_mutexattr_t
674     .llvm-libc-types.pthread_once_t
675     .llvm-libc-types.pthread_t
676     .llvm-libc-types.size_t
677     .llvm-libc-types.ssize_t
678     .llvm-libc-types.suseconds_t
679     .llvm-libc-types.time_t
680     .llvm-libc-types.uid_t
683 add_header_macro(
684   sys_utsname
685   ../libc/newhdrgen/yaml/sys/utsname.yaml
686   sys/utsname.h.def
687   sys/utsname.h
688   DEPENDS
689     .llvm_libc_common_h
690     .llvm-libc-types.struct_utsname
693 add_header_macro(
694   sys_wait
695   ../libc/newhdrgen/yaml/sys/wait.yaml
696   sys/wait.h.def
697   sys/wait.h
698   DEPENDS
699     .llvm_libc_common_h
700     .llvm-libc-macros.sys_wait_macros
701     .llvm-libc-types.pid_t
702     .llvm-libc-types.struct_rusage
703     .llvm-libc-types.siginfo_t
706 add_header_macro(
707   termios
708   ../libc/newhdrgen/yaml/termios.yaml
709   termios.h.def
710   termios.h
711   DEPENDS
712     .llvm_libc_common_h
713     .llvm-libc-macros.termios_macros
714     .llvm-libc-types.cc_t
715     .llvm-libc-types.pid_t
716     .llvm-libc-types.speed_t
717     .llvm-libc-types.struct_termios
718     .llvm-libc-types.tcflag_t
721 add_header_macro(
722   uchar
723   ../libc/newhdrgen/yaml/uchar.yaml
724   uchar.h.def
725   uchar.h
726   DEPENDS
727     .llvm_libc_common_h
728     .llvm-libc-types.mbstate_t
729     .llvm-libc-types.char8_t
730     .llvm-libc-types.char16_t
731     .llvm-libc-types.char32_t
734 add_header_macro(
735   wchar
736   ../libc/newhdrgen/yaml/wchar.yaml
737   wchar.h.def
738   wchar.h
739   DEPENDS
740     .llvm_libc_common_h
741     .llvm-libc-macros.wchar_macros
742     .llvm-libc-types.mbstate_t
743     .llvm-libc-types.size_t
744     .llvm-libc-types.wint_t
745     .llvm-libc-types.wchar_t
748 add_header_macro(
749   locale
750   ../libc/newhdrgen/yaml/locale.yaml
751   locale.h.def
752   locale.h
753   DEPENDS
754     .llvm_libc_common_h
755     .llvm-libc-macros.locale_macros
756     .llvm-libc-types.locale_t
757     .llvm-libc-types.struct_lconv
760 if(LIBC_TARGET_OS_IS_GPU)
761   file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/gpu)
763   add_header_macro(
764     gpu_rpc
765     ../libc/newhdrgen/yaml/gpu/rpc.yaml
766     gpu/rpc.h.def
767     gpu/rpc.h
768     DEPENDS
769       .llvm_libc_common_h
770       .llvm-libc-types.rpc_opcodes_t
771   )
772 endif()
774 if(NOT LLVM_LIBC_FULL_BUILD)
775   # We don't install headers in non-fullbuild mode.
776   return()
777 endif()
779 function(get_all_install_header_targets out_var)
780   set(all_deps ${ARGN})
781   foreach(target IN LISTS ARGN)
782     get_target_property(deps ${target} DEPS)
783     if(NOT deps)
784       continue()
785     endif()
786     list(APPEND all_deps ${deps})
787     get_all_install_header_targets(nested_deps ${deps})
788     list(APPEND all_deps ${nested_deps})
789   endforeach()
790   list(REMOVE_DUPLICATES all_deps)
791   set(${out_var} ${all_deps} PARENT_SCOPE)
792 endfunction(get_all_install_header_targets)
794 get_all_install_header_targets(all_install_header_targets ${TARGET_PUBLIC_HEADERS})
795 add_library(libc-headers INTERFACE)
796 add_dependencies(libc-headers ${all_install_header_targets})
797 target_include_directories(libc-headers SYSTEM INTERFACE ${LIBC_INCLUDE_DIR})
799 foreach(target IN LISTS all_install_header_targets)
800   get_target_property(header_file ${target} HEADER_FILE_PATH)
801   if(NOT header_file)
802     message(FATAL_ERROR "Installable header file '${target}' does not have the "
803                         "HEADER_FILE_PATH property set.")
804   endif()
805   file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_DIR} ${header_file})
806   get_filename_component(nested_dir ${relative_path} DIRECTORY)
807   install(FILES ${header_file}
808           DESTINATION ${LIBC_INSTALL_INCLUDE_DIR}/${nested_dir}
809           COMPONENT libc-headers)
810   # The GPU optionally provides the supported declarations externally so
811   # offloading languages like CUDA and OpenMP know what is supported by libc. We
812   # install these in the compiler's resource directory at a preset location.
813   if(LIBC_TARGET_OS_IS_GPU AND PACKAGE_VERSION)
814     get_target_property(decls_file ${target} DECLS_FILE_PATH)
815     if(NOT decls_file)
816       continue()
817     endif()
818     get_clang_resource_dir(resource_dir SUBDIR include)
819     file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_DIR} ${decls_file})
820     get_filename_component(nested_dir ${relative_path} DIRECTORY)
821     set(install_dir
822         ${CMAKE_INSTALL_PREFIX}/${resource_dir}/llvm_libc_wrappers/${nested_dir})
823     install(FILES ${decls_file}
824             DESTINATION ${install_dir}
825             COMPONENT libc-headers)
826   endif()
827 endforeach()
829 if(LLVM_LIBC_FULL_BUILD)
830   add_custom_target(install-libc-headers
831                     DEPENDS libc-headers
832                     COMMAND "${CMAKE_COMMAND}"
833                             -DCMAKE_INSTALL_COMPONENT=libc-headers
834                             -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
835   # Stripping is a no-op for headers
836   add_custom_target(install-libc-headers-stripped DEPENDS install-libc-headers)
837 endif()