Skip to content

Commit a23b230

Browse files
committed
[UR] Add debug subbuild on Windows
Using ExternalProject this commit adds a subbuild of UR in compiled in debug mode and with the `UR_USE_DEBUG_POSTFIX` option enabled. The resulting libraries are then copied to the `<build>/bin`/`<build>/lib` directories so they can be used in testing (not yet implemented). Additionally, they are also included in the `deploy-sycl-toolchain` install target alongside the normally named runtime libraries.
1 parent 763bc73 commit a23b230

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed

sycl/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ add_custom_target( sycl-toolchain ALL
402402
)
403403

404404
if (WIN32)
405-
add_dependencies(sycl-toolchain ur_win_proxy_loader)
405+
add_dependencies(sycl-toolchain ur_win_proxy_loader unified-runtimed)
406406
endif()
407407

408408
if("cuda" IN_LIST SYCL_ENABLE_BACKENDS)

sycl/cmake/modules/FetchUnifiedRuntime.cmake

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,109 @@ if("native_cpu" IN_LIST SYCL_ENABLE_BACKENDS)
317317
endif()
318318
endif()
319319

320+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
321+
# On Windows, also build/install debug libraries with the d suffix that are
322+
# compiled with /MDd so users can link against these in debug builds.
323+
include(ExternalProject)
324+
set(URD_BINARY_DIR ${CMAKE_BINARY_DIR}/unified-runtimed)
325+
set(URD_INSTALL_DIR ${URD_BINARY_DIR}/install)
326+
327+
# This creates a subbuild which can be used in dependencies with the
328+
# unified-runtimed target. It invokes the install-unified-runtime-libraries
329+
# target to install the UR runtime libraries.
330+
ExternalProject_Add(unified-runtimed
331+
SOURCE_DIR ${UNIFIED_RUNTIME_SOURCE_DIR}
332+
BINARY_DIR ${URD_BINARY_DIR}
333+
INSTALL_DIR ${URD_INSTALL_DIR}
334+
INSTALL_COMMAND ${CMAKE_COMMAND}
335+
--build <BINARY_DIR>
336+
--target install-unified-runtime-libraries
337+
CMAKE_CACHE_ARGS
338+
-DCMAKE_BUILD_TYPE:STRING=Debug
339+
-DCMAKE_INSTALL_PREFIX:STRING=<INSTALL_DIR>
340+
# Enable d suffix on libraries
341+
-DUR_USE_DEBUG_POSTFIX:BOOL=ON
342+
# Don't build unnecessary targets in subbuild.
343+
-DUR_BUILD_EXAMPLES:BOOL=OFF
344+
-DUR_BUILD_TESTS:BOOL=OFF
345+
-DUR_BUILD_TOOLS:BOOL=OFF
346+
# Sanitizer layer is not supported on Windows.
347+
-DUR_ENABLE_SYMBOLIZER:BOOL=OFF
348+
# Inherit settings from parent build.
349+
-DUR_ENABLE_TRACING:BOOL=${UR_ENABLE_TRACING}
350+
-DUR_ENABLE_COMGR:BOOL=${UR_ENABLE_COMGR}
351+
-DUR_BUILD_ADAPTER_L0:BOOL=${UR_BUILD_ADAPTER_L0}
352+
-DUR_BUILD_ADAPTER_L0_V2:BOOL=${UR_BUILD_ADAPTER_L0_V2}
353+
-DUR_BUILD_ADAPTER_OPENCL:BOOL=${UR_BUILD_ADAPTER_OPENCL}
354+
-DUR_BUILD_ADAPTER_CUDA:BOOL=${UR_BUILD_ADAPTER_CUDA}
355+
-DUR_BUILD_ADAPTER_HIP:BOOL=${UR_BUILD_ADAPTER_HIP}
356+
-DUR_BUILD_ADAPTER_NATIVE_CPU:BOOL=${UR_BUILD_ADAPTER_NATIVE_CPU}
357+
-DUMF_BUILD_EXAMPLES:BOOL=${UMF_BUILD_EXAMPLES}
358+
-DUMF_BUILD_SAHRED_LIBRARY:BOOL=${UMF_BUILD_SHARED_LIBRARY}
359+
-DUMF_LINK_HWLOC_STATICALLY:BOOL=${UMF_LINK_HWLOC_STATICALLY}
360+
-DUMF_DISABLE_HWLOC:BOOL=${UMF_DISABLE_HWLOC}
361+
# TODO: Enable d suffix in UMF
362+
# -DUMF_USE_DEBUG_POSTFIX=ON
363+
)
364+
365+
# Copy the debug UR runtime libraries to <build>/bin & <build>/lib for use in
366+
# the partent build, e.g. integration testing.
367+
set(URD_COPY_FILES)
368+
macro(urd_copy_library_to_build library)
369+
list(APPEND URD_COPY_FILES
370+
${LLVM_BINARY_DIR}/bin/${library}.dll
371+
${LLVM_BINARY_DIR}/lib/${library}.lib
372+
)
373+
add_custom_command(
374+
OUTPUT
375+
${LLVM_BINARY_DIR}/bin/${library}.dll
376+
${LLVM_BINARY_DIR}/lib/${library}.lib
377+
COMMAND ${CMAKE_COMMAND} -E copy
378+
${URD_INSTALL_DIR}/bin/${library}.dll
379+
${LLVM_BINARY_DIR}/bin/${library}.dll
380+
COMMAND ${CMAKE_COMMAND} -E copy
381+
${URD_INSTALL_DIR}/lib/${library}.lib
382+
${LLVM_BINARY_DIR}/lib/${library}.lib
383+
)
384+
endmacro()
385+
386+
urd_copy_library_to_build(ur_loaderd)
387+
foreach(adatper ${SYCL_ENABLE_BACKENDS})
388+
urd_copy_library_to_build(ur_adapter_${adatper}d)
389+
endforeach()
390+
# TODO: Also copy umfd.dll/umfd.lib
391+
# urd_copy_library_to_build(umfd)
392+
393+
add_custom_target(unified-runtimed-copy-to-build DEPENDS ${URD_COPY_FILES})
394+
add_dependencies(unified-runtimed-copy-to-build unified-runtimed)
395+
396+
# Add the debug UR runtime libraries to the parent install.
397+
install(
398+
FILES ${URD_INSTALL_DIR}/bin/ur_loaderd.dll
399+
DESTINATION "bin" COMPONENT unified-runtime-loader)
400+
install(
401+
FILES ${URD_INSTALL_DIR}/lib/ur_loaderd.lib
402+
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT unified-runtime-loader)
403+
404+
foreach(adapter ${SYCL_ENABLE_BACKENDS})
405+
install(
406+
FILES ${URD_INSTALL_DIR}/bin/ur_adapter_${adapter}d.dll
407+
DESTINATION "bin" COMPONENT ur_adapter_${adapter})
408+
install(
409+
FILES ${URD_INSTALL_DIR}/lib/ur_adapter_${adapter}d.lib
410+
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT ur_adapter_${adapter})
411+
add_dependencies(install-sycl-ur-adapter-${adapter} unified-runtimed)
412+
endforeach()
413+
414+
# TODO: Also install umfd.dll/umfd.lib
415+
# install(
416+
# FILES ${URD_INSTALL_DIR}/bin/umfd.dll
417+
# DESTINATION "bin" COMPONENT unified-memory-framework)
418+
# install(
419+
# FILES ${URD_INSTALL_DIR}/lib/umfd.lib
420+
# DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT unified-memory-framework)
421+
endif()
422+
320423
install(TARGETS umf
321424
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT unified-memory-framework
322425
ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT unified-memory-framework

unified-runtime/cmake/helpers.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ if(NOT TARGET install-unified-runtime-libraries)
225225
COMMAND ${CMAKE_COMMAND}
226226
-DCOMPONENT=unified-runtime
227227
-P ${CMAKE_BINARY_DIR}/cmake_install.cmake
228+
# TODO: Also install debug UMF runtime libraries component
228229
DEPENDS unified-runtime-libraries
230+
# TODO: Add dependency on building debug UMF libraries
229231
)
230232
endif()
231233

0 commit comments

Comments
 (0)