llvm/clang/lib/Headers/CMakeLists.txt

# core_files list contains the headers shared by all platforms.
# Please consider adding new platform specific headers
# to platform specific lists below.
set(core_files
  builtins.h
  float.h
  inttypes.h
  iso646.h
  limits.h
  module.modulemap
  stdalign.h
  stdarg.h
  __stdarg___gnuc_va_list.h
  __stdarg___va_copy.h
  __stdarg_header_macro.h
  __stdarg_va_arg.h
  __stdarg_va_copy.h
  __stdarg_va_list.h
  stdatomic.h
  stdbool.h
  stdckdint.h
  stddef.h
  __stddef_header_macro.h
  __stddef_max_align_t.h
  __stddef_null.h
  __stddef_nullptr_t.h
  __stddef_offsetof.h
  __stddef_ptrdiff_t.h
  __stddef_rsize_t.h
  __stddef_size_t.h
  __stddef_unreachable.h
  __stddef_wchar_t.h
  __stddef_wint_t.h
  stdint.h
  stdnoreturn.h
  tgmath.h
  unwind.h
  varargs.h
  )

set(arm_common_files
  # Headers shared by Arm and AArch64
  arm_acle.h
  )

set(arm_only_files
  arm_cmse.h
  armintr.h
  )

set(aarch64_only_files
  arm64intr.h
  arm_neon_sve_bridge.h
  )

set(cuda_files
  __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_texture_intrinsics.h
  __clang_cuda_libdevice_declares.h
  __clang_cuda_math_forward_declares.h
  __clang_cuda_runtime_wrapper.h
  )

set(hexagon_files
  hexagon_circ_brev_intrinsics.h
  hexagon_protos.h
  hexagon_types.h
  hvx_hexagon_protos.h
  )

set(hip_files
  __clang_hip_libdevice_declares.h
  __clang_hip_cmath.h
  __clang_hip_math.h
  __clang_hip_stdlib.h
  __clang_hip_runtime_wrapper.h
  )

set(hlsl_h
  hlsl.h
  )
set(hlsl_subdir_files
  hlsl/hlsl_basic_types.h
  hlsl/hlsl_intrinsics.h
  hlsl/hlsl_detail.h
  )
set(hlsl_files
  ${hlsl_h}
  ${hlsl_subdir_files}
  )

set(loongarch_files
  larchintrin.h
  lasxintrin.h
  lsxintrin.h
  )

set(mips_msa_files
  msa.h
  )

set(opencl_files
  opencl-c.h
  opencl-c-base.h
  )

set(ppc_files
  altivec.h
  )

set(ppc_htm_files
  htmintrin.h
  htmxlintrin.h
  )

set(riscv_files
  riscv_bitmanip.h
        riscv_corev_alu.h
  riscv_crypto.h
  riscv_ntlh.h
  sifive_vector.h
  )

set(systemz_files
  s390intrin.h
  vecintrin.h
  )

set(ve_files
  velintrin.h
  velintrin_gen.h
  velintrin_approx.h
  )

set(webassembly_files
  wasm_simd128.h
  )

set(x86_files
# Intrinsics
  adcintrin.h
  adxintrin.h
  ammintrin.h
  amxcomplexintrin.h
  amxfp16intrin.h
  amxintrin.h
  avx10_2_512bf16intrin.h
  avx10_2_512convertintrin.h
  avx10_2_512minmaxintrin.h
  avx10_2_512niintrin.h
  avx10_2_512satcvtdsintrin.h
  avx10_2_512satcvtintrin.h
  avx10_2bf16intrin.h
  avx10_2convertintrin.h
  avx10_2copyintrin.h
  avx10_2minmaxintrin.h
  avx10_2niintrin.h
  avx10_2satcvtdsintrin.h
  avx10_2satcvtintrin.h
  avx2intrin.h
  avx512bf16intrin.h
  avx512bitalgintrin.h
  avx512bwintrin.h
  avx512cdintrin.h
  avx512dqintrin.h
  avx512fintrin.h
  avx512fp16intrin.h
  avx512ifmaintrin.h
  avx512ifmavlintrin.h
  avx512vbmi2intrin.h
  avx512vbmiintrin.h
  avx512vbmivlintrin.h
  avx512vlbf16intrin.h
  avx512vlbitalgintrin.h
  avx512vlbwintrin.h
  avx512vlcdintrin.h
  avx512vldqintrin.h
  avx512vlfp16intrin.h
  avx512vlintrin.h
  avx512vlvbmi2intrin.h
  avx512vlvnniintrin.h
  avx512vlvp2intersectintrin.h
  avx512vnniintrin.h
  avx512vp2intersectintrin.h
  avx512vpopcntdqintrin.h
  avx512vpopcntdqvlintrin.h
  avxifmaintrin.h
  avxintrin.h
  avxneconvertintrin.h
  avxvnniint16intrin.h
  avxvnniint8intrin.h
  avxvnniintrin.h
  bmi2intrin.h
  bmiintrin.h
  cetintrin.h
  cldemoteintrin.h
  clflushoptintrin.h
  clwbintrin.h
  clzerointrin.h
  cmpccxaddintrin.h
  crc32intrin.h
  emmintrin.h
  enqcmdintrin.h
  f16cintrin.h
  fma4intrin.h
  fmaintrin.h
  fxsrintrin.h
  gfniintrin.h
  hresetintrin.h
  ia32intrin.h
  immintrin.h
  invpcidintrin.h
  keylockerintrin.h
  lwpintrin.h
  lzcntintrin.h
  mm3dnow.h
  mmintrin.h
  movdirintrin.h
  mwaitxintrin.h
  nmmintrin.h
  pconfigintrin.h
  pkuintrin.h
  pmmintrin.h
  popcntintrin.h
  prfchiintrin.h
  prfchwintrin.h
  ptrauth.h
  ptwriteintrin.h
  raointintrin.h
  rdpruintrin.h
  rdseedintrin.h
  rtmintrin.h
  serializeintrin.h
  sgxintrin.h
  sha512intrin.h
  shaintrin.h
  sm3intrin.h
  sm4intrin.h
  smmintrin.h
  tbmintrin.h
  tmmintrin.h
  tsxldtrkintrin.h
  uintrintrin.h
  usermsrintrin.h
  vaesintrin.h
  vpclmulqdqintrin.h
  waitpkgintrin.h
  wbnoinvdintrin.h
  __wmmintrin_aes.h
  wmmintrin.h
  __wmmintrin_pclmul.h
  x86gprintrin.h
  x86intrin.h
  xmmintrin.h
  xopintrin.h
  xsavecintrin.h
  xsaveintrin.h
  xsaveoptintrin.h
  xsavesintrin.h
  xtestintrin.h
# others
  cet.h
  cpuid.h
  )

set(windows_only_files
  intrin0.h
  intrin.h
  vadefs.h
  yvals_core.h
)

set(utility_files
  mm_malloc.h
)

set(files
  ${core_files}
  ${arm_common_files}
  ${arm_only_files}
  ${aarch64_only_files}
  ${cuda_files}
  ${hexagon_files}
  ${hip_files}
  ${loongarch_files}
  ${mips_msa_files}
  ${opencl_files}
  ${ppc_files}
  ${ppc_htm_files}
  ${riscv_files}
  ${systemz_files}
  ${ve_files}
  ${x86_files}
  ${webassembly_files}
  ${windows_only_files}
  ${utility_files}
  )

set(cuda_wrapper_files
  cuda_wrappers/algorithm
  cuda_wrappers/cmath
  cuda_wrappers/complex
  cuda_wrappers/new
)

set(cuda_wrapper_bits_files
  cuda_wrappers/bits/shared_ptr_base.h
  cuda_wrappers/bits/basic_string.h
  cuda_wrappers/bits/basic_string.tcc
)

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
  ppc_wrappers/nmmintrin.h
  ppc_wrappers/bmiintrin.h
  ppc_wrappers/bmi2intrin.h
  ppc_wrappers/immintrin.h
  ppc_wrappers/x86intrin.h
  ppc_wrappers/x86gprintrin.h
)

set(openmp_wrapper_files
  openmp_wrappers/math.h
  openmp_wrappers/cmath
  # Due to a bug in CMake, `complex` must be before `complex.h`
  # See: https://gitlab.kitware.com/cmake/cmake/-/issues/26058
  openmp_wrappers/complex
  openmp_wrappers/complex.h
  openmp_wrappers/__clang_openmp_device_functions.h
  openmp_wrappers/complex_cmath.h
  openmp_wrappers/new
)

set(llvm_offload_wrapper_files
  llvm_offload_wrappers/__llvm_offload.h
  llvm_offload_wrappers/__llvm_offload_host.h
  llvm_offload_wrappers/__llvm_offload_device.h
)

set(llvm_libc_wrapper_files
  llvm_libc_wrappers/assert.h
  llvm_libc_wrappers/stdio.h
  llvm_libc_wrappers/stdlib.h
  llvm_libc_wrappers/string.h
  llvm_libc_wrappers/ctype.h
  llvm_libc_wrappers/inttypes.h
  llvm_libc_wrappers/time.h
)

set(zos_wrapper_files
  zos_wrappers/builtins.h
)

include(GetClangResourceDir)
get_clang_resource_dir(output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
set(out_files)
set(generated_files)

set(arm_common_generated_files)
set(arm_only_generated_files)
set(aarch64_only_generated_files)
set(riscv_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} ${cuda_wrapper_bits_files}
           ${ppc_wrapper_files} ${openmp_wrapper_files} ${zos_wrapper_files} ${hlsl_files}
	   ${llvm_libc_wrapper_files} ${llvm_offload_wrapper_files})
  copy_header_to_output_dir(${CMAKE_CURRENT_SOURCE_DIR} ${f})
endforeach( f )

# Generate header files and copy them to the build directory
if(ARM IN_LIST LLVM_TARGETS_TO_BUILD OR AArch64 IN_LIST LLVM_TARGETS_TO_BUILD)
  # 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_sme.h
  clang_generate_header(-gen-arm-sme-header arm_sme.td arm_sme.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 arm_vector_types.h
  clang_generate_header(-gen-arm-vector-type arm_neon.td arm_vector_types.h)

  # Add headers to target specific lists
  list(APPEND arm_common_generated_files
    "${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h"
    "${CMAKE_CURRENT_BINARY_DIR}/arm_fp16.h"
    )

  list(APPEND arm_only_generated_files
    "${CMAKE_CURRENT_BINARY_DIR}/arm_mve.h"
    "${CMAKE_CURRENT_BINARY_DIR}/arm_cde.h"
    )

  list(APPEND aarch64_only_generated_files
    "${CMAKE_CURRENT_BINARY_DIR}/arm_sve.h"
    "${CMAKE_CURRENT_BINARY_DIR}/arm_sme.h"
    "${CMAKE_CURRENT_BINARY_DIR}/arm_bf16.h"
    "${CMAKE_CURRENT_BINARY_DIR}/arm_vector_types.h"
    )
endif()
if(RISCV IN_LIST LLVM_TARGETS_TO_BUILD)
  # Generate riscv_vector.h
  clang_generate_header(-gen-riscv-vector-header riscv_vector.td riscv_vector.h)
  list(APPEND riscv_generated_files
    "${CMAKE_CURRENT_BINARY_DIR}/riscv_vector.h"
    )
endif()


# Check if the generated headers are included in a target specific lists
# Currently, all generated headers are target specific.
set(all_target_specific_generated_files
  ${arm_common_generated_files}
  ${arm_only_generated_files}
  ${aarch64_only_generated_files}
  ${riscv_generated_files})
foreach( f ${generated_files} )
  if (NOT ${f} IN_LIST all_target_specific_generated_files)
    message(WARNING "${f} is a generated header but it is not included in any "
                    "target specific header lists! The resource-headers "
                    "distribtion target will be incorrect!")
  endif()
endforeach( f )

function(add_header_target target_name file_list)
  add_library(${target_name} INTERFACE ${file_list})
  set_target_properties(${target_name} PROPERTIES
    FOLDER "Clang/Resources"
    RUNTIME_OUTPUT_DIRECTORY "${output_dir}")
endfunction()

# The catch-all clang-resource-headers target
add_library(clang-resource-headers INTERFACE ${out_files})
set_target_properties("clang-resource-headers" PROPERTIES
  FOLDER "Clang/Resources"
  RUNTIME_OUTPUT_DIRECTORY "${output_dir}")
add_dependencies("clang-resource-headers"
                 "core-resource-headers"
                 "arm-common-resource-headers"
                 "arm-resource-headers"
                 "aarch64-resource-headers"
                 "cuda-resource-headers"
                 "hexagon-resource-headers"
                 "hip-resource-headers"
                 "hlsl-resource-headers"
                 "loongarch-resource-headers"
                 "mips-resource-headers"
                 "ppc-resource-headers"
                 "ppc-htm-resource-headers"
                 "riscv-resource-headers"
                 "systemz-resource-headers"
                 "ve-resource-headers"
                 "webassembly-resource-headers"
                 "x86-resource-headers"
                 "opencl-resource-headers"
                 "openmp-resource-headers"
                 "llvm-libc-resource-headers"
                 "windows-resource-headers"
                 "utility-resource-headers")

# Core/common headers
add_header_target("core-resource-headers" ${core_files})
add_header_target("arm-common-resource-headers" "${arm_common_files};${arm_common_generated_files}")

# Architecture/platform specific targets
add_header_target("arm-resource-headers" "${arm_only_files};${arm_only_generated_files}")
add_header_target("aarch64-resource-headers" "${aarch64_only_files};${aarch64_only_generated_files}")
add_header_target("cuda-resource-headers" "${cuda_files};${cuda_wrapper_files};${cuda_wrapper_bits_files}")
add_header_target("hexagon-resource-headers" "${hexagon_files}")
add_header_target("hip-resource-headers" "${hip_files}")
add_header_target("loongarch-resource-headers" "${loongarch_files}")
add_header_target("mips-resource-headers" "${mips_msa_files}")
add_header_target("ppc-resource-headers" "${ppc_files};${ppc_wrapper_files}")
add_header_target("ppc-htm-resource-headers" "${ppc_htm_files}")
add_header_target("riscv-resource-headers" "${riscv_files};${riscv_generated_files}")
add_header_target("systemz-resource-headers" "${systemz_files};${zos_wrapper_files}")
add_header_target("ve-resource-headers" "${ve_files}")
add_header_target("webassembly-resource-headers" "${webassembly_files}")
add_header_target("x86-resource-headers" "${x86_files}")

# Other header groupings
add_header_target("hlsl-resource-headers" ${hlsl_files})
add_header_target("opencl-resource-headers" ${opencl_files})
add_header_target("llvm-libc-resource-headers" ${llvm_libc_wrapper_files})
add_header_target("openmp-resource-headers" ${openmp_wrapper_files})
add_header_target("llvm-offload-resource-headers" ${llvm_libc_wrapper_files})
add_header_target("windows-resource-headers" ${windows_only_files})
add_header_target("utility-resource-headers" ${utility_files})

get_clang_resource_dir(header_install_dir SUBDIR include)
target_include_directories(clang-resource-headers INTERFACE
  $<BUILD_INTERFACE:${output_dir}>
  $<INSTALL_INTERFACE:${header_install_dir}>)
set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS clang-resource-headers)

#############################################################
# Install rules for the catch-all clang-resource-headers target
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 ${cuda_wrapper_bits_files}
  DESTINATION ${header_install_dir}/cuda_wrappers/bits
  COMPONENT clang-resource-headers)

install(
  FILES ${ppc_wrapper_files}
  DESTINATION ${header_install_dir}/ppc_wrappers
  COMPONENT clang-resource-headers)

install(
  FILES ${llvm_libc_wrapper_files}
  DESTINATION ${header_install_dir}/llvm_libc_wrappers
  COMPONENT clang-resource-headers)

install(
  FILES ${openmp_wrapper_files}
  DESTINATION ${header_install_dir}/openmp_wrappers
  COMPONENT clang-resource-headers)

install(
  FILES ${llvm_offload_wrapper_files}
  DESTINATION ${header_install_dir}/llvm_offload_wrappers
  COMPONENT clang-resource-headers)

install(
  FILES ${zos_wrapper_files}
  DESTINATION ${header_install_dir}/zos_wrappers
  COMPONENT clang-resource-headers)

#############################################################
# Install rules for separate header lists
install(
  FILES ${core_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT core-resource-headers)

install(
  FILES ${arm_common_files} ${arm_common_generated_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT arm-common-resource-headers)

install(
  FILES ${arm_only_files} ${arm_only_generated_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT arm-resource-headers)

install(
  FILES ${aarch64_only_files} ${aarch64_only_generated_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT aarch64-resource-headers)

install(
  FILES ${cuda_wrapper_files}
  DESTINATION ${header_install_dir}/cuda_wrappers
  EXCLUDE_FROM_ALL
  COMPONENT cuda-resource-headers)

install(
  FILES ${cuda_wrapper_bits_files}
  DESTINATION ${header_install_dir}/cuda_wrappers/bits
  EXCLUDE_FROM_ALL
  COMPONENT cuda-resource-headers)

install(
  FILES ${cuda_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT cuda-resource-headers)

install(
  FILES ${hexagon_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT hexagon-resource-headers)

install(
  FILES ${hip_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT hip-resource-headers)

install(
  FILES ${loongarch_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT loongarch-resource-headers)

install(
  FILES ${mips_msa_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT mips-resource-headers)

install(
  FILES ${ppc_wrapper_files}
  DESTINATION ${header_install_dir}/ppc_wrappers
  EXCLUDE_FROM_ALL
  COMPONENT ppc-resource-headers)

install(
  FILES ${ppc_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT ppc-resource-headers)

install(
  FILES ${ppc_htm_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT ppc-htm-resource-headers)

install(
  FILES ${riscv_generated_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT riscv-resource-headers)

install(
  FILES ${riscv_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT riscv-resource-headers)

install(
  FILES ${systemz_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT systemz-resource-headers)

install(
  FILES ${zos_wrapper_files}
  DESTINATION  ${header_install_dir}/zos_wrappers
  EXCLUDE_FROM_ALL
  COMPONENT systemz-resource-headers)

install(
  FILES ${ve_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT ve-resource-headers)

install(
  FILES ${webassembly_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT webassembly-resource-headers)

install(
  FILES ${x86_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT x86-resource-headers)

if(NOT CLANG_ENABLE_HLSL)
  set(EXCLUDE_HLSL EXCLUDE_FROM_ALL)
endif()

install(
  FILES ${hlsl_h}
  DESTINATION ${header_install_dir}
  ${EXCLUDE_HLSL}
  COMPONENT hlsl-resource-headers)

install(
  FILES ${hlsl_subdir_files}
  DESTINATION ${header_install_dir}/hlsl
  ${EXCLUDE_HLSL}
  COMPONENT hlsl-resource-headers)

install(
  FILES ${opencl_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT opencl-resource-headers)

install(
  FILES ${openmp_wrapper_files}
  DESTINATION ${header_install_dir}/openmp_wrappers
  EXCLUDE_FROM_ALL
  COMPONENT openmp-resource-headers)

install(
  FILES ${llvm_offload_wrapper_files}
  DESTINATION ${header_install_dir}/llvm_offload_wrappers
  EXCLUDE_FROM_ALL
  COMPONENT openmp-resource-headers)

install(
  FILES ${utility_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT utility-resource-headers)

install(
  FILES ${windows_only_files}
  DESTINATION ${header_install_dir}
  EXCLUDE_FROM_ALL
  COMPONENT windows-resource-headers)
#############################################################

if (NOT LLVM_ENABLE_IDE)
  add_llvm_install_targets(install-clang-resource-headers
                           DEPENDS clang-resource-headers
                           COMPONENT clang-resource-headers)

  add_llvm_install_targets(install-core-resource-headers
                           DEPENDS core-resource-headers
                           COMPONENT core-resource-headers)
  add_llvm_install_targets(install-arm-common-resource-headers
                           DEPENDS arm-common-resource-headers
                           COMPONENT arm-common-resource-headers)
  add_llvm_install_targets(install-arm-resource-headers
                           DEPENDS arm-resource-headers
                           COMPONENT arm-resource-headers)
  add_llvm_install_targets(install-aarch64-resource-headers
                           DEPENDS aarch64-resource-headers
                           COMPONENT aarch64-resource-headers)
  add_llvm_install_targets(install-cuda-resource-headers
                           DEPENDS cuda-resource-headers
                           COMPONENT cuda-resource-headers)
  add_llvm_install_targets(install-hexagon-resource-headers
                           DEPENDS hexagon-resource-headers
                           COMPONENT hexagon-resource-headers)
  add_llvm_install_targets(install-hip-resource-headers
                           DEPENDS hip-resource-headers
                           COMPONENT hip-resource-headers)
  add_llvm_install_targets(install-mips-resource-headers
                           DEPENDS mips-resource-headers
                           COMPONENT mips-resource-headers)
  add_llvm_install_targets(install-ppc-resource-headers
                           DEPENDS ppc-resource-headers
                           COMPONENT ppc-resource-headers)
  add_llvm_install_targets(install-ppc-htm-resource-headers
                           DEPENDS ppc-htm-resource-headers
                           COMPONENT ppc-htm-resource-headers)
  add_llvm_install_targets(install-riscv-resource-headers
                           DEPENDS riscv-resource-headers
                           COMPONENT riscv-resource-headers)
  add_llvm_install_targets(install-systemz-resource-headers
                           DEPENDS systemz-resource-headers
                           COMPONENT systemz-resource-headers)
  add_llvm_install_targets(install-ve-resource-headers
                           DEPENDS ve-resource-headers
                           COMPONENT ve-resource-headers)
  add_llvm_install_targets(install-x86-resource-headers
                           DEPENDS x86-resource-headers
                           COMPONENT x86-resource-headers)
  add_llvm_install_targets(install-webassembly-resource-headers
                           DEPENDS webassembly-resource-headers
                           COMPONENT webassembly-resource-headers)

  add_llvm_install_targets(install-hlsl-resource-headers
                           DEPENDS hlsl-resource-headers
                           COMPONENT hlsl-resource-headers)
  add_llvm_install_targets(install-opencl-resource-headers
                           DEPENDS opencl-resource-headers
                           COMPONENT opencl-resource-headers)
  add_llvm_install_targets(install-openmp-resource-headers
                           DEPENDS openmp-resource-headers
                           COMPONENT openmp-resource-headers)
  add_llvm_install_targets(install-windows-resource-headers
                           DEPENDS windows-resource-headers
                           COMPONENT windows-resource-headers)
  add_llvm_install_targets(install-utility-resource-headers
                           DEPENDS utility-resource-headers
                           COMPONENT utility-resource-headers)
endif()

source_group("Clang Runtime Headers" FILES ${files})