From: Andi Kleen <a...@linux.intel.com>

Change the bootstrap-lto config file to use slim (non fat) LTO..
Speeds up the LTO bootstrap by ~18% on a 4 core system.

This requires using gcc-ar/ranlib in post stage 1 builds, so these
are passed to all sub builds.

v2: Change existing config file as requested by Honza.

config/:

2014-08-07  Andi Kleen  <a...@linux.intel.com>

        * bootstrap-lto.mk: Implement slim bootstrap.

2014-08-04  Andi Kleen  <a...@linux.intel.com>

        * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS): Add LTO_EXPORTS.
        POSTSTAGE1_FLAGS_TO_PASS):  Add LTO_FLAGS_TO_PASS.
        * Makefile.in: Regenerate.
---
 Makefile.in                  |  2 ++
 Makefile.tpl                 |  2 ++
 config/bootstrap-lto-slim.mk | 13 +++++++++++++
 config/bootstrap-lto.mk      | 16 +++++++++++-----
 4 files changed, 28 insertions(+), 5 deletions(-)
 create mode 100644 config/bootstrap-lto-slim.mk

diff --git a/Makefile.in b/Makefile.in
index 329af7f..af59823 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -256,6 +256,7 @@ POSTSTAGE1_HOST_EXPORTS = \
          $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
        CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \
        $(POSTSTAGE1_CXX_EXPORT) \
+       $(LTO_EXPORTS) \
        GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
        LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
        HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
@@ -826,6 +827,7 @@ POSTSTAGE1_FLAGS_TO_PASS = \
        GNATBIND="$${GNATBIND}" \
        LDFLAGS="$${LDFLAGS}" \
        HOST_LIBS="$${HOST_LIBS}" \
+       $(LTO_FLAGS_TO_PASS) \
        "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
 
 # Flags to pass down to makes which are built with the target environment.
diff --git a/Makefile.tpl b/Makefile.tpl
index 4822c32..261461a 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -259,6 +259,7 @@ POSTSTAGE1_HOST_EXPORTS = \
          $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
        CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \
        $(POSTSTAGE1_CXX_EXPORT) \
+       $(LTO_EXPORTS) \
        GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
        LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
        HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
@@ -631,6 +632,7 @@ POSTSTAGE1_FLAGS_TO_PASS = \
        GNATBIND="$${GNATBIND}" \
        LDFLAGS="$${LDFLAGS}" \
        HOST_LIBS="$${HOST_LIBS}" \
+       $(LTO_FLAGS_TO_PASS) \
        "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
 
 # Flags to pass down to makes which are built with the target environment.
diff --git a/config/bootstrap-lto-slim.mk b/config/bootstrap-lto-slim.mk
new file mode 100644
index 0000000..9e065e1
--- /dev/null
+++ b/config/bootstrap-lto-slim.mk
@@ -0,0 +1,13 @@
+# This option enables LTO for stage2 and stage3 in slim mode
+
+STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1
+STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1
+STAGEprofile_CFLAGS += -fno-lto
+
+# assumes the host supports the linker plugin
+LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) 
-B$$r/$(HOST_SUBDIR)/prev-gcc/
+LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) 
-B$$r/$(HOST_SUBDIR)/prev-gcc/
+
+LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
+             RANLIB="$(LTO_RANLIB)"; export RANLIB;
+LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
diff --git a/config/bootstrap-lto.mk b/config/bootstrap-lto.mk
index 27bad15..9e065e1 100644
--- a/config/bootstrap-lto.mk
+++ b/config/bootstrap-lto.mk
@@ -1,7 +1,13 @@
-# This option enables LTO for stage2 and stage3.
-# FIXME: Our build system is not yet able to use gcc-ar wrapper, so we need
-# to go with -ffat-lto-objects. 
+# This option enables LTO for stage2 and stage3 in slim mode
 
-STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1 -ffat-lto-objects
-STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1 -ffat-lto-objects
+STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1
+STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1
 STAGEprofile_CFLAGS += -fno-lto
+
+# assumes the host supports the linker plugin
+LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) 
-B$$r/$(HOST_SUBDIR)/prev-gcc/
+LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) 
-B$$r/$(HOST_SUBDIR)/prev-gcc/
+
+LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
+             RANLIB="$(LTO_RANLIB)"; export RANLIB;
+LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
-- 
2.0.1

Reply via email to