Author: Daniel Sanders Date: 2020-08-03T13:18:52-07:00 New Revision: 7209f83112db4dbe15d8328705f9d2aff0624fbd
URL: https://github.com/llvm/llvm-project/commit/7209f83112db4dbe15d8328705f9d2aff0624fbd DIFF: https://github.com/llvm/llvm-project/commit/7209f83112db4dbe15d8328705f9d2aff0624fbd.diff LOG: Allow .dSYM's to be directly placed in an alternate directory Once available in the relevant toolchains this will allow us to implement LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR after D84127 by directly placing the dSYM in the desired location instead of emitting next to the output file and moving it. Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D84572 Added: Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/Driver.cpp clang/test/Driver/darwin-dsymutil.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 16051934c1e0..fcb5c030755e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -677,6 +677,9 @@ def dependency_dot : Separate<["-"], "dependency-dot">, Flags<[CC1Option]>, HelpText<"Filename to write DOT-formatted header dependencies to">; def module_dependency_dir : Separate<["-"], "module-dependency-dir">, Flags<[CC1Option]>, HelpText<"Directory to dump module dependencies to">; +def dsym_dir : JoinedOrSeparate<["-"], "dsym-dir">, + Flags<[DriverOption, RenderAsInput]>, + HelpText<"Directory to output dSYM's (if any) to">, MetaVarName<"<dir>">; def dumpmachine : Flag<["-"], "dumpmachine">; def dumpspecs : Flag<["-"], "dumpspecs">, Flags<[Unsupported]>; def dumpversion : Flag<["-"], "dumpversion">; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 317098e24823..35263fbe1b2d 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4604,7 +4604,17 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, StringRef BaseName; // Dsymutil actions should use the full path. - if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA)) + if (isa<DsymutilJobAction>(JA) && C.getArgs().hasArg(options::OPT_dsym_dir)) { + SmallString<128> ExternalPath( + C.getArgs().getLastArg(options::OPT_dsym_dir)->getValue()); + // We use posix style here because the tests (specifically + // darwin-dsymutil.c) demonstrate that posix style paths are acceptable + // even on Windows and if we don't then the similar test covering this + // fails. + llvm::sys::path::append(ExternalPath, llvm::sys::path::Style::posix, + llvm::sys::path::filename(BasePath)); + BaseName = ExternalPath; + } else if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA)) BaseName = BasePath; else BaseName = llvm::sys::path::filename(BasePath); diff --git a/clang/test/Driver/darwin-dsymutil.c b/clang/test/Driver/darwin-dsymutil.c index 09451a81b797..8cdb2f3cbf64 100644 --- a/clang/test/Driver/darwin-dsymutil.c +++ b/clang/test/Driver/darwin-dsymutil.c @@ -26,10 +26,21 @@ // // RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ // RUN: -o foo %s -g 2> %t -// RUN: FileCheck -check-prefix=CHECK-OUTPUT-NAME < %t %s +// RUN: FileCheck -Doutfile=foo -Ddsymfile=foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s // -// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Linker", inputs: [{{.*}}], output: "foo" -// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["foo"], output: "foo.dSYM" +// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo %s -g 2> %t +// RUN: FileCheck -Doutfile=bar/foo -Ddsymfile=bar/foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s +// +// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo -dsym-dir external %s -g 2> %t +// RUN: FileCheck -Doutfile=bar/foo -Ddsymfile=external/foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s +// +// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Linker", inputs: [{{.*}}], output: "[[outfile]]" +// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["[[outfile]]"], output: "[[dsymfile]]" // Check that we only use dsymutil when needed. // @@ -38,12 +49,5 @@ // RUN: -o foo %t.o -g 2> %t // RUN: not grep "Dsymutil" %t -// Check that we put the .dSYM in the right place. -// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ -// RUN: -o bar/foo %s -g 2> %t -// RUN: FileCheck -check-prefix=CHECK-LOCATION < %t %s - -// CHECK-LOCATION: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["bar/foo"], output: "bar/foo.dSYM" - // Check that we don't crash when translating arguments for dsymutil. // RUN: %clang -m32 -arch x86_64 -g %s -### _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits