gnatmake: Accept the `--sysroot=' GCC driver option
authorMaciej W. Rozycki <macro@wdc.com>
Fri, 13 Sep 2019 17:43:12 +0000 (17:43 +0000)
committerMaciej W. Rozycki <macro@gcc.gnu.org>
Fri, 13 Sep 2019 17:43:12 +0000 (17:43 +0000)
According to `gnatmake' documentation:

"Any uppercase or multi-character switch that is not a 'gnatmake' switch
is passed to 'gcc' (e.g., '-O', '-gnato,' etc.)"

however the `--sysroot=' switch is actually rejected:

gnatmake: invalid switch: --sysroot=...

likely because it is one of the very few GCC driver options that have a
leading double dash and therefore we don't have a blanket fall-through
for such switches that would satisfy what our documentation claims.

The option is actually shared between the compiler and the linker, so
pass the switch to both build stages if requested, removing GNAT
testsuite issues like:

gnatmake: invalid switch: --sysroot=.../sysroot
compiler exited with status 1
Executing on host: .../gcc/gnatclean -c -q -n ./abstract_with_anonymous_result   (timeout = 300)
spawn -ignore SIGHUP .../gcc/gnatclean -c -q -n ./abstract_with_anonymous_result
PASS: gnat.dg/abstract_with_anonymous_result.adb (test for excess errors)
UNRESOLVED: gnat.dg/abstract_with_anonymous_result.adb compilation failed to produce executable

in a test environment where `--with-build-sysroot=.../sysroot' has been
used to build a cross-compiler.  Passing to the compilation stage only
would lead to errors like:

.../bin/riscv64-linux-gnu-ld: cannot find crt1.o: No such file or directory
.../bin/riscv64-linux-gnu-ld: cannot find -lc
collect2: error: ld returned 1 exit status
gnatlink: error when calling .../gcc/xgcc
gnatmake: *** link failed.
compiler exited with status 1
Executing on host: .../gcc/gnatclean -c -q -n ./abstract_with_anonymous_result   (timeout = 300)
spawn -ignore SIGHUP .../gcc/gnatclean -c -q -n ./abstract_with_anonymous_result
./abstract_with_anonymous_result.ali
./abstract_with_anonymous_result.o
FAIL: gnat.dg/abstract_with_anonymous_result.adb (test for excess errors)
Excess errors:
.../bin/riscv64-linux-gnu-ld: cannot find crt1.o: No such file or directory
.../bin/riscv64-linux-gnu-ld: cannot find -lc
gnatlink: error when calling .../gcc/xgcc

UNRESOLVED: gnat.dg/abstract_with_anonymous_result.adb compilation failed to produce executable

instead.

gcc/ada/
* make.adb (Scan_Make_Arg): Also accept `--sysroot=' for the
compiler and the linker.

From-SVN: r275702

gcc/ada/ChangeLog
gcc/ada/make.adb

index 410828ed37a14966409112d61d5f4b73b67382de..e3e274a756fb04b3360d94f3650e567e8a094fb5 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-13  Maciej W. Rozycki  <macro@wdc.com>
+
+       * make.adb (Scan_Make_Arg): Also accept `--sysroot=' for the 
+       compiler and the linker.
 2019-08-30  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/decl.c (maybe_saturate_size): New function.
index 805addb1d3d897b4e1e101dafb9916c8e3590923..3c9df7e50a14dcae820372cf2645e24d2afe2a20 100644 (file)
@@ -4516,7 +4516,9 @@ package body Make is
                end;
             end if;
 
-         elsif Argv'Length >= 8 and then Argv (1 .. 8) = "--param=" then
+         elsif (Argv'Length >= 8 and then Argv (1 .. 8) = "--param=")
+           or else (Argv'Length >= 10 and then Argv (1 .. 10) = "--sysroot=")
+         then
             Add_Switch (Argv, Compiler);
             Add_Switch (Argv, Linker);