1set(files
2  adxintrin.h
3  altivec.h
4  ammintrin.h
5  amxintrin.h
6  arm_acle.h
7  arm_cmse.h
8  armintr.h
9  arm64intr.h
10  avx2intrin.h
11  avx512bf16intrin.h
12  avx512bwintrin.h
13  avx512bitalgintrin.h
14  avx512vlbitalgintrin.h
15  avx512cdintrin.h
16  avx512vpopcntdqintrin.h
17  avx512dqintrin.h
18  avx512erintrin.h
19  avx512fintrin.h
20  avx512ifmaintrin.h
21  avx512ifmavlintrin.h
22  avx512pfintrin.h
23  avx512vbmiintrin.h
24  avx512vbmivlintrin.h
25  avx512vbmi2intrin.h
26  avx512vlvbmi2intrin.h
27  avx512vlbf16intrin.h
28  avx512vlbwintrin.h
29  avx512vlcdintrin.h
30  avx512vldqintrin.h
31  avx512vlintrin.h
32  avx512vp2intersectintrin.h
33  avx512vlvp2intersectintrin.h
34  avx512vpopcntdqvlintrin.h
35  avx512vnniintrin.h
36  avx512vlvnniintrin.h
37  avxintrin.h
38  avxvnniintrin.h
39  bmi2intrin.h
40  bmiintrin.h
41  builtins.h
42  __clang_cuda_builtin_vars.h
43  __clang_cuda_math.h
44  __clang_cuda_cmath.h
45  __clang_cuda_complex_builtins.h
46  __clang_cuda_device_functions.h
47  __clang_cuda_intrinsics.h
48  __clang_cuda_libdevice_declares.h
49  __clang_cuda_math_forward_declares.h
50  __clang_cuda_runtime_wrapper.h
51  __clang_hip_libdevice_declares.h
52  __clang_hip_cmath.h
53  __clang_hip_math.h
54  __clang_hip_runtime_wrapper.h
55  cetintrin.h
56  cet.h
57  cldemoteintrin.h
58  clzerointrin.h
59  cpuid.h
60  clflushoptintrin.h
61  clwbintrin.h
62  emmintrin.h
63  enqcmdintrin.h
64  f16cintrin.h
65  float.h
66  fma4intrin.h
67  fmaintrin.h
68  fxsrintrin.h
69  gfniintrin.h
70  hexagon_circ_brev_intrinsics.h
71  hexagon_protos.h
72  hexagon_types.h
73  hvx_hexagon_protos.h
74  hresetintrin.h
75  htmintrin.h
76  htmxlintrin.h
77  ia32intrin.h
78  immintrin.h
79  intrin.h
80  inttypes.h
81  invpcidintrin.h
82  iso646.h
83  keylockerintrin.h
84  limits.h
85  lwpintrin.h
86  lzcntintrin.h
87  mm3dnow.h
88  mmintrin.h
89  mm_malloc.h
90  module.modulemap
91  movdirintrin.h
92  msa.h
93  mwaitxintrin.h
94  nmmintrin.h
95  opencl-c.h
96  opencl-c-base.h
97  pkuintrin.h
98  pmmintrin.h
99  pconfigintrin.h
100  popcntintrin.h
101  prfchwintrin.h
102  ptwriteintrin.h
103  rdseedintrin.h
104  rtmintrin.h
105  serializeintrin.h
106  sgxintrin.h
107  s390intrin.h
108  shaintrin.h
109  smmintrin.h
110  stdalign.h
111  stdarg.h
112  stdatomic.h
113  stdbool.h
114  stddef.h
115  __stddef_max_align_t.h
116  stdint.h
117  stdnoreturn.h
118  tbmintrin.h
119  tgmath.h
120  tmmintrin.h
121  tsxldtrkintrin.h
122  uintrintrin.h
123  unwind.h
124  vadefs.h
125  vaesintrin.h
126  varargs.h
127  vecintrin.h
128  vpclmulqdqintrin.h
129  waitpkgintrin.h
130  wasm_simd128.h
131  wbnoinvdintrin.h
132  wmmintrin.h
133  __wmmintrin_aes.h
134  __wmmintrin_pclmul.h
135  x86gprintrin.h
136  x86intrin.h
137  xmmintrin.h
138  xopintrin.h
139  xsavecintrin.h
140  xsaveintrin.h
141  xsaveoptintrin.h
142  xsavesintrin.h
143  xtestintrin.h
144  )
145
146set(cuda_wrapper_files
147  cuda_wrappers/algorithm
148  cuda_wrappers/complex
149  cuda_wrappers/new
150)
151
152set(ppc_wrapper_files
153  ppc_wrappers/mmintrin.h
154  ppc_wrappers/xmmintrin.h
155  ppc_wrappers/mm_malloc.h
156  ppc_wrappers/emmintrin.h
157  ppc_wrappers/pmmintrin.h
158  ppc_wrappers/tmmintrin.h
159  ppc_wrappers/smmintrin.h
160)
161
162set(openmp_wrapper_files
163  openmp_wrappers/math.h
164  openmp_wrappers/cmath
165  openmp_wrappers/complex.h
166  openmp_wrappers/complex
167  openmp_wrappers/__clang_openmp_device_functions.h
168  openmp_wrappers/complex_cmath.h
169  openmp_wrappers/new
170)
171
172set(output_dir ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION}/include)
173set(out_files)
174set(generated_files)
175
176function(copy_header_to_output_dir src_dir file)
177  set(src ${src_dir}/${file})
178  set(dst ${output_dir}/${file})
179  add_custom_command(OUTPUT ${dst}
180    DEPENDS ${src}
181    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
182    COMMENT "Copying clang's ${file}...")
183  list(APPEND out_files ${dst})
184  set(out_files ${out_files} PARENT_SCOPE)
185endfunction(copy_header_to_output_dir)
186
187function(clang_generate_header td_option td_file out_file)
188  clang_tablegen(${out_file} ${td_option}
189  -I ${CLANG_SOURCE_DIR}/include/clang/Basic/
190  SOURCE ${CLANG_SOURCE_DIR}/include/clang/Basic/${td_file})
191
192  copy_header_to_output_dir(${CMAKE_CURRENT_BINARY_DIR} ${out_file})
193  set(out_files ${out_files} PARENT_SCOPE)
194  list(APPEND generated_files "${CMAKE_CURRENT_BINARY_DIR}/${out_file}")
195  set(generated_files ${generated_files} PARENT_SCOPE)
196endfunction(clang_generate_header)
197
198
199# Copy header files from the source directory to the build directory
200foreach( f ${files} ${cuda_wrapper_files} ${ppc_wrapper_files} ${openmp_wrapper_files})
201  copy_header_to_output_dir(${CMAKE_CURRENT_SOURCE_DIR} ${f})
202endforeach( f )
203
204# Generate header files and copy them to the build directory
205# Generate arm_neon.h
206clang_generate_header(-gen-arm-neon arm_neon.td arm_neon.h)
207# Generate arm_fp16.h
208clang_generate_header(-gen-arm-fp16 arm_fp16.td arm_fp16.h)
209# Generate arm_sve.h
210clang_generate_header(-gen-arm-sve-header arm_sve.td arm_sve.h)
211# Generate arm_bf16.h
212clang_generate_header(-gen-arm-bf16 arm_bf16.td arm_bf16.h)
213# Generate arm_mve.h
214clang_generate_header(-gen-arm-mve-header arm_mve.td arm_mve.h)
215# Generate arm_cde.h
216clang_generate_header(-gen-arm-cde-header arm_cde.td arm_cde.h)
217# Generate riscv_vector.h
218clang_generate_header(-gen-riscv-vector-header riscv_vector.td riscv_vector.h)
219
220add_custom_target(clang-resource-headers ALL DEPENDS ${out_files})
221set_target_properties(clang-resource-headers PROPERTIES
222  FOLDER "Misc"
223  RUNTIME_OUTPUT_DIRECTORY "${output_dir}")
224
225set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)
226
227install(
228  FILES ${files} ${generated_files}
229  DESTINATION ${header_install_dir}
230  COMPONENT clang-resource-headers)
231
232install(
233  FILES ${cuda_wrapper_files}
234  DESTINATION ${header_install_dir}/cuda_wrappers
235  COMPONENT clang-resource-headers)
236
237install(
238  FILES ${ppc_wrapper_files}
239  DESTINATION ${header_install_dir}/ppc_wrappers
240  COMPONENT clang-resource-headers)
241
242install(
243  FILES ${openmp_wrapper_files}
244  DESTINATION ${header_install_dir}/openmp_wrappers
245  COMPONENT clang-resource-headers)
246
247if (NOT LLVM_ENABLE_IDE)
248  add_llvm_install_targets(install-clang-resource-headers
249                           DEPENDS clang-resource-headers
250                           COMPONENT clang-resource-headers)
251endif()
252