diff --git a/dmd-script b/dmd-script index 4aad809..d561766 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,19 @@ 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 -### -xd - 2>&1 1>/dev/null)); + my @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; }