authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-03-28 12:03:35-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-03-28 12:03:35-04:00
logf9db21f03eaf0b800e531d12c2677d579eceaff0
tree278efcdade1c47d25e84e91dd9dbfb1faa5b6378
parent2028b4ce9127c3c6e439183f2f9313ec47eb7d62
parentcc7c670851a8186264eb63d4e0d6c8dcdfba8e4c
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4838 from squeek502/for-linker

zig cc: Add support for -Xlinker, --for-linker, --for-linker=, -z

5 files changed, 77 insertions(+), 8 deletions(-)

src-self-hosted/clang_options_data.zig+50-8
...@@ -80,7 +80,14 @@ sepd1("Xassembler"),...@@ -80,7 +80,14 @@ sepd1("Xassembler"),
80sepd1("Xclang"),80sepd1("Xclang"),
81sepd1("Xcuda-fatbinary"),81sepd1("Xcuda-fatbinary"),
82sepd1("Xcuda-ptxas"),82sepd1("Xcuda-ptxas"),
83sepd1("Xlinker"),83.{
84 .name = "Xlinker",
85 .syntax = .separate,
86 .zig_equivalent = .for_linker,
87 .pd1 = true,
88 .pd2 = false,
89 .psl = false,
90},
84sepd1("Xopenmp-target"),91sepd1("Xopenmp-target"),
85sepd1("Xpreprocessor"),92sepd1("Xpreprocessor"),
86flagpd1("Z"),93flagpd1("Z"),
...@@ -1563,7 +1570,7 @@ sepd1("Zlinker-input"),...@@ -1563,7 +1570,7 @@ sepd1("Zlinker-input"),
1563.{1570.{
1564 .name = "for-linker",1571 .name = "for-linker",
1565 .syntax = .separate,1572 .syntax = .separate,
1566 .zig_equivalent = .other,1573 .zig_equivalent = .for_linker,
1567 .pd1 = false,1574 .pd1 = false,
1568 .pd2 = true,1575 .pd2 = true,
1569 .psl = false,1576 .psl = false,
...@@ -2547,7 +2554,14 @@ flagpd1("femulated-tls"),...@@ -2547,7 +2554,14 @@ flagpd1("femulated-tls"),
2547flagpd1("fencode-extended-block-signature"),2554flagpd1("fencode-extended-block-signature"),
2548sepd1("ferror-limit"),2555sepd1("ferror-limit"),
2549flagpd1("fescaping-block-tail-calls"),2556flagpd1("fescaping-block-tail-calls"),
2550flagpd1("fexceptions"),2557.{
2558 .name = "fexceptions",
2559 .syntax = .flag,
2560 .zig_equivalent = .exceptions,
2561 .pd1 = true,
2562 .pd2 = false,
2563 .psl = false,
2564},
2551flagpd1("fexperimental-isel"),2565flagpd1("fexperimental-isel"),
2552flagpd1("fexperimental-new-constant-interpreter"),2566flagpd1("fexperimental-new-constant-interpreter"),
2553flagpd1("fexperimental-new-pass-manager"),2567flagpd1("fexperimental-new-pass-manager"),
...@@ -2751,7 +2765,14 @@ flagpd1("fno-elide-type"),...@@ -2751,7 +2765,14 @@ flagpd1("fno-elide-type"),
2751flagpd1("fno-eliminate-unused-debug-symbols"),2765flagpd1("fno-eliminate-unused-debug-symbols"),
2752flagpd1("fno-emulated-tls"),2766flagpd1("fno-emulated-tls"),
2753flagpd1("fno-escaping-block-tail-calls"),2767flagpd1("fno-escaping-block-tail-calls"),
2754flagpd1("fno-exceptions"),2768.{
2769 .name = "fno-exceptions",
2770 .syntax = .flag,
2771 .zig_equivalent = .no_exceptions,
2772 .pd1 = true,
2773 .pd2 = false,
2774 .psl = false,
2775},
2755flagpd1("fno-experimental-isel"),2776flagpd1("fno-experimental-isel"),
2756flagpd1("fno-experimental-new-pass-manager"),2777flagpd1("fno-experimental-new-pass-manager"),
2757flagpd1("fno-fast-math"),2778flagpd1("fno-fast-math"),
...@@ -2840,7 +2861,14 @@ flagpd1("fno-rewrite-includes"),...@@ -2840,7 +2861,14 @@ flagpd1("fno-rewrite-includes"),
2840flagpd1("fno-ropi"),2861flagpd1("fno-ropi"),
2841flagpd1("fno-rounding-math"),2862flagpd1("fno-rounding-math"),
2842flagpd1("fno-rtlib-add-rpath"),2863flagpd1("fno-rtlib-add-rpath"),
2843flagpd1("fno-rtti"),2864.{
2865 .name = "fno-rtti",
2866 .syntax = .flag,
2867 .zig_equivalent = .no_rtti,
2868 .pd1 = true,
2869 .pd2 = false,
2870 .psl = false,
2871},
2844flagpd1("fno-rtti-data"),2872flagpd1("fno-rtti-data"),
2845flagpd1("fno-rwpi"),2873flagpd1("fno-rwpi"),
2846flagpd1("fno-sanitize-address-poison-custom-array-cookie"),2874flagpd1("fno-sanitize-address-poison-custom-array-cookie"),
...@@ -2988,7 +3016,14 @@ flagpd1("fno-frontend-optimize"),...@@ -2988,7 +3016,14 @@ flagpd1("fno-frontend-optimize"),
2988flagpd1("fropi"),3016flagpd1("fropi"),
2989flagpd1("frounding-math"),3017flagpd1("frounding-math"),
2990flagpd1("frtlib-add-rpath"),3018flagpd1("frtlib-add-rpath"),
2991flagpd1("frtti"),3019.{
3020 .name = "frtti",
3021 .syntax = .flag,
3022 .zig_equivalent = .rtti,
3023 .pd1 = true,
3024 .pd2 = false,
3025 .psl = false,
3026},
2992flagpd1("frwpi"),3027flagpd1("frwpi"),
2993flagpd1("fsanitize-address-globals-dead-stripping"),3028flagpd1("fsanitize-address-globals-dead-stripping"),
2994flagpd1("fsanitize-address-poison-custom-array-cookie"),3029flagpd1("fsanitize-address-poison-custom-array-cookie"),
...@@ -4248,7 +4283,14 @@ flagpd1("fno-whole-file"),...@@ -4248,7 +4283,14 @@ flagpd1("fno-whole-file"),
4248flagpd1("fwhole-program"),4283flagpd1("fwhole-program"),
4249flagpd1("fno-whole-program"),4284flagpd1("fno-whole-program"),
4250flagpd1("whyload"),4285flagpd1("whyload"),
4251sepd1("z"),4286.{
4287 .name = "z",
4288 .syntax = .separate,
4289 .zig_equivalent = .linker_input_z,
4290 .pd1 = true,
4291 .pd2 = false,
4292 .psl = false,
4293},
4252joinpd1("fsanitize-undefined-strip-path-components="),4294joinpd1("fsanitize-undefined-strip-path-components="),
4253joinpd1("fopenmp-cuda-teams-reduction-recs-num="),4295joinpd1("fopenmp-cuda-teams-reduction-recs-num="),
4254joinpd1("analyzer-config-compatibility-mode="),4296joinpd1("analyzer-config-compatibility-mode="),
...@@ -4887,7 +4929,7 @@ jspd1("sub_umbrella"),...@@ -4887,7 +4929,7 @@ jspd1("sub_umbrella"),
4887.{4929.{
4888 .name = "for-linker=",4930 .name = "for-linker=",
4889 .syntax = .joined,4931 .syntax = .joined,
4890 .zig_equivalent = .other,4932 .zig_equivalent = .for_linker,
4891 .pd1 = false,4933 .pd1 = false,
4892 .pd2 = true,4934 .pd2 = true,
4893 .psl = false,4935 .psl = false,
src-self-hosted/stage2.zig+2
...@@ -1289,6 +1289,8 @@ pub const ClangArgIterator = extern struct {...@@ -1289,6 +1289,8 @@ pub const ClangArgIterator = extern struct {
1289 no_exceptions,1289 no_exceptions,
1290 rtti,1290 rtti,
1291 no_rtti,1291 no_rtti,
1292 for_linker,
1293 linker_input_z,
1292 };1294 };
12931295
1294 const Args = struct {1296 const Args = struct {
src/main.cpp+7
...@@ -734,6 +734,13 @@ static int main0(int argc, char **argv) {...@@ -734,6 +734,13 @@ static int main0(int argc, char **argv) {
734 case Stage2ClangArgNoRtti:734 case Stage2ClangArgNoRtti:
735 cpp_rtti = false;735 cpp_rtti = false;
736 break;736 break;
737 case Stage2ClangArgForLinker:
738 linker_args.append(buf_create_from_str(it.only_arg));
739 break;
740 case Stage2ClangArgLinkerInputZ:
741 linker_args.append(buf_create_from_str("-z"));
742 linker_args.append(buf_create_from_str(it.only_arg));
743 break;
737 }744 }
738 }745 }
739 // Parse linker args746 // Parse linker args
src/stage2.h+2
...@@ -349,6 +349,8 @@ enum Stage2ClangArg {...@@ -349,6 +349,8 @@ enum Stage2ClangArg {
349 Stage2ClangArgNoExceptions,349 Stage2ClangArgNoExceptions,
350 Stage2ClangArgRtti,350 Stage2ClangArgRtti,
351 Stage2ClangArgNoRtti,351 Stage2ClangArgNoRtti,
352 Stage2ClangArgForLinker,
353 Stage2ClangArgLinkerInputZ,
352};354};
353355
354// ABI warning356// ABI warning
tools/update_clang_options.zig+16
...@@ -78,6 +78,22 @@ const known_options = [_]KnownOpt{...@@ -78,6 +78,22 @@ const known_options = [_]KnownOpt{
78 .name = "Wl,",78 .name = "Wl,",
79 .ident = "wl",79 .ident = "wl",
80 },80 },
81 .{
82 .name = "Xlinker",
83 .ident = "for_linker",
84 },
85 .{
86 .name = "for-linker",
87 .ident = "for_linker",
88 },
89 .{
90 .name = "for-linker=",
91 .ident = "for_linker",
92 },
93 .{
94 .name = "z",
95 .ident = "linker_input_z",
96 },
81 .{97 .{
82 .name = "E",98 .name = "E",
83 .ident = "preprocess",99 .ident = "preprocess",