From 78627eb9c3bc93be76a89c6555f67cb969705912 Mon Sep 17 00:00:00 2001 From: Dentcho Bankov Date: Sat, 21 Aug 2021 15:56:17 +0000 Subject: [PATCH] Add -Xcc and -gcc options to dmd-script. Add -Xcc and -gcc options to better support bootstrapping of LDC. Having -Xcc and -gcc options is also useful in general when having to link D and C/C++ object files. --- dmd-script | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dmd-script b/dmd-script index 4aad809..56df8a9 100755 --- a/dmd-script +++ b/dmd-script @@ -59,6 +59,7 @@ my $lib = 0; my $tmpdir; my %tmpdir_objs; my $stdin = 0; +my $gcc; my @sources; my @objects; @@ -166,6 +167,8 @@ Usage: -wi enable informational warnings -X generate JSON file -Xffilename write JSON file to filename + -Xcc= pass driverflag to linker driver (gdc). + -gcc= Compiler to use for linking. Defaults to gdc. EOF ; } @@ -463,6 +466,10 @@ while ( $arg_i < scalar(@ARGV) ) { } elsif ( $arg =~ m/^-Xf(.*)$/ ) { $json = 1; $json_file = $1; + } elsif ( $arg =~ m/^-Xcc=(.*)$/ ) { + push @link_out, split(qr/ /, $1); + } elsif ( $arg =~ m/^-gcc=(.*)$/ ) { + $gcc = $1; } elsif ( $arg eq '-fall-sources' ) { $seen_all_sources_flag = 1; } elsif ( $arg =~ m/^-f.+/ ) { @@ -721,7 +728,20 @@ foreach my $srcf_i (@sources) { } if ($ok && ($link || $stdin)) { - my @cmd = ($gdc, @out, @dobjects, @objects, @link_out); + my @cmd; + if ( $gcc and $gcc !~ m/gdc/) { + my @gdc_stderr_lines = split("\n", + qx(echo "void main(){}" | $gdc @out @link_out -### -xd - 2>&1 1>/dev/null)); + my @gdc_link_out = $verbose ? ("--verbose") : (); + push @gdc_link_out, + grep(/^-L|^-l|^-B/, split(" ", $gdc_stderr_lines[-2])); + foreach ( grep(/^-B/, @gdc_link_out ) ) { + $_ = "-Wl,$_"; + } + @cmd = ($gcc, @dobjects, @objects, @gdc_link_out, @link_out); + } else { + @cmd = ($gdc, @out, @dobjects, @objects, @link_out); + } if ( $output_file ) { push @cmd, '-o', $output_file; }