forked from OSchip/llvm-project
549 lines
14 KiB
CMake
549 lines
14 KiB
CMake
# 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
|
|
stdatomic.h
|
|
stdbool.h
|
|
stddef.h
|
|
__stddef_max_align_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
|
|
)
|
|
|
|
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_runtime_wrapper.h
|
|
)
|
|
|
|
set(mips_msa_files
|
|
msa.h
|
|
)
|
|
|
|
set(opencl_files
|
|
opencl-c.h
|
|
opencl-c-base.h
|
|
)
|
|
|
|
set(ppc_files
|
|
altivec.h
|
|
htmintrin.h
|
|
htmxlintrin.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
|
|
adxintrin.h
|
|
ammintrin.h
|
|
amxintrin.h
|
|
avx2intrin.h
|
|
avx512bf16intrin.h
|
|
avx512bitalgintrin.h
|
|
avx512bwintrin.h
|
|
avx512cdintrin.h
|
|
avx512dqintrin.h
|
|
avx512erintrin.h
|
|
avx512fintrin.h
|
|
avx512fp16intrin.h
|
|
avx512ifmaintrin.h
|
|
avx512ifmavlintrin.h
|
|
avx512pfintrin.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
|
|
avxintrin.h
|
|
avxvnniintrin.h
|
|
bmi2intrin.h
|
|
bmiintrin.h
|
|
cetintrin.h
|
|
cldemoteintrin.h
|
|
clflushoptintrin.h
|
|
clwbintrin.h
|
|
clzerointrin.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
|
|
prfchwintrin.h
|
|
ptwriteintrin.h
|
|
rdseedintrin.h
|
|
rtmintrin.h
|
|
serializeintrin.h
|
|
sgxintrin.h
|
|
shaintrin.h
|
|
smmintrin.h
|
|
tbmintrin.h
|
|
tmmintrin.h
|
|
tsxldtrkintrin.h
|
|
uintrintrin.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
|
|
intrin.h
|
|
vadefs.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}
|
|
${mips_msa_files}
|
|
${opencl_files}
|
|
${ppc_files}
|
|
${systemz_files}
|
|
${ve_files}
|
|
${x86_files}
|
|
${webassembly_files}
|
|
${windows_only_files}
|
|
${utility_files}
|
|
)
|
|
|
|
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
|
|
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
|
|
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)
|
|
|
|
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} ${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
|
|
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_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)
|
|
# Copy arm_neon_sve_bridge.h
|
|
copy_header_to_output_dir(${CMAKE_CURRENT_SOURCE_DIR}
|
|
arm_neon_sve_bridge.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_bf16.h"
|
|
"${output_dir}/arm_neon_sve_bridge.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)
|
|
add_custom_target(${target_name} ALL DEPENDS ${out_files})
|
|
set_target_properties(${target_name} PROPERTIES
|
|
FOLDER "Misc"
|
|
RUNTIME_OUTPUT_DIRECTORY "${output_dir}")
|
|
endfunction()
|
|
|
|
add_header_target("clang-resource-headers")
|
|
|
|
# Architecture/platform specific targets
|
|
add_header_target("arm-resource-headers")
|
|
add_header_target("aarch64-resource-headers")
|
|
add_header_target("cuda-resource-headers")
|
|
add_header_target("hexagon-resource-headers")
|
|
add_header_target("hip-resource-headers")
|
|
add_header_target("mips-resource-headers")
|
|
add_header_target("opencl-resource-headers")
|
|
add_header_target("ppc-resource-headers")
|
|
add_header_target("riscv-resource-headers")
|
|
add_header_target("systemz-resource-headers")
|
|
add_header_target("ve-resource-headers")
|
|
add_header_target("webassembly-resource-headers")
|
|
add_header_target("windows-resource-headers")
|
|
add_header_target("x86-resource-headers")
|
|
|
|
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)
|
|
|
|
#############################################################
|
|
# Install rules for architecture/platform specific headers
|
|
# All the targets are subsets of the clang-resource-headers list.
|
|
install(
|
|
FILES ${core_files}
|
|
${arm_common_files} ${arm_only_files}
|
|
${arm_common_generated_files} ${arm_only_generated_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT arm-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files}
|
|
${arm_common_files} ${aarch64_only_files}
|
|
${arm_common_generated_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 ${core_files} ${cuda_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT cuda-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${hexagon_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT hexagon-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${hip_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT hip-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${mips_msa_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT mips-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${opencl_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT opencl-resource-headers)
|
|
|
|
install(
|
|
FILES ${ppc_wrapper_files}
|
|
DESTINATION ${header_install_dir}/ppc_wrappers
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT ppc-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${ppc_files} ${utility_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT ppc-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${riscv_generated_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT riscv-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${systemz_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT systemz-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${ve_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT ve-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${webassembly_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT webassembly-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${windows_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT windows-resource-headers)
|
|
|
|
install(
|
|
FILES ${core_files} ${x86_files} ${utility_files}
|
|
DESTINATION ${header_install_dir}
|
|
EXCLUDE_FROM_ALL
|
|
COMPONENT x86-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-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-opencl-resource-headers
|
|
DEPENDS opencl-resource-headers
|
|
COMPONENT opencl-resource-headers)
|
|
add_llvm_install_targets(install-ppc-resource-headers
|
|
DEPENDS ppc-resource-headers
|
|
COMPONENT ppc-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-windows-resource-headers
|
|
DEPENDS window-resource-headers
|
|
COMPONENT windows-resource-headers)
|
|
endif()
|