[Ada] Instruct gnatmake to pass -Oxxx switches to the linker
Arnaud Charlet
charlet@adacore.com
Mon Oct 4 14:10:00 GMT 2010
This makes it so that gnatmake passes -Oxxx switches to the linker in addition
to the compiler. This is aimed at simplifying the use of LTO in Ada.
Tested on x86_64-pc-linux-gnu, committed on trunk
2010-10-04 Eric Botcazou <ebotcazou@adacore.com>
* make.adb (Scan_Make_Arg): Pass -Oxxx switches to the linker as well.
* gnatlink.adb (Gnatlink): Filter out -Oxxx switches for CLI, RTX and
AAMP.
-------------- next part --------------
Index: make.adb
===================================================================
--- make.adb (revision 164906)
+++ make.adb (working copy)
@@ -8060,12 +8060,12 @@ package body Make is
elsif Argv (2) = 'L' then
Add_Switch (Argv, Linker, And_Save => And_Save);
- -- For -gxxxxx, -pg, -mxxx, -fxxx: give the switch to both the
+ -- For -gxxx, -pg, -mxxx, -fxxx, -Oxxx, pass the switch to both the
-- compiler and the linker (except for -gnatxxx which is only for the
-- compiler). Some of the -mxxx (for example -m64) and -fxxx (for
-- example -ftest-coverage for gcov) need to be used when compiling
-- the binder generated files, and using all these gcc switches for
- -- the binder generated files should not be a problem.
+ -- them should not be a problem. Pass -Oxxx to the linker for LTO.
elsif
(Argv (2) = 'g' and then (Argv'Last < 5
@@ -8073,6 +8073,7 @@ package body Make is
or else Argv (2 .. Argv'Last) = "pg"
or else (Argv (2) = 'm' and then Argv'Last > 2)
or else (Argv (2) = 'f' and then Argv'Last > 2)
+ or else (Argv (2) = 'O' and then Argv'Last > 2)
then
Add_Switch (Argv, Compiler, And_Save => And_Save);
Add_Switch (Argv, Linker, And_Save => And_Save);
Index: gnatlink.adb
===================================================================
--- gnatlink.adb (revision 164906)
+++ gnatlink.adb (working copy)
@@ -1965,6 +1965,25 @@ begin
or else Linker_Options.Table (J) (1 .. 2) = "-l"
or else Linker_Options.Table (J) (1 .. 3) = "-Wl"
or else Linker_Options.Table (J) (1 .. 3) = "-sh"
+ or else Linker_Options.Table (J) (1 .. 2) = "-O"
+ or else Linker_Options.Table (J) (1 .. 2) = "-g"
+ then
+ Linker_Options.Table (J .. Linker_Options.Last - 1) :=
+ Linker_Options.Table (J + 1 .. Linker_Options.Last);
+ Linker_Options.Decrement_Last;
+ Num_Args := Num_Args - 1;
+ end if;
+ end loop;
+
+ elsif AAMP_On_Target then
+
+ -- Remove extraneous flags not relevant for AAMP
+
+ for J in reverse Linker_Options.First .. Linker_Options.Last loop
+ if Linker_Options.Table (J)'Length = 0
+ or else Linker_Options.Table (J) (1 .. 3) = "-Wl"
+ or else Linker_Options.Table (J) (1 .. 3) = "-sh"
+ or else Linker_Options.Table (J) (1 .. 2) = "-O"
or else Linker_Options.Table (J) (1 .. 2) = "-g"
then
Linker_Options.Table (J .. Linker_Options.Last - 1) :=
@@ -1986,6 +2005,7 @@ begin
or else Linker_Options.Table (J) (1 .. 2) = "-l"
or else Linker_Options.Table (J) (1 .. 3) = "-Wl"
or else Linker_Options.Table (J) (1 .. 3) = "-sh"
+ or else Linker_Options.Table (J) (1 .. 2) = "-O"
or else Linker_Options.Table (J) (1 .. 8) = "-Xlinker"
or else Linker_Options.Table (J) (1 .. 9) = "-mthreads"
then
More information about the Gcc-patches
mailing list