stage2: Make zig cc more verbose (#7166)

* stage2: Make zig cc more verbose

Make `zig cc` print more info from Clang itself and from our own linker
invocation, this is needed for CMake to properly discover all the
include directories and library search paths.

Closes #7110

* Update `update_clang_options`

* Typo fixes

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
This commit is contained in:
LemonBoy 2020-11-19 23:30:16 +01:00 committed by GitHub
parent 647c6e0d09
commit 8eaaa905f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 47 additions and 14 deletions

View File

@ -165,7 +165,7 @@ sepd1("Zlinker-input"),
.{
.name = "###",
.syntax = .flag,
.zig_equivalent = .verbose_cmds,
.zig_equivalent = .dry_run,
.pd1 = true,
.pd2 = false,
.psl = false,
@ -4439,7 +4439,14 @@ flagpd1("twolevel_namespace_hints"),
sepd1("umbrella"),
flagpd1("undef"),
sepd1("unexported_symbols_list"),
flagpd1("v"),
.{
.name = "v",
.syntax = .flag,
.zig_equivalent = .verbose,
.pd1 = true,
.pd2 = false,
.psl = false,
},
flagpd1("vectorize-loops"),
flagpd1("vectorize-slp"),
flagpd1("verify"),

View File

@ -907,8 +907,11 @@ fn linkWithLLD(self: *Coff, comp: *Compilation) !void {
// Create an LLD command line and invoke it.
var argv = std.ArrayList([]const u8).init(self.base.allocator);
defer argv.deinit();
// Even though we're calling LLD as a library it thinks the first argument is its own exe name.
try argv.append("lld");
// The first argument is ignored as LLD is called as a library, set it
// anyway to the correct LLD driver name for this target so that it's
// correctly printed when `verbose_link` is true. This is needed for some
// tools such as CMake when Zig is used as C compiler.
try argv.append("lld-link");
try argv.append("-ERRORLIMIT:0");
try argv.append("-NOLOGO");

View File

@ -1353,8 +1353,11 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
// Create an LLD command line and invoke it.
var argv = std.ArrayList([]const u8).init(self.base.allocator);
defer argv.deinit();
// Even though we're calling LLD as a library it thinks the first argument is its own exe name.
try argv.append("lld");
// The first argument is ignored as LLD is called as a library, set it
// anyway to the correct LLD driver name for this target so that it's
// correctly printed when `verbose_link` is true. This is needed for some
// tools such as CMake when Zig is used as C compiler.
try argv.append("ld.lld");
if (is_obj) {
try argv.append("-r");
}

View File

@ -542,8 +542,12 @@ fn linkWithLLD(self: *MachO, comp: *Compilation) !void {
if (self.base.options.system_linker_hack) {
try argv.append("ld");
} else {
// Even though we're calling LLD as a library it thinks the first argument is its own exe name.
try argv.append("lld");
// The first argument is ignored as LLD is called as a library, set
// it anyway to the correct LLD driver name for this target so that
// it's correctly printed when `verbose_link` is true. This is
// needed for some tools such as CMake when Zig is used as C
// compiler.
try argv.append("ld64");
try argv.append("-error-limit");
try argv.append("0");

View File

@ -339,8 +339,11 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void {
// Create an LLD command line and invoke it.
var argv = std.ArrayList([]const u8).init(self.base.allocator);
defer argv.deinit();
// Even though we're calling LLD as a library it thinks the first argument is its own exe name.
try argv.append("lld");
// The first argument is ignored as LLD is called as a library, set it
// anyway to the correct LLD driver name for this target so that it's
// correctly printed when `verbose_link` is true. This is needed for some
// tools such as CMake when Zig is used as C compiler.
try argv.append("ld-wasm");
if (is_obj) {
try argv.append("-r");
}

View File

@ -1062,9 +1062,17 @@ fn buildOutputType(
}
},
.linker_script => linker_script = it.only_arg,
.verbose_cmds => {
verbose_cc = true;
.verbose => {
verbose_link = true;
// Have Clang print more infos, some tools such as CMake
// parse this to discover any implicit include and
// library dir to look-up into.
try clang_argv.append("-v");
},
.dry_run => {
verbose_link = true;
try clang_argv.append("-###");
// XXX: Don't execute anything!
},
.for_linker => try linker_args.append(it.only_arg),
.linker_input_z => {
@ -2776,7 +2784,8 @@ pub const ClangArgIterator = struct {
debug,
sanitize,
linker_script,
verbose_cmds,
dry_run,
verbose,
for_linker,
linker_input_z,
lib_dir,

View File

@ -214,7 +214,11 @@ const known_options = [_]KnownOpt{
},
.{
.name = "###",
.ident = "verbose_cmds",
.ident = "dry_run",
},
.{
.name = "v",
.ident = "verbose",
},
.{
.name = "L",