55
66set (TARGET_NAME ur_adapter_offload)
77
8- set (UR_OFFLOAD_INSTALL_DIR "" CACHE PATH "Path to the directory containing libomptarget.so etc" )
9- if (UR_OFFLOAD_INSTALL_DIR STREQUAL "" )
10- message (FATAL_ERROR "UR_OFFLOAD_INSTALL_DIR must be defined for the Offload adapter" )
11- endif ()
8+ add_ur_adapter(${TARGET_NAME}
9+ SHARED
10+ ${CMAKE_CURRENT_SOURCE_DIR} /adapter.cpp
11+ ${CMAKE_CURRENT_SOURCE_DIR} /context.cpp
12+ ${CMAKE_CURRENT_SOURCE_DIR} /device.cpp
13+ ${CMAKE_CURRENT_SOURCE_DIR} /enqueue.cpp
14+ ${CMAKE_CURRENT_SOURCE_DIR} /event.cpp
15+ ${CMAKE_CURRENT_SOURCE_DIR} /kernel.cpp
16+ ${CMAKE_CURRENT_SOURCE_DIR} /memory.cpp
17+ ${CMAKE_CURRENT_SOURCE_DIR} /platform.cpp
18+ ${CMAKE_CURRENT_SOURCE_DIR} /program .cpp
19+ ${CMAKE_CURRENT_SOURCE_DIR} /queue.cpp
20+ ${CMAKE_CURRENT_SOURCE_DIR} /ur2offload.hpp
21+ ${CMAKE_CURRENT_SOURCE_DIR} /ur_interface_loader.cpp
22+ ${CMAKE_CURRENT_SOURCE_DIR} /usm.cpp
23+ )
1224
25+ set (UR_OFFLOAD_INSTALL_DIR "" CACHE PATH "Path to the directory containing libomptarget.so etc" )
1326set (UR_OFFLOAD_INCLUDE_DIR "" CACHE PATH "Path to the directory containing LLVM headers" )
14- if (UR_OFFLOAD_INCLUDE_DIR STREQUAL "" )
15- message (FATAL_ERROR "UR_OFFLOAD_INCLUDE_DIR must be defined for the Offload adapter" )
27+ if (UR_OFFLOAD_INSTALL_DIR STREQUAL "" OR UR_OFFLOAD_INCLUDE_DIR STREQUAL "" )
28+ include (ExternalProject)
29+
30+ set (LLVM_PROJECT_GIT https://github.com/llvm/llvm-project.git)
31+ set (LLVM_PROJECT_TAG ffddf33beb8097e760fafcbdd28d56c1d055e820)
32+ message (STATUS "UR_OFFLOAD_INSTALL_DIR and/or UR_OFFLOAD_INCLUDE_DIR not set, building liboffload runtime from source using llvm-project tag: ${LLVM_PROJECT_TAG} " )
33+ set (LLVM_PROJECT_SOURCE_DIR ${CMAKE_BINARY_DIR} /llvm-project-src)
34+ set (OPENMP_INSTALL_DIR ${CMAKE_BINARY_DIR} /openmp-install )
35+ # Install to the same directory as main build
36+ set (UR_OFFLOAD_INSTALL_DIR ${CMAKE_INSTALL_PREFIX} )
37+ set (UR_OFFLOAD_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX} /include )
38+ # Clone llvm-project only once
39+ ExternalProject_Add(llvm_project_src
40+ GIT_REPOSITORY ${LLVM_PROJECT_GIT}
41+ GIT_TAG ${LLVM_PROJECT_TAG}
42+ SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR}
43+ CONFIGURE_COMMAND ""
44+ BUILD_COMMAND ""
45+ INSTALL_COMMAND ""
46+ UPDATE_COMMAND ""
47+ )
48+ # Build OpenMP runtime (required dependency for offlload's libomptarget) from the cloned source
49+ ExternalProject_Add(openmp_ext
50+ # DeviceRIL uses -fuse-ld=lld, so add lld to the dependencies.
51+ DEPENDS llvm_project_src llvm-tblgen LLVMSupport clang lld
52+ SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR} /openmp
53+ CMAKE_ARGS
54+ -DCMAKE_INSTALL_PREFIX=${OPENMP_INSTALL_DIR}
55+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
56+ -DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR} /bin/clang
57+ -DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR} /bin/clang++
58+ -DLIBOMP_OMPD_GDB_SUPPORT=OFF
59+ INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
60+ UPDATE_COMMAND ""
61+ DOWNLOAD_COMMAND ""
62+ )
63+
64+ # Build liboffload runtime from the same source tree
65+ ExternalProject_Add(offload_ext
66+ DEPENDS openmp_ext
67+ SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR} /offload
68+ LIST_SEPARATOR |
69+ CMAKE_ARGS
70+ -DCMAKE_INSTALL_PREFIX=${UR_OFFLOAD_INSTALL_DIR}
71+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
72+ -DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR} /bin/clang
73+ -DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR} /bin/clang++
74+ -DLIBOMPTARGET_LLVM_INCLUDE_DIRS=${LLVM_PROJECT_SOURCE_DIR} /llvm/include ;${CMAKE_BINARY_DIR} /include
75+ -DLLVM_DIR=${CMAKE_BINARY_DIR} /lib/cmake/llvm
76+ -DLIBOMPTARGET_PLUGINS_TO_BUILD=cuda|amdgpu
77+ -DLIBOMP_INCLUDE_DIR=${OPENMP_INSTALL_DIR} /include
78+ -DLLVM_TABLEGEN=${CMAKE_BINARY_DIR} /bin/llvm-tblgen
79+ -DCMAKE_PREFIX_PATH=${OPENMP_INSTALL_DIR} ;${CMAKE_BINARY_DIR} /bin
80+ INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
81+ UPDATE_COMMAND ""
82+ DOWNLOAD_COMMAND ""
83+ BUILD_BYPRODUCTS "${UR_OFFLOAD_INSTALL_DIR} /lib/libLLVMOffload.so"
84+ )
85+ add_dependencies (${TARGET_NAME} offload_ext)
1686endif ()
1787
1888# When targetting CUDA devices, we need a workaround to avoid sending PTX to
@@ -29,22 +99,6 @@ if (NOT TARGET cudadrv)
2999 )
30100endif ()
31101
32- add_ur_adapter(${TARGET_NAME}
33- SHARED
34- ${CMAKE_CURRENT_SOURCE_DIR} /adapter.cpp
35- ${CMAKE_CURRENT_SOURCE_DIR} /context.cpp
36- ${CMAKE_CURRENT_SOURCE_DIR} /device.cpp
37- ${CMAKE_CURRENT_SOURCE_DIR} /enqueue.cpp
38- ${CMAKE_CURRENT_SOURCE_DIR} /event.cpp
39- ${CMAKE_CURRENT_SOURCE_DIR} /kernel.cpp
40- ${CMAKE_CURRENT_SOURCE_DIR} /memory.cpp
41- ${CMAKE_CURRENT_SOURCE_DIR} /platform.cpp
42- ${CMAKE_CURRENT_SOURCE_DIR} /program .cpp
43- ${CMAKE_CURRENT_SOURCE_DIR} /queue.cpp
44- ${CMAKE_CURRENT_SOURCE_DIR} /ur2offload.hpp
45- ${CMAKE_CURRENT_SOURCE_DIR} /ur_interface_loader.cpp
46- ${CMAKE_CURRENT_SOURCE_DIR} /usm.cpp
47- )
48102install_ur_library(${TARGET_NAME} )
49103
50104set_target_properties (${TARGET_NAME} PROPERTIES
0 commit comments