From ece7f9753333a989cb54cbbd6bdea4ea74ff2857 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Thu, 10 Apr 2025 06:20:21 -0700 Subject: [PATCH 01/18] [SYCL] Stop building Windows debug variants in release mode Signed-off-by: Larsen, Steffen --- clang/lib/Driver/ToolChains/MSVC.cpp | 5 +- sycl/CMakeLists.txt | 13 +--- sycl/cmake/modules/AddSYCLUnitTest.cmake | 9 +-- sycl/cmake/modules/SYCLUtils.cmake | 11 ++-- sycl/source/CMakeLists.txt | 66 +++++-------------- .../Regression/compile_on_win_with_mdd.cpp | 2 +- sycl/test-e2e/Regression/msvc_crt.cpp | 6 +- sycl/test-e2e/lit.cfg.py | 6 ++ sycl/test-e2e/lit.site.cfg.py.in | 2 + sycl/test/abi/sycl_symbols_windows.dump | 2 +- sycl/test/lit.cfg.py | 16 ++++- sycl/test/lit.site.cfg.py.in | 2 + sycl/tools/sycl-ls/CMakeLists.txt | 8 +-- sycl/ur_win_proxy_loader/CMakeLists.txt | 43 ------------ unified-runtime/CMakeLists.txt | 6 +- xpti/CMakeLists.txt | 38 ----------- xpti/src/CMakeLists.txt | 10 --- xptifw/CMakeLists.txt | 4 -- xptifw/src/CMakeLists.txt | 9 +-- 19 files changed, 59 insertions(+), 199 deletions(-) diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 8b295e9188867..07f1a99907e65 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -150,9 +150,10 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, // equivalent. Do not add the -defaultlib as it conflicts. if (!isDependentLibAdded(Args, "msvcrtd")) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) - CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION "-preview.lib"); + CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION + "d-preview.lib"); else - CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION ".lib"); + CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION "d.lib"); } CmdArgs.push_back("-defaultlib:sycl-devicelib-host.lib"); } diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 78949054ef14c..1dc37d6a97a73 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -293,13 +293,6 @@ if (WIN32) if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) list(APPEND SYCL_RT_LIBS sycl${SYCL_MAJOR_VERSION}-preview) endif() - # Do we really support non-MSVC ABI on WIN? - if (MSVC) - list(APPEND SYCL_RT_LIBS sycl${SYCL_MAJOR_VERSION}d) - if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - list(APPEND SYCL_RT_LIBS sycl${SYCL_MAJOR_VERSION}-previewd) - endif() - endif() else() set(SYCL_RT_LIBS sycl) if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) @@ -363,11 +356,7 @@ if (NOT WIN32) endif() if (SYCL_ENABLE_XPTI_TRACING) - if (MSVC) - set(XPTIFW_LIBS xpti xptid xptifw xptifwd) - else() - set(XPTIFW_LIBS xpti xptifw) - endif() + set(XPTIFW_LIBS xpti xptifw) endif() # SYCL toolchain builds all components: compiler, libraries, headers, etc. diff --git a/sycl/cmake/modules/AddSYCLUnitTest.cmake b/sycl/cmake/modules/AddSYCLUnitTest.cmake index 677c7358da0f6..001a84aa77853 100644 --- a/sycl/cmake/modules/AddSYCLUnitTest.cmake +++ b/sycl/cmake/modules/AddSYCLUnitTest.cmake @@ -10,13 +10,8 @@ macro(add_sycl_unittest test_dirname link_variant) get_target_property(SYCL_BINARY_DIR sycl-toolchain BINARY_DIR) string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) - if (MSVC AND build_type_lower MATCHES "debug") - set(sycl_obj_target "sycld_object") - set(sycl_so_target "sycld") - else() - set(sycl_obj_target "sycl_object") - set(sycl_so_target "sycl") - endif() + set(sycl_obj_target "sycl_object") + set(sycl_so_target "sycl") if ("${link_variant}" MATCHES "SHARED") set(SYCL_LINK_LIBS ${sycl_so_target}) diff --git a/sycl/cmake/modules/SYCLUtils.cmake b/sycl/cmake/modules/SYCLUtils.cmake index f469b26047605..b5bae23b2e539 100644 --- a/sycl/cmake/modules/SYCLUtils.cmake +++ b/sycl/cmake/modules/SYCLUtils.cmake @@ -4,17 +4,18 @@ include(CheckLinkerFlag) # add_stripped_pdb(TARGET_NAME) # # Will add option for generating stripped PDB file and install the generated -# file as ${ARG_TARGET_NAME}.pdb in bin folder. +# file as ${ARG_TARGET_NAME}{d}.pdb in bin folder. # NOTE: LLD does not currently support /PDBSTRIPPED so the PDB file is optional. macro(add_stripped_pdb ARG_TARGET_NAME) - check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${ARG_TARGET_NAME}.stripped.pdb" + set(PDB_FILENAME "${ARG_TARGET_NAME}$<$:d>") + check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb" LINKER_SUPPORTS_PDBSTRIPPED) if(LINKER_SUPPORTS_PDBSTRIPPED) target_link_options(${ARG_TARGET_NAME} - PRIVATE "LINKER:/PDBSTRIPPED:${ARG_TARGET_NAME}.stripped.pdb") - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET_NAME}.stripped.pdb" + PRIVATE "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PDB_FILENAME}.stripped.pdb" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin - RENAME "${ARG_TARGET_NAME}.pdb" + RENAME "${PDB_FILENAME}.pdb" COMPONENT ${ARG_TARGET_NAME} OPTIONAL) endif() diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 2570921a2d565..8813a6482137b 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -146,13 +146,8 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) # ur_win_proxy_loader if (WIN32) include_directories(${LLVM_EXTERNAL_SYCL_SOURCE_DIR}/ur_win_proxy_loader) - if(WIN_DUPE) - target_link_libraries(${LIB_NAME} PUBLIC ur_win_proxy_loaderd) - set(MANIFEST_FILE_NAME "sycld.manifest") - else() - target_link_libraries(${LIB_NAME} PUBLIC ur_win_proxy_loader) - set(MANIFEST_FILE_NAME "sycl.manifest") - endif() + target_link_libraries(${LIB_NAME} PUBLIC ur_win_proxy_loader) + set(MANIFEST_FILE_NAME "sycl$<$:d>.manifest") # Embed manifest into the sycl.dll where ur_win_proxy_loader.dll is described as sycl.dll's private dll and will always be loaded from the same directory. # 0x2000: LOAD_LIBRARY_SAFE_CURRENT_DIRS flag. Using this flag means that loading dependency DLLs (of sycl.dll) # from the current directory is only allowed if it is under a directory in the Safe load list. @@ -164,10 +159,11 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) add_custom_command( TARGET ${LIB_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_NAME}.lib ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}.lib + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_NAME}$<$:d>.lib + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}$<$:d>.lib COMMENT "Creating version-agnostic copy of the import library.") install( - FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}.lib + FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}$<$:d>.lib DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl) endif() endif() @@ -220,6 +216,12 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) file(REMOVE ${VERSION_FILE}) endif() endif() + + # Ensure that we use the dynamic CRT on Windows, i.e. /MD or /MDd. + set_target_properties(${LIB_NAME} PROPERTIES + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + set_target_properties(${LIB_OBJ_NAME} PROPERTIES + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") endfunction(add_sycl_rt_library) set(SYCL_COMMON_SOURCES @@ -322,37 +324,8 @@ set(SYCL_PREVIEW_SOURCES "${SYCL_COMMON_SOURCES}" ) if (MSVC) - # MSVC provides two incompatible build variants for its CRT: release and debug - # To avoid potential issues in user code we also need to provide two kinds - # of SYCL Runtime Library for release and debug configurations. - foreach(flag_var - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - string(REGEX REPLACE "/MDd" "" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MTd" "" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MD" "" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MT" "" ${flag_var} "${${flag_var}}") - endforeach() - - set(WIN_DUPE "1") - if (SYCL_ENABLE_XPTI_TRACING) - add_sycl_rt_library(sycl${SYCL_MAJOR_VERSION}d sycld_object XPTI_LIB xptid COMPILE_OPTIONS "/MDd" SOURCES ${SYCL_NON_PREVIEW_SOURCES} IMPLIB_NAME sycld) - if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - add_sycl_rt_library(sycl${SYCL_MAJOR_VERSION}-previewd sycl-previewd_object XPTI_LIB xptid COMPILE_OPTIONS "/MDd" "/D__INTEL_PREVIEW_BREAKING_CHANGES" SOURCES ${SYCL_PREVIEW_SOURCES} IMPLIB_NAME sycl-previewd) - endif() - else() - add_sycl_rt_library(sycl${SYCL_MAJOR_VERSION}d sycld_object COMPILE_OPTIONS "/MDd" SOURCES ${SYCL_NON_PREVIEW_SOURCES} IMPLIB_NAME sycld) - if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - add_sycl_rt_library(sycl${SYCL_MAJOR_VERSION}-previewd sycl-previewd_object COMPILE_OPTIONS "/MDd" "/D__INTEL_PREVIEW_BREAKING_CHANGES" SOURCES ${SYCL_PREVIEW_SOURCES} IMPLIB_NAME sycl-previewd) - endif() - endif() - unset(WIN_DUPE) - add_library(sycld ALIAS sycl${SYCL_MAJOR_VERSION}d) - if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - add_library(sycl-previewd ALIAS sycl${SYCL_MAJOR_VERSION}-previewd) - endif() - - set(SYCL_EXTRA_OPTS "/MD") + # Append d to the debug libraries on Windows. + set(CMAKE_DEBUG_POSTFIX d) endif() check_cxx_compiler_flag(-fsemantic-interposition HAS_SEMANTIC_INTERPOSITION_FLAG) @@ -369,16 +342,9 @@ endif() # Version-agnostic name of the import library, has effect on Windows only. set(IMPLIB_NAME "sycl") -if (SYCL_ENABLE_XPTI_TRACING) - add_sycl_rt_library(${LIB_NAME} sycl_object XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} SOURCES ${SYCL_NON_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) - if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - add_sycl_rt_library(${LIB_NAME}-preview sycl-preview_object XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} "-D__INTEL_PREVIEW_BREAKING_CHANGES" SOURCES ${SYCL_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}-preview) - endif() -else() - add_sycl_rt_library(${LIB_NAME} sycl_object COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} SOURCES ${SYCL_NON_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) - if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - add_sycl_rt_library(${LIB_NAME}-preview sycl-preview_object COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} "-D__INTEL_PREVIEW_BREAKING_CHANGES" SOURCES ${SYCL_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}-preview) - endif() +add_sycl_rt_library(${LIB_NAME} sycl_object XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} SOURCES ${SYCL_NON_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) +if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) + add_sycl_rt_library(${LIB_NAME}-preview sycl-preview_object XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} "-D__INTEL_PREVIEW_BREAKING_CHANGES" SOURCES ${SYCL_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}-preview) endif() if (WIN32) diff --git a/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp b/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp index 57826c81ece2e..823b4dc179cfd 100644 --- a/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp +++ b/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp @@ -1,4 +1,4 @@ -// REQUIRES: windows +// REQUIRES: windows, debug_sycl_library // RUN: %clangxx --driver-mode=cl -fsycl /MDd -c %s -o %t.obj // RUN: %clangxx --driver-mode=cl -fsycl %t.obj -Wno-unused-command-line-argument -o %t.out diff --git a/sycl/test-e2e/Regression/msvc_crt.cpp b/sycl/test-e2e/Regression/msvc_crt.cpp index 9d59547e50d7b..1d07c9a26730f 100644 --- a/sycl/test-e2e/Regression/msvc_crt.cpp +++ b/sycl/test-e2e/Regression/msvc_crt.cpp @@ -1,7 +1,5 @@ -// RUN: %{build} /MD -o %t1.exe -// RUN: %{run} %t1.exe -// RUN: %{build} /MDd -o %t2.exe -// RUN: %{run} %t2.exe +// RUN: %{build} %if debug_sycl_library %{ /MDd %} %else %{ /MD %} -o %t.exe +// RUN: %{run} %t.exe // REQUIRES: system-windows, cl_options //==-------------- msvc_crt.cpp - SYCL MSVC CRT test -----------------------==// // diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index 222ae37208b59..e06dff9c42411 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -298,6 +298,12 @@ def open_check_file(file_name): if ps.wait() == 0: config.available_features.add("has_ndebug") +# Check if the current build mode is debug. +if config.build_mode == "Debug": + config.available_features.add("debug_sycl_library") + # Add /MDd to the build command to make it use the debug library. + config.cxx_flags += (" /MDd" if cl_options else " -fms-runtime-lib=dll_dbg") + # Check for Level Zero SDK check_l0_file = "l0_include.cpp" with open_check_file(check_l0_file) as fp: diff --git a/sycl/test-e2e/lit.site.cfg.py.in b/sycl/test-e2e/lit.site.cfg.py.in index e2d6bfc282896..90389048c6099 100644 --- a/sycl/test-e2e/lit.site.cfg.py.in +++ b/sycl/test-e2e/lit.site.cfg.py.in @@ -48,6 +48,8 @@ config.vulkan_include_dir = "@Vulkan_INCLUDE_DIRS@" config.vulkan_lib = "@Vulkan_LIBRARY@" config.vulkan_found = "@Vulkan_FOUND@" +config.build_mode = "@CMAKE_BUILD_TYPE@" + config.run_launcher = lit_config.params.get('run_launcher', "@SYCL_E2E_RUN_LAUNCHER@") config.allow_unknown_arch = "@SYCL_E2E_LIT_ALLOW_UNKNOWN_ARCH@" diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index 8cfa503ed210c..0e0ad915aa1f3 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -3,7 +3,7 @@ # DO NOT EDIT IT MANUALLY. Refer to sycl/doc/developer/ABIPolicyGuide.md for more info. ################################################################################ -# RUN: env LLVM_BIN_PATH=%llvm_build_bin_dir %python %sycl_tools_src_dir/abi_check.py --mode check_symbols --reference %s %llvm_build_bin_dir/sycl8.dll +# RUN: env LLVM_BIN_PATH=%llvm_build_bin_dir %python %sycl_tools_src_dir/abi_check.py --mode check_symbols --reference %s %if debug_sycl_library %{ %llvm_build_bin_dir/sycl8.dll %} %else %{ %llvm_build_bin_dir/sycl8d.dll %} # REQUIRES: windows # UNSUPPORTED: libcxx diff --git a/sycl/test/lit.cfg.py b/sycl/test/lit.cfg.py index 089395d5c1400..c6589ec8dddba 100644 --- a/sycl/test/lit.cfg.py +++ b/sycl/test/lit.cfg.py @@ -69,6 +69,10 @@ if config.sycl_preview_lib_enabled == "ON": config.available_features.add("preview-breaking-changes-supported") +# Check if the current build mode is debug. +if config.build_mode == "Debug": + config.available_features.add("debug_sycl_library") + # Configure LD_LIBRARY_PATH or corresponding os-specific alternatives # Add 'libcxx' feature to filter out all SYCL abi tests when SYCL runtime # is built with llvm libcxx. This feature is added for Linux only since MSVC @@ -132,9 +136,12 @@ sycl_host_only_options += " -isystem %s" % include_dir config.substitutions.append(("%fsycl-host-only", sycl_host_only_options)) -config.substitutions.append( - ("%sycl_lib", " -lsycl8" if platform.system() == "Windows" else "-lsycl") -) +if platform.system() == "Windows": + config.substitutions.append( + ("%sycl_lib", " -lsycl8d" if config.build_mode == "Debug" else " -lsycl8") + ) +else: + config.substitutions.append(("%sycl_lib", "-lsycl")) llvm_config.add_tool_substitutions(["llvm-spirv"], [config.sycl_tools_dir]) @@ -178,6 +185,9 @@ "--offload-arch=gfx906", ] +if platform.system() == "Windows" and config.build_mode == "Debug": + additional_flags += ["-fms-runtime-lib=dll_dbg"] + config.sycl_headers_filter = lit_config.params.get("SYCL_HEADERS_FILTER", None) if config.sycl_headers_filter is not None: lit_config.note( diff --git a/sycl/test/lit.site.cfg.py.in b/sycl/test/lit.site.cfg.py.in index cc9043f71bf3e..3da06e7ed9134 100644 --- a/sycl/test/lit.site.cfg.py.in +++ b/sycl/test/lit.site.cfg.py.in @@ -36,6 +36,8 @@ config.native_cpu = '@SYCL_BUILD_BACKEND_NATIVE_CPU@' config.native_cpu_ock = '@NATIVECPU_USE_OCK@' config.sycl_preview_lib_enabled = '@SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB@' +config.build_mode = "@CMAKE_BUILD_TYPE@" + import lit.llvm lit.llvm.initialize(lit_config, config) diff --git a/sycl/tools/sycl-ls/CMakeLists.txt b/sycl/tools/sycl-ls/CMakeLists.txt index b90bd972d3672..de6520a6d1075 100644 --- a/sycl/tools/sycl-ls/CMakeLists.txt +++ b/sycl/tools/sycl-ls/CMakeLists.txt @@ -2,18 +2,12 @@ add_executable(sycl-ls sycl-ls.cpp) add_dependencies(sycl-ls sycl) target_include_directories(sycl-ls PRIVATE "${sycl_inc_dir}") -set(sycl_lib sycl) -string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) -if (WIN32 AND "${build_type_lower}" MATCHES "debug") - set(sycl_lib sycld) -endif() - # Disable aspect::image warning. target_compile_definitions(sycl-ls PRIVATE SYCL_DISABLE_IMAGE_ASPECT_WARNING) target_link_libraries(sycl-ls PRIVATE - ${sycl_lib} + sycl OpenCL-Headers UnifiedRuntime-Headers ) diff --git a/sycl/ur_win_proxy_loader/CMakeLists.txt b/sycl/ur_win_proxy_loader/CMakeLists.txt index 955cd022183ec..2ef13f329746d 100644 --- a/sycl/ur_win_proxy_loader/CMakeLists.txt +++ b/sycl/ur_win_proxy_loader/CMakeLists.txt @@ -18,51 +18,8 @@ install(TARGETS ur_win_proxy_loader ) if (MSVC) - # MSVC provides two incompatible build variants for its CRT: release and debug - # To avoid potential issues in user code we also need to provide two kinds - # of SYCL Runtime Library for release and debug configurations. - set(WINUNLOAD_CXX_FLAGS "") - if (CMAKE_BUILD_TYPE MATCHES "Debug") - set(WINUNLOAD_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}") - string(REPLACE "/MDd" "" WINUNLOAD_CXX_FLAGS "${WINUNLOAD_CXX_FLAGS}") - string(REPLACE "/MTd" "" WINUNLOAD_CXX_FLAGS "${WINUNLOAD_CXX_FLAGS}") - else() - if (CMAKE_BUILD_TYPE MATCHES "Release") - set(WINUNLOAD_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}") - elseif (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") - set(WINUNLOAD_CXX_FLAGS "${CMAKE_CXX_FLAGS_MINSIZEREL}") - elseif (CMAKE_BUILD_TYPE MATCHES "MinSizeRel") - set(WINUNLOAD_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") - endif() - string(REPLACE "/MD" "" WINUNLOAD_CXX_FLAGS "${WINUNLOAD_CXX_FLAGS}") - string(REPLACE "/MT" "" WINUNLOAD_CXX_FLAGS "${WINUNLOAD_CXX_FLAGS}") - endif() - - # target_compile_options requires list of options, not a string - string(REPLACE " " ";" WINUNLOAD_CXX_FLAGS "${WINUNLOAD_CXX_FLAGS}") - - set(WINUNLOAD_CXX_FLAGS_RELEASE "${WINUNLOAD_CXX_FLAGS};/MD") - set(WINUNLOAD_CXX_FLAGS_DEBUG "${WINUNLOAD_CXX_FLAGS};/MDd") - - # CMake automatically applies these flags to all targets. To override this - # behavior, options lists are reset. - set(CMAKE_CXX_FLAGS_RELEASE "") - set(CMAKE_CXX_FLAGS_MINSIZEREL "") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") - set(CMAKE_CXX_FLAGS_DEBUG "") - - # Handle the debug version for the Microsoft compiler as a special case by - # creating a debug version of the static library that uses the flags used by - # the SYCL runtime - add_library(ur_win_proxy_loaderd SHARED ur_win_proxy_loader.cpp ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc) - target_compile_options(ur_win_proxy_loaderd PRIVATE ${WINUNLOAD_CXX_FLAGS_DEBUG}) - target_compile_options(ur_win_proxy_loader PRIVATE ${WINUNLOAD_CXX_FLAGS_RELEASE}) - target_link_libraries(ur_win_proxy_loaderd PRIVATE shlwapi) target_link_libraries(ur_win_proxy_loader PRIVATE shlwapi) # 0x2000: LOAD_LIBRARY_SAFE_CURRENT_DIRS flag. Using this flag means that loading dependency DLLs # from the current directory is only allowed if it is under a directory in the Safe load list. - target_link_options(ur_win_proxy_loaderd PRIVATE LINKER:/DEPENDENTLOADFLAG:0x2000) target_link_options(ur_win_proxy_loader PRIVATE LINKER:/DEPENDENTLOADFLAG:0x2000) - install(TARGETS ur_win_proxy_loaderd - RUNTIME DESTINATION "bin" COMPONENT ur_win_proxy_loader) endif() diff --git a/unified-runtime/CMakeLists.txt b/unified-runtime/CMakeLists.txt index 9691012efc6f8..afbdc851a7c37 100644 --- a/unified-runtime/CMakeLists.txt +++ b/unified-runtime/CMakeLists.txt @@ -201,11 +201,7 @@ if(UR_ENABLE_TRACING) endif() endif() - if (MSVC) - set(TARGET_XPTI $,xpti,xptid>) - else() - set(TARGET_XPTI xpti) - endif() + set(TARGET_XPTI xpti) endif() if(UR_ENABLE_SANITIZER) diff --git a/xpti/CMakeLists.txt b/xpti/CMakeLists.txt index 6433e39c94c70..53ae5d38668cb 100644 --- a/xpti/CMakeLists.txt +++ b/xpti/CMakeLists.txt @@ -22,41 +22,6 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type (default Release)" FORCE) endif() -if (MSVC) - # MSVC provides two incompatible build variants for its CRT: release and debug - # To avoid potential issues in user code we also need to provide two kinds - # of SYCL Runtime Library for release and debug configurations. - set(XPTI_CXX_FLAGS "") - if (CMAKE_BUILD_TYPE MATCHES "Debug") - set(XPTI_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}") - string(REPLACE "/MDd" "" XPTI_CXX_FLAGS "${XPTI_CXX_FLAGS}") - string(REPLACE "/MTd" "" XPTI_CXX_FLAGS "${XPTI_CXX_FLAGS}") - else() - if (CMAKE_BUILD_TYPE MATCHES "Release") - set(XPTI_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}") - elseif (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") - set(XPTI_CXX_FLAGS "${CMAKE_CXX_FLAGS_MINSIZEREL}") - elseif (CMAKE_BUILD_TYPE MATCHES "MinSizeRel") - set(XPTI_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") - endif() - string(REPLACE "/MD" "" XPTI_CXX_FLAGS "${XPTI_CXX_FLAGS}") - string(REPLACE "/MT" "" XPTI_CXX_FLAGS "${XPTI_CXX_FLAGS}") - endif() - - # target_compile_options requires list of options, not a string - string(REPLACE " " ";" XPTI_CXX_FLAGS "${XPTI_CXX_FLAGS}") - - set(XPTI_CXX_FLAGS_RELEASE "${XPTI_CXX_FLAGS};/MD") - set(XPTI_CXX_FLAGS_DEBUG "${XPTI_CXX_FLAGS};/MDd") - - # CMake automatically applies these flags to all targets. To override this - # behavior, options lists are reset. - set(CMAKE_CXX_FLAGS_RELEASE "") - set(CMAKE_CXX_FLAGS_MINSIZEREL "") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") - set(CMAKE_CXX_FLAGS_DEBUG "") -endif() - if (SYCL_USE_LIBCXX) if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) @@ -91,9 +56,6 @@ if (LLVM_BINARY_DIR) COMMENT "Copying XPTI headers ..." ) add_dependencies(xpti xpti-headers) - if (MSVC) - add_dependencies(xptid xpti-headers) - endif() endif() include(GNUInstallDirs) diff --git a/xpti/src/CMakeLists.txt b/xpti/src/CMakeLists.txt index 1d7e371e98a17..d94ddad5f0125 100644 --- a/xpti/src/CMakeLists.txt +++ b/xpti/src/CMakeLists.txt @@ -22,13 +22,3 @@ set(SOURCES ) add_xpti_lib(xpti ${SOURCES}) - -# Handle the debug version for the Microsoft compiler as a special case by -# creating a debug version of the static library that uses the flags used by -# the SYCL runtime -if (MSVC) - add_xpti_lib(xptid STATIC ${SOURCES}) - target_compile_options(xptid PRIVATE ${XPTI_CXX_FLAGS_DEBUG}) - target_compile_options(xpti PRIVATE ${XPTI_CXX_FLAGS_RELEASE}) -endif() - diff --git a/xptifw/CMakeLists.txt b/xptifw/CMakeLists.txt index 99c7e84c43a56..35763a566f459 100644 --- a/xptifw/CMakeLists.txt +++ b/xptifw/CMakeLists.txt @@ -61,10 +61,6 @@ set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) add_subdirectory(src) set(xptifw_lib xptifw) -string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) -if (WIN32 AND "${build_type_lower}" MATCHES "debug") - set(xptifw_lib xptifwd) -endif() add_custom_target(check-xptifw) diff --git a/xptifw/src/CMakeLists.txt b/xptifw/src/CMakeLists.txt index 1337f37879174..846fc228c450d 100644 --- a/xptifw/src/CMakeLists.txt +++ b/xptifw/src/CMakeLists.txt @@ -31,13 +31,8 @@ function(add_xpti_library LIB_NAME) remove_definitions(-DXPTI_STATIC_LIBRARY) add_library(${LIB_NAME} SHARED ${SOURCES}) - if (${LIB_NAME} MATCHES "xptifwd") - set_property(TARGET ${LIB_NAME} PROPERTY - MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") - else() - set_property(TARGET ${LIB_NAME} PROPERTY - MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") - endif() + set_target_properties(${LIB_NAME} PROPERTIES + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") target_compile_definitions(${LIB_NAME} PRIVATE -DXPTI_API_EXPORTS) target_include_directories(${LIB_NAME} PUBLIC From e43a28ca2102799521b06ed415fb47ee3bfd9d4d Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Thu, 24 Apr 2025 03:44:36 -0700 Subject: [PATCH 02/18] Add ucrt checks Signed-off-by: Larsen, Steffen --- opencl/CMakeLists.txt | 4 ++ sycl/source/CMakeLists.txt | 12 +++--- sycl/test/abi/sycl_symbols_windows.dump | 2 +- sycl/test/lit.cfg.py | 10 ++--- sycl/test/win_ucrt/lit.local.cfg | 1 + sycl/test/win_ucrt/urct_check.py | 41 +++++++++++++++++++ sycl/ur_win_proxy_loader/CMakeLists.txt | 7 +++- unified-runtime/cmake/helpers.cmake | 7 ++-- .../source/adapters/CMakeLists.txt | 11 +++-- unified-runtime/source/common/CMakeLists.txt | 4 +- unified-runtime/source/loader/CMakeLists.txt | 18 ++++---- unified-runtime/source/mock/CMakeLists.txt | 4 ++ xptifw/src/CMakeLists.txt | 2 +- 13 files changed, 93 insertions(+), 30 deletions(-) create mode 100644 sycl/test/win_ucrt/lit.local.cfg create mode 100644 sycl/test/win_ucrt/urct_check.py diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index 808fc98c6bcc2..d11f2c7a246a0 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -78,4 +78,8 @@ endif() FetchContent_MakeAvailable(ocl-icd) add_library(OpenCL-ICD ALIAS OpenCL) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + set_target_properties(OpenCL PROPERTIES DEBUG_POSTFIX d) +endif() + add_subdirectory(opencl-aot) diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 8813a6482137b..9d7ff8ef05169 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -323,11 +323,6 @@ set(SYCL_NON_PREVIEW_SOURCES "${SYCL_COMMON_SOURCES}" set(SYCL_PREVIEW_SOURCES "${SYCL_COMMON_SOURCES}" ) -if (MSVC) - # Append d to the debug libraries on Windows. - set(CMAKE_DEBUG_POSTFIX d) -endif() - check_cxx_compiler_flag(-fsemantic-interposition HAS_SEMANTIC_INTERPOSITION_FLAG) if (HAS_SEMANTIC_INTERPOSITION_FLAG AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) # See https://github.com/llvm/llvm-project/issues/58295. @@ -354,6 +349,13 @@ if (WIN32) endif() endif() +if (WIN32) + set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) + if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB AND (CMAKE_BUILD_TYPE STREQUAL Debug)) + set_target_properties(sycl${SYCL_MAJOR_VERSION}-preview PROPERTIES OUTPUT_NAME sycl${SYCL_MAJOR_VERSION}d-preview) + endif() +endif() + install(TARGETS ${SYCL_RT_LIBS} ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index bf18dd573c483..c41a31cb873fa 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -3,7 +3,7 @@ # DO NOT EDIT IT MANUALLY. Refer to sycl/doc/developer/ABIPolicyGuide.md for more info. ################################################################################ -# RUN: env LLVM_BIN_PATH=%llvm_build_bin_dir %python %sycl_tools_src_dir/abi_check.py --mode check_symbols --reference %s %if debug_sycl_library %{ %llvm_build_bin_dir/sycl8.dll %} %else %{ %llvm_build_bin_dir/sycl8d.dll %} +# RUN: env LLVM_BIN_PATH=%llvm_build_bin_dir %python %sycl_tools_src_dir/abi_check.py --mode check_symbols --reference %s %if debug_sycl_library %{ %llvm_build_bin_dir/sycl8d.dll %} %else %{ %llvm_build_bin_dir/sycl8.dll %} # REQUIRES: windows # UNSUPPORTED: libcxx diff --git a/sycl/test/lit.cfg.py b/sycl/test/lit.cfg.py index ec438952f4329..a0312091426d5 100644 --- a/sycl/test/lit.cfg.py +++ b/sycl/test/lit.cfg.py @@ -185,9 +185,6 @@ "--offload-arch=gfx906", ] -if platform.system() == "Windows" and config.build_mode == "Debug": - additional_flags += ["-fms-runtime-lib=dll_dbg"] - config.sycl_headers_filter = lit_config.params.get("SYCL_HEADERS_FILTER", None) if config.sycl_headers_filter is not None: lit_config.note( @@ -203,10 +200,13 @@ if not dump_only_tests: llvm_config.use_clang(additional_flags=additional_flags) -# Set timeout for test = 10 mins +# Set timeout for test = 10 mins (Release) or 20 mins (Debug) try: import psutil - lit_config.maxIndividualTestTime = 600 + if config.build_mode != "Debug": + lit_config.maxIndividualTestTime = 600 + else: + lit_config.maxIndividualTestTime = 1200 except ImportError: pass diff --git a/sycl/test/win_ucrt/lit.local.cfg b/sycl/test/win_ucrt/lit.local.cfg new file mode 100644 index 0000000000000..38b99a9a37f14 --- /dev/null +++ b/sycl/test/win_ucrt/lit.local.cfg @@ -0,0 +1 @@ +config.suffixes = [".py"] diff --git a/sycl/test/win_ucrt/urct_check.py b/sycl/test/win_ucrt/urct_check.py new file mode 100644 index 0000000000000..f3022543006c9 --- /dev/null +++ b/sycl/test/win_ucrt/urct_check.py @@ -0,0 +1,41 @@ +# REQUIRES: windows +# RUN: %python %s %llvm_build_bin_dir +# +# Check for Windows URCT dependencies in library files in a specified path. If a +# library uses a the debug URCT it must be postfixed with either "d" or +# "d-preview". +# +import argparse +import os +import subprocess +import sys + +def check_file(filepath): + filename, file_ext = os.path.splitext(entry.name) + + # Only consider .dll or .lib files. + if not (file_ext == ".dll" or file_ext == ".lib"): + return + + has_debug_postfix = filename.endswith("d") or filename.endswith("d-preview") + dep_output = subprocess.run(["dumpbin", "/dependents", filepath], shell=False, capture_output=True) + + if str(dep_output.stdout).find("ucrtbased.dll"): + if not has_debug_postfix: + print("Unexpected use of ucrtbased.dll:", filepath) + sys.exit(1) + elif str(dep_output.stdout).find("ucrtbase.dll"): + if has_debug_postfix: + print("Unexpected use of ucrtbase.dll:", filepath) + sys.exit(1) + +if __name__=="__main__": + parser = argparse.ArgumentParser(description="Windows UCRT checker utility.") + parser.add_argument("target_path", type=str) + args = parser.parse_args() + + # Scan the path for library files. + with os.scandir(args.target_path) as it: + for entry in it: + if entry.is_file(): + check_file(entry.name) diff --git a/sycl/ur_win_proxy_loader/CMakeLists.txt b/sycl/ur_win_proxy_loader/CMakeLists.txt index 804d60d7f1267..27537602e46aa 100644 --- a/sycl/ur_win_proxy_loader/CMakeLists.txt +++ b/sycl/ur_win_proxy_loader/CMakeLists.txt @@ -12,8 +12,11 @@ set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc "RC_COPYRIGHT=\"Copyright (C) 2023 Intel Corporation\"") configure_file(../../llvm/resources/windows_version_resource.rc ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc @ONLY) add_library(ur_win_proxy_loader SHARED ur_win_proxy_loader.cpp ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc) -if (MSVC) - set_target_properties(ur_win_proxy_loader PROPERTIES DEBUG_POSTFIX d) +if (WIN32) + set_target_properties(ur_win_proxy_loader PROPERTIES DEBUG_POSTFIX d) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + target_compile_definitions(ur_win_proxy_loader PRIVATE UR_WIN_PROXY_LOADER_DEBUG_POSTFIX) + endif() endif() add_dependencies(ur_win_proxy_loader UnifiedRuntimeLoader) install(TARGETS ur_win_proxy_loader diff --git a/unified-runtime/cmake/helpers.cmake b/unified-runtime/cmake/helpers.cmake index 3a451748ccd6a..12558240f4bdb 100644 --- a/unified-runtime/cmake/helpers.cmake +++ b/unified-runtime/cmake/helpers.cmake @@ -138,9 +138,6 @@ function(add_ur_target_compile_options name) WIN32_LEAN_AND_MEAN NOMINMAX # Cajole Windows.h to define fewer symbols _CRT_SECURE_NO_WARNINGS # Slience warnings about getenv ) - if(UR_USE_DEBUG_POSTFIX) - target_compile_definitions(${name} PRIVATE UR_USE_DEBUG_POSTFIX=1) - endif() if(UR_DEVELOPER_MODE) target_compile_options(${name} PRIVATE @@ -200,7 +197,9 @@ function(add_ur_library name) $<$,link.exe>:LINKER:/DEPENDENTLOADFLAG:0x2000> ) endif() - set_target_properties(${name} PROPERTIES DEBUG_POSTFIX d) + if(WIN32) + set_target_properties(${name} PROPERTIES DEBUG_POSTFIX d) + endif() if(UR_EXTERNAL_DEPENDENCIES) add_dependencies(${name} ${UR_EXTERNAL_DEPENDENCIES}) endif() diff --git a/unified-runtime/source/adapters/CMakeLists.txt b/unified-runtime/source/adapters/CMakeLists.txt index 3c581b7d3ba21..3270c74f7707c 100644 --- a/unified-runtime/source/adapters/CMakeLists.txt +++ b/unified-runtime/source/adapters/CMakeLists.txt @@ -6,11 +6,13 @@ function(add_ur_adapter name) add_ur_library(${name} ${ARGN}) if(MSVC) - set(TARGET_LIBNAME ${name}) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(TARGET_LIBNAME ${name}d) + else() + set(TARGET_LIBNAME ${name}) + endif() string(TOUPPER ${TARGET_LIBNAME} TARGET_LIBNAME) - set_target_properties(${name} PROPERTIES DEBUG_POSTFIX d) - set(ADAPTER_VERSION_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/${name}.def) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../adapter.def.in ${ADAPTER_VERSION_SCRIPT} @ONLY) @@ -28,6 +30,9 @@ function(add_ur_adapter name) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../adapter.map.in ${ADAPTER_VERSION_SCRIPT} @ONLY) target_link_options(${name} PRIVATE "-Wl,--version-script=${ADAPTER_VERSION_SCRIPT}") endif() + if(WIN32) + set_target_properties(${name} PROPERTIES DEBUG_POSTFIX d) + endif() add_dependencies(ur_loader ${name}) endfunction() diff --git a/unified-runtime/source/common/CMakeLists.txt b/unified-runtime/source/common/CMakeLists.txt index 214f5c3c5b397..bbbcb55259894 100644 --- a/unified-runtime/source/common/CMakeLists.txt +++ b/unified-runtime/source/common/CMakeLists.txt @@ -73,7 +73,7 @@ else() set(UMF_BUILD_EXAMPLES OFF CACHE INTERNAL "Build UMF examples") set(UMF_BUILD_SHARED_LIBRARY ${UMF_BUILD_SHARED_LIBRARY} CACHE INTERNAL "Build UMF shared library") - if (MSVC) + if (WIN32) if(CMAKE_BUILD_TYPE STREQUAL Debug) set(UMF_USE_DEBUG_POSTFIX ON) endif() @@ -134,6 +134,6 @@ target_link_libraries(ur_umf INTERFACE umf::headers ) -if (MSVC) +if (WIN32) set_target_properties(ur_umf PROPERTIES DEBUG_POSTFIX d) endif() diff --git a/unified-runtime/source/loader/CMakeLists.txt b/unified-runtime/source/loader/CMakeLists.txt index 3293876add5e6..848ad18e2dc10 100644 --- a/unified-runtime/source/loader/CMakeLists.txt +++ b/unified-runtime/source/loader/CMakeLists.txt @@ -14,12 +14,6 @@ if(UR_STATIC_LOADER) set(LOADER_LIB_TYPE STATIC) endif() -if (MSVC) - if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(UR_USE_DEBUG_POSTFIX ON) - endif() -endif() - add_ur_library(ur_loader ${LOADER_LIB_TYPE} "" @@ -27,8 +21,18 @@ add_ur_library(ur_loader ) install_ur_library(ur_loader) +if (WIN32) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + target_compile_definitions(ur_loader PRIVATE UR_USE_DEBUG_POSTFIX=1) + endif() +endif() + if (MSVC) - set(TARGET_LIBNAME ur_loader) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(TARGET_LIBNAME ur_loaderd) + else() + set(TARGET_LIBNAME ur_loader) + endif() string(TOUPPER ${TARGET_LIBNAME} TARGET_LIBNAME) set(LOADER_VERSION_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/ur_loader.def) diff --git a/unified-runtime/source/mock/CMakeLists.txt b/unified-runtime/source/mock/CMakeLists.txt index f3933fbef1453..6133e824678f3 100644 --- a/unified-runtime/source/mock/CMakeLists.txt +++ b/unified-runtime/source/mock/CMakeLists.txt @@ -6,6 +6,10 @@ add_library (ur_mock_headers SHARED "${CMAKE_CURRENT_SOURCE_DIR}/ur_mock_helpers.cpp") +if(WIN32) + set_target_properties(ur_mock_headers PROPERTIES DEBUG_POSTFIX d) +endif() + target_include_directories(ur_mock_headers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}" ) diff --git a/xptifw/src/CMakeLists.txt b/xptifw/src/CMakeLists.txt index a41c13503553d..affb28f161aea 100644 --- a/xptifw/src/CMakeLists.txt +++ b/xptifw/src/CMakeLists.txt @@ -55,7 +55,7 @@ function(add_xpti_library LIB_NAME) target_link_libraries(${LIB_NAME} PRIVATE "-L${SYCL_LIBCXX_LIBRARY_PATH}" -Wl,-rpath,${SYCL_LIBCXX_LIBRARY_PATH} -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc) endif() - if (MSVC) + if (WIN32) set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) endif() From 93ec50c7fcd172fd257d62ba261c264141d1fe53 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Fri, 25 Apr 2025 09:04:43 -0700 Subject: [PATCH 03/18] Fix formatting Signed-off-by: Larsen, Steffen --- sycl/test-e2e/lit.cfg.py | 2 +- sycl/test/win_ucrt/urct_check.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index e97e3f4081a38..72b74a6abe144 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -304,7 +304,7 @@ def open_check_file(file_name): if config.build_mode == "Debug": config.available_features.add("debug_sycl_library") # Add /MDd to the build command to make it use the debug library. - config.cxx_flags += (" /MDd" if cl_options else " -fms-runtime-lib=dll_dbg") + config.cxx_flags += " /MDd" if cl_options else " -fms-runtime-lib=dll_dbg" # Check for Level Zero SDK check_l0_file = "l0_include.cpp" diff --git a/sycl/test/win_ucrt/urct_check.py b/sycl/test/win_ucrt/urct_check.py index f3022543006c9..718f9232926eb 100644 --- a/sycl/test/win_ucrt/urct_check.py +++ b/sycl/test/win_ucrt/urct_check.py @@ -10,15 +10,18 @@ import subprocess import sys + def check_file(filepath): filename, file_ext = os.path.splitext(entry.name) - + # Only consider .dll or .lib files. if not (file_ext == ".dll" or file_ext == ".lib"): return has_debug_postfix = filename.endswith("d") or filename.endswith("d-preview") - dep_output = subprocess.run(["dumpbin", "/dependents", filepath], shell=False, capture_output=True) + dep_output = subprocess.run( + ["dumpbin", "/dependents", filepath], shell=False, capture_output=True + ) if str(dep_output.stdout).find("ucrtbased.dll"): if not has_debug_postfix: @@ -29,7 +32,7 @@ def check_file(filepath): print("Unexpected use of ucrtbase.dll:", filepath) sys.exit(1) -if __name__=="__main__": +if __name__ == "__main__": parser = argparse.ArgumentParser(description="Windows UCRT checker utility.") parser.add_argument("target_path", type=str) args = parser.parse_args() From 89652eff1e4e48017265df20a7ca86f0f34c2cec Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Sun, 27 Apr 2025 21:56:32 -0700 Subject: [PATCH 04/18] Fix formatting Signed-off-by: Larsen, Steffen --- sycl/test/win_ucrt/urct_check.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sycl/test/win_ucrt/urct_check.py b/sycl/test/win_ucrt/urct_check.py index 718f9232926eb..5c27fd429f995 100644 --- a/sycl/test/win_ucrt/urct_check.py +++ b/sycl/test/win_ucrt/urct_check.py @@ -22,7 +22,7 @@ def check_file(filepath): dep_output = subprocess.run( ["dumpbin", "/dependents", filepath], shell=False, capture_output=True ) - + if str(dep_output.stdout).find("ucrtbased.dll"): if not has_debug_postfix: print("Unexpected use of ucrtbased.dll:", filepath) @@ -32,6 +32,7 @@ def check_file(filepath): print("Unexpected use of ucrtbase.dll:", filepath) sys.exit(1) + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Windows UCRT checker utility.") parser.add_argument("target_path", type=str) From 78c2798f57d093c6ae81c187da943a50091c4bb8 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 00:27:07 -0700 Subject: [PATCH 05/18] Fix windows sycl lib install target Signed-off-by: Larsen, Steffen --- clang/lib/Driver/ToolChains/Clang.cpp | 4 +- clang/test/Driver/sycl-offload-old-model.c | 2 +- clang/test/Driver/sycl-offload.c | 2 +- sycl/source/CMakeLists.txt | 90 ++++++++++++---------- 4 files changed, 55 insertions(+), 43 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index bbd9f9d925597..e8f5a973e3fd6 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5413,7 +5413,7 @@ static void ProcessVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args, if (RTOptionID == options::OPT__SLASH_MDd) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION - "-previewd"); + "d-preview"); else CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION "d"); } else { @@ -7033,7 +7033,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (isDependentLibAdded(Args, "msvcrtd")) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION - "-previewd"); + "d-preview"); else CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION "d"); } diff --git a/clang/test/Driver/sycl-offload-old-model.c b/clang/test/Driver/sycl-offload-old-model.c index 832a0ada50884..9126c2e554ab5 100644 --- a/clang/test/Driver/sycl-offload-old-model.c +++ b/clang/test/Driver/sycl-offload-old-model.c @@ -858,6 +858,6 @@ /// Check for linked sycl lib when using -fpreview-breaking-changes with -fsycl // RUN: %clang -### -fsycl --no-offload-new-driver -fpreview-breaking-changes -target x86_64-unknown-windows-msvc -Xclang --dependent-lib=msvcrtd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s // RUN: %clang_cl -### -fsycl --no-offload-new-driver -fpreview-breaking-changes /MDd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s -// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-previewd +// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-preview // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}.lib // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}-preview.lib diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 56d44faa1efa3..c19089342622d 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -560,7 +560,7 @@ /// Check for linked sycl lib when using -fpreview-breaking-changes with -fsycl // RUN: %clang -### -fsycl --offload-new-driver -fpreview-breaking-changes -target x86_64-unknown-windows-msvc -Xclang --dependent-lib=msvcrtd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s // RUN: %clang_cl -### -fsycl --offload-new-driver -fpreview-breaking-changes /MDd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s -// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-previewd +// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-preview // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}.lib // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}-preview.lib diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 9d7ff8ef05169..831700259107a 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -15,10 +15,10 @@ if (SYCL_ENABLE_XPTI_TRACING) include_directories(${LLVM_EXTERNAL_XPTI_SOURCE_DIR}/include) endif() -function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) +function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) # Add an optional argument so we can get the library name to # link with for Windows Debug version - cmake_parse_arguments(ARG "" "XPTI_LIB;IMPLIB_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) + cmake_parse_arguments(ARG "" "XPTI_LIB;IMPLIB_OUTPUT_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES}) @@ -69,13 +69,13 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) # Common link step setup - add_library(${LIB_NAME} SHARED + add_library(${LIB_TARGET_NAME} SHARED $ ${CMAKE_CURRENT_BINARY_DIR}/version.rc) find_package(Threads REQUIRED) - target_link_libraries(${LIB_NAME} + target_link_libraries(${LIB_TARGET_NAME} PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} @@ -90,22 +90,22 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) if (SYCL_ENABLE_STACK_PRINTING) if(NOT MSVC OR (CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARG_COMPILE_OPTIONS MATCHES ".*MDd.*") OR (NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT ARG_COMPILE_OPTIONS MATCHES ".*MDd.*")) - add_dependencies(${LIB_NAME} LLVMSupport) + add_dependencies(${LIB_TARGET_NAME} LLVMSupport) target_compile_definitions(${LIB_OBJ_NAME} PUBLIC ENABLE_STACK_TRACE) - target_link_libraries(${LIB_NAME} PRIVATE LLVMSupport) + target_link_libraries(${LIB_TARGET_NAME} PRIVATE LLVMSupport) endif() endif() # TODO: Enabled for MSVC if (NOT MSVC AND SYCL_LIB_WITH_DEBUG_SYMBOLS) separate_arguments(CMAKE_CXX_FLAGS_DEBUG_SEPARATED UNIX_COMMAND "${CMAKE_CXX_FLAGS_DEBUG}") - target_compile_options(${LIB_NAME} PRIVATE ${CMAKE_CXX_FLAGS_DEBUG_SEPARATED}) + target_compile_options(${LIB_TARGET_NAME} PRIVATE ${CMAKE_CXX_FLAGS_DEBUG_SEPARATED}) endif() # To facilitate better tracing and profiling except on release builds. check_cxx_compiler_flag("-fno-omit-frame-pointer" CXX_HAS_NO_OMIT_FRAME_POINTER) if (CXX_HAS_NO_OMIT_FRAME_POINTER) - target_compile_options(${LIB_NAME} PUBLIC + target_compile_options(${LIB_TARGET_NAME} PUBLIC $<$:-fno-omit-frame-pointer> ) target_compile_options(${LIB_OBJ_NAME} PUBLIC @@ -117,10 +117,10 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) target_compile_options(${LIB_OBJ_NAME} PUBLIC -fprofile-instr-generate -fcoverage-mapping ) - target_compile_options(${LIB_NAME} PUBLIC + target_compile_options(${LIB_TARGET_NAME} PUBLIC -fprofile-instr-generate -fcoverage-mapping ) - target_link_options(${LIB_NAME} PUBLIC + target_link_options(${LIB_TARGET_NAME} PUBLIC -fprofile-instr-generate -fcoverage-mapping ) endif() @@ -129,57 +129,55 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) sycl-headers ) - set_target_properties(${LIB_NAME} PROPERTIES LINKER_LANGUAGE CXX) + set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) if (SYCL_ENABLE_XPTI_TRACING) target_compile_definitions(${LIB_OBJ_NAME} PRIVATE XPTI_ENABLE_INSTRUMENTATION XPTI_STATIC_LIBRARY) - target_link_libraries(${LIB_NAME} PRIVATE ${ARG_XPTI_LIB}) + target_link_libraries(${LIB_TARGET_NAME} PRIVATE ${ARG_XPTI_LIB}) endif() if (NOT LLVM_ENABLE_ZSTD) target_compile_definitions(${LIB_OBJ_NAME} PRIVATE SYCL_RT_ZSTD_NOT_AVAIABLE) else() - target_link_libraries(${LIB_NAME} PRIVATE ${zstd_STATIC_LIBRARY}) + target_link_libraries(${LIB_TARGET_NAME} PRIVATE ${zstd_STATIC_LIBRARY}) target_include_directories(${LIB_OBJ_NAME} PRIVATE ${zstd_INCLUDE_DIR}) endif() # ur_win_proxy_loader if (WIN32) include_directories(${LLVM_EXTERNAL_SYCL_SOURCE_DIR}/ur_win_proxy_loader) - target_link_libraries(${LIB_NAME} PUBLIC ur_win_proxy_loader) + target_link_libraries(${LIB_TARGET_NAME} PUBLIC ur_win_proxy_loader) set(MANIFEST_FILE_NAME "sycl$<$:d>.manifest") # Embed manifest into the sycl.dll where ur_win_proxy_loader.dll is described as sycl.dll's private dll and will always be loaded from the same directory. # 0x2000: LOAD_LIBRARY_SAFE_CURRENT_DIRS flag. Using this flag means that loading dependency DLLs (of sycl.dll) # from the current directory is only allowed if it is under a directory in the Safe load list. - target_link_options(${LIB_NAME} PRIVATE "LINKER:/DEPENDENTLOADFLAG:0x2000" "LINKER:/MANIFEST:NO" "LINKER:/MANIFEST:EMBED" "LINKER:/MANIFESTINPUT:${CMAKE_CURRENT_SOURCE_DIR}/${MANIFEST_FILE_NAME}") + target_link_options(${LIB_TARGET_NAME} PRIVATE "LINKER:/DEPENDENTLOADFLAG:0x2000" "LINKER:/MANIFEST:NO" "LINKER:/MANIFEST:EMBED" "LINKER:/MANIFESTINPUT:${CMAKE_CURRENT_SOURCE_DIR}/${MANIFEST_FILE_NAME}") endif() if (WIN32) - if (ARG_IMPLIB_NAME) - add_custom_command( - TARGET ${LIB_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_NAME}$<$:d>.lib - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}$<$:d>.lib - COMMENT "Creating version-agnostic copy of the import library.") - install( - FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}$<$:d>.lib - DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl) - endif() + add_custom_command( + TARGET ${LIB_TARGET_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_OUTPUT_NAME}.lib + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_OUTPUT_NAME}.lib + COMMENT "Creating version-agnostic copy of the import library.") + install( + FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_OUTPUT_NAME}.lib + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl) endif() if (MSVC) # Install stripped PDB - add_stripped_pdb(${LIB_NAME}) + add_stripped_pdb(${LIB_TARGET_NAME}) else() if (UNIX AND NOT APPLE) set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt") target_link_libraries( - ${LIB_NAME} PRIVATE "-Wl,--version-script=${linker_script}") - set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) + ${LIB_TARGET_NAME} PRIVATE "-Wl,--version-script=${linker_script}") + set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) endif() if (SYCL_ENABLE_XPTI_TRACING) - target_link_libraries(${LIB_NAME} PRIVATE ${CMAKE_DL_LIBS}) + target_link_libraries(${LIB_TARGET_NAME} PRIVATE ${CMAKE_DL_LIBS}) endif() endif() @@ -190,18 +188,18 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) set(SYCL_JIT_INCLUDE_DIRS ${LLVM_EXTERNAL_SYCL_JIT_SOURCE_DIR}/common/include ${LLVM_EXTERNAL_SYCL_JIT_SOURCE_DIR}/jit-compiler/include) - add_dependencies(${LIB_NAME} sycl-jit) + add_dependencies(${LIB_TARGET_NAME} sycl-jit) add_dependencies(${LIB_OBJ_NAME} sycl-jit) target_include_directories(${LIB_OBJ_NAME} PRIVATE ${SYCL_JIT_INCLUDE_DIRS}) set_property(GLOBAL APPEND PROPERTY SYCL_TOOLCHAIN_INSTALL_COMPONENTS sycl-jit) - target_compile_definitions(${LIB_NAME} PRIVATE SYCL_EXT_JIT_ENABLE) + target_compile_definitions(${LIB_TARGET_NAME} PRIVATE SYCL_EXT_JIT_ENABLE) target_compile_definitions(${LIB_OBJ_NAME} PRIVATE SYCL_EXT_JIT_ENABLE) endif(SYCL_ENABLE_EXTENSION_JIT) - add_common_options(${LIB_NAME} ${LIB_OBJ_NAME}) + add_common_options(${LIB_TARGET_NAME} ${LIB_OBJ_NAME}) - set_target_properties(${LIB_NAME} PROPERTIES + set_target_properties(${LIB_TARGET_NAME} PROPERTIES VERSION ${SYCL_VERSION_STRING} SOVERSION ${SYCL_MAJOR_VERSION}) @@ -218,7 +216,7 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) endif() # Ensure that we use the dynamic CRT on Windows, i.e. /MD or /MDd. - set_target_properties(${LIB_NAME} PROPERTIES + set_target_properties(${LIB_TARGET_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") set_target_properties(${LIB_OBJ_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") @@ -331,15 +329,29 @@ endif() if (WIN32) set(LIB_NAME "sycl${SYCL_MAJOR_VERSION}") +set(LIB_OUTPUT_NAME "${LIB_NAME}$<$:d>") else() set(LIB_NAME "sycl") +set(LIB_OUTPUT_NAME "${LIB_NAME}") endif() -# Version-agnostic name of the import library, has effect on Windows only. -set(IMPLIB_NAME "sycl") +set(LIB_PREVIEW_NAME ${LIB_NAME}-preview) +set(LIB_PREVIEW_OUTPUT_NAME ${LIB_OUTPUT_NAME}-preview) -add_sycl_rt_library(${LIB_NAME} sycl_object XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} SOURCES ${SYCL_NON_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) +# Version-agnostic name of the import library, has effect on Windows only. +set(IMPLIB_NAME "sycl$<$:d>") +set(IMPLIB_PREVIEW_NAME "${IMPLIB_NAME}-preview") + +add_sycl_rt_library(${LIB_NAME} sycl_object ${LIB_OUTPUT_NAME} + XPTI_LIB xpti + COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} + SOURCES ${SYCL_NON_PREVIEW_SOURCES} + IMPLIB_OUTPUT_NAME ${IMPLIB_NAME}) if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) - add_sycl_rt_library(${LIB_NAME}-preview sycl-preview_object XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} "-D__INTEL_PREVIEW_BREAKING_CHANGES" SOURCES ${SYCL_PREVIEW_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}-preview) + add_sycl_rt_library(${LIB_PREVIEW_NAME} sycl-preview_object ${LIB_PREVIEW_OUTPUT_NAME} + XPTI_LIB xpti + COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} "-D__INTEL_PREVIEW_BREAKING_CHANGES" + SOURCES ${SYCL_PREVIEW_SOURCES} + IMPLIB_OUTPUT_NAME ${IMPLIB_PREVIEW_NAME}) endif() if (WIN32) From 2c9712cf1bee759555e23901c3673f7c7feae490 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 00:53:11 -0700 Subject: [PATCH 06/18] Revert clang toolchain changes Signed-off-by: Larsen, Steffen --- clang/lib/Driver/ToolChains/Clang.cpp | 4 ++-- clang/test/Driver/sycl-offload-old-model.c | 2 +- clang/test/Driver/sycl-offload.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index e8f5a973e3fd6..bbd9f9d925597 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5413,7 +5413,7 @@ static void ProcessVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args, if (RTOptionID == options::OPT__SLASH_MDd) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION - "d-preview"); + "-previewd"); else CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION "d"); } else { @@ -7033,7 +7033,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (isDependentLibAdded(Args, "msvcrtd")) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION - "d-preview"); + "-previewd"); else CmdArgs.push_back("--dependent-lib=sycl" SYCL_MAJOR_VERSION "d"); } diff --git a/clang/test/Driver/sycl-offload-old-model.c b/clang/test/Driver/sycl-offload-old-model.c index 9126c2e554ab5..832a0ada50884 100644 --- a/clang/test/Driver/sycl-offload-old-model.c +++ b/clang/test/Driver/sycl-offload-old-model.c @@ -858,6 +858,6 @@ /// Check for linked sycl lib when using -fpreview-breaking-changes with -fsycl // RUN: %clang -### -fsycl --no-offload-new-driver -fpreview-breaking-changes -target x86_64-unknown-windows-msvc -Xclang --dependent-lib=msvcrtd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s // RUN: %clang_cl -### -fsycl --no-offload-new-driver -fpreview-breaking-changes /MDd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s -// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-preview +// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-previewd // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}.lib // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}-preview.lib diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index c19089342622d..56d44faa1efa3 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -560,7 +560,7 @@ /// Check for linked sycl lib when using -fpreview-breaking-changes with -fsycl // RUN: %clang -### -fsycl --offload-new-driver -fpreview-breaking-changes -target x86_64-unknown-windows-msvc -Xclang --dependent-lib=msvcrtd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s // RUN: %clang_cl -### -fsycl --offload-new-driver -fpreview-breaking-changes /MDd %s 2>&1 | FileCheck -check-prefix FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK %s -// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-preview +// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-previewd // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}.lib // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}-preview.lib From 598d724a2c270486d9a2bf3260b876bdc4ee737a Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 01:37:10 -0700 Subject: [PATCH 07/18] Remove xptifwd target Signed-off-by: Larsen, Steffen --- sycl/test-e2e/lit.cfg.py | 4 ++-- xptifw/src/CMakeLists.txt | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index 72b74a6abe144..70198d9f983cf 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -747,7 +747,7 @@ def remove_level_zero_suffix(devices): elif platform.system() == "Windows": # Use debug version of xptifw library if tests are built with \MDd. xptifw_dispatcher_name = ( - XPTIFW_DEBUG if "/MDd" in config.cxx_flags else XPTIFW_RELEASE + XPTIFW_DEBUG if config.build_mode == "Debug" in config.cxx_flags else XPTIFW_RELEASE ) xptifw_dispatcher = os.path.join( config.dpcpp_root_dir, "bin", xptifw_dispatcher_name + ".dll" @@ -760,7 +760,7 @@ def remove_level_zero_suffix(devices): config.substitutions.append(("%xptifw_dispatcher", xptifw_dispatcher)) if cl_options: # Use debug version of xptifw library if tests are built with \MDd. - xptifw_lib_name = XPTIFW_DEBUG if "/MDd" in config.cxx_flags else XPTIFW_RELEASE + xptifw_lib_name = XPTIFW_DEBUG if config.build_mode == "Debug" in config.cxx_flags else XPTIFW_RELEASE xptifw_lib = os.path.normpath( os.path.join(xptifw_lib_dir, xptifw_lib_name + ".lib") ) diff --git a/xptifw/src/CMakeLists.txt b/xptifw/src/CMakeLists.txt index affb28f161aea..96adcb7ab4ce3 100644 --- a/xptifw/src/CMakeLists.txt +++ b/xptifw/src/CMakeLists.txt @@ -68,10 +68,4 @@ function(add_xpti_library LIB_NAME) ) endfunction(add_xpti_library) -# MSVC provides two incompatible build variants for its CRT: release and debug -# To avoid potential issues in user code we also need to provide two kinds -# of XPTIFW for release and debug configurations. add_xpti_library(xptifw) -if (MSVC) - add_xpti_library(xptifwd) -endif() From 29ab725dcd507e7b089aad1f948b153dd9f68556 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 02:24:57 -0700 Subject: [PATCH 08/18] Revert MSVC toolchain changes Signed-off-by: Larsen, Steffen --- clang/lib/Driver/ToolChains/MSVC.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 0b471d461fc52..98f63a1c0f4bd 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -109,9 +109,9 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (!isDependentLibAdded(Args, "msvcrtd")) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION - "d-preview.lib"); + "-preview.lib"); else - CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION "d.lib"); + CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION ".lib"); } CmdArgs.push_back("-defaultlib:sycl-devicelib-host.lib"); } From f2c032d0446036be4dad25c12db71eef4a3a4c23 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 02:40:14 -0700 Subject: [PATCH 09/18] Fix formatting Signed-off-by: Larsen, Steffen --- clang/lib/Driver/ToolChains/MSVC.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 98f63a1c0f4bd..1ef469bd6bcb7 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -108,8 +108,7 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, // equivalent. Do not add the -defaultlib as it conflicts. if (!isDependentLibAdded(Args, "msvcrtd")) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) - CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION - "-preview.lib"); + CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION "-preview.lib"); else CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION ".lib"); } From 68889c0de8df9ab8e753945f1ef5078f4ea8219c Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 02:54:55 -0700 Subject: [PATCH 10/18] Fix more formatting Signed-off-by: Larsen, Steffen --- sycl/test-e2e/lit.cfg.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index 70198d9f983cf..672063a5f04a3 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -747,8 +747,10 @@ def remove_level_zero_suffix(devices): elif platform.system() == "Windows": # Use debug version of xptifw library if tests are built with \MDd. xptifw_dispatcher_name = ( - XPTIFW_DEBUG if config.build_mode == "Debug" in config.cxx_flags else XPTIFW_RELEASE - ) + XPTIFW_DEBUG + if config.build_mode == "Debug" in config.cxx_flags + else XPTIFW_RELEASE + ) xptifw_dispatcher = os.path.join( config.dpcpp_root_dir, "bin", xptifw_dispatcher_name + ".dll" ) @@ -760,7 +762,11 @@ def remove_level_zero_suffix(devices): config.substitutions.append(("%xptifw_dispatcher", xptifw_dispatcher)) if cl_options: # Use debug version of xptifw library if tests are built with \MDd. - xptifw_lib_name = XPTIFW_DEBUG if config.build_mode == "Debug" in config.cxx_flags else XPTIFW_RELEASE + xptifw_lib_name = ( + XPTIFW_DEBUG + if config.build_mode == "Debug" in config.cxx_flags + else XPTIFW_RELEASE + ) xptifw_lib = os.path.normpath( os.path.join(xptifw_lib_dir, xptifw_lib_name + ".lib") ) From 3f6639da07f134b360f2231f278f7eda5873868b Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 03:11:33 -0700 Subject: [PATCH 11/18] One more formatting patch Signed-off-by: Larsen, Steffen --- sycl/test-e2e/lit.cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index 672063a5f04a3..65c186df9854f 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -750,7 +750,7 @@ def remove_level_zero_suffix(devices): XPTIFW_DEBUG if config.build_mode == "Debug" in config.cxx_flags else XPTIFW_RELEASE - ) + ) xptifw_dispatcher = os.path.join( config.dpcpp_root_dir, "bin", xptifw_dispatcher_name + ".dll" ) From 8e6a9d760c67dde32cafaa4604ed1eb08a0c507a Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Mon, 28 Apr 2025 04:41:34 -0700 Subject: [PATCH 12/18] Change OpenCL Windows check Signed-off-by: Larsen, Steffen --- opencl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index d11f2c7a246a0..d608aaa64419f 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -78,7 +78,7 @@ endif() FetchContent_MakeAvailable(ocl-icd) add_library(OpenCL-ICD ALIAS OpenCL) -if (CMAKE_SYSTEM_NAME STREQUAL Windows) +if (WIN32) set_target_properties(OpenCL PROPERTIES DEBUG_POSTFIX d) endif() From 344c638446c25dbdbfafd84f01e3efef3fe68771 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Tue, 29 Apr 2025 03:52:14 -0700 Subject: [PATCH 13/18] Fix ucrt check and ignore OpenCL.dll Signed-off-by: Larsen, Steffen --- opencl/CMakeLists.txt | 4 --- .../win_ucrt/{urct_check.py => ucrt_check.py} | 25 ++++++++++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) rename sycl/test/win_ucrt/{urct_check.py => ucrt_check.py} (63%) diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index d608aaa64419f..808fc98c6bcc2 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -78,8 +78,4 @@ endif() FetchContent_MakeAvailable(ocl-icd) add_library(OpenCL-ICD ALIAS OpenCL) -if (WIN32) - set_target_properties(OpenCL PROPERTIES DEBUG_POSTFIX d) -endif() - add_subdirectory(opencl-aot) diff --git a/sycl/test/win_ucrt/urct_check.py b/sycl/test/win_ucrt/ucrt_check.py similarity index 63% rename from sycl/test/win_ucrt/urct_check.py rename to sycl/test/win_ucrt/ucrt_check.py index 5c27fd429f995..f08d957d97e1a 100644 --- a/sycl/test/win_ucrt/urct_check.py +++ b/sycl/test/win_ucrt/ucrt_check.py @@ -11,26 +11,36 @@ import sys +# Some libraries are excluded from the check: +# * OpenCL.dll: The OpenCL ICD loader is ignored as it is generally not part of +# the compiler release packages. +exclude_list = {"OpenCL.dll"} + def check_file(filepath): filename, file_ext = os.path.splitext(entry.name) # Only consider .dll or .lib files. if not (file_ext == ".dll" or file_ext == ".lib"): - return + return 0 has_debug_postfix = filename.endswith("d") or filename.endswith("d-preview") dep_output = subprocess.run( ["dumpbin", "/dependents", filepath], shell=False, capture_output=True ) - if str(dep_output.stdout).find("ucrtbased.dll"): + if str(dep_output.stdout).find("ucrtbased.dll") != -1: if not has_debug_postfix: print("Unexpected use of ucrtbased.dll:", filepath) - sys.exit(1) - elif str(dep_output.stdout).find("ucrtbase.dll"): + return 1 + elif str(dep_output.stdout).find("ucrtbase.dll") != -1: if has_debug_postfix: print("Unexpected use of ucrtbase.dll:", filepath) - sys.exit(1) + return 1 + elif str(dep_output.stdout).find("api-ms-win-crt-") != -1: + if has_debug_postfix: + print("Unexpected use of api-ms-win-crt-*.dll: ", filepath) + return 1 + return 0 if __name__ == "__main__": @@ -39,7 +49,10 @@ def check_file(filepath): args = parser.parse_args() # Scan the path for library files. + failures = 0 with os.scandir(args.target_path) as it: for entry in it: if entry.is_file(): - check_file(entry.name) + failures += check_file(entry.name) + if failures > 0: + exit(failures) From 015b566a38326be6101c57495fb826ee2ea8ec59 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Tue, 29 Apr 2025 04:27:48 -0700 Subject: [PATCH 14/18] Add E2E debug library option Signed-off-by: Larsen, Steffen --- sycl/test-e2e/README.md | 3 +++ sycl/test-e2e/lit.cfg.py | 14 +++++--------- sycl/test-e2e/lit.site.cfg.py.in | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/sycl/test-e2e/README.md b/sycl/test-e2e/README.md index bcca7dfdf38de..a4e52759c17f9 100644 --- a/sycl/test-e2e/README.md +++ b/sycl/test-e2e/README.md @@ -203,6 +203,9 @@ or via the ***LIT_OPTS*** environment variable. compilation command line for GPU device. If not specified "-device *" value is used. +***USE_DEBUG_LIBRARIES*** - enable the use of Windows debug libraries by setting +this to "ON". "OFF" by default. + ## Special test categories There are two special directories for extended testing. See documentation at: diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index 65c186df9854f..a6425a8790616 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -301,7 +301,7 @@ def open_check_file(file_name): config.available_features.add("has_ndebug") # Check if the current build mode is debug. -if config.build_mode == "Debug": +if config.use_debug_libs: config.available_features.add("debug_sycl_library") # Add /MDd to the build command to make it use the debug library. config.cxx_flags += " /MDd" if cl_options else " -fms-runtime-lib=dll_dbg" @@ -542,7 +542,7 @@ def open_check_file(file_name): ( "%sycl_options", " " - + os.path.normpath(os.path.join(config.sycl_libs_dir + "/../lib/sycl8.lib")) + + os.path.normpath(os.path.join(config.sycl_libs_dir + "/../lib/" + ("sycl8d.lib" if config.use_debug_libs else "sycl8.lib"))) + " /I" + config.sycl_include + " /I" @@ -560,7 +560,7 @@ def open_check_file(file_name): config.substitutions.append( ( "%sycl_options", - (" -lsycl8" if platform.system() == "Windows" else " -lsycl") + ((" -lsycl8d" if config.use_debug_libs else " -lsycl8") if platform.system() == "Windows" else " -lsycl") + " -I" + config.sycl_include + " -I" @@ -747,9 +747,7 @@ def remove_level_zero_suffix(devices): elif platform.system() == "Windows": # Use debug version of xptifw library if tests are built with \MDd. xptifw_dispatcher_name = ( - XPTIFW_DEBUG - if config.build_mode == "Debug" in config.cxx_flags - else XPTIFW_RELEASE + XPTIFW_DEBUG if config.use_debug_libs else XPTIFW_RELEASE ) xptifw_dispatcher = os.path.join( config.dpcpp_root_dir, "bin", xptifw_dispatcher_name + ".dll" @@ -763,9 +761,7 @@ def remove_level_zero_suffix(devices): if cl_options: # Use debug version of xptifw library if tests are built with \MDd. xptifw_lib_name = ( - XPTIFW_DEBUG - if config.build_mode == "Debug" in config.cxx_flags - else XPTIFW_RELEASE + XPTIFW_DEBUG if config.use_debug_libs else XPTIFW_RELEASE ) xptifw_lib = os.path.normpath( os.path.join(xptifw_lib_dir, xptifw_lib_name + ".lib") diff --git a/sycl/test-e2e/lit.site.cfg.py.in b/sycl/test-e2e/lit.site.cfg.py.in index 90389048c6099..22c0233e48479 100644 --- a/sycl/test-e2e/lit.site.cfg.py.in +++ b/sycl/test-e2e/lit.site.cfg.py.in @@ -48,7 +48,7 @@ config.vulkan_include_dir = "@Vulkan_INCLUDE_DIRS@" config.vulkan_lib = "@Vulkan_LIBRARY@" config.vulkan_found = "@Vulkan_FOUND@" -config.build_mode = "@CMAKE_BUILD_TYPE@" +config.use_debug_libs = ("@USE_DEBUG_LIBRARIES@" == "ON") config.run_launcher = lit_config.params.get('run_launcher', "@SYCL_E2E_RUN_LAUNCHER@") config.allow_unknown_arch = "@SYCL_E2E_LIT_ALLOW_UNKNOWN_ARCH@" From 651a60d56f20eb6e18ca7aedb4b1197cd9191f72 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Tue, 29 Apr 2025 04:46:53 -0700 Subject: [PATCH 15/18] Fix formatting Signed-off-by: Larsen, Steffen --- sycl/test-e2e/lit.cfg.py | 22 ++++++++++++++-------- sycl/test/win_ucrt/ucrt_check.py | 1 + 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py index a6425a8790616..fce1e77857a50 100644 --- a/sycl/test-e2e/lit.cfg.py +++ b/sycl/test-e2e/lit.cfg.py @@ -542,7 +542,13 @@ def open_check_file(file_name): ( "%sycl_options", " " - + os.path.normpath(os.path.join(config.sycl_libs_dir + "/../lib/" + ("sycl8d.lib" if config.use_debug_libs else "sycl8.lib"))) + + os.path.normpath( + os.path.join( + config.sycl_libs_dir + + "/../lib/" + + ("sycl8d.lib" if config.use_debug_libs else "sycl8.lib") + ) + ) + " /I" + config.sycl_include + " /I" @@ -560,7 +566,11 @@ def open_check_file(file_name): config.substitutions.append( ( "%sycl_options", - ((" -lsycl8d" if config.use_debug_libs else " -lsycl8") if platform.system() == "Windows" else " -lsycl") + ( + (" -lsycl8d" if config.use_debug_libs else " -lsycl8") + if platform.system() == "Windows" + else " -lsycl" + ) + " -I" + config.sycl_include + " -I" @@ -746,9 +756,7 @@ def remove_level_zero_suffix(devices): xptifw_dispatcher = os.path.join(xptifw_lib_dir, "libxptifw.so") elif platform.system() == "Windows": # Use debug version of xptifw library if tests are built with \MDd. - xptifw_dispatcher_name = ( - XPTIFW_DEBUG if config.use_debug_libs else XPTIFW_RELEASE - ) + xptifw_dispatcher_name = XPTIFW_DEBUG if config.use_debug_libs else XPTIFW_RELEASE xptifw_dispatcher = os.path.join( config.dpcpp_root_dir, "bin", xptifw_dispatcher_name + ".dll" ) @@ -760,9 +768,7 @@ def remove_level_zero_suffix(devices): config.substitutions.append(("%xptifw_dispatcher", xptifw_dispatcher)) if cl_options: # Use debug version of xptifw library if tests are built with \MDd. - xptifw_lib_name = ( - XPTIFW_DEBUG if config.use_debug_libs else XPTIFW_RELEASE - ) + xptifw_lib_name = XPTIFW_DEBUG if config.use_debug_libs else XPTIFW_RELEASE xptifw_lib = os.path.normpath( os.path.join(xptifw_lib_dir, xptifw_lib_name + ".lib") ) diff --git a/sycl/test/win_ucrt/ucrt_check.py b/sycl/test/win_ucrt/ucrt_check.py index f08d957d97e1a..4e51c2702737a 100644 --- a/sycl/test/win_ucrt/ucrt_check.py +++ b/sycl/test/win_ucrt/ucrt_check.py @@ -16,6 +16,7 @@ # the compiler release packages. exclude_list = {"OpenCL.dll"} + def check_file(filepath): filename, file_ext = os.path.splitext(entry.name) From 04f3a658dd0ac3c6d6ea06617ab7a9f0a443f7f5 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Tue, 29 Apr 2025 08:11:57 -0700 Subject: [PATCH 16/18] Try fix tests Signed-off-by: Larsen, Steffen --- sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp | 2 +- sycl/test/regression/std_array_vec_constructor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp b/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp index 823b4dc179cfd..41431d3a45f2c 100644 --- a/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp +++ b/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp @@ -1,4 +1,4 @@ -// REQUIRES: windows, debug_sycl_library +// REQUIRES: windows && debug_sycl_library // RUN: %clangxx --driver-mode=cl -fsycl /MDd -c %s -o %t.obj // RUN: %clangxx --driver-mode=cl -fsycl %t.obj -Wno-unused-command-line-argument -o %t.out diff --git a/sycl/test/regression/std_array_vec_constructor.cpp b/sycl/test/regression/std_array_vec_constructor.cpp index eefd1658e43d4..6c2fc1eac1b97 100644 --- a/sycl/test/regression/std_array_vec_constructor.cpp +++ b/sycl/test/regression/std_array_vec_constructor.cpp @@ -1,6 +1,6 @@ // Test to isolate sycl::vec bug due to use of std::array in // the constructor. -// REQUIRES: windows +// REQUIRES: windows && debug_sycl_library // RUN: not %clangxx -O0 -fsycl -D_DEBUG -shared %s &> %t.compile.log // RUN: FileCheck %s -input-file=%t.compile.log From 5b4a74ce7258119abbcea6bb34ef7a73ad1114bb Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Wed, 30 Apr 2025 22:58:40 -0700 Subject: [PATCH 17/18] Only build and run /MDd test in full mode Signed-off-by: Larsen, Steffen --- sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp b/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp index 41431d3a45f2c..d6506d205fff5 100644 --- a/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp +++ b/sycl/test-e2e/Regression/compile_on_win_with_mdd.cpp @@ -1,4 +1,4 @@ -// REQUIRES: windows && debug_sycl_library +// REQUIRES: windows && debug_sycl_library && build-mode && run-mode // RUN: %clangxx --driver-mode=cl -fsycl /MDd -c %s -o %t.obj // RUN: %clangxx --driver-mode=cl -fsycl %t.obj -Wno-unused-command-line-argument -o %t.out @@ -9,6 +9,8 @@ // The failure happens if perform separate compile and link, and pass /MDd to // the compile line. In that case, user application will crash during launching // with abort() message. +// Note that building requires the Windows debug library to be present, so it is +// only run in full testing mode. #include From 7a2a9e4f62ec36adab890e98a9ee306a019be957 Mon Sep 17 00:00:00 2001 From: "Larsen, Steffen" Date: Tue, 6 May 2025 22:33:56 -0700 Subject: [PATCH 18/18] Change WIN32 to checking system name Signed-off-by: Larsen, Steffen --- sycl/source/CMakeLists.txt | 4 ++-- sycl/ur_win_proxy_loader/CMakeLists.txt | 2 +- unified-runtime/cmake/helpers.cmake | 2 +- unified-runtime/source/common/CMakeLists.txt | 4 ++-- unified-runtime/source/loader/CMakeLists.txt | 2 +- unified-runtime/source/mock/CMakeLists.txt | 2 +- xptifw/src/CMakeLists.txt | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 831700259107a..1e0b9bb8f5590 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -354,14 +354,14 @@ if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) IMPLIB_OUTPUT_NAME ${IMPLIB_PREVIEW_NAME}) endif() -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) add_library(sycl ALIAS ${LIB_NAME}) if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB) add_library(sycl-preview ALIAS sycl${SYCL_MAJOR_VERSION}-preview) endif() endif() -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB AND (CMAKE_BUILD_TYPE STREQUAL Debug)) set_target_properties(sycl${SYCL_MAJOR_VERSION}-preview PROPERTIES OUTPUT_NAME sycl${SYCL_MAJOR_VERSION}d-preview) diff --git a/sycl/ur_win_proxy_loader/CMakeLists.txt b/sycl/ur_win_proxy_loader/CMakeLists.txt index 27537602e46aa..65421deffc4d4 100644 --- a/sycl/ur_win_proxy_loader/CMakeLists.txt +++ b/sycl/ur_win_proxy_loader/CMakeLists.txt @@ -12,7 +12,7 @@ set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc "RC_COPYRIGHT=\"Copyright (C) 2023 Intel Corporation\"") configure_file(../../llvm/resources/windows_version_resource.rc ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc @ONLY) add_library(ur_win_proxy_loader SHARED ur_win_proxy_loader.cpp ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc) -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(ur_win_proxy_loader PROPERTIES DEBUG_POSTFIX d) if(CMAKE_BUILD_TYPE STREQUAL Debug) target_compile_definitions(ur_win_proxy_loader PRIVATE UR_WIN_PROXY_LOADER_DEBUG_POSTFIX) diff --git a/unified-runtime/cmake/helpers.cmake b/unified-runtime/cmake/helpers.cmake index 12558240f4bdb..1af00c658e9e0 100644 --- a/unified-runtime/cmake/helpers.cmake +++ b/unified-runtime/cmake/helpers.cmake @@ -197,7 +197,7 @@ function(add_ur_library name) $<$,link.exe>:LINKER:/DEPENDENTLOADFLAG:0x2000> ) endif() - if(WIN32) + if(CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(${name} PROPERTIES DEBUG_POSTFIX d) endif() if(UR_EXTERNAL_DEPENDENCIES) diff --git a/unified-runtime/source/common/CMakeLists.txt b/unified-runtime/source/common/CMakeLists.txt index bbbcb55259894..f8c809e33c13b 100644 --- a/unified-runtime/source/common/CMakeLists.txt +++ b/unified-runtime/source/common/CMakeLists.txt @@ -73,7 +73,7 @@ else() set(UMF_BUILD_EXAMPLES OFF CACHE INTERNAL "Build UMF examples") set(UMF_BUILD_SHARED_LIBRARY ${UMF_BUILD_SHARED_LIBRARY} CACHE INTERNAL "Build UMF shared library") - if (WIN32) + if (CMAKE_SYSTEM_NAME STREQUAL Windows) if(CMAKE_BUILD_TYPE STREQUAL Debug) set(UMF_USE_DEBUG_POSTFIX ON) endif() @@ -134,6 +134,6 @@ target_link_libraries(ur_umf INTERFACE umf::headers ) -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(ur_umf PROPERTIES DEBUG_POSTFIX d) endif() diff --git a/unified-runtime/source/loader/CMakeLists.txt b/unified-runtime/source/loader/CMakeLists.txt index 848ad18e2dc10..4be0519433f4b 100644 --- a/unified-runtime/source/loader/CMakeLists.txt +++ b/unified-runtime/source/loader/CMakeLists.txt @@ -21,7 +21,7 @@ add_ur_library(ur_loader ) install_ur_library(ur_loader) -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) if(CMAKE_BUILD_TYPE STREQUAL Debug) target_compile_definitions(ur_loader PRIVATE UR_USE_DEBUG_POSTFIX=1) endif() diff --git a/unified-runtime/source/mock/CMakeLists.txt b/unified-runtime/source/mock/CMakeLists.txt index 6133e824678f3..affb350dadbdb 100644 --- a/unified-runtime/source/mock/CMakeLists.txt +++ b/unified-runtime/source/mock/CMakeLists.txt @@ -6,7 +6,7 @@ add_library (ur_mock_headers SHARED "${CMAKE_CURRENT_SOURCE_DIR}/ur_mock_helpers.cpp") -if(WIN32) +if(CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(ur_mock_headers PROPERTIES DEBUG_POSTFIX d) endif() diff --git a/xptifw/src/CMakeLists.txt b/xptifw/src/CMakeLists.txt index 96adcb7ab4ce3..2d7e67ab2ef01 100644 --- a/xptifw/src/CMakeLists.txt +++ b/xptifw/src/CMakeLists.txt @@ -55,7 +55,7 @@ function(add_xpti_library LIB_NAME) target_link_libraries(${LIB_NAME} PRIVATE "-L${SYCL_LIBCXX_LIBRARY_PATH}" -Wl,-rpath,${SYCL_LIBCXX_LIBRARY_PATH} -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc) endif() - if (WIN32) + if (CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) endif()