@@ -26,36 +26,53 @@ set(UR_OFFLOAD_INSTALL_DIR "" CACHE PATH "Path to the directory containing libom
2626set (UR_OFFLOAD_INCLUDE_DIR "" CACHE PATH "Path to the directory containing LLVM headers" )
2727if (UR_OFFLOAD_INSTALL_DIR STREQUAL "" OR UR_OFFLOAD_INCLUDE_DIR STREQUAL "" )
2828 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)
29+ set (LLVM_PROJECT_SOURCE_DIR ${CMAKE_BINARY_DIR} /llvm-src-offload)
30+ set (LLVM_PROJECT_TAG 4c0c295775cff0dcfc6439c3f51991ffac0345d8)
3431 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 ""
32+ set (UR_OFFLOAD_INSTALL_DIR ${CMAKE_BINARY_DIR} /offload-install )
33+ set (UR_OFFLOAD_INCLUDE_DIR ${UR_OFFLOAD_INSTALL_DIR} /include )
34+
35+ execute_process (COMMAND git -C "${CMAKE_SOURCE_DIR} " worktree prune)
36+
37+ if (NOT IS_DIRECTORY "${LLVM_PROJECT_SOURCE_DIR} " )
38+ execute_process (
39+ COMMAND git -C "${CMAKE_SOURCE_DIR} " worktree add --no -checkout --detach "${LLVM_PROJECT_SOURCE_DIR} " "${LLVM_PROJECT_TAG} "
40+ RESULT_VARIABLE _wt_rv
41+ COMMAND_ERROR_IS_FATAL ANY
42+ )
43+ endif ()
44+
45+ execute_process (
46+ COMMAND git sparse-checkout init --cone
47+ WORKING_DIRECTORY "${LLVM_PROJECT_SOURCE_DIR} "
48+ COMMAND_ERROR_IS_FATAL ANY
4749 )
50+
51+ execute_process (
52+ COMMAND git sparse-checkout set openmp offload cmake llvm/include libc
53+ WORKING_DIRECTORY "${LLVM_PROJECT_SOURCE_DIR} "
54+ COMMAND_ERROR_IS_FATAL ANY
55+ )
56+
57+ execute_process (
58+ COMMAND git checkout "${LLVM_PROJECT_TAG} "
59+ WORKING_DIRECTORY "${LLVM_PROJECT_SOURCE_DIR} "
60+ COMMAND_ERROR_IS_FATAL ANY
61+ )
62+
4863 # Build OpenMP runtime (required dependency for offload's libomptarget) from the cloned source
4964 ExternalProject_Add(openmp_ext
5065 # DeviceRTL uses -fuse-ld=lld, so add lld to the dependencies.
51- DEPENDS llvm_project_src llvm-tblgen LLVMSupport clang lld
66+ DEPENDS llvm-tblgen LLVMSupport clang lld FileCheck not
5267 SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR} /openmp
5368 CMAKE_ARGS
5469 -DCMAKE_INSTALL_PREFIX=${OPENMP_INSTALL_DIR}
5570 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
5671 -DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR} /bin/clang
5772 -DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR} /bin/clang++
5873 -DLIBOMP_OMPD_GDB_SUPPORT=OFF
74+ -DOPENMP_ENABLE_OMPT_TOOLS=OFF
75+ -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR} /bin
5976 INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
6077 UPDATE_COMMAND ""
6178 DOWNLOAD_COMMAND ""
@@ -71,18 +88,21 @@ if (UR_OFFLOAD_INSTALL_DIR STREQUAL "" OR UR_OFFLOAD_INCLUDE_DIR STREQUAL "")
7188 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
7289 -DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR} /bin/clang
7390 -DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR} /bin/clang++
74- -DLIBOMPTARGET_LLVM_INCLUDE_DIRS=${LLVM_PROJECT_SOURCE_DIR} /llvm/include ; ${CMAKE_BINARY_DIR} /include
91+ -DLIBOMPTARGET_LLVM_INCLUDE_DIRS=${LLVM_PROJECT_SOURCE_DIR} /llvm/include | ${CMAKE_BINARY_DIR} /include
7592 -DLLVM_DIR=${CMAKE_BINARY_DIR} /lib/cmake/llvm
7693 -DLIBOMPTARGET_PLUGINS_TO_BUILD=cuda|amdgpu
7794 -DLIBOMP_INCLUDE_DIR=${OPENMP_INSTALL_DIR} /include
7895 -DLLVM_TABLEGEN=${CMAKE_BINARY_DIR} /bin/llvm-tblgen
79- -DCMAKE_PREFIX_PATH=${OPENMP_INSTALL_DIR} ; ${CMAKE_BINARY_DIR} /bin
96+ -DCMAKE_PREFIX_PATH=${OPENMP_INSTALL_DIR} | ${CMAKE_BINARY_DIR} /bin
8097 INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
8198 UPDATE_COMMAND ""
8299 DOWNLOAD_COMMAND ""
83100 BUILD_BYPRODUCTS "${UR_OFFLOAD_INSTALL_DIR} /lib/libLLVMOffload.so"
84101 )
85102 add_dependencies (${TARGET_NAME} offload_ext)
103+ install (DIRECTORY "${UR_OFFLOAD_INSTALL_DIR} /"
104+ DESTINATION "${CMAKE_INSTALL_PREFIX} "
105+ COMPONENT ur_adapter_offload)
86106endif ()
87107
88108# When targetting CUDA devices, we need a workaround to avoid sending PTX to
0 commit comments