Skip to content

Commit 3e54768

Browse files
authored
[Offload] Detect target triple from preprocessor instead of CMake (#91283)
Summary: This patch removes the special-case handling for the target triple inside of the CMake. I moved it into the implementation so it's easier to see and modify.
1 parent 178ff39 commit 3e54768

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

offload/plugins-nextgen/host/CMakeLists.txt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,36 +53,26 @@ endif()
5353
# Define the target specific triples and ELF machine values.
5454
if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le$")
5555
target_compile_definitions(omptarget.rtl.host PRIVATE TARGET_ELF_ID=EM_PPC64)
56-
target_compile_definitions(omptarget.rtl.host PRIVATE
57-
LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE="powerpc64le-ibm-linux-gnu")
5856
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
5957
"powerpc64le-ibm-linux-gnu" "powerpc64le-ibm-linux-gnu-LTO")
6058
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
6159
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64$")
6260
target_compile_definitions(omptarget.rtl.host PRIVATE TARGET_ELF_ID=EM_PPC64)
63-
target_compile_definitions(omptarget.rtl.host PRIVATE
64-
LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE="powerpc64-ibm-linux-gnu")
6561
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
6662
"powerpc64-ibm-linux-gnu" "powerpc64-ibm-linux-gnu-LTO")
6763
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
6864
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64$")
6965
target_compile_definitions(omptarget.rtl.host PRIVATE TARGET_ELF_ID=EM_X86_64)
70-
target_compile_definitions(omptarget.rtl.host PRIVATE
71-
LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE="x86_64-pc-linux-gnu")
7266
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
7367
"x86_64-pc-linux-gnu" "x86_64-pc-linux-gnu-LTO")
7468
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
7569
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64$")
7670
target_compile_definitions(omptarget.rtl.host PRIVATE TARGET_ELF_ID=EM_AARCH64)
77-
target_compile_definitions(omptarget.rtl.host PRIVATE
78-
LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE="aarch64-unknown-linux-gnu")
7971
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
8072
"aarch64-unknown-linux-gnu" "aarch64-unknown-linux-gnu-LTO")
8173
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
8274
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x$")
8375
target_compile_definitions(omptarget.rtl.host PRIVATE TARGET_ELF_ID=EM_S390)
84-
target_compile_definitions(omptarget.rtl.host PRIVATE
85-
LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE="s390x-ibm-linux-gnu")
8676
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
8777
"s390x-ibm-linux-gnu" "s390x-ibm-linux-gnu-LTO")
8878
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)

offload/plugins-nextgen/host/src/rtl.cpp

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@
3030
#include "llvm/Frontend/OpenMP/OMPGridValues.h"
3131
#include "llvm/Support/DynamicLibrary.h"
3232

33+
#if !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__) || \
34+
!defined(__ORDER_BIG_ENDIAN__)
35+
#error "Missing preprocessor definitions for endianness detection."
36+
#endif
37+
38+
#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
39+
#define LITTLEENDIAN_CPU
40+
#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
41+
#define BIGENDIAN_CPU
42+
#endif
43+
3344
// The number of devices in this plugin.
3445
#define NUM_DEVICES 4
3546

@@ -38,11 +49,6 @@
3849
#define TARGET_ELF_ID EM_NONE
3950
#endif
4051

41-
// The target triple should be defined at compile-time by the build system.
42-
#ifndef LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE
43-
#define LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE ""
44-
#endif
45-
4652
namespace llvm {
4753
namespace omp {
4854
namespace target {
@@ -421,7 +427,25 @@ struct GenELF64PluginTy final : public GenericPluginTy {
421427
Expected<bool> isELFCompatible(StringRef) const override { return true; }
422428

423429
Triple::ArchType getTripleArch() const override {
424-
return llvm::Triple(LIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE).getArch();
430+
#if defined(__x86_64__)
431+
return llvm::Triple::x86_64;
432+
#elif defined(__s390x__)
433+
return llvm::Triple::systemz;
434+
#elif defined(__aarch64__)
435+
#ifdef LITTLEENDIAN_CPU
436+
return llvm::Triple::aarch64_le;
437+
#else
438+
return llvm::Triple::aarch64_be;
439+
#endif
440+
#elif defined(__powerpc64__)
441+
#ifdef LITTLEENDIAN_CPU
442+
return llvm::Triple::ppc64le;
443+
#else
444+
return llvm::Triple::ppc64;
445+
#endif
446+
#else
447+
return llvm::Triple::UnknownArch;
448+
#endif
425449
}
426450
};
427451

0 commit comments

Comments
 (0)