Skip to content

[UR] For non-standalone builds, use built DPCXX/Extractor #18062

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions unified-runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ set(UR_EXTERNAL_DEPENDENCIES "" CACHE STRING
"List of external CMake targets for executables/libraries to depend on")
set(UR_DPCXX "" CACHE FILEPATH "Path of the DPC++ compiler executable")
set(UR_DPCXX_BUILD_FLAGS "" CACHE STRING "Build flags to pass to DPC++ when compiling device programs")
set(UR_DEVICE_CODE_EXTRACTOR "" CACHE PATH "Path to clang-offload-extract")
set(UR_SYCL_LIBRARY_DIR "" CACHE PATH
"Path of the SYCL runtime library directory")
set(UR_CONFORMANCE_TARGET_TRIPLES "" CACHE STRING
Expand Down Expand Up @@ -142,6 +143,21 @@ if(NOT MSVC)
endif()
endif()

if(NOT UR_STANDALONE_BUILD AND "${UR_DPCXX}" STREQUAL "")
set(UR_FOUND_DPCXX "$<TARGET_FILE:clang>")
set(UR_FOUND_DEVICE_CODE_EXTRACTOR "$<TARGET_FILE:clang-offload-extract>")
set(UR_DPCXX_DEPS "sycl-toolchain;")
else()
set(UR_FOUND_DPCXX "${UR_DPCXX}")
if(UR_DEVICE_CODE_EXTRACTOR)
set(UR_FOUND_DEVICE_CODE_EXTRACTOR "${UR_DEVICE_CODE_EXTRACTOR}")
else()
cmake_path(GET UR_FOUND_DPCXX EXTENSION EXE)
cmake_path(REPLACE_FILENAME UR_FOUND_DPCXX "clang-offload-extract${EXE}" OUTPUT_VARIABLE UR_FOUND_DEVICE_CODE_EXTRACTOR)
endif()
set(UR_DPCXX_DEPS "")
endif()

if(UR_ENABLE_TRACING)
add_compile_definitions(UR_ENABLE_TRACING)

Expand Down
2 changes: 1 addition & 1 deletion unified-runtime/test/adapters/cuda/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# See LICENSE.TXT
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

if(NOT UR_DPCXX)
if(NOT UR_FOUND_DPCXX)
message(WARNING
"UR_DPCXX is not defined, skipping adapter-specific tests for Cuda")
return()
Expand Down
2 changes: 1 addition & 1 deletion unified-runtime/test/adapters/hip/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# See LICENSE.TXT
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

if(NOT UR_DPCXX)
if(NOT UR_FOUND_DPCXX)
message(WARNING
"UR_DPCXX is not defined, skipping adapter-specific tests for HIP")
return()
Expand Down
2 changes: 1 addition & 1 deletion unified-runtime/test/adapters/level_zero/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

function(add_adapter_tests adapter)
if(NOT UR_DPCXX)
if(NOT UR_FOUND_DPCXX)
# Tests that require kernels can't be used if we aren't generating
# device binaries
message(WARNING
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ add_adapter_test(level_zero_memory_residency
)

if(NOT WIN32)
if (NOT UR_DPCXX)
if (NOT UR_FOUND_DPCXX)
# Tests that require kernels can't be used if we aren't generating
# device binaries
message(WARNING
Expand Down
2 changes: 1 addition & 1 deletion unified-runtime/test/conformance/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ set(TEST_SUBDIRECTORIES_DPCXX
"usm"
)

if(UR_DPCXX)
if(UR_FOUND_DPCXX)
add_custom_target(generate_device_binaries)

set(UR_CONFORMANCE_DEVICE_BINARIES_DIR
Expand Down
16 changes: 6 additions & 10 deletions unified-runtime/test/conformance/device_code/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ else()
set(NULDEV /dev/null)
endif()

cmake_path(GET UR_DPCXX EXTENSION EXE)
cmake_path(REPLACE_FILENAME UR_DPCXX "clang-offload-extract${EXE}" OUTPUT_VARIABLE DEFAULT_EXTRACTOR_NAME)
set(UR_DEVICE_CODE_EXTRACTOR "${DEFAULT_EXTRACTOR_NAME}" CACHE PATH "Path to clang-offload-extract")

if("${AMD_ARCH}" STREQUAL "" AND "${TARGET_TRIPLES}" MATCHES "amd")
find_package(RocmAgentEnumerator)
if(NOT ROCM_AGENT_ENUMERATOR_FOUND)
Expand Down Expand Up @@ -110,23 +106,23 @@ macro(add_device_binary SOURCE_FILE)

add_custom_command(OUTPUT ${BIN_PATH}
COMMAND LD_LIBRARY_PATH=${UR_SYCL_LIBRARY_DIR}:$ENV{LD_LIBRARY_PATH}
${UR_DPCXX} -fsycl -fsycl-targets=${TRIPLE}
-fsycl-device-code-split=off ${AMD_TARGET_BACKEND}
${AMD_OFFLOAD_ARCH} ${AMD_NOGPULIB} ${DPCXX_BUILD_FLAGS_LIST}
${UR_FOUND_DPCXX} -fsycl -fsycl-targets=${TRIPLE}
-fsycl-device-code-split=off ${AMD_TARGET_BACKEND}
${AMD_OFFLOAD_ARCH} ${AMD_NOGPULIB} ${DPCXX_BUILD_FLAGS_LIST}
${SOURCE_FILE} -o ${EXE_PATH}

COMMAND ${CMAKE_COMMAND} -E env ${EXTRA_ENV} ${UR_DEVICE_CODE_EXTRACTOR} -q --stem="${TRIPLE}.bin" ${EXE_PATH}
COMMAND ${CMAKE_COMMAND} -E env ${EXTRA_ENV} ${UR_FOUND_DEVICE_CODE_EXTRACTOR} -q --stem="${TRIPLE}.bin" ${EXE_PATH}

WORKING_DIRECTORY "${DEVICE_BINARY_DIR}"
DEPENDS ${SOURCE_FILE}
DEPENDS ${SOURCE_FILE} ${UR_DPCXX_DEPS}
)
add_custom_target(generate_${KERNEL_NAME}_${TRIPLE} DEPENDS ${BIN_PATH})
add_dependencies(generate_device_binaries generate_${KERNEL_NAME}_${TRIPLE})
endforeach()

set(IH_PATH "${DEVICE_BINARY_DIR}/${KERNEL_NAME}.ih")
add_custom_command(OUTPUT "${IH_PATH}"
COMMAND ${UR_DPCXX} -fsycl -fsycl-device-code-split=off
COMMAND ${UR_FOUND_DPCXX} -fsycl -fsycl-device-code-split=off
-fsycl-device-only -c -Xclang -fsycl-int-header="${IH_PATH}"
${DPCXX_BUILD_FLAGS_LIST} ${SOURCE_FILE} -o ${NULDEV}

Expand Down