[libc] Tweak the runtimes cross-build for GPU (#178548)

Summary:
We should likely use `-DLLVM_DEFAULT_TARGET_TRIPLE` as the general
source of truth, make the handling work with that since we use it for
the output directories. Fix the creation of startup files in this mode
and make sure it can detect the GPU properly.

Fixes: https://github.com/llvm/llvm-project/issues/179375
This commit is contained in:
Joseph Huber 2026-02-03 10:35:17 -06:00 committed by GitHub
parent 5587993548
commit e07a1182fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 36 deletions

View File

@ -17,8 +17,8 @@ if(NOT LLVM_LIBC_FULL_BUILD)
endif()
# Set the required flags globally so standard CMake utilities can compile.
if(LIBC_TARGET_TRIPLE)
set(CMAKE_REQUIRED_FLAGS "--target=${LIBC_TARGET_TRIPLE}")
if(NOT CMAKE_CXX_COMPILER_TARGET)
set(CMAKE_REQUIRED_FLAGS "${LIBC_COMPILE_OPTIONS_DEFAULT}")
endif()
# Optionally set up a job pool to limit the number of GPU tests run in parallel.

View File

@ -100,12 +100,12 @@ targeting a GPU architecture.
$> TARGET_C_COMPILER=</path/to/clang>
$> TARGET_CXX_COMPILER=</path/to/clang++>
$> cmake ../runtimes \ # Point to the runtimes build
-G Ninja \
-DLLVM_ENABLE_RUNTIMES=libc \
-DCMAKE_C_COMPILER=$TARGET_C_COMPILER \
-DCMAKE_CXX_COMPILER=$TARGET_CXX_COMPILER \
-DLLVM_LIBC_FULL_BUILD=ON \
-DLLVM_RUNTIMES_TARGET=$TARGET_TRIPLE \
-G Ninja \
-DLLVM_ENABLE_RUNTIMES=libc \
-DCMAKE_C_COMPILER=$TARGET_C_COMPILER \
-DCMAKE_CXX_COMPILER=$TARGET_CXX_COMPILER \
-DLLVM_LIBC_FULL_BUILD=ON \
-DLLVM_DEFAULT_TARGET_TRIPLE=$TARGET_TRIPLE \
-DCMAKE_BUILD_TYPE=Release
$> ninja install
@ -113,34 +113,6 @@ The above steps will result in a build targeting one of the supported GPU
architectures. Building for multiple targets requires separate CMake
invocations.
Standalone cross build
----------------------
The GPU build can also be targeted directly as long as the compiler used is a
supported ``clang`` compiler. This method is generally not recommended as it can
only target a single GPU architecture.
.. code-block:: sh
$> cd llvm-project # The llvm-project checkout
$> mkdir build # A different build directory for the build tools
$> cd build
$> CLANG_C_COMPILER=</path/to/clang> # Must be a trunk build
$> CLANG_CXX_COMPILER=</path/to/clang++> # Must be a trunk build
$> TARGET_TRIPLE=<amdgcn-amd-amdhsa or nvptx64-nvidia-cuda>
$> cmake ../llvm \ # Point to the llvm directory
-G Ninja \
-DLLVM_ENABLE_PROJECTS=libc \
-DCMAKE_C_COMPILER=$CLANG_C_COMPILER \
-DCMAKE_CXX_COMPILER=$CLANG_CXX_COMPILER \
-DLLVM_LIBC_FULL_BUILD=ON \
-DLIBC_TARGET_TRIPLE=$TARGET_TRIPLE \
-DCMAKE_BUILD_TYPE=Release
$> ninja install
This will build and install the GPU C library along with all the other LLVM
libraries.
Build overview
==============

View File

@ -34,6 +34,7 @@ function(add_startup_object name)
RUNTIME_OUTPUT_DIRECTORY ${LIBC_LIBRARY_DIR}
RUNTIME_OUTPUT_NAME ${name}.o)
target_link_options(${fq_target_name}.exe PRIVATE
${LIBC_COMPILE_OPTIONS_DEFAULT}
"-r" "-nostdlib" "-flto" "-Wl,--lto-emit-llvm")
endif()
endfunction()