From b0b29b8a2fe57cb501248c1022a24092f4f56f82 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Fri, 27 Mar 2020 23:23:56 -0700 Subject: [PATCH 1/3] zig cc: Add support for -Xlinker, --for-linker, --for-linker= --- src-self-hosted/clang_options_data.zig | 13 ++++++++++--- src-self-hosted/stage2.zig | 1 + src/main.cpp | 3 +++ src/stage2.h | 1 + tools/update_clang_options.zig | 12 ++++++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src-self-hosted/clang_options_data.zig b/src-self-hosted/clang_options_data.zig index 2179b47253a29ac9370ef0b08123f23b4b8e0375..ddf3f36a94fc01d761f9c1f41455bf84a277d302 100644 --- a/src-self-hosted/clang_options_data.zig +++ b/src-self-hosted/clang_options_data.zig @@ -80,7 +80,14 @@ sepd1("Xassembler"), sepd1("Xclang"), sepd1("Xcuda-fatbinary"), sepd1("Xcuda-ptxas"), -sepd1("Xlinker"), +.{ + .name = "Xlinker", + .syntax = .separate, + .zig_equivalent = .for_linker, + .pd1 = true, + .pd2 = false, + .psl = false, +}, sepd1("Xopenmp-target"), sepd1("Xpreprocessor"), flagpd1("Z"), @@ -1563,7 +1570,7 @@ sepd1("Zlinker-input"), .{ .name = "for-linker", .syntax = .separate, - .zig_equivalent = .other, + .zig_equivalent = .for_linker, .pd1 = false, .pd2 = true, .psl = false, @@ -4887,7 +4894,7 @@ jspd1("sub_umbrella"), .{ .name = "for-linker=", .syntax = .joined, - .zig_equivalent = .other, + .zig_equivalent = .for_linker, .pd1 = false, .pd2 = true, .psl = false, diff --git a/src-self-hosted/stage2.zig b/src-self-hosted/stage2.zig index 0613634c6afb03fe04c546b72daa959864aec289..bd413d34d820b6c6e20776926d8ea452ee029b10 100644 --- a/src-self-hosted/stage2.zig +++ b/src-self-hosted/stage2.zig @@ -1289,6 +1289,7 @@ pub const ClangArgIterator = extern struct { no_exceptions, rtti, no_rtti, + for_linker, }; const Args = struct { diff --git a/src/main.cpp b/src/main.cpp index f60a1185e7800b456970fe1de5bdf473ccdc73d4..1e995453992fdf61cd9d057b20a4798f393eb9ae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -734,6 +734,9 @@ static int main0(int argc, char **argv) { case Stage2ClangArgNoRtti: cpp_rtti = false; break; + case Stage2ClangArgForLinker: + linker_args.append(buf_create_from_str(it.only_arg)); + break; } } // Parse linker args diff --git a/src/stage2.h b/src/stage2.h index ed7caebcb062e8cedd8284694f1c6772df0a05f6..42a144f4ce7c4de008b4414c301ef678a6553d4b 100644 --- a/src/stage2.h +++ b/src/stage2.h @@ -349,6 +349,7 @@ enum Stage2ClangArg { Stage2ClangArgNoExceptions, Stage2ClangArgRtti, Stage2ClangArgNoRtti, + Stage2ClangArgForLinker, }; // ABI warning diff --git a/tools/update_clang_options.zig b/tools/update_clang_options.zig index 94dee901424e0d89d2cae0cde8f19552c5fca155..f8d19872065cac26cbebdd90aef0bd0ddd43eaf1 100644 --- a/tools/update_clang_options.zig +++ b/tools/update_clang_options.zig @@ -78,6 +78,18 @@ const known_options = [_]KnownOpt{ .name = "Wl,", .ident = "wl", }, + .{ + .name = "Xlinker", + .ident = "for_linker", + }, + .{ + .name = "for-linker", + .ident = "for_linker", + }, + .{ + .name = "for-linker=", + .ident = "for_linker", + }, .{ .name = "E", .ident = "preprocess", -- 2.54.0 From 874b4618ca0a8fcde347e9cbca8e3a0de82d9b4b Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Sat, 28 Mar 2020 00:35:54 -0700 Subject: [PATCH 2/3] zig cc: Add support for -z This is only the first step; it makes zig cc recognize -z and append it to the linker args, but the linker arg parsing doesn't support -z yet so it will just give the warning 'unsupported linker arg: -z' --- src-self-hosted/clang_options_data.zig | 9 ++++++++- src-self-hosted/stage2.zig | 1 + src/main.cpp | 4 ++++ src/stage2.h | 1 + tools/update_clang_options.zig | 4 ++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src-self-hosted/clang_options_data.zig b/src-self-hosted/clang_options_data.zig index ddf3f36a94fc01d761f9c1f41455bf84a277d302..d8bd0204319c3939bc1b06f898d8b16804eeb0f9 100644 --- a/src-self-hosted/clang_options_data.zig +++ b/src-self-hosted/clang_options_data.zig @@ -4255,7 +4255,14 @@ flagpd1("fno-whole-file"), flagpd1("fwhole-program"), flagpd1("fno-whole-program"), flagpd1("whyload"), -sepd1("z"), +.{ + .name = "z", + .syntax = .separate, + .zig_equivalent = .linker_input_z, + .pd1 = true, + .pd2 = false, + .psl = false, +}, joinpd1("fsanitize-undefined-strip-path-components="), joinpd1("fopenmp-cuda-teams-reduction-recs-num="), joinpd1("analyzer-config-compatibility-mode="), diff --git a/src-self-hosted/stage2.zig b/src-self-hosted/stage2.zig index bd413d34d820b6c6e20776926d8ea452ee029b10..2c4fe99abe70c552c84f7363dd1bd726df24a7f5 100644 --- a/src-self-hosted/stage2.zig +++ b/src-self-hosted/stage2.zig @@ -1290,6 +1290,7 @@ pub const ClangArgIterator = extern struct { rtti, no_rtti, for_linker, + linker_input_z, }; const Args = struct { diff --git a/src/main.cpp b/src/main.cpp index 1e995453992fdf61cd9d057b20a4798f393eb9ae..a7a9b4195027c28edfc858159be273845e0e7759 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -737,6 +737,10 @@ static int main0(int argc, char **argv) { case Stage2ClangArgForLinker: linker_args.append(buf_create_from_str(it.only_arg)); break; + case Stage2ClangArgLinkerInputZ: + linker_args.append(buf_create_from_str("-z")); + linker_args.append(buf_create_from_str(it.only_arg)); + break; } } // Parse linker args diff --git a/src/stage2.h b/src/stage2.h index 42a144f4ce7c4de008b4414c301ef678a6553d4b..5cea30dbaba0e2bf72d3b7f0aae9bf08a166c48f 100644 --- a/src/stage2.h +++ b/src/stage2.h @@ -350,6 +350,7 @@ enum Stage2ClangArg { Stage2ClangArgRtti, Stage2ClangArgNoRtti, Stage2ClangArgForLinker, + Stage2ClangArgLinkerInputZ, }; // ABI warning diff --git a/tools/update_clang_options.zig b/tools/update_clang_options.zig index f8d19872065cac26cbebdd90aef0bd0ddd43eaf1..b673fa050306ccf9ee7a271af927d96b8f53779c 100644 --- a/tools/update_clang_options.zig +++ b/tools/update_clang_options.zig @@ -90,6 +90,10 @@ const known_options = [_]KnownOpt{ .name = "for-linker=", .ident = "for_linker", }, + .{ + .name = "z", + .ident = "linker_input_z", + }, .{ .name = "E", .ident = "preprocess", -- 2.54.0 From cc7c670851a8186264eb63d4e0d6c8dcdfba8e4c Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Sat, 28 Mar 2020 00:39:33 -0700 Subject: [PATCH 3/3] Sync clang_options_data.zig with update_clang_options Some of the recent c++ related options were added to update_clang_options but didn't make it into clang_options_data.zig --- src-self-hosted/clang_options_data.zig | 36 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src-self-hosted/clang_options_data.zig b/src-self-hosted/clang_options_data.zig index d8bd0204319c3939bc1b06f898d8b16804eeb0f9..14dcec4fb126e6e54be30e02c71557e640607eb4 100644 --- a/src-self-hosted/clang_options_data.zig +++ b/src-self-hosted/clang_options_data.zig @@ -2554,7 +2554,14 @@ flagpd1("femulated-tls"), flagpd1("fencode-extended-block-signature"), sepd1("ferror-limit"), flagpd1("fescaping-block-tail-calls"), -flagpd1("fexceptions"), +.{ + .name = "fexceptions", + .syntax = .flag, + .zig_equivalent = .exceptions, + .pd1 = true, + .pd2 = false, + .psl = false, +}, flagpd1("fexperimental-isel"), flagpd1("fexperimental-new-constant-interpreter"), flagpd1("fexperimental-new-pass-manager"), @@ -2758,7 +2765,14 @@ flagpd1("fno-elide-type"), flagpd1("fno-eliminate-unused-debug-symbols"), flagpd1("fno-emulated-tls"), flagpd1("fno-escaping-block-tail-calls"), -flagpd1("fno-exceptions"), +.{ + .name = "fno-exceptions", + .syntax = .flag, + .zig_equivalent = .no_exceptions, + .pd1 = true, + .pd2 = false, + .psl = false, +}, flagpd1("fno-experimental-isel"), flagpd1("fno-experimental-new-pass-manager"), flagpd1("fno-fast-math"), @@ -2847,7 +2861,14 @@ flagpd1("fno-rewrite-includes"), flagpd1("fno-ropi"), flagpd1("fno-rounding-math"), flagpd1("fno-rtlib-add-rpath"), -flagpd1("fno-rtti"), +.{ + .name = "fno-rtti", + .syntax = .flag, + .zig_equivalent = .no_rtti, + .pd1 = true, + .pd2 = false, + .psl = false, +}, flagpd1("fno-rtti-data"), flagpd1("fno-rwpi"), flagpd1("fno-sanitize-address-poison-custom-array-cookie"), @@ -2995,7 +3016,14 @@ flagpd1("fno-frontend-optimize"), flagpd1("fropi"), flagpd1("frounding-math"), flagpd1("frtlib-add-rpath"), -flagpd1("frtti"), +.{ + .name = "frtti", + .syntax = .flag, + .zig_equivalent = .rtti, + .pd1 = true, + .pd2 = false, + .psl = false, +}, flagpd1("frwpi"), flagpd1("fsanitize-address-globals-dead-stripping"), flagpd1("fsanitize-address-poison-custom-array-cookie"), -- 2.54.0