public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Sync with binutils for building binutils with LTO:
@ 2021-11-13 16:33 H.J. Lu
  2021-11-13 16:33 ` [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB H.J. Lu
  2021-11-13 16:33 ` [PATCH 2/2] Sync with binutils: Support the PGO build for binutils+gdb H.J. Lu
  0 siblings, 2 replies; 13+ messages in thread
From: H.J. Lu @ 2021-11-13 16:33 UTC (permalink / raw)
  To: gcc-patches

Add the --enable-pgo-build[=lto] configure option.  When binutils+gdb
is not built together with GCC, --enable-pgo-build enables the PGO build:

1. First build with -fprofile-generate.
2. Use "make maybe-check-*" to generate profiling data and pass -i to make
to ignore errors when generating profiling data.
3. Use "make clean" to remove the previous build.
4. Rebuild with -fprofile-use.

H.J. Lu (2):
  Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  Sync with binutils: Support the PGO build for binutils+gdb

 Makefile.in            |  68 ++++++++++++++++++--
 Makefile.tpl           |  63 +++++++++++++++++--
 config/gcc-plugin.m4   |  28 +++++++++
 configure              | 139 ++++++++++++++++++++++++++++++++++++++++-
 configure.ac           |  80 ++++++++++++++++++++++++
 libiberty/Makefile.in  |   5 +-
 libiberty/aclocal.m4   |   1 +
 libiberty/configure    |  37 +++++++++++
 libiberty/configure.ac |  12 ++++
 libtool.m4             |  25 +++++++-
 zlib/configure         |  29 ++++++++-
 11 files changed, 471 insertions(+), 16 deletions(-)

-- 
2.33.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-11-13 16:33 [PATCH 0/2] Sync with binutils for building binutils with LTO: H.J. Lu
@ 2021-11-13 16:33 ` H.J. Lu
  2021-11-23  0:29   ` Jeff Law
                     ` (2 more replies)
  2021-11-13 16:33 ` [PATCH 2/2] Sync with binutils: Support the PGO build for binutils+gdb H.J. Lu
  1 sibling, 3 replies; 13+ messages in thread
From: H.J. Lu @ 2021-11-13 16:33 UTC (permalink / raw)
  To: gcc-patches

Sync with binutils for building binutils with LTO:

From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 9 Jan 2021 06:43:11 -0800
Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB

Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
build.

	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
	* configure.ac: Include config/gcc-plugin.m4.
	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
	RANLIB if possible.
	* Makefile.in: Regenerated.
	* configure: Likewise.

config/

	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.

libiberty/

	* Makefile.in (AR): Add @AR_PLUGIN_OPTION@
	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
	(configure_deps): Depend on ../config/gcc-plugin.m4.
	* configure.ac: AC_SUBST AR_PLUGIN_OPTION and
	RANLIB_PLUGIN_OPTION.
	* aclocal.m4: Regenerated.
	* configure: Likewise.

zlib/

	* configure: Regenerated.
---
 Makefile.in            |  5 +++--
 Makefile.tpl           |  5 +++--
 config/gcc-plugin.m4   | 28 ++++++++++++++++++++++++++++
 configure              | 39 +++++++++++++++++++++++++++++++++++++++
 configure.ac           | 15 +++++++++++++++
 libiberty/Makefile.in  |  5 +++--
 libiberty/aclocal.m4   |  1 +
 libiberty/configure    | 37 +++++++++++++++++++++++++++++++++++++
 libiberty/configure.ac | 12 ++++++++++++
 libtool.m4             | 25 ++++++++++++++++++++++++-
 zlib/configure         | 29 ++++++++++++++++++++++++++---
 11 files changed, 191 insertions(+), 10 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 860cf8f067b..13067e97327 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -415,7 +415,7 @@ MAKEINFOFLAGS = --split-size=5000000
 # ---------------------------------------------
 
 AS = @AS@
-AR = @AR@
+AR = @AR@ @AR_PLUGIN_OPTION@
 AR_FLAGS = rc
 CC = @CC@
 CXX = @CXX@
@@ -426,7 +426,7 @@ LIPO = @LIPO@
 NM = @NM@
 OBJDUMP = @OBJDUMP@
 OTOOL = @OTOOL@
-RANLIB = @RANLIB@
+RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@
 READELF = @READELF@
 STRIP = @STRIP@
 WINDRES = @WINDRES@
@@ -63384,6 +63384,7 @@ AUTOCONF = autoconf
 $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
 	$(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \
 	$(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \
+	$(srcdir)/config/gcc-plugin.m4 \
 	$(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \
 	$(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4
 	cd $(srcdir) && $(AUTOCONF)
diff --git a/Makefile.tpl b/Makefile.tpl
index 213052f8226..f785b84ec9c 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -418,7 +418,7 @@ MAKEINFOFLAGS = --split-size=5000000
 # ---------------------------------------------
 
 AS = @AS@
-AR = @AR@
+AR = @AR@ @AR_PLUGIN_OPTION@
 AR_FLAGS = rc
 CC = @CC@
 CXX = @CXX@
@@ -429,7 +429,7 @@ LIPO = @LIPO@
 NM = @NM@
 OBJDUMP = @OBJDUMP@
 OTOOL = @OTOOL@
-RANLIB = @RANLIB@
+RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@
 READELF = @READELF@
 STRIP = @STRIP@
 WINDRES = @WINDRES@
@@ -2027,6 +2027,7 @@ AUTOCONF = autoconf
 $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
 	$(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \
 	$(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \
+	$(srcdir)/config/gcc-plugin.m4 \
 	$(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \
 	$(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4
 	cd $(srcdir) && $(AUTOCONF)
diff --git a/config/gcc-plugin.m4 b/config/gcc-plugin.m4
index 8f278719118..c5b72e9a13d 100644
--- a/config/gcc-plugin.m4
+++ b/config/gcc-plugin.m4
@@ -124,3 +124,31 @@ AC_DEFUN([GCC_ENABLE_PLUGINS],
      fi
    fi
 ])
+
+dnl
+dnl
+dnl GCC_PLUGIN_OPTION
+dnl    (SHELL-CODE_HANDLER)
+dnl
+AC_DEFUN([GCC_PLUGIN_OPTION],[dnl
+AC_MSG_CHECKING([for -plugin option])
+
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+plugin_option=
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+if test -n "$plugin_option"; then
+  $1="$plugin_option"
+  AC_MSG_RESULT($plugin_option)
+else
+  AC_MSG_RESULT([no])
+fi
+])
diff --git a/configure b/configure
index 58979d6e3b1..ea3111a8020 100755
--- a/configure
+++ b/configure
@@ -619,6 +619,8 @@ GFORTRAN_FOR_TARGET
 GCC_FOR_TARGET
 CXX_FOR_TARGET
 CC_FOR_TARGET
+RANLIB_PLUGIN_OPTION
+AR_PLUGIN_OPTION
 READELF
 OTOOL
 OBJDUMP
@@ -12600,6 +12602,43 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
+$as_echo_n "checking for -plugin option... " >&6; }
+
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+plugin_option=
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+if test -n "$plugin_option"; then
+  PLUGIN_OPTION="$plugin_option"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+$as_echo "$plugin_option" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+AR_PLUGIN_OPTION=
+RANLIB_PLUGIN_OPTION=
+if test -n "$PLUGIN_OPTION"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+fi
+
+
+
 # Target tools.
 
 # Check whether --with-build-time-tools was given.
diff --git a/configure.ac b/configure.ac
index 550e6993b59..1ca83d30a55 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,6 +24,7 @@ m4_include(config/override.m4)
 m4_include(config/proginstall.m4)
 m4_include(config/elf.m4)
 m4_include(config/ax_cxx_compile_stdcxx.m4)
+m4_include(config/gcc-plugin.m4)
 m4_include([libtool.m4])
 m4_include([ltoptions.m4])
 m4_include([ltsugar.m4])
@@ -3493,6 +3494,20 @@ AC_SUBST(CXX)
 AC_SUBST(CFLAGS)
 AC_SUBST(CXXFLAGS)
 
+GCC_PLUGIN_OPTION(PLUGIN_OPTION)
+AR_PLUGIN_OPTION=
+RANLIB_PLUGIN_OPTION=
+if test -n "$PLUGIN_OPTION"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+fi
+AC_SUBST(AR_PLUGIN_OPTION)
+AC_SUBST(RANLIB_PLUGIN_OPTION)
+
 # Target tools.
 AC_ARG_WITH([build-time-tools], 
   [AS_HELP_STRING([--with-build-time-tools=PATH],
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 884cc6c4af2..6916b735df3 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -50,13 +50,13 @@ mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs
 # Some compilers can't handle cc -c blah.c -o foo/blah.o.
 OUTPUT_OPTION = @OUTPUT_OPTION@
 
-AR = @AR@
+AR = @AR@ @AR_PLUGIN_OPTION@
 AR_FLAGS = rc
 
 CC = @CC@
 CFLAGS = @CFLAGS@
 CPPFLAGS = @CPPFLAGS@
-RANLIB = @RANLIB@
+RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@
 MAKEINFO = @MAKEINFO@
 PERL = @PERL@
 
@@ -505,6 +505,7 @@ aclocal_deps = \
 	$(srcdir)/../config/acx.m4 \
 	$(srcdir)/../config/cet.m4 \
 	$(srcdir)/../config/enable.m4 \
+	$(srcdir)/../config/gcc-plugin.m4 \
 	$(srcdir)/../config/no-executables.m4 \
 	$(srcdir)/../config/override.m4 \
 	$(srcdir)/../config/picflag.m4 \
diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4
index 3378316dced..0757688d52a 100644
--- a/libiberty/aclocal.m4
+++ b/libiberty/aclocal.m4
@@ -15,6 +15,7 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun
 m4_include([../config/acx.m4])
 m4_include([../config/cet.m4])
 m4_include([../config/enable.m4])
+m4_include([../config/gcc-plugin.m4])
 m4_include([../config/no-executables.m4])
 m4_include([../config/picflag.m4])
 m4_include([../config/warnings.m4])
diff --git a/libiberty/configure b/libiberty/configure
index 3c7e588b16b..4d793dbebeb 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -645,6 +645,8 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
+RANLIB_PLUGIN_OPTION
+AR_PLUGIN_OPTION
 RANLIB
 AR
 host_os
@@ -2929,6 +2931,41 @@ else
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
+$as_echo_n "checking for -plugin option... " >&6; }
+
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+plugin_option=
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+if test -n "$plugin_option"; then
+  PLUGIN_OPTION="$plugin_option"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+$as_echo "$plugin_option" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+if test -n "$PLUGIN_OPTION"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR_PLUGIN_OPTION="$PLUGIN_OPTION"
+
+  fi
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
+
+  fi
+fi
+
 # Add --enable-multilib to configure.
 # Default to --enable-multilib
 # Check whether --enable-multilib was given.
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
index 4b78c1830c7..3d26857cb9f 100644
--- a/libiberty/configure.ac
+++ b/libiberty/configure.ac
@@ -108,6 +108,18 @@ dnl to call AC_CHECK_PROG.
 AC_CHECK_TOOL(AR, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 
+GCC_PLUGIN_OPTION(PLUGIN_OPTION)
+if test -n "$PLUGIN_OPTION"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR_PLUGIN_OPTION="$PLUGIN_OPTION"
+    AC_SUBST(AR_PLUGIN_OPTION)
+  fi
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
+    AC_SUBST(RANLIB_PLUGIN_OPTION)
+  fi
+fi
+
 dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB.
 # Add --enable-multilib to configure.
 # Default to --enable-multilib
diff --git a/libtool.m4 b/libtool.m4
index 17f8e5f3074..efa62bfcbf0 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -1325,8 +1325,26 @@ need_locks="$enable_libtool_lock"
 # _LT_CMD_OLD_ARCHIVE
 # -------------------
 m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
+[plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+
+AC_CHECK_TOOL(AR, ar, false)
 test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR="$AR $plugin_option"
+  fi
+fi
 test -z "$AR_FLAGS" && AR_FLAGS=cru
 _LT_DECL([], [AR], [1], [The archiver])
 _LT_DECL([], [AR_FLAGS], [1])
@@ -1337,6 +1355,11 @@ _LT_DECL([], [STRIP], [1], [A symbol stripping program])
 
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB="$RANLIB $plugin_option"
+  fi
+fi
 _LT_DECL([], [RANLIB], [1],
     [Commands used to install an old-style archive])
 
diff --git a/zlib/configure b/zlib/configure
index f489f31bc70..8ce61b11119 100755
--- a/zlib/configure
+++ b/zlib/configure
@@ -4169,7 +4169,7 @@ case "$host" in
     case "$enable_cet" in
       auto)
 	# Check if target supports multi-byte NOPs
-	# and if assembler supports CET insn.
+	# and if compiler and assembler support CET insn.
 	cet_save_CFLAGS="$CFLAGS"
 	CFLAGS="$CFLAGS -fcf-protection"
 	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5502,6 +5502,19 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
@@ -5595,6 +5608,11 @@ else
 fi
 
 test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR="$AR $plugin_option"
+  fi
+fi
 test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
@@ -5799,6 +5817,11 @@ else
 fi
 
 test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB="$RANLIB $plugin_option"
+  fi
+fi
 
 
 
@@ -10735,7 +10758,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10748 "configure"
+#line 10761 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10841,7 +10864,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10854 "configure"
+#line 10867 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
-- 
2.33.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 2/2] Sync with binutils: Support the PGO build for binutils+gdb
  2021-11-13 16:33 [PATCH 0/2] Sync with binutils for building binutils with LTO: H.J. Lu
  2021-11-13 16:33 ` [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB H.J. Lu
@ 2021-11-13 16:33 ` H.J. Lu
  2021-12-15 20:25   ` Jeff Law
  1 sibling, 1 reply; 13+ messages in thread
From: H.J. Lu @ 2021-11-13 16:33 UTC (permalink / raw)
  To: gcc-patches

Sync with binutils for building binutils with LTO:

From af019bfde9b13d628202fe58054ec7ff08d92a0f Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 9 Jan 2021 06:51:15 -0800
Subject: [PATCH] Support the PGO build for binutils+gdb

Add the --enable-pgo-build[=lto] configure option.  When binutils+gdb
is not built together with GCC, --enable-pgo-build enables the PGO build:

1. First build with -fprofile-generate.
2. Use "make maybe-check-*" to generate profiling data and pass -i to make
to ignore errors when generating profiling data.
3. Use "make clean" to remove the previous build.
4. Rebuild with -fprofile-use.

With --enable-pgo-build=lto, -flto=jobserver -ffat-lto-objects are used
together with -fprofile-generate and -fprofile-use.  Add '+' to the command
line for recursive make to support -flto=jobserver -ffat-lto-objects.

NB: --enable-pgo-build=lto enables the PGO build with LTO while
--enable-lto enables LTO support in toolchain.

	PR binutils/26766
	* Makefile.tpl (BUILD_CFLAGS): New.
	(CFLAGS): Append $(BUILD_CFLAGS).
	(CXXFLAGS): Likewise.
	(PGO_BUILD_GEN_FLAGS_TO_PASS): New.
	(PGO_BUILD_TRAINING_CFLAGS): Likewise.
	(PGO_BUILD_TRAINING_CXXFLAGS): Likewise.
	(PGO_BUILD_TRAINING_FLAGS_TO_PASS): Likewise.
	(PGO_BUILD_TRAINING_MFLAGS): Likewise.
	(PGO_BUILD_USE_FLAGS_TO_PASS): Likewise.
	(PGO-TRAINING-TARGETS): Likewise.
	(PGO_BUILD_TRAINING): Likewise.
	(all): Add '+' to the command line for recursive make.  Support
	the PGO build.
	* configure.ac: Add --enable-pgo-build[=lto].
	AC_SUBST PGO_BUILD_GEN_CFLAGS, PGO_BUILD_USE_CFLAGS and
	PGO_BUILD_LTO_CFLAGS.  Enable the PGO build in Makefile.
	* Makefile.in: Regenerated.
	* configure: Likewise.
---
 Makefile.in  |  63 ++++++++++++++++++++++++++++++--
 Makefile.tpl |  58 ++++++++++++++++++++++++++++--
 configure    | 100 +++++++++++++++++++++++++++++++++++++++++++++++++--
 configure.ac |  65 +++++++++++++++++++++++++++++++++
 4 files changed, 280 insertions(+), 6 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 13067e97327..2b77a470694 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -444,6 +444,49 @@ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
 GOCFLAGS = $(CFLAGS)
 GDCFLAGS = $(CFLAGS)
 
+# Pass additional PGO and LTO compiler options to the PGO build.
+BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
+override CFLAGS += $(BUILD_CFLAGS)
+override CXXFLAGS += $(BUILD_CFLAGS)
+
+# Additional PGO and LTO compiler options to generate profiling data
+# for the PGO build.
+PGO_BUILD_GEN_FLAGS_TO_PASS = \
+	PGO_BUILD_CFLAGS="@PGO_BUILD_GEN_CFLAGS@" \
+	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+
+# NB: Filter out any compiler options which may fail PGO training runs.
+PGO_BUILD_TRAINING_CFLAGS:= \
+	$(filter-out -Werror=%,$(CFLAGS))
+PGO_BUILD_TRAINING_CXXFLAGS:=\
+	$(filter-out -Werror=%,$(CXXFLAGS))
+PGO_BUILD_TRAINING_CFLAGS:= \
+	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CFLAGS))
+PGO_BUILD_TRAINING_CXXFLAGS:= \
+	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CXXFLAGS))
+PGO_BUILD_TRAINING_CFLAGS:= \
+	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CFLAGS))
+PGO_BUILD_TRAINING_CXXFLAGS:= \
+	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CXXFLAGS))
+PGO_BUILD_TRAINING_FLAGS_TO_PASS = \
+	PGO_BUILD_TRAINING=yes \
+	CFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CFLAGS)" \
+	CXXFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CXXFLAGS)"
+
+# Ignore "make check" errors in PGO training runs.
+PGO_BUILD_TRAINING_MFLAGS = -i
+
+# Additional PGO and LTO compiler options to use profiling data for the
+# PGO build.
+PGO_BUILD_USE_FLAGS_TO_PASS = \
+	PGO_BUILD_CFLAGS="@PGO_BUILD_USE_CFLAGS@" \
+	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+
+# PGO training targets for the PGO build.  FIXME: Add gold tests to
+# training.
+PGO-TRAINING-TARGETS = binutils gas gdb ld sim
+PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS))
+
 CREATE_GCOV = create_gcov
 
 TFLAGS =
@@ -1091,6 +1134,12 @@ configure-target:  \
 
 # The target built for a native non-bootstrap build.
 .PHONY: all
+
+# --enable-pgo-build enables the PGO build.
+# 1. First build with -fprofile-generate.
+# 2. Use "make maybe-check-*" to generate profiling data.
+# 3. Use "make clean" to remove the previous build.
+# 4. Rebuild with -fprofile-use.
 all:
 @if gcc-bootstrap
 	[ -f stage_final ] || echo stage3 > stage_final
@@ -1099,7 +1148,7 @@ all:
 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
 @endif gcc-bootstrap
 	@: $(MAKE); $(unstage)
-	@r=`${PWD_COMMAND}`; export r; \
+	+@r=`${PWD_COMMAND}`; export r; \
 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
 @if gcc-bootstrap
 	if [ -f stage_last ]; then \
@@ -1107,7 +1156,17 @@ all:
 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
 	else \
 @endif gcc-bootstrap
-	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
+	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
+		$(PGO_BUILD_GEN_FLAGS_TO_PASS) all-host all-target \
+@if pgo-build
+	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
+		$(PGO_BUILD_TRAINING_MFLAGS) \
+		$(PGO_BUILD_TRAINING_FLAGS_TO_PASS) \
+		$(PGO_BUILD_TRAINING) \
+	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) clean \
+	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
+		$(PGO_BUILD_USE_FLAGS_TO_PASS) all-host all-target \
+@endif pgo-build
 @if gcc-bootstrap
 	    ; \
 	fi \
diff --git a/Makefile.tpl b/Makefile.tpl
index f785b84ec9c..c8732178344 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -447,6 +447,45 @@ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
 GOCFLAGS = $(CFLAGS)
 GDCFLAGS = $(CFLAGS)
 
+# Pass additional PGO and LTO compiler options to the PGO build.
+BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
+override CFLAGS += $(BUILD_CFLAGS)
+override CXXFLAGS += $(BUILD_CFLAGS)
+
+# Additional PGO and LTO compiler options to generate profiling data
+# for the PGO build.
+PGO_BUILD_GEN_FLAGS_TO_PASS = \
+	PGO_BUILD_CFLAGS="@PGO_BUILD_GEN_CFLAGS@" \
+	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+
+# NB: Filter out any compiler options which may fail PGO training runs.
+PGO_BUILD_TRAINING_CFLAGS:= \
+	$(filter-out -Werror=%,$(CFLAGS))
+PGO_BUILD_TRAINING_CXXFLAGS:=\
+	$(filter-out -Werror=%,$(CXXFLAGS))
+PGO_BUILD_TRAINING_CFLAGS:= \
+	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CFLAGS))
+PGO_BUILD_TRAINING_CXXFLAGS:= \
+	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CXXFLAGS))
+PGO_BUILD_TRAINING_CFLAGS:= \
+	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CFLAGS))
+PGO_BUILD_TRAINING_CXXFLAGS:= \
+	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CXXFLAGS))
+PGO_BUILD_TRAINING_FLAGS_TO_PASS = \
+	CFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CFLAGS)" \
+	CXXFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CXXFLAGS)"
+
+# Additional PGO and LTO compiler options to use profiling data for the
+# PGO build.
+PGO_BUILD_USE_FLAGS_TO_PASS = \
+	PGO_BUILD_CFLAGS="@PGO_BUILD_USE_CFLAGS@" \
+	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+
+# PGO training targets for the PGO build.  FIXME: Add gold tests to
+# training.
+PGO-TRAINING-TARGETS = binutils gas gdb ld sim
+PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS))
+
 CREATE_GCOV = create_gcov
 
 TFLAGS =
@@ -776,6 +815,12 @@ configure-target: [+
 
 # The target built for a native non-bootstrap build.
 .PHONY: all
+
+# --enable-pgo-build enables the PGO build.
+# 1. First build with -fprofile-generate.
+# 2. Use "make maybe-check-*" to generate profiling data.
+# 3. Use "make clean" to remove the previous build.
+# 4. Rebuild with -fprofile-use.
 all:
 @if gcc-bootstrap
 	[ -f stage_final ] || echo stage3 > stage_final
@@ -784,7 +829,7 @@ all:
 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
 @endif gcc-bootstrap
 	@: $(MAKE); $(unstage)
-	@r=`${PWD_COMMAND}`; export r; \
+	+@r=`${PWD_COMMAND}`; export r; \
 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
 @if gcc-bootstrap
 	if [ -f stage_last ]; then \
@@ -792,7 +837,16 @@ all:
 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
 	else \
 @endif gcc-bootstrap
-	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
+	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
+		$(PGO_BUILD_GEN_FLAGS_TO_PASS) all-host all-target \
+@if pgo-build
+	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
+		$(PGO_BUILD_TRAINING_FLAGS_TO_PASS) \
+		$(PGO_BUILD_TRAINING) \
+	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) clean \
+	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
+		$(PGO_BUILD_USE_FLAGS_TO_PASS) all-host all-target \
+@endif pgo-build
 @if gcc-bootstrap
 	    ; \
 	fi \
diff --git a/configure b/configure
index ea3111a8020..bf0db18ec35 100755
--- a/configure
+++ b/configure
@@ -701,6 +701,9 @@ extra_mpc_gmp_configure_flags
 extra_mpfr_configure_flags
 gmpinc
 gmplibs
+PGO_BUILD_LTO_CFLAGS
+PGO_BUILD_USE_CFLAGS
+PGO_BUILD_GEN_CFLAGS
 HAVE_CXX11_FOR_BUILD
 HAVE_CXX11
 do_compare
@@ -804,6 +807,7 @@ enable_libssp
 enable_libstdcxx
 enable_liboffloadmic
 enable_bootstrap
+enable_pgo_build
 with_mpc
 with_mpc_include
 with_mpc_lib
@@ -1544,6 +1548,8 @@ Optional Features:
   --enable-liboffloadmic=ARG
                           build liboffloadmic [ARG={no,host,target}]
   --enable-bootstrap      enable bootstrapping [yes if native build]
+  --enable-pgo-build[=lto]
+                          enable the PGO build
   --disable-isl-version-check
                           disable check for isl version
   --enable-lto            enable link time optimization support
@@ -7710,6 +7716,91 @@ $as_echo "#define HAVE_CXX11_FOR_BUILD 1" >>confdefs.h
   fi
 fi
 
+# Check whether --enable-pgo-build was given.
+if test "${enable_pgo_build+set}" = set; then :
+  enableval=$enable_pgo_build; enable_pgo_build=$enableval
+else
+  enable_pgo_build=no
+fi
+
+
+# Issue errors and warnings for invalid/strange PGO build combinations.
+case "$have_compiler:$host:$target:$enable_pgo_build" in
+  *:*:*:no) ;;
+
+  # Allow the PGO build only if we aren't building a compiler and
+  # we are in a native configuration.
+  no:$build:$build:yes | no:$build:$build:lto) ;;
+
+  # Disallow the PGO bootstrap if we are building a compiler.
+  yes:*:*:yes | yes:*:*:lto)
+    as_fn_error $? "cannot perform the PGO bootstrap when building a compiler" "$LINENO" 5 ;;
+
+  *)
+    as_fn_error $? "invalid option for --enable-pgo-build" "$LINENO" 5
+    ;;
+esac
+
+if test "$enable_pgo_build" != "no"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fprofile-generate" >&5
+$as_echo_n "checking whether the compiler supports -fprofile-generate... " >&6; }
+  old_CFLAGS="$CFLAGS"
+  PGO_BUILD_GEN_CFLAGS="-fprofile-generate"
+  CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS"
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  PGO_BUILD_GEN_CFLAGS=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$old_CFLAGS"
+  if test -n "$PGO_BUILD_GEN_CFLAGS"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    PGO_BUILD_USE_CFLAGS="-fprofile-use"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    as_fn_error $? "cannot perform the PGO build without -fprofile-generate" "$LINENO" 5
+  fi
+
+  if test "$enable_pgo_build" = "lto"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -flto=jobserver -ffat-lto-objects" >&5
+$as_echo_n "checking whether the compiler supports -flto=jobserver -ffat-lto-objects... " >&6; }
+    old_CFLAGS="$CFLAGS"
+    PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects"
+    CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  PGO_BUILD_LTO_CFLAGS=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    CFLAGS="$old_CFLAGS"
+    if test -n "$PGO_BUILD_LTO_CFLAGS"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LTO is disabled for the PGO build" >&5
+$as_echo "$as_me: WARNING: LTO is disabled for the PGO build" >&2;}
+    fi
+  fi
+fi
+
+
+
+
 # Used for setting $lt_cv_objdir
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
@@ -7899,8 +7990,7 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
   # Check for the recommended and required versions of GMP.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of gmp.h" >&5
 $as_echo_n "checking for the correct version of gmp.h... " >&6; }
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include "gmp.h"
 int
@@ -9639,6 +9729,12 @@ extrasub_target="$extrasub_target
 /^@unless /d
 /^@endunless /d"
 
+if test "$enable_pgo_build" != "no"; then
+  extrasub_build="$extrasub_build
+/^@if pgo-build\$/d
+/^@endif pgo-build\$/d"
+fi
+
 # Create the serialization dependencies.  This uses a temporary file.
 
 # Check whether --enable-serial-configure was given.
diff --git a/configure.ac b/configure.ac
index 1ca83d30a55..a2815f2218b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1465,6 +1465,65 @@ elif test "$have_compiler" = yes; then
   fi
 fi
 
+AC_ARG_ENABLE([pgo-build],
+[AS_HELP_STRING([--enable-pgo-build[[=lto]]],
+		[enable the PGO build])],
+[enable_pgo_build=$enableval],
+[enable_pgo_build=no])
+
+# Issue errors and warnings for invalid/strange PGO build combinations.
+case "$have_compiler:$host:$target:$enable_pgo_build" in
+  *:*:*:no) ;;
+
+  # Allow the PGO build only if we aren't building a compiler and
+  # we are in a native configuration.
+  no:$build:$build:yes | no:$build:$build:lto) ;;
+
+  # Disallow the PGO bootstrap if we are building a compiler.
+  yes:*:*:yes | yes:*:*:lto)
+    AC_MSG_ERROR([cannot perform the PGO bootstrap when building a compiler]) ;;
+
+  *)
+    AC_MSG_ERROR([invalid option for --enable-pgo-build])
+    ;;
+esac
+
+if test "$enable_pgo_build" != "no"; then
+  AC_MSG_CHECKING([whether the compiler supports -fprofile-generate])
+  old_CFLAGS="$CFLAGS"
+  PGO_BUILD_GEN_CFLAGS="-fprofile-generate"
+  CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS"
+  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],,
+		    [PGO_BUILD_GEN_CFLAGS=])
+  CFLAGS="$old_CFLAGS"
+  if test -n "$PGO_BUILD_GEN_CFLAGS"; then
+    AC_MSG_RESULT([yes])
+    PGO_BUILD_USE_CFLAGS="-fprofile-use"
+  else
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([cannot perform the PGO build without -fprofile-generate])
+  fi
+
+  if test "$enable_pgo_build" = "lto"; then
+    AC_MSG_CHECKING([whether the compiler supports -flto=jobserver -ffat-lto-objects])
+    old_CFLAGS="$CFLAGS"
+    PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects"
+    CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS"
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],,
+		      [PGO_BUILD_LTO_CFLAGS=])
+    CFLAGS="$old_CFLAGS"
+    if test -n "$PGO_BUILD_LTO_CFLAGS"; then
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+      AC_MSG_WARN([LTO is disabled for the PGO build])
+    fi
+  fi
+fi
+AC_SUBST(PGO_BUILD_GEN_CFLAGS)
+AC_SUBST(PGO_BUILD_USE_CFLAGS)
+AC_SUBST(PGO_BUILD_LTO_CFLAGS)
+
 # Used for setting $lt_cv_objdir
 _LT_CHECK_OBJDIR
 
@@ -2957,6 +3016,12 @@ extrasub_target="$extrasub_target
 /^@unless /d
 /^@endunless /d"
 
+if test "$enable_pgo_build" != "no"; then
+  extrasub_build="$extrasub_build
+/^@if pgo-build\$/d
+/^@endif pgo-build\$/d"
+fi
+
 # Create the serialization dependencies.  This uses a temporary file.
 
 AC_ARG_ENABLE([serial-configure],
-- 
2.33.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-11-13 16:33 ` [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB H.J. Lu
@ 2021-11-23  0:29   ` Jeff Law
  2021-11-23  2:29     ` H.J. Lu
  2021-12-15 17:33   ` Jeff Law
  2021-12-16  3:37   ` Sandra Loosemore
  2 siblings, 1 reply; 13+ messages in thread
From: Jeff Law @ 2021-11-23  0:29 UTC (permalink / raw)
  To: H.J. Lu, gcc-patches



On 11/13/2021 9:33 AM, H.J. Lu via Gcc-patches wrote:
> Sync with binutils for building binutils with LTO:
>
>  From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> From: "H.J. Lu" <hjl.tools@gmail.com>
> Date: Sat, 9 Jan 2021 06:43:11 -0800
> Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
>
> Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> build.
>
> 	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> 	* configure.ac: Include config/gcc-plugin.m4.
> 	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> 	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> 	RANLIB if possible.
> 	* Makefile.in: Regenerated.
> 	* configure: Likewise.
>
> config/
>
> 	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
>
> libiberty/
>
> 	* Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> 	(configure_deps): Depend on ../config/gcc-plugin.m4.
> 	* configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> 	RANLIB_PLUGIN_OPTION.
> 	* aclocal.m4: Regenerated.
> 	* configure: Likewise.
>
> zlib/
>
> 	* configure: Regenerated.
I thought the plugins were automatically loaded if they're in the right 
place in the filesystem.  Wouldn't that make this patch unnecessary?  Am 
I missing something?

jeff


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-11-23  0:29   ` Jeff Law
@ 2021-11-23  2:29     ` H.J. Lu
  2021-12-14 23:30       ` Jeff Law
  0 siblings, 1 reply; 13+ messages in thread
From: H.J. Lu @ 2021-11-23  2:29 UTC (permalink / raw)
  To: Jeff Law; +Cc: GCC Patches

On Mon, Nov 22, 2021 at 4:29 PM Jeff Law <jeffreyalaw@gmail.com> wrote:
>
>
>
> On 11/13/2021 9:33 AM, H.J. Lu via Gcc-patches wrote:
> > Sync with binutils for building binutils with LTO:
> >
> >  From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> > From: "H.J. Lu" <hjl.tools@gmail.com>
> > Date: Sat, 9 Jan 2021 06:43:11 -0800
> > Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
> >
> > Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> > build.
> >
> >       * Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> >       (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> >       * configure.ac: Include config/gcc-plugin.m4.
> >       AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> >       * libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> >       RANLIB if possible.
> >       * Makefile.in: Regenerated.
> >       * configure: Likewise.
> >
> > config/
> >
> >       * gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
> >
> > libiberty/
> >
> >       * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> >       (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> >       (configure_deps): Depend on ../config/gcc-plugin.m4.
> >       * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> >       RANLIB_PLUGIN_OPTION.
> >       * aclocal.m4: Regenerated.
> >       * configure: Likewise.
> >
> > zlib/
> >
> >       * configure: Regenerated.
> I thought the plugins were automatically loaded if they're in the right
> place in the filesystem.  Wouldn't that make this patch unnecessary?  Am
> I missing something?
>

It only works for system GCC and binutils.  It doesn't work for non-system
GCC nor binutils since either GCC plugin isn't installed in the binutils plugin
search patch.

-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-11-23  2:29     ` H.J. Lu
@ 2021-12-14 23:30       ` Jeff Law
  2021-12-15  0:29         ` H.J. Lu
  0 siblings, 1 reply; 13+ messages in thread
From: Jeff Law @ 2021-12-14 23:30 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GCC Patches



On 11/22/2021 7:29 PM, H.J. Lu wrote:
> On Mon, Nov 22, 2021 at 4:29 PM Jeff Law <jeffreyalaw@gmail.com> wrote:
>>
>>
>> On 11/13/2021 9:33 AM, H.J. Lu via Gcc-patches wrote:
>>> Sync with binutils for building binutils with LTO:
>>>
>>>   From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
>>> From: "H.J. Lu" <hjl.tools@gmail.com>
>>> Date: Sat, 9 Jan 2021 06:43:11 -0800
>>> Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
>>>
>>> Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
>>> build.
>>>
>>>        * Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
>>>        (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
>>>        * configure.ac: Include config/gcc-plugin.m4.
>>>        AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
>>>        * libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
>>>        RANLIB if possible.
>>>        * Makefile.in: Regenerated.
>>>        * configure: Likewise.
>>>
>>> config/
>>>
>>>        * gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
>>>
>>> libiberty/
>>>
>>>        * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
>>>        (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
>>>        (configure_deps): Depend on ../config/gcc-plugin.m4.
>>>        * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
>>>        RANLIB_PLUGIN_OPTION.
>>>        * aclocal.m4: Regenerated.
>>>        * configure: Likewise.
>>>
>>> zlib/
>>>
>>>        * configure: Regenerated.
>> I thought the plugins were automatically loaded if they're in the right
>> place in the filesystem.  Wouldn't that make this patch unnecessary?  Am
>> I missing something?
>>
> It only works for system GCC and binutils.  It doesn't work for non-system
> GCC nor binutils since either GCC plugin isn't installed in the binutils plugin
> search patch.
Ah.  So this is primarily useful if GCC was installed into a path 
different than the system binutils expects to find the plugin? Does it 
work properly in cross environments or at least do no harm in those 
kinds of builds?

Jeff

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-12-14 23:30       ` Jeff Law
@ 2021-12-15  0:29         ` H.J. Lu
  0 siblings, 0 replies; 13+ messages in thread
From: H.J. Lu @ 2021-12-15  0:29 UTC (permalink / raw)
  To: Jeff Law; +Cc: GCC Patches

On Tue, Dec 14, 2021 at 3:30 PM Jeff Law <jeffreyalaw@gmail.com> wrote:
>
>
>
> On 11/22/2021 7:29 PM, H.J. Lu wrote:
> > On Mon, Nov 22, 2021 at 4:29 PM Jeff Law <jeffreyalaw@gmail.com> wrote:
> >>
> >>
> >> On 11/13/2021 9:33 AM, H.J. Lu via Gcc-patches wrote:
> >>> Sync with binutils for building binutils with LTO:
> >>>
> >>>   From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> >>> From: "H.J. Lu" <hjl.tools@gmail.com>
> >>> Date: Sat, 9 Jan 2021 06:43:11 -0800
> >>> Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
> >>>
> >>> Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> >>> build.
> >>>
> >>>        * Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> >>>        (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> >>>        * configure.ac: Include config/gcc-plugin.m4.
> >>>        AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> >>>        * libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> >>>        RANLIB if possible.
> >>>        * Makefile.in: Regenerated.
> >>>        * configure: Likewise.
> >>>
> >>> config/
> >>>
> >>>        * gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
> >>>
> >>> libiberty/
> >>>
> >>>        * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> >>>        (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> >>>        (configure_deps): Depend on ../config/gcc-plugin.m4.
> >>>        * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> >>>        RANLIB_PLUGIN_OPTION.
> >>>        * aclocal.m4: Regenerated.
> >>>        * configure: Likewise.
> >>>
> >>> zlib/
> >>>
> >>>        * configure: Regenerated.
> >> I thought the plugins were automatically loaded if they're in the right
> >> place in the filesystem.  Wouldn't that make this patch unnecessary?  Am
> >> I missing something?
> >>
> > It only works for system GCC and binutils.  It doesn't work for non-system
> > GCC nor binutils since either GCC plugin isn't installed in the binutils plugin
> > search patch.
> Ah.  So this is primarily useful if GCC was installed into a path
> different than the system binutils expects to find the plugin? Does it

Yes.

> work properly in cross environments or at least do no harm in those
> kinds of builds?
>

I believe so.

-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-11-13 16:33 ` [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB H.J. Lu
  2021-11-23  0:29   ` Jeff Law
@ 2021-12-15 17:33   ` Jeff Law
  2021-12-16  3:37   ` Sandra Loosemore
  2 siblings, 0 replies; 13+ messages in thread
From: Jeff Law @ 2021-12-15 17:33 UTC (permalink / raw)
  To: H.J. Lu, gcc-patches



On 11/13/2021 9:33 AM, H.J. Lu via Gcc-patches wrote:
> Sync with binutils for building binutils with LTO:
>
>  From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> From: "H.J. Lu" <hjl.tools@gmail.com>
> Date: Sat, 9 Jan 2021 06:43:11 -0800
> Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
>
> Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> build.
>
> 	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> 	* configure.ac: Include config/gcc-plugin.m4.
> 	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> 	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> 	RANLIB if possible.
> 	* Makefile.in: Regenerated.
> 	* configure: Likewise.
>
> config/
>
> 	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
>
> libiberty/
>
> 	* Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> 	(configure_deps): Depend on ../config/gcc-plugin.m4.
> 	* configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> 	RANLIB_PLUGIN_OPTION.
> 	* aclocal.m4: Regenerated.
> 	* configure: Likewise.
>
> zlib/
>
> 	* configure: Regenerated.
OK.  Thanks for your patience.

Jeff


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2] Sync with binutils: Support the PGO build for binutils+gdb
  2021-11-13 16:33 ` [PATCH 2/2] Sync with binutils: Support the PGO build for binutils+gdb H.J. Lu
@ 2021-12-15 20:25   ` Jeff Law
  0 siblings, 0 replies; 13+ messages in thread
From: Jeff Law @ 2021-12-15 20:25 UTC (permalink / raw)
  To: H.J. Lu, gcc-patches



On 11/13/2021 9:33 AM, H.J. Lu via Gcc-patches wrote:
> Sync with binutils for building binutils with LTO:
>
>  From af019bfde9b13d628202fe58054ec7ff08d92a0f Mon Sep 17 00:00:00 2001
> From: "H.J. Lu" <hjl.tools@gmail.com>
> Date: Sat, 9 Jan 2021 06:51:15 -0800
> Subject: [PATCH] Support the PGO build for binutils+gdb
>
> Add the --enable-pgo-build[=lto] configure option.  When binutils+gdb
> is not built together with GCC, --enable-pgo-build enables the PGO build:
>
> 1. First build with -fprofile-generate.
> 2. Use "make maybe-check-*" to generate profiling data and pass -i to make
> to ignore errors when generating profiling data.
> 3. Use "make clean" to remove the previous build.
> 4. Rebuild with -fprofile-use.
>
> With --enable-pgo-build=lto, -flto=jobserver -ffat-lto-objects are used
> together with -fprofile-generate and -fprofile-use.  Add '+' to the command
> line for recursive make to support -flto=jobserver -ffat-lto-objects.
>
> NB: --enable-pgo-build=lto enables the PGO build with LTO while
> --enable-lto enables LTO support in toolchain.
>
> 	PR binutils/26766
> 	* Makefile.tpl (BUILD_CFLAGS): New.
> 	(CFLAGS): Append $(BUILD_CFLAGS).
> 	(CXXFLAGS): Likewise.
> 	(PGO_BUILD_GEN_FLAGS_TO_PASS): New.
> 	(PGO_BUILD_TRAINING_CFLAGS): Likewise.
> 	(PGO_BUILD_TRAINING_CXXFLAGS): Likewise.
> 	(PGO_BUILD_TRAINING_FLAGS_TO_PASS): Likewise.
> 	(PGO_BUILD_TRAINING_MFLAGS): Likewise.
> 	(PGO_BUILD_USE_FLAGS_TO_PASS): Likewise.
> 	(PGO-TRAINING-TARGETS): Likewise.
> 	(PGO_BUILD_TRAINING): Likewise.
> 	(all): Add '+' to the command line for recursive make.  Support
> 	the PGO build.
> 	* configure.ac: Add --enable-pgo-build[=lto].
> 	AC_SUBST PGO_BUILD_GEN_CFLAGS, PGO_BUILD_USE_CFLAGS and
> 	PGO_BUILD_LTO_CFLAGS.  Enable the PGO build in Makefile.
> 	* Makefile.in: Regenerated.
> 	* configure: Likewise.
My understanding is this is just syncing us with binutils.  So OK.

jeff


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-11-13 16:33 ` [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB H.J. Lu
  2021-11-23  0:29   ` Jeff Law
  2021-12-15 17:33   ` Jeff Law
@ 2021-12-16  3:37   ` Sandra Loosemore
  2021-12-16  4:28     ` H.J. Lu
  2 siblings, 1 reply; 13+ messages in thread
From: Sandra Loosemore @ 2021-12-16  3:37 UTC (permalink / raw)
  To: H.J. Lu, gcc-patches

On 11/13/21 9:33 AM, H.J. Lu via Gcc-patches wrote:
> Sync with binutils for building binutils with LTO:
> 
>  From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> From: "H.J. Lu" <hjl.tools@gmail.com>
> Date: Sat, 9 Jan 2021 06:43:11 -0800
> Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
> 
> Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> build.
> 
> 	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> 	* configure.ac: Include config/gcc-plugin.m4.
> 	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> 	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> 	RANLIB if possible.
> 	* Makefile.in: Regenerated.
> 	* configure: Likewise.
> 
> config/
> 
> 	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
> 
> libiberty/
> 
> 	* Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> 	(configure_deps): Depend on ../config/gcc-plugin.m4.
> 	* configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> 	RANLIB_PLUGIN_OPTION.
> 	* aclocal.m4: Regenerated.
> 	* configure: Likewise.
> 
> zlib/
> 
> 	* configure: Regenerated.

This patch appears to have broken my nios2-linux-gnu target, 
x86_64-linux-gnu host cross build:

x86_64-linux-gnu-ar  --plugin 
/usr/local/tools/gcc-2021/bin/../libexec/gcc/x86_64-linux-gnu/9.3.1/liblto_plugin.so 
--plugin 
/usr/local/tools/gcc-2021/bin/../libexec/gcc/x86_64-linux-gnu/9.3.1/liblto_plugin.so 
rc ./libiberty.a \
   ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o ./alloca.o 
./argv.o ./bsearch_r.o ./choose-temp.o ./concat.o ./cp-demint.o 
./crc32.o ./d-demangle.o ./dwarfnames.o ./dyn-string.o ./fdmatch.o 
./fibheap.o ./filedescriptor.o ./filename_cmp.o ./floatformat.o 
./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o 
./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o 
./make-relative-prefix.o ./make-temp-file.o ./objalloc.o ./obstack.o 
./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o 
./pex-unix.o ./vprintf-support.o ./rust-demangle.o ./safe-ctype.o 
./simple-object.o ./simple-object-coff.o ./simple-object-elf.o 
./simple-object-mach-o.o ./simple-object-xcoff.o ./sort.o ./spaces.o 
./splay-tree.o ./stack-limit.o ./strerror.o ./strsignal.o 
./timeval-utils.o ./unlink-if-ordinary.o ./xasprintf.o ./xatexit.o 
./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o 
./xvasprintf.o  ./setproctitle.o
x86_64-linux-gnu-ar: no operation specified

This is ar version 2.32.51.  I also tried with an older set of host 
tools using ar 2.25.51 and saw the same failure.

-Sandra

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-12-16  3:37   ` Sandra Loosemore
@ 2021-12-16  4:28     ` H.J. Lu
  2021-12-16  4:38       ` H.J. Lu
  2021-12-16  5:34       ` Sandra Loosemore
  0 siblings, 2 replies; 13+ messages in thread
From: H.J. Lu @ 2021-12-16  4:28 UTC (permalink / raw)
  To: Sandra Loosemore; +Cc: GCC Patches

On Wed, Dec 15, 2021 at 7:38 PM Sandra Loosemore
<sandra@codesourcery.com> wrote:
>
> On 11/13/21 9:33 AM, H.J. Lu via Gcc-patches wrote:
> > Sync with binutils for building binutils with LTO:
> >
> >  From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> > From: "H.J. Lu" <hjl.tools@gmail.com>
> > Date: Sat, 9 Jan 2021 06:43:11 -0800
> > Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
> >
> > Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> > build.
> >
> >       * Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> >       (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> >       * configure.ac: Include config/gcc-plugin.m4.
> >       AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> >       * libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> >       RANLIB if possible.
> >       * Makefile.in: Regenerated.
> >       * configure: Likewise.
> >
> > config/
> >
> >       * gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
> >
> > libiberty/
> >
> >       * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> >       (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> >       (configure_deps): Depend on ../config/gcc-plugin.m4.
> >       * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> >       RANLIB_PLUGIN_OPTION.
> >       * aclocal.m4: Regenerated.
> >       * configure: Likewise.
> >
> > zlib/
> >
> >       * configure: Regenerated.
>
> This patch appears to have broken my nios2-linux-gnu target,
> x86_64-linux-gnu host cross build:
>
> x86_64-linux-gnu-ar  --plugin
> /usr/local/tools/gcc-2021/bin/../libexec/gcc/x86_64-linux-gnu/9.3.1/liblto_plugin.so
> --plugin
> /usr/local/tools/gcc-2021/bin/../libexec/gcc/x86_64-linux-gnu/9.3.1/liblto_plugin.so
> rc ./libiberty.a \
>    ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o ./alloca.o
> ./argv.o ./bsearch_r.o ./choose-temp.o ./concat.o ./cp-demint.o
> ./crc32.o ./d-demangle.o ./dwarfnames.o ./dyn-string.o ./fdmatch.o
> ./fibheap.o ./filedescriptor.o ./filename_cmp.o ./floatformat.o
> ./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o
> ./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o
> ./make-relative-prefix.o ./make-temp-file.o ./objalloc.o ./obstack.o
> ./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o
> ./pex-unix.o ./vprintf-support.o ./rust-demangle.o ./safe-ctype.o
> ./simple-object.o ./simple-object-coff.o ./simple-object-elf.o
> ./simple-object-mach-o.o ./simple-object-xcoff.o ./sort.o ./spaces.o
> ./splay-tree.o ./stack-limit.o ./strerror.o ./strsignal.o
> ./timeval-utils.o ./unlink-if-ordinary.o ./xasprintf.o ./xatexit.o
> ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o
> ./xvasprintf.o  ./setproctitle.o
> x86_64-linux-gnu-ar: no operation specified
>
> This is ar version 2.32.51.  I also tried with an older set of host
> tools using ar 2.25.51 and saw the same failure.
>
> -Sandra

I built nios2-linux-gnu cross compiler using glibc build-many-glibcs.py
script:

/usr/bin/time /export/project/tools-build/glibc-many/src/glibc/scripts/build-man
y-glibcs.py  -j 96 /export/project/tools-build/glibc-many \
  compilers nios2-linux-gnu
make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu check-host-libraries
PASS: compilers-nios2-linux-gnu binutils rm
PASS: compilers-nios2-linux-gnu binutils mkdir
PASS: compilers-nios2-linux-gnu binutils configure
make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu binutils build
PASS: compilers-nios2-linux-gnu binutils install
make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu binutils cleanup
PASS: compilers-nios2-linux-gnu linux rm
PASS: compilers-nios2-linux-gnu linux mkdir
make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu linux install-headers
make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu linux cleanup
PASS: compilers-nios2-linux-gnu gcc-first rm
PASS: compilers-nios2-linux-gnu gcc-first mkdir
PASS: compilers-nios2-linux-gnu gcc-first configure
make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu gcc-first build
PASS: compilers-nios2-linux-gnu gcc-first install
make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu gcc-first cleanup
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu rm
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu mkdir
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu configure
make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu build
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu install
make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu mkdir-lib
PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu cleanup
PASS: compilers-nios2-linux-gnu gcc rm
PASS: compilers-nios2-linux-gnu gcc mkdir
PASS: compilers-nios2-linux-gnu gcc configure
make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu gcc build
PASS: compilers-nios2-linux-gnu gcc install
make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
PASS: compilers-nios2-linux-gnu gcc cleanup
PASS: compilers-nios2-linux-gnu done
make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'

using glibc master, binutils master and gcc master.   Is there a way
to reproduce it with build-many-glibcs.py?

-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-12-16  4:28     ` H.J. Lu
@ 2021-12-16  4:38       ` H.J. Lu
  2021-12-16  5:34       ` Sandra Loosemore
  1 sibling, 0 replies; 13+ messages in thread
From: H.J. Lu @ 2021-12-16  4:38 UTC (permalink / raw)
  To: Sandra Loosemore; +Cc: GCC Patches

On Wed, Dec 15, 2021 at 8:28 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Wed, Dec 15, 2021 at 7:38 PM Sandra Loosemore
> <sandra@codesourcery.com> wrote:
> >
> > On 11/13/21 9:33 AM, H.J. Lu via Gcc-patches wrote:
> > > Sync with binutils for building binutils with LTO:
> > >
> > >  From 50ad1254d5030d0804cbf89c758359ae202e8d55 Mon Sep 17 00:00:00 2001
> > > From: "H.J. Lu" <hjl.tools@gmail.com>
> > > Date: Sat, 9 Jan 2021 06:43:11 -0800
> > > Subject: [PATCH] GCC: Pass --plugin to AR and RANLIB
> > >
> > > Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
> > > build.
> > >
> > >       * Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
> > >       (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> > >       * configure.ac: Include config/gcc-plugin.m4.
> > >       AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
> > >       * libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
> > >       RANLIB if possible.
> > >       * Makefile.in: Regenerated.
> > >       * configure: Likewise.
> > >
> > > config/
> > >
> > >       * gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
> > >
> > > libiberty/
> > >
> > >       * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
> > >       (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
> > >       (configure_deps): Depend on ../config/gcc-plugin.m4.
> > >       * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
> > >       RANLIB_PLUGIN_OPTION.
> > >       * aclocal.m4: Regenerated.
> > >       * configure: Likewise.
> > >
> > > zlib/
> > >
> > >       * configure: Regenerated.
> >
> > This patch appears to have broken my nios2-linux-gnu target,
> > x86_64-linux-gnu host cross build:
> >
> > x86_64-linux-gnu-ar  --plugin
> > /usr/local/tools/gcc-2021/bin/../libexec/gcc/x86_64-linux-gnu/9.3.1/liblto_plugin.so
> > --plugin
> > /usr/local/tools/gcc-2021/bin/../libexec/gcc/x86_64-linux-gnu/9.3.1/liblto_plugin.so

Let me revert this patch for now since this doesn't work with GCC bootstrap
which needs to pass the newly built plugin to AR and RANLIB.

> > rc ./libiberty.a \
> >    ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o ./alloca.o
> > ./argv.o ./bsearch_r.o ./choose-temp.o ./concat.o ./cp-demint.o
> > ./crc32.o ./d-demangle.o ./dwarfnames.o ./dyn-string.o ./fdmatch.o
> > ./fibheap.o ./filedescriptor.o ./filename_cmp.o ./floatformat.o
> > ./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o
> > ./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o
> > ./make-relative-prefix.o ./make-temp-file.o ./objalloc.o ./obstack.o
> > ./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o
> > ./pex-unix.o ./vprintf-support.o ./rust-demangle.o ./safe-ctype.o
> > ./simple-object.o ./simple-object-coff.o ./simple-object-elf.o
> > ./simple-object-mach-o.o ./simple-object-xcoff.o ./sort.o ./spaces.o
> > ./splay-tree.o ./stack-limit.o ./strerror.o ./strsignal.o
> > ./timeval-utils.o ./unlink-if-ordinary.o ./xasprintf.o ./xatexit.o
> > ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o
> > ./xvasprintf.o  ./setproctitle.o
> > x86_64-linux-gnu-ar: no operation specified
> >
> > This is ar version 2.32.51.  I also tried with an older set of host
> > tools using ar 2.25.51 and saw the same failure.
> >
> > -Sandra
>
> I built nios2-linux-gnu cross compiler using glibc build-many-glibcs.py
> script:
>
> /usr/bin/time /export/project/tools-build/glibc-many/src/glibc/scripts/build-man
> y-glibcs.py  -j 96 /export/project/tools-build/glibc-many \
>   compilers nios2-linux-gnu
> make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu check-host-libraries
> PASS: compilers-nios2-linux-gnu binutils rm
> PASS: compilers-nios2-linux-gnu binutils mkdir
> PASS: compilers-nios2-linux-gnu binutils configure
> make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu binutils build
> PASS: compilers-nios2-linux-gnu binutils install
> make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu binutils cleanup
> PASS: compilers-nios2-linux-gnu linux rm
> PASS: compilers-nios2-linux-gnu linux mkdir
> make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu linux install-headers
> make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu linux cleanup
> PASS: compilers-nios2-linux-gnu gcc-first rm
> PASS: compilers-nios2-linux-gnu gcc-first mkdir
> PASS: compilers-nios2-linux-gnu gcc-first configure
> make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu gcc-first build
> PASS: compilers-nios2-linux-gnu gcc-first install
> make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu gcc-first cleanup
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu rm
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu mkdir
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu configure
> make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu build
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu install
> make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu mkdir-lib
> PASS: compilers-nios2-linux-gnu glibc nios2-linux-gnu cleanup
> PASS: compilers-nios2-linux-gnu gcc rm
> PASS: compilers-nios2-linux-gnu gcc mkdir
> PASS: compilers-nios2-linux-gnu gcc configure
> make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu gcc build
> PASS: compilers-nios2-linux-gnu gcc install
> make[1]: Entering directory '/export/project/tools-build/glibc-many/build'
> PASS: compilers-nios2-linux-gnu gcc cleanup
> PASS: compilers-nios2-linux-gnu done
> make[1]: Leaving directory '/export/project/tools-build/glibc-many/build'
>
> using glibc master, binutils master and gcc master.   Is there a way
> to reproduce it with build-many-glibcs.py?
>
> --
> H.J.



-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB
  2021-12-16  4:28     ` H.J. Lu
  2021-12-16  4:38       ` H.J. Lu
@ 2021-12-16  5:34       ` Sandra Loosemore
  1 sibling, 0 replies; 13+ messages in thread
From: Sandra Loosemore @ 2021-12-16  5:34 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GCC Patches

On 12/15/21 9:28 PM, H.J. Lu wrote:

> I built nios2-linux-gnu cross compiler using glibc build-many-glibcs.py
> script:
> 
> [snip]
> 
> using glibc master, binutils master and gcc master.   Is there a way
> to reproduce it with build-many-glibcs.py?

If it requires host tools built from binutils master, that is no good. 
We build our cross-tools using a host toolchain built from an older, 
stable branch.  Some other developers build GCC cross-compilers using 
whatever version of the host tools are provided by their OS distro.

FWIW, the --help output for both ar 2.32.51 and 2.25.51 indicates that 
--plugin is supposed to come *after* the command options, not before, 
which is where your Makefile changes are putting it.  E.g.

$ x86_64-linux-gnu-ar --help
Usage: x86_64-linux-gnu-ar [emulation options] 
[-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] 
[count] archive-file file...
        x86_64-linux-gnu-ar -M [<mri-script]

-Sandra


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-12-16  5:34 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-13 16:33 [PATCH 0/2] Sync with binutils for building binutils with LTO: H.J. Lu
2021-11-13 16:33 ` [PATCH 1/2] Sync with binutils: GCC: Pass --plugin to AR and RANLIB H.J. Lu
2021-11-23  0:29   ` Jeff Law
2021-11-23  2:29     ` H.J. Lu
2021-12-14 23:30       ` Jeff Law
2021-12-15  0:29         ` H.J. Lu
2021-12-15 17:33   ` Jeff Law
2021-12-16  3:37   ` Sandra Loosemore
2021-12-16  4:28     ` H.J. Lu
2021-12-16  4:38       ` H.J. Lu
2021-12-16  5:34       ` Sandra Loosemore
2021-11-13 16:33 ` [PATCH 2/2] Sync with binutils: Support the PGO build for binutils+gdb H.J. Lu
2021-12-15 20:25   ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).