zero9178 created this revision. zero9178 added reviewers: rnk, russell.gallop. zero9178 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
When targeting a MSVC triple, --dependant-libs with the name of the clang runtime library for profiling is added to the command line args. In it's current implementations clang_rt.profile-<ARCH> is chosen as the name. When building a distribution using LLVM_ENABLE_PER_TARGET_RUNTIME_DIR this fails, due to the runtime file names not having an architecture suffix in the filename. This patch instead uses getCompilerRT which is used in other parts of the compiler to possibly find the right library name first, or fall back to the old behaviour if not. If accepted I would need this patch to be committed for me: Username: zero9178 email: markus.boec...@gmail.com Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D96638 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/cl-options.c clang/test/Driver/instrprof-ld.c Index: clang/test/Driver/instrprof-ld.c =================================================================== --- clang/test/Driver/instrprof-ld.c +++ clang/test/Driver/instrprof-ld.c @@ -112,7 +112,7 @@ // RUN: | FileCheck --check-prefix=CHECK-WINDOWS-I386 %s // // CHECK-WINDOWS-I386: "{{.*}}link{{(.exe)?}}" -// CHECK-WINDOWS-I386: "{{.*}}clang_rt.profile-i386.lib" +// CHECK-WINDOWS-I386: "{{.*}}clang_rt.profile{{(-i386)?}}.lib" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target x86_64-pc-win32 -fprofile-instr-generate \ @@ -120,7 +120,7 @@ // RUN: | FileCheck --check-prefix=CHECK-WINDOWS-X86-64 %s // // CHECK-WINDOWS-X86-64: "{{.*}}link{{(.exe)?}}" -// CHECK-WINDOWS-X86-64: "{{.*}}clang_rt.profile-x86_64.lib" +// CHECK-WINDOWS-X86-64: "{{.*}}clang_rt.profile{{(-x86_64)?}}.lib" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target x86_64-mingw32 -fprofile-instr-generate -fuse-ld=ld \ @@ -136,7 +136,7 @@ // RUN: -fprofile-instr-generate 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WINDOWS-X86-64-DEPENDENT-LIB %s // -// CHECK-WINDOWS-X86-64-DEPENDENT-LIB: "--dependent-lib={{[^"]*}}clang_rt.profile-{{[^"]*}}.lib" +// CHECK-WINDOWS-X86-64-DEPENDENT-LIB: "--dependent-lib={{[^"]*}}clang_rt.profile{{[^"]*}}.lib" // // RUN: %clang %s -### -o %t.o -target x86_64-mingw32 \ // RUN: -fprofile-instr-generate 2>&1 \ Index: clang/test/Driver/cl-options.c =================================================================== --- clang/test/Driver/cl-options.c +++ clang/test/Driver/cl-options.c @@ -58,11 +58,11 @@ // RUN: %clang_cl -### /FA -fprofile-instr-generate -- %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-INSTR-GENERATE %s // RUN: %clang_cl -### /FA -fprofile-instr-generate=/tmp/somefile.profraw -- %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-INSTR-GENERATE-FILE %s -// CHECK-PROFILE-INSTR-GENERATE: "-fprofile-instrument=clang" "--dependent-lib=clang_rt.profile-{{[^"]*}}.lib" +// CHECK-PROFILE-INSTR-GENERATE: "-fprofile-instrument=clang" "--dependent-lib=clang_rt.profile{{[^"]*}}.lib" // CHECK-PROFILE-INSTR-GENERATE-FILE: "-fprofile-instrument-path=/tmp/somefile.profraw" // RUN: %clang_cl -### /FA -fprofile-generate -- %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-GENERATE %s -// CHECK-PROFILE-GENERATE: "-fprofile-instrument=llvm" "--dependent-lib=clang_rt.profile-{{[^"]*}}.lib" +// CHECK-PROFILE-GENERATE: "-fprofile-instrument=llvm" "--dependent-lib=clang_rt.profile{{[^"]*}}.lib" // RUN: %clang_cl -### /FA -fprofile-instr-generate -fprofile-instr-use -- %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s // RUN: %clang_cl -### /FA -fprofile-instr-generate -fprofile-instr-use=file -- %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -792,8 +792,9 @@ CmdArgs.push_back("-fprofile-instrument=clang"); if (TC.getTriple().isWindowsMSVCEnvironment()) { // Add dependent lib for clang_rt.profile + std::string ClangRtProfilePath = TC.getCompilerRT(Args, "profile"); CmdArgs.push_back(Args.MakeArgString( - "--dependent-lib=" + TC.getCompilerRTBasename(Args, "profile"))); + "--dependent-lib=" + llvm::sys::path::filename(ClangRtProfilePath))); } }
Index: clang/test/Driver/instrprof-ld.c =================================================================== --- clang/test/Driver/instrprof-ld.c +++ clang/test/Driver/instrprof-ld.c @@ -112,7 +112,7 @@ // RUN: | FileCheck --check-prefix=CHECK-WINDOWS-I386 %s // // CHECK-WINDOWS-I386: "{{.*}}link{{(.exe)?}}" -// CHECK-WINDOWS-I386: "{{.*}}clang_rt.profile-i386.lib" +// CHECK-WINDOWS-I386: "{{.*}}clang_rt.profile{{(-i386)?}}.lib" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target x86_64-pc-win32 -fprofile-instr-generate \ @@ -120,7 +120,7 @@ // RUN: | FileCheck --check-prefix=CHECK-WINDOWS-X86-64 %s // // CHECK-WINDOWS-X86-64: "{{.*}}link{{(.exe)?}}" -// CHECK-WINDOWS-X86-64: "{{.*}}clang_rt.profile-x86_64.lib" +// CHECK-WINDOWS-X86-64: "{{.*}}clang_rt.profile{{(-x86_64)?}}.lib" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target x86_64-mingw32 -fprofile-instr-generate -fuse-ld=ld \ @@ -136,7 +136,7 @@ // RUN: -fprofile-instr-generate 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WINDOWS-X86-64-DEPENDENT-LIB %s // -// CHECK-WINDOWS-X86-64-DEPENDENT-LIB: "--dependent-lib={{[^"]*}}clang_rt.profile-{{[^"]*}}.lib" +// CHECK-WINDOWS-X86-64-DEPENDENT-LIB: "--dependent-lib={{[^"]*}}clang_rt.profile{{[^"]*}}.lib" // // RUN: %clang %s -### -o %t.o -target x86_64-mingw32 \ // RUN: -fprofile-instr-generate 2>&1 \ Index: clang/test/Driver/cl-options.c =================================================================== --- clang/test/Driver/cl-options.c +++ clang/test/Driver/cl-options.c @@ -58,11 +58,11 @@ // RUN: %clang_cl -### /FA -fprofile-instr-generate -- %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-INSTR-GENERATE %s // RUN: %clang_cl -### /FA -fprofile-instr-generate=/tmp/somefile.profraw -- %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-INSTR-GENERATE-FILE %s -// CHECK-PROFILE-INSTR-GENERATE: "-fprofile-instrument=clang" "--dependent-lib=clang_rt.profile-{{[^"]*}}.lib" +// CHECK-PROFILE-INSTR-GENERATE: "-fprofile-instrument=clang" "--dependent-lib=clang_rt.profile{{[^"]*}}.lib" // CHECK-PROFILE-INSTR-GENERATE-FILE: "-fprofile-instrument-path=/tmp/somefile.profraw" // RUN: %clang_cl -### /FA -fprofile-generate -- %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-GENERATE %s -// CHECK-PROFILE-GENERATE: "-fprofile-instrument=llvm" "--dependent-lib=clang_rt.profile-{{[^"]*}}.lib" +// CHECK-PROFILE-GENERATE: "-fprofile-instrument=llvm" "--dependent-lib=clang_rt.profile{{[^"]*}}.lib" // RUN: %clang_cl -### /FA -fprofile-instr-generate -fprofile-instr-use -- %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s // RUN: %clang_cl -### /FA -fprofile-instr-generate -fprofile-instr-use=file -- %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -792,8 +792,9 @@ CmdArgs.push_back("-fprofile-instrument=clang"); if (TC.getTriple().isWindowsMSVCEnvironment()) { // Add dependent lib for clang_rt.profile + std::string ClangRtProfilePath = TC.getCompilerRT(Args, "profile"); CmdArgs.push_back(Args.MakeArgString( - "--dependent-lib=" + TC.getCompilerRTBasename(Args, "profile"))); + "--dependent-lib=" + llvm::sys::path::filename(ClangRtProfilePath))); } }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits