diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index bb13e5d678ee8..d4ad53a13e74b 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -131,10 +131,11 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-defaultlib:oldnames"); } - if ((!C.getDriver().IsCLMode() && !Args.hasArg(options::OPT_nostdlib) && - Args.hasArg(options::OPT_fsycl) && + if ((!C.getDriver().IsCLMode() && Args.hasArg(options::OPT_fsycl) && !Args.hasArg(options::OPT_nolibsycl)) || Args.hasArg(options::OPT_fsycl_host_compiler_EQ)) { + CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + + TC.getDriver().Dir + "/../lib")); if (Args.hasArg(options::OPT__SLASH_MDd)) CmdArgs.push_back("-defaultlib:sycld.lib"); else diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 1170d00f46dbb..cb5ec0f978ee2 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -634,6 +634,11 @@ // CHECK-LD-NOLIBSYCL: "{{.*}}ld{{(.exe)?}}" // CHECK-LD-NOLIBSYCL-NOT: "-lsycl" +/// Check no SYCL runtime is linked with -nostdlib +// RUN: %clang -fsycl -nostdlib -target x86_64-unknown-linux-gnu %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LD-NOSTDLIB %s +// CHECK-LD-NOSTDLIB: "{{.*}}ld{{(.exe)?}}" +// CHECK-LD-NOSTDLIB-NOT: "-lsycl" + /// Check for default linking of sycl.lib with -fsycl usage // RUN: %clang -fsycl -target x86_64-unknown-windows-msvc %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-SYCL %s // RUN: %clang_cl -fsycl %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-SYCL-CL %s @@ -643,11 +648,19 @@ /// Check no SYCL runtime is linked with -nolibsycl // RUN: %clang -fsycl -nolibsycl -target x86_64-unknown-windows-msvc %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-NOLIBSYCL %s -// RUN: %clang_cl -fsycl -nolibsycl %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-NOLIBSYCL %s -// CHECK-LINK-NOLIBSYCL-NOT: "--dependent-lib=sycl" +// RUN: %clang_cl -fsycl -nolibsycl %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-NOLIBSYCL-CL %s +// CHECK-LINK-NOLIBSYCL-CL-NOT: "--dependent-lib=sycl" // CHECK-LINK-NOLIBSYCL: "{{.*}}link{{(.exe)?}}" // CHECK-LINK-NOLIBSYCL-NOT: "-defaultlib:sycl.lib" +/// Check SYCL runtime is linked despite -nostdlib on Windows, this is +/// necessary for the Windows Clang CMake to work +// RUN: %clang -fsycl -nostdlib -target x86_64-unknown-windows-msvc %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-NOSTDLIB %s +// RUN: %clang_cl -fsycl -nostdlib %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-NOSTDLIB-CL %s +// CHECK-LINK-NOSTDLIB-CL: "--dependent-lib=sycl" +// CHECK-LINK-NOSTDLIB: "{{.*}}link{{(.exe)?}}" +// CHECK-LINK-NOSTDLIB: "-defaultlib:sycl.lib" + /// Check sycld.lib is chosen with /MDd // RUN: %clang_cl -fsycl /MDd %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-SYCL-DEBUG %s // CHECK-LINK-SYCL-DEBUG: "--dependent-lib=sycld"