blob: c276fa078d2293b4e26326bdb80ff3623a1e68bc [file] [log] [blame]
This patch is under review at https://reviews.llvm.org/D44788
It makes clang accept the option -glto-dwo-dir and pass
it to llvm to enable thinlto with debug fission.
--- a/tools/clang/docs/ClangCommandLineReference.rst
+++ b/tools/clang/docs/ClangCommandLineReference.rst
@@ -2587,6 +2587,8 @@ Debug information flags
.. option:: -gstrict-dwarf, -gno-strict-dwarf
+.. option:: -glto-dwo-dir=<arg>
+
.. option:: -gz
DWARF debug sections compression type
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index 6925157d2e..83a4f5bc86 100644
--- a/tools/clang/include/clang/Driver/Options.td
+++ b/tools/clang/include/clang/Driver/Options.td
@@ -1700,6 +1700,7 @@ def gno_strict_dwarf : Flag<["-"], "gno-strict-dwarf">, Group<g_flags_Group>;
def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>;
+def glto_dwo_dir_EQ : Joined<["-"], "glto-dwo-dir=">, Group<g_flags_Group>;
def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>;
def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>,
diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp
index 17ab82e97c..67992a655e 100644
--- a/tools/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/tools/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -417,6 +417,19 @@
if (IsThinLTO)
CmdArgs.push_back("-plugin-opt=thinlto");
+ if (Arg *A = Args.getLastArg(options::OPT_glto_dwo_dir_EQ)) {
+ const char *Objcopy =
+ Args.MakeArgString(ToolChain.GetProgramPath(CLANG_DEFAULT_OBJCOPY));
+ CmdArgs.push_back(
+ Args.MakeArgString(Twine("-plugin-opt=objcopy=") + Objcopy));
+ StringRef Dwo_Dir = A->getValue();
+ SmallString<1024> DwoDir;
+ llvm::sys::path::native(Dwo_Dir, DwoDir);
+ llvm::sys::path::append(DwoDir, Twine(Output.getFilename()) + "_dwo");
+ CmdArgs.push_back(
+ Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DwoDir));
+ }
+
if (unsigned Parallelism = getLTOParallelism(Args, ToolChain.getDriver()))
CmdArgs.push_back(
Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism)));