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
This commit is contained in:
@@ -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">;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 -###
|
||||
|
||||
Reference in New Issue
Block a user