Summary: This PR changes the handling of the emitted kernels when targeting a CPU to be a pointer struct. The old handling emitted a standard function prototype, this necessitated a target specific ABI to call it because the signature differed with the number of arguments. Instead, this PR emits a void pointer to a naturally aligned struct, this is what APIs like `pthreads` assert. This allows us to remove all the complexity around launching host kernels and just pass the argument list.
44 lines
1.9 KiB
CMake
44 lines
1.9 KiB
CMake
set(machine ${CMAKE_SYSTEM_PROCESSOR})
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le$")
|
|
set(machine ppc64)
|
|
endif()
|
|
|
|
# Create the library and add the default arguments.
|
|
add_target_library(omptarget.rtl.host ${machine})
|
|
|
|
target_sources(omptarget.rtl.host PRIVATE src/rtl.cpp)
|
|
|
|
target_include_directories(omptarget.rtl.host PRIVATE
|
|
${LIBOMPTARGET_INCLUDE_DIR})
|
|
|
|
# Define the target specific triples and ELF machine values.
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"powerpc64le-ibm-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"powerpc64-ibm-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"x86_64-unknown-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"aarch64-unknown-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"s390x-ibm-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"riscv64-unknown-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64$")
|
|
list(APPEND LIBOMPTARGET_SYSTEM_TARGETS
|
|
"loongarch64-unknown-linux-gnu")
|
|
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
|
|
endif()
|