diff options
author | Joseph Huber <huberjn@outlook.com> | 2024-06-25 07:02:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-25 07:02:57 -0500 |
commit | 6c9916d0d8a40034c5e0dfc157f146855e42520e (patch) | |
tree | 8c40d960c35de0ad7e3a05cec21d5e9a000ae5e7 /libc/cmake | |
parent | 5ed5d723db58f7556782427444642d0571cdf649 (diff) | |
download | llvm-6c9916d0d8a40034c5e0dfc157f146855e42520e.zip llvm-6c9916d0d8a40034c5e0dfc157f146855e42520e.tar.gz llvm-6c9916d0d8a40034c5e0dfc157f146855e42520e.tar.bz2 |
[libc] Configure CMAKE_REQUIRED_FLAGS so the GPU can use flag checks (#95424)
Summary:
This patch adds `CMAKE_REQUIRED_FLAGS` for the GPU build so checks like
`check_cxx_compiler_flags` work as expected. This is required because we
need to hack around the potential lack of `nvlink` and `ptxas` for NVPTX
targets and the fact that the AMDGPU target needs `-nogpulib` to avoid
errors on lack of ROCm. This makes a few of the checks pass and also
allows us to just check `-mcpu=native` for architecture detection
instead of finding the tools manually.
Diffstat (limited to 'libc/cmake')
-rw-r--r-- | libc/cmake/modules/prepare_libc_gpu_build.cmake | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/libc/cmake/modules/prepare_libc_gpu_build.cmake b/libc/cmake/modules/prepare_libc_gpu_build.cmake index dc8beb1..e2a0908 100644 --- a/libc/cmake/modules/prepare_libc_gpu_build.cmake +++ b/libc/cmake/modules/prepare_libc_gpu_build.cmake @@ -16,6 +16,17 @@ if(NOT LLVM_LIBC_FULL_BUILD) "GPU.") endif() +# Set the required flags globally so standard CMake utilities can compile. +if(LIBC_TARGET_TRIPLE) + set(CMAKE_REQUIRED_FLAGS "--target=${LIBC_TARGET_TRIPLE}") +endif() +if(LIBC_TARGET_ARCHITECTURE_IS_AMDGPU) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nogpulib") +elseif(LIBC_TARGET_ARCHITECTURE_IS_NVPTX) + set(CMAKE_REQUIRED_FLAGS + "${CMAKE_REQUIRED_FLAGS} -flto -c -Wno-unused-command-line-argument") +endif() + # Identify the program used to package multiple images into a single binary. get_filename_component(compiler_path ${CMAKE_CXX_COMPILER} DIRECTORY) if(TARGET clang-offload-packager) @@ -56,39 +67,9 @@ endif() set(LIBC_GPU_TEST_ARCHITECTURE "" CACHE STRING "Architecture for the GPU tests") if(LIBC_TARGET_ARCHITECTURE_IS_AMDGPU) - # Identify any locally installed AMD GPUs on the system using 'amdgpu-arch'. - if(TARGET amdgpu-arch) - get_target_property(LIBC_AMDGPU_ARCH amdgpu-arch LOCATION) - else() - find_program(LIBC_AMDGPU_ARCH - NAMES amdgpu-arch NO_DEFAULT_PATH - PATHS ${LLVM_BINARY_DIR}/bin ${compiler_path}) - endif() - if(LIBC_AMDGPU_ARCH) - execute_process(COMMAND ${LIBC_AMDGPU_ARCH} - OUTPUT_VARIABLE arch_tool_output - ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if(arch_tool_output MATCHES "^gfx[0-9]+") - set(PLATFORM_HAS_GPU TRUE) - endif() - endif() + check_cxx_compiler_flag(-mcpu=native PLATFORM_HAS_GPU) elseif(LIBC_TARGET_ARCHITECTURE_IS_NVPTX) - # Identify any locally installed NVIDIA GPUs on the system using 'nvptx-arch'. - if(TARGET nvptx-arch) - get_target_property(LIBC_NVPTX_ARCH nvptx-arch LOCATION) - else() - find_program(LIBC_NVPTX_ARCH - NAMES nvptx-arch NO_DEFAULT_PATH - PATHS ${LLVM_BINARY_DIR}/bin ${compiler_path}) - endif() - if(LIBC_NVPTX_ARCH) - execute_process(COMMAND ${LIBC_NVPTX_ARCH} - OUTPUT_VARIABLE arch_tool_output - ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if(arch_tool_output MATCHES "^sm_[0-9]+") - set(PLATFORM_HAS_GPU TRUE) - endif() - endif() + check_cxx_compiler_flag(-march=native PLATFORM_HAS_GPU) endif() set(gpu_test_architecture "") |