llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.78k stars 11.9k forks source link

[Offload] Correctly reject building on unsupported architectures #92276

Closed jhuber6 closed 5 months ago

jhuber6 commented 5 months ago

Summary: Previously we had this LIBOMPTARGET_ENABLED variable which controlled including libomptarget. This is now redundant since it's controlled by LLVM_ENABLE_RUNTIMES. However, this had the extra effect of not building it when given unsupported targets. THis was lost during the move to offload. This patch moves this logic back and makes the offload target just quit without doing anything if used on an unsupported architecture.

https://github.com/llvm/llvm-project/issues/91881 https://github.com/llvm/llvm-project/issues/91819

llvmbot commented 5 months ago

@llvm/pr-subscribers-offload

Author: Joseph Huber (jhuber6)

Changes Summary: Previously we had this `LIBOMPTARGET_ENABLED` variable which controlled including `libomptarget`. This is now redundant since it's controlled by `LLVM_ENABLE_RUNTIMES`. However, this had the extra effect of not building it when given unsupported targets. THis was lost during the move to `offload`. This patch moves this logic back and makes the `offload` target just quit without doing anything if used on an unsupported architecture. https://github.com/llvm/llvm-project/issues/91881 https://github.com/llvm/llvm-project/issues/91819 --- Full diff: https://github.com/llvm/llvm-project/pull/92276.diff 2 Files Affected: - (modified) offload/CMakeLists.txt (+10-20) - (modified) openmp/CMakeLists.txt (-12) ``````````diff diff --git a/offload/CMakeLists.txt b/offload/CMakeLists.txt index 626df81250638..7a99d3fc9ac14 100644 --- a/offload/CMakeLists.txt +++ b/offload/CMakeLists.txt @@ -17,26 +17,16 @@ if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") project(offload C CXX ASM) endif() -set(ENABLE_LIBOMPTARGET ON) -# Currently libomptarget cannot be compiled on Windows or MacOS X. -# Since the device plugins are only supported on Linux anyway, -# there is no point in trying to compile libomptarget on other OSes. -# 32-bit systems are not supported either. -if (APPLE OR WIN32 OR NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ENABLE_LIBOMPTARGET OFF) -endif() - -option(OPENMP_ENABLE_LIBOMPTARGET "Enable building libomptarget for offloading." - ${ENABLE_LIBOMPTARGET}) -if (OPENMP_ENABLE_LIBOMPTARGET) - # Check that the library can actually be built. - if (APPLE OR WIN32) - message(FATAL_ERROR "libomptarget cannot be built on Windows and MacOS X!") - elseif (NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES) - message(FATAL_ERROR "Host compiler must support C++17 to build libomptarget!") - elseif (NOT CMAKE_SIZEOF_VOID_P EQUAL 8) - message(FATAL_ERROR "libomptarget on 32-bit systems are not supported!") - endif() +# Check that the library can actually be built. +if(APPLE OR WIN32 OR WASM) + message(WARNING "libomptarget cannot be built on Windows and MacOS X!") + return() +elseif(NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES) + message(WARNING "Host compiler must support C++17 to build libomptarget!") + return() +elseif(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + message(WARNING "libomptarget on 32-bit systems are not yet supported!") + return() endif() if(OPENMP_STANDALONE_BUILD) diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt index 9097ca5623000..33bfdc8630eff 100644 --- a/openmp/CMakeLists.txt +++ b/openmp/CMakeLists.txt @@ -97,18 +97,6 @@ set(OPENMP_TEST_FLAGS "" CACHE STRING set(OPENMP_TEST_OPENMP_FLAGS ${OPENMP_TEST_COMPILER_OPENMP_FLAGS} CACHE STRING "OpenMP compiler flag to use for testing OpenMP runtime libraries.") -set(ENABLE_LIBOMPTARGET ON) -# Currently libomptarget cannot be compiled on Windows or MacOS X. -# Since the device plugins are only supported on Linux anyway, -# there is no point in trying to compile libomptarget on other OSes. -# 32-bit systems are not supported either. -if (APPLE OR WIN32 OR WASM OR NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES - OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8 OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(ENABLE_LIBOMPTARGET OFF) -endif() - -option(OPENMP_ENABLE_LIBOMPTARGET "Enable building libomptarget for offloading." - ${ENABLE_LIBOMPTARGET}) option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF) # Header install location ``````````