From fd059ea7ec044198fd75bb2b3aa30734bcace33e Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Mon, 27 Mar 2023 11:05:11 -0500 Subject: [PATCH] [libc] Simplify enabling the GPU build for libc Currently the GPU build requires the `LLVM_LIBC_FULL_BUILD` option to be set. This patch changes the logic so that it is always enabled when targeting the GPU. Also, this patch allows `LIBC_GPU_BUILD` and `LIBC_GPU_ARCHITECTURES` to both enable a GPU build. Now, enabling the GPU support should only require the following CMake: ``` -DLLVM_ENABLE_RUNTIMES=libc -DLIBC_GPU_ARCHITECTURES=gfx1030 ``` Reviewed By: jdoerfert, sivachandra Differential Revision: https://reviews.llvm.org/D146979 --- libc/CMakeLists.txt | 2 +- libc/cmake/modules/LLVMLibCArchitectures.cmake | 2 +- libc/cmake/modules/prepare_libc_gpu_build.cmake | 5 +++-- llvm/runtimes/CMakeLists.txt | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt index 0a96272..958de3b 100644 --- a/libc/CMakeLists.txt +++ b/libc/CMakeLists.txt @@ -18,7 +18,7 @@ set(LIBC_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) # The top-level directory in which libc is being built. set(LIBC_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) -if(LLVM_LIBC_FULL_BUILD) +if(LLVM_LIBC_FULL_BUILD OR LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES) if(NOT LIBC_HDRGEN_EXE) # We need to set up hdrgen first since other targets depend on it. add_subdirectory(utils/LibcTableGenUtil) diff --git a/libc/cmake/modules/LLVMLibCArchitectures.cmake b/libc/cmake/modules/LLVMLibCArchitectures.cmake index 27e17cd..63ec2ef 100644 --- a/libc/cmake/modules/LLVMLibCArchitectures.cmake +++ b/libc/cmake/modules/LLVMLibCArchitectures.cmake @@ -6,7 +6,7 @@ # platform. # ------------------------------------------------------------------------------ -if(LIBC_GPU_BUILD) +if(LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES) # We set the generic target and OS to "gpu" here. More specific defintions # for the exact target GPU are set up in prepare_libc_gpu_build.cmake. set(LIBC_TARGET_OS "gpu") diff --git a/libc/cmake/modules/prepare_libc_gpu_build.cmake b/libc/cmake/modules/prepare_libc_gpu_build.cmake index fe0f4ef..c6263ae 100644 --- a/libc/cmake/modules/prepare_libc_gpu_build.cmake +++ b/libc/cmake/modules/prepare_libc_gpu_build.cmake @@ -29,8 +29,9 @@ if(NOT (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang" AND " is not `Clang ${req_ver}.") endif() if(NOT LLVM_LIBC_FULL_BUILD) - message(FATAL_ERROR "LLVM_LIBC_FULL_BUILD must be enabled to build libc for " - "GPU.") + message(STATUS "LLVM_LIBC_FULL_BUILD must be enabled to build libc for GPU. " + "Overriding LLVM_LIBC_FULL_BUILD to ON.") + set(LLVM_LIBC_FULL_BUILD ON FORCE) endif() # Identify the program used to package multiple images into a single binary. diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt index 195dba9..f976628 100644 --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -385,7 +385,8 @@ if(runtimes) list(APPEND extra_deps llvm-link) endif() endif() - if("libc" IN_LIST LLVM_ENABLE_RUNTIMES AND LLVM_LIBC_FULL_BUILD) + if("libc" IN_LIST LLVM_ENABLE_RUNTIMES AND + (LLVM_LIBC_FULL_BUILD OR LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES)) if(TARGET libc-hdrgen) set(libc_tools libc-hdrgen) set(libc_cmake_args "-DLIBC_HDRGEN_EXE=$" -- 2.7.4