diff --git a/offload/unittests/CMakeLists.txt b/offload/unittests/CMakeLists.txt index 7cd41e1dcdafd..1eae785b8765f 100644 --- a/offload/unittests/CMakeLists.txt +++ b/offload/unittests/CMakeLists.txt @@ -81,9 +81,34 @@ function(add_offload_unittest test_dirname) target_include_directories(${target_name} PRIVATE ${PLUGINS_TEST_INCLUDE}) endfunction() +function(add_conformance_test test_name) + set(target_name "${test_name}.conformance") + + list(TRANSFORM ARGN PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" OUTPUT_VARIABLE files) + + if(NOT TARGET libc) + message(WARNING "Cannot run conformance tests without the LLVM C library") + return() + endif() + + add_executable(${target_name} ${files}) + add_dependencies(${target_name} ${PLUGINS_TEST_COMMON} ${test_name}.bin) + target_compile_definitions(${target_name} PRIVATE DEVICE_CODE_PATH="${CONFORMANCE_TEST_DEVICE_CODE_PATH}") + target_link_libraries(${target_name} PRIVATE ${PLUGINS_TEST_COMMON} libc) + target_include_directories(${target_name} PRIVATE ${PLUGINS_TEST_INCLUDE}) + set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL TRUE) + + add_custom_target(offload.conformance.${test_name} + COMMAND $ + DEPENDS ${target_name} + COMMENT "Running conformance test ${test_name}") + add_dependencies(offload.conformance offload.conformance.${test_name}) +endfunction() + set(OFFLOAD_TESTS_FORCE_NVPTX_ARCH "" CACHE STRING "Force building of NVPTX device code for Offload unit tests with the given arch, e.g. sm_61") set(OFFLOAD_TESTS_FORCE_AMDGPU_ARCH "" CACHE STRING "Force building of AMDGPU device code for Offload unit tests with the given arch, e.g. gfx1030") add_subdirectory(OffloadAPI) +add_subdirectory(Conformance) diff --git a/offload/unittests/Conformance/CMakeLists.txt b/offload/unittests/Conformance/CMakeLists.txt new file mode 100644 index 0000000000000..bc3141757372a --- /dev/null +++ b/offload/unittests/Conformance/CMakeLists.txt @@ -0,0 +1,8 @@ +add_custom_target(offload.conformance) + +set(PLUGINS_TEST_COMMON LLVMOffload LLVMSupport) +set(PLUGINS_TEST_INCLUDE ${LIBOMPTARGET_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/common) + +add_subdirectory(device_code) + +add_conformance_test(sin sin.cpp) diff --git a/offload/unittests/Conformance/device_code/CMakeLists.txt b/offload/unittests/Conformance/device_code/CMakeLists.txt new file mode 100644 index 0000000000000..223f04ccfb698 --- /dev/null +++ b/offload/unittests/Conformance/device_code/CMakeLists.txt @@ -0,0 +1,4 @@ +# FIXME: Currently missing dependencies to build GPU portion automatically. +add_offload_test_device_code(sin.c sin) + +set(OFFLOAD_TEST_DEVICE_CODE_PATH ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE) diff --git a/offload/unittests/Conformance/device_code/sin.c b/offload/unittests/Conformance/device_code/sin.c new file mode 100644 index 0000000000000..e969e60f352a2 --- /dev/null +++ b/offload/unittests/Conformance/device_code/sin.c @@ -0,0 +1,4 @@ +#include +#include + +__gpu_kernel void kernel(double *out) { *out = sin(*out); } diff --git a/offload/unittests/Conformance/sin.cpp b/offload/unittests/Conformance/sin.cpp new file mode 100644 index 0000000000000..9e15690a9e9d7 --- /dev/null +++ b/offload/unittests/Conformance/sin.cpp @@ -0,0 +1,8 @@ +#include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/raw_ostream.h" +#include +#include + +llvm::StringRef DeviceBinsDirectory = DEVICE_CODE_PATH; + +int main() { llvm::errs() << sin(0.0) << "\n"; }