diff --git a/openmp/libomptarget/deviceRTLs/CMakeLists.txt b/openmp/libomptarget/deviceRTLs/CMakeLists.txt --- a/openmp/libomptarget/deviceRTLs/CMakeLists.txt +++ b/openmp/libomptarget/deviceRTLs/CMakeLists.txt @@ -10,4 +10,5 @@ # ##===----------------------------------------------------------------------===## +add_subdirectory(amdgcn) add_subdirectory(nvptx) diff --git a/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt b/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt --- a/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt +++ b/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt @@ -36,6 +36,18 @@ set(AOMP_BINDIR ${LLVM_BUILD_BINARY_DIR}/bin) endif() +# Copied from nvptx CMakeLists +if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64") + set(aux_triple x86_64-unknown-linux-gnu) +elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ppc64le") + set(aux_triple powerpc64le-unknown-linux-gnu) +elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64") + set(aux_triple aarch64-unknown-linux-gnu) +else() + libomptarget_say("Not building AMDGCN device RTL: unknown host arch: ${CMAKE_HOST_SYSTEM_PROCESSOR}") + return() +endif() + libomptarget_say("Building AMDGCN device RTL. LLVM_COMPILER_PATH=${AOMP_BINDIR}") project(omptarget-amdgcn) @@ -104,7 +116,7 @@ -ffreestanding -target amdgcn-amd-amdhsa -emit-llvm - -Xclang -aux-triple -Xclang x86_64-unknown-linux-gnu # see nvptx + -Xclang -aux-triple -Xclang ${aux_triple} -fopenmp -fopenmp-cuda-mode -Xclang -fopenmp-is-device -D__AMDGCN__ -Xclang -target-cpu -Xclang ${mcpu} @@ -154,6 +166,6 @@ add_custom_target(lib${libname}-${mcpu} ALL DEPENDS ${bc_libname}) install(FILES ${OUTPUTDIR}/${bc_libname} - DESTINATION "${OPENMP_INSTALL_LIBDIR}/libdevice" + DESTINATION "${OPENMP_INSTALL_LIBDIR}" ) endforeach() diff --git a/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h b/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h --- a/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h +++ b/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h @@ -67,6 +67,10 @@ __kmpc_impl_all_lanes = ~(__kmpc_impl_lanemask_t)0 }; -EXTERN int printf(const char *, ...); +// The return code of printf is not checked in the call sites in this library. +// A call to a function named printf currently hits some special case handling +// for opencl, which translates to calls that do not presently exist for openmp +// Therefore, for now, stub out printf while building this library. +#define printf(...) #endif