set(files adxintrin.h altivec.h ammintrin.h amxintrin.h arm_acle.h arm_cmse.h armintr.h arm64intr.h avx2intrin.h avx512bf16intrin.h avx512bwintrin.h avx512bitalgintrin.h avx512vlbitalgintrin.h avx512cdintrin.h avx512vpopcntdqintrin.h avx512dqintrin.h avx512erintrin.h avx512fintrin.h avx512ifmaintrin.h avx512ifmavlintrin.h avx512pfintrin.h avx512vbmiintrin.h avx512vbmivlintrin.h avx512vbmi2intrin.h avx512vlvbmi2intrin.h avx512vlbf16intrin.h avx512vlbwintrin.h avx512vlcdintrin.h avx512vldqintrin.h avx512vlintrin.h avx512vp2intersectintrin.h avx512vlvp2intersectintrin.h avx512vpopcntdqvlintrin.h avx512vnniintrin.h avx512vlvnniintrin.h avxintrin.h avxvnniintrin.h bmi2intrin.h bmiintrin.h __clang_cuda_builtin_vars.h __clang_cuda_math.h __clang_cuda_cmath.h __clang_cuda_complex_builtins.h __clang_cuda_device_functions.h __clang_cuda_intrinsics.h __clang_cuda_libdevice_declares.h __clang_cuda_math_forward_declares.h __clang_cuda_runtime_wrapper.h __clang_hip_libdevice_declares.h __clang_hip_cmath.h __clang_hip_math.h __clang_hip_runtime_wrapper.h cetintrin.h cet.h cldemoteintrin.h clzerointrin.h cpuid.h clflushoptintrin.h clwbintrin.h emmintrin.h enqcmdintrin.h f16cintrin.h float.h fma4intrin.h fmaintrin.h fxsrintrin.h gfniintrin.h hresetintrin.h htmintrin.h htmxlintrin.h ia32intrin.h immintrin.h intrin.h inttypes.h invpcidintrin.h iso646.h keylockerintrin.h limits.h lwpintrin.h lzcntintrin.h mm3dnow.h mmintrin.h mm_malloc.h module.modulemap movdirintrin.h msa.h mwaitxintrin.h nmmintrin.h opencl-c.h opencl-c-base.h pkuintrin.h pmmintrin.h pconfigintrin.h popcntintrin.h prfchwintrin.h ptwriteintrin.h rdseedintrin.h rtmintrin.h serializeintrin.h sgxintrin.h s390intrin.h shaintrin.h smmintrin.h stdalign.h stdarg.h stdatomic.h stdbool.h stddef.h __stddef_max_align_t.h stdint.h stdnoreturn.h tbmintrin.h tgmath.h tmmintrin.h tsxldtrkintrin.h uintrintrin.h unwind.h vadefs.h vaesintrin.h varargs.h vecintrin.h vpclmulqdqintrin.h waitpkgintrin.h wasm_simd128.h wbnoinvdintrin.h wmmintrin.h __wmmintrin_aes.h __wmmintrin_pclmul.h x86gprintrin.h x86intrin.h xmmintrin.h xopintrin.h xsavecintrin.h xsaveintrin.h xsaveoptintrin.h xsavesintrin.h xtestintrin.h ) set(cuda_wrapper_files cuda_wrappers/algorithm cuda_wrappers/complex cuda_wrappers/new ) set(ppc_wrapper_files ppc_wrappers/mmintrin.h ppc_wrappers/xmmintrin.h ppc_wrappers/mm_malloc.h ppc_wrappers/emmintrin.h ppc_wrappers/pmmintrin.h ppc_wrappers/tmmintrin.h ppc_wrappers/smmintrin.h ) set(openmp_wrapper_files openmp_wrappers/math.h openmp_wrappers/cmath openmp_wrappers/complex.h openmp_wrappers/complex openmp_wrappers/__clang_openmp_device_functions.h openmp_wrappers/complex_cmath.h openmp_wrappers/new ) set(output_dir ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION}/include) set(out_files) set(generated_files) function(copy_header_to_output_dir src_dir file) set(src ${src_dir}/${file}) set(dst ${output_dir}/${file}) add_custom_command(OUTPUT ${dst} DEPENDS ${src} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst} COMMENT "Copying clang's ${file}...") list(APPEND out_files ${dst}) set(out_files ${out_files} PARENT_SCOPE) endfunction(copy_header_to_output_dir) function(clang_generate_header td_option td_file out_file) clang_tablegen(${out_file} ${td_option} -I ${CLANG_SOURCE_DIR}/include/clang/Basic/ SOURCE ${CLANG_SOURCE_DIR}/include/clang/Basic/${td_file}) copy_header_to_output_dir(${CMAKE_CURRENT_BINARY_DIR} ${out_file}) set(out_files ${out_files} PARENT_SCOPE) list(APPEND generated_files "${CMAKE_CURRENT_BINARY_DIR}/${out_file}") set(generated_files ${generated_files} PARENT_SCOPE) endfunction(clang_generate_header) # Copy header files from the source directory to the build directory foreach( f ${files} ${cuda_wrapper_files} ${ppc_wrapper_files} ${openmp_wrapper_files}) copy_header_to_output_dir(${CMAKE_CURRENT_SOURCE_DIR} ${f}) endforeach( f ) # Generate header files and copy them to the build directory # Generate arm_neon.h clang_generate_header(-gen-arm-neon arm_neon.td arm_neon.h) # Generate arm_fp16.h clang_generate_header(-gen-arm-fp16 arm_fp16.td arm_fp16.h) # Generate arm_sve.h clang_generate_header(-gen-arm-sve-header arm_sve.td arm_sve.h) # Generate arm_bf16.h clang_generate_header(-gen-arm-bf16 arm_bf16.td arm_bf16.h) # Generate arm_mve.h clang_generate_header(-gen-arm-mve-header arm_mve.td arm_mve.h) # Generate arm_cde.h clang_generate_header(-gen-arm-cde-header arm_cde.td arm_cde.h) # Generate riscv_vector.h clang_generate_header(-gen-riscv-vector-header riscv_vector.td riscv_vector.h) add_custom_target(clang-resource-headers ALL DEPENDS ${out_files}) set_target_properties(clang-resource-headers PROPERTIES FOLDER "Misc" RUNTIME_OUTPUT_DIRECTORY "${output_dir}") set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include) install( FILES ${files} ${generated_files} DESTINATION ${header_install_dir} COMPONENT clang-resource-headers) install( FILES ${cuda_wrapper_files} DESTINATION ${header_install_dir}/cuda_wrappers COMPONENT clang-resource-headers) install( FILES ${ppc_wrapper_files} DESTINATION ${header_install_dir}/ppc_wrappers COMPONENT clang-resource-headers) install( FILES ${openmp_wrapper_files} DESTINATION ${header_install_dir}/openmp_wrappers COMPONENT clang-resource-headers) if (NOT LLVM_ENABLE_IDE) add_llvm_install_targets(install-clang-resource-headers DEPENDS clang-resource-headers COMPONENT clang-resource-headers) endif()