forked from OSchip/llvm-project
[clang] Adding Platform/Architecture Specific Resource Header Installation Targets
The goal of this patch is to improve distribution build's flexibility to include only applicable header files. Currently, the clang-resource-headers target contains nearly all the files in clang/lib/Headers. Most of these files are platform specific (e.g. immintrin.h is x86 specific). A distribution build will have to either include all the headers for all the platforms, or not include any headers. For example, if a distribution build for powerpc includes the clang-resource-headers target, it will include all the x86 specific headers, even-though the x86 specific headers cannot be used. This patch breaks up the clang-resource-headers list to a core list and platform specific lists. With the patch, a distribution build can now include the ppc-resource-headers to include the headers applicable to the powerpc platform. Specifically, one can now have cmake ... LLVM_DISTRIBUTION_COMPONENTS="clang;ppc-resource-headers" ... ../llvm ninja install-distribution then installs the powerpc headers. Similarly, one can do cmake ... LLVM_DISTRIBUTION_COMPONENTS="clang;x86-resource-headers" ... ../llvm to include headers applicable to the x86 platform in a distribution installation. To implement this behaviour, the patch does two things: * It breaks up the long files header file list to a core list and platform specific lists. * It adds numerous platform specific installation targets. Differential Revision: https://reviews.llvm.org/D123498
This commit is contained in:
parent
218b5c8394
commit
2512a875cc
|
@ -1,46 +1,41 @@
|
|||
set(files
|
||||
adxintrin.h
|
||||
altivec.h
|
||||
ammintrin.h
|
||||
amxintrin.h
|
||||
# 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
|
||||
avx2intrin.h
|
||||
avx512bf16intrin.h
|
||||
avx512bwintrin.h
|
||||
avx512bitalgintrin.h
|
||||
avx512vlbitalgintrin.h
|
||||
avx512cdintrin.h
|
||||
avx512vpopcntdqintrin.h
|
||||
avx512dqintrin.h
|
||||
avx512erintrin.h
|
||||
avx512fintrin.h
|
||||
avx512fp16intrin.h
|
||||
avx512ifmaintrin.h
|
||||
avx512ifmavlintrin.h
|
||||
avx512pfintrin.h
|
||||
avx512vbmiintrin.h
|
||||
avx512vbmivlintrin.h
|
||||
avx512vbmi2intrin.h
|
||||
avx512vlvbmi2intrin.h
|
||||
avx512vlbf16intrin.h
|
||||
avx512vlbwintrin.h
|
||||
avx512vlcdintrin.h
|
||||
avx512vldqintrin.h
|
||||
avx512vlfp16intrin.h
|
||||
avx512vlintrin.h
|
||||
avx512vp2intersectintrin.h
|
||||
avx512vlvp2intersectintrin.h
|
||||
avx512vpopcntdqvlintrin.h
|
||||
avx512vnniintrin.h
|
||||
avx512vlvnniintrin.h
|
||||
avxintrin.h
|
||||
avxvnniintrin.h
|
||||
bmi2intrin.h
|
||||
bmiintrin.h
|
||||
builtins.h
|
||||
)
|
||||
|
||||
set(cuda_files
|
||||
__clang_cuda_builtin_vars.h
|
||||
__clang_cuda_math.h
|
||||
__clang_cuda_cmath.h
|
||||
|
@ -51,56 +46,118 @@ set(files
|
|||
__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
|
||||
crc32intrin.h
|
||||
cpuid.h
|
||||
clflushoptintrin.h
|
||||
clwbintrin.h
|
||||
emmintrin.h
|
||||
enqcmdintrin.h
|
||||
f16cintrin.h
|
||||
float.h
|
||||
fma4intrin.h
|
||||
fmaintrin.h
|
||||
fxsrintrin.h
|
||||
gfniintrin.h
|
||||
)
|
||||
|
||||
set(hexagon_files
|
||||
hexagon_circ_brev_intrinsics.h
|
||||
hexagon_protos.h
|
||||
hexagon_types.h
|
||||
hvx_hexagon_protos.h
|
||||
hresetintrin.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
|
||||
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
|
||||
pconfigintrin.h
|
||||
pkuintrin.h
|
||||
pmmintrin.h
|
||||
pconfigintrin.h
|
||||
popcntintrin.h
|
||||
prfchwintrin.h
|
||||
ptwriteintrin.h
|
||||
|
@ -108,33 +165,18 @@ set(files
|
|||
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.h
|
||||
__wmmintrin_pclmul.h
|
||||
x86gprintrin.h
|
||||
x86intrin.h
|
||||
|
@ -145,9 +187,37 @@ set(files
|
|||
xsaveoptintrin.h
|
||||
xsavesintrin.h
|
||||
xtestintrin.h
|
||||
velintrin.h
|
||||
velintrin_gen.h
|
||||
velintrin_approx.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
|
||||
|
@ -167,7 +237,6 @@ set(ppc_wrapper_files
|
|||
ppc_wrappers/bmiintrin.h
|
||||
ppc_wrappers/bmi2intrin.h
|
||||
ppc_wrappers/immintrin.h
|
||||
ppc_wrappers/tmmintrin.h
|
||||
ppc_wrappers/x86intrin.h
|
||||
ppc_wrappers/x86gprintrin.h
|
||||
)
|
||||
|
@ -186,6 +255,11 @@ 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})
|
||||
|
@ -232,16 +306,72 @@ if(ARM IN_LIST LLVM_TARGETS_TO_BUILD OR AArch64 IN_LIST LLVM_TARGETS_TO_BUILD)
|
|||
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()
|
||||
|
||||
add_custom_target(clang-resource-headers ALL DEPENDS ${out_files})
|
||||
set_target_properties(clang-resource-headers PROPERTIES
|
||||
FOLDER "Misc"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${output_dir}")
|
||||
|
||||
# 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)
|
||||
|
||||
|
@ -265,8 +395,154 @@ install(
|
|||
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()
|
||||
|
|
Loading…
Reference in New Issue