Hi! Ping.
On Fri, 10 Jan 2014 12:59:50 +0100, I wrote: > Ping, after another month. I've only received a private note from one > build machinery manintainer who found this beyond his level of expertise, > and wished me luck to find someone else to review. Any takers in the new > year? > > On Sat, 14 Dec 2013 13:12:28 +0100, I wrote: > > Ping, after another month. Reposting the patches below; freshly > > re-tested, both to cause no change if the new configure options are not > > used, and to do the right thing if they are. > > > > On Tue, 12 Nov 2013 14:52:37 +0100, I wrote: > > > Could a global maintainer or build machinery maintainer please review the > > > two unreviewed patches posted in this series? > > > > > > On Mon, 4 Nov 2013 10:13:39 -0800, Cary Coutant <ccout...@google.com> > > > wrote: > > > > >> Ping. To sum it up, with these patches applied, there are no > > > > >> changes for > > > > >> a "regular" build (not using the new configure options). On the > > > > >> other > > > > >> hand, configuring GCC as described, it is possible use the 32-bit x86 > > > > >> linker for/with a x86_64 build, and get the very same GCC test > > > > >> results as > > > > >> when using a x86_64 linker. > > > > > > > > Sorry, I've been hoping someone with more global approval authority > > > > would respond. > > > > > > > > > Allow overriding the libiberty used for building the LTO plugin. > > > > > > > > > > lto-plugin/ > > > > > * configure.ac (--with-libiberty): New configure option. > > > > > * configure: Regenerate. > > > > > * Makefile.am (libiberty, libiberty_pic): New variables. > > > > > (liblto_plugin_la_LIBADD, liblto_plugin_la_LDFLAGS) > > > > > (liblto_plugin_la_DEPENDENCIES): Use them. > > > > > * Makefile.in: Regenerate. > > > > > > > > These look OK to me. > > > > > > > > > Allow for overriding a module's srcdir. > > > > > > > > > > * Makefile.tpl (configure-[+prefix+][+module+]) > > > > > (configure-stage[+id+]-[+prefix+][+module+]): Allow for > > > > > overriding a module's srcdir. > > > > > * Makefile.in: Regenerate. > > > > > > > > These look OK, but I think a global maintainer or build machinery > > > > maintainer should give approval. > > > > > > > > > Non-host system configuration for linker plugins. > > > > > > > > > > * configure.ac (--enable-linker-plugin-flags) > > > > > (--enable-linker-plugin-configure-flags): New flags. > > > > > (configdirs): Conditionally add libiberty-linker-plugin. > > > > > * configure: Regenerate. > > > > > * Makefile.def (host_modules): Add libiberty-linker-plugin. > > > > > (host_modules) <lto-plugin>: Pay attention to > > > > > @extra_linker_plugin_flags@ and > > > > > @extra_linker_plugin_configure_flags@. > > > > > (all-lto-plugin): Also depend on all-libiberty-linker-plugin. > > > > > * Makefile.in: Regenerate. > > > > > gcc/ > > > > > * doc/install.texi (--enable-linker-plugin-flags) > > > > > (--enable-linker-plugin-configure-flags): Document new flags. > > > > > > > > Same here. > > > > commit d09a4afcf55cde981ec9dad86950be5ade51f9eb > > Author: Thomas Schwinge <tho...@codesourcery.com> > > Date: Sun Oct 13 16:15:56 2013 +0200 > > > > Allow overriding the libiberty used for building the LTO plugin. > > > > lto-plugin/ > > * configure.ac (--with-libiberty): New configure option. > > * configure: Regenerate. > > * Makefile.am (libiberty, libiberty_pic): New variables. > > (liblto_plugin_la_LIBADD, liblto_plugin_la_LDFLAGS) > > (liblto_plugin_la_DEPENDENCIES): Use them. > > * Makefile.in: Regenerate. > > > > diff --git lto-plugin/Makefile.am lto-plugin/Makefile.am > > index b24015e..8b7bb54 100644 > > --- lto-plugin/Makefile.am > > +++ lto-plugin/Makefile.am > > @@ -15,17 +15,19 @@ libexecsub_LTLIBRARIES = liblto_plugin.la > > gcc_build_dir = ../$(host_subdir)/gcc > > in_gcc_libs = $(foreach lib, $(libexecsub_LTLIBRARIES), > > $(gcc_build_dir)/$(lib)) > > > > -# Can be removed when libiberty becomes a normal convenience library > > -Wc=-Wc, > > - > > liblto_plugin_la_SOURCES = lto-plugin.c > > +# Note that we intentionally override the bindir supplied by > > ACX_LT_HOST_FLAGS. > > +liblto_plugin_la_LDFLAGS = $(lt_host_flags) -module -bindir > > $(libexecsubdir) > > +# Can be simplified when libiberty becomes a normal convenience library. > > +libiberty=$(with_libiberty)/libiberty.a > > +libiberty_pic=$(with_libiberty)/pic/libiberty.a > > +Wc=-Wc, > > liblto_plugin_la_LIBADD = \ > > - $(if $(wildcard > > ../libiberty/pic/libiberty.a),$(Wc)../libiberty/pic/libiberty.a,) > > -# Note that we intentionally override the bindir supplied by > > ACX_LT_HOST_FLAGS > > -liblto_plugin_la_LDFLAGS = $(lt_host_flags) -module -bindir > > $(libexecsubdir) \ > > - $(if $(wildcard > > ../libiberty/pic/libiberty.a),,-Wc,../libiberty/libiberty.a) > > -liblto_plugin_la_DEPENDENCIES = $(if $(wildcard \ > > - ../libiberty/pic/libiberty.a),../libiberty/pic/libiberty.a,) > > + $(if $(wildcard $(libiberty_pic)),$(Wc)$(libiberty_pic),) > > +liblto_plugin_la_LDFLAGS += \ > > + $(if $(wildcard $(libiberty_pic)),,-Wc,$(libiberty)) > > +liblto_plugin_la_DEPENDENCIES = \ > > + $(if $(wildcard $(libiberty_pic)),$(libiberty_pic),) > > > > all-local: $(in_gcc_libs) > > > > diff --git lto-plugin/Makefile.in lto-plugin/Makefile.in > > [...] > > diff --git lto-plugin/configure lto-plugin/configure > > [...] > > diff --git lto-plugin/configure.ac lto-plugin/configure.ac > > index 9a418d2..b73fabb 100644 > > --- lto-plugin/configure.ac > > +++ lto-plugin/configure.ac > > @@ -4,6 +4,11 @@ AC_CANONICAL_SYSTEM > > GCC_TOPLEV_SUBDIRS > > AM_INIT_AUTOMAKE([foreign no-dist]) > > AM_MAINTAINER_MODE > > +AC_ARG_WITH(libiberty, > > + [AS_HELP_STRING([--with-libiberty=PATH], > > + [specify the directory where to find libiberty [../libiberty]])], > > + [], with_libiberty=../libiberty) > > +AC_SUBST(with_libiberty) > > AC_PROG_CC > > AC_SYS_LARGEFILE > > ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_lto_plugin_warn_cflags]) > > > > commit c02c5075066e1e4e461efa0752d56eab3ac301de > > Author: Thomas Schwinge <tho...@codesourcery.com> > > Date: Sun Oct 13 14:36:07 2013 +0200 > > > > Allow for overriding a module's srcdir. > > > > * Makefile.tpl (configure-[+prefix+][+module+]) > > (configure-stage[+id+]-[+prefix+][+module+]): If specified, use > > "module_srcdir" instead of "module" for locating a module's > > srcdir. > > * Makefile.in: Regenerate. > > > > diff --git Makefile.in Makefile.in > > [...] > > diff --git Makefile.tpl Makefile.tpl > > index 92f3f61..d505b5e 100644 > > --- Makefile.tpl > > +++ Makefile.tpl > > @@ -1002,12 +1002,13 @@ configure-[+prefix+][+module+]: [+ IF bootstrap > > +][+ ELSE +] > > *) topdir=`echo [+subdir+]/[+module+]/ | \ > > sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ > > esac; \ > > - srcdiroption="--srcdir=$${topdir}/[+module+]"; \ > > - libsrcdir="$$s/[+module+]"; \ > > + module_srcdir=[+? module_srcdir (get "module_srcdir") (get "module")+]; > > \ > > [+ IF no-config-site +]rm -f no-such-file || : ; \ > > - CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) $${libsrcdir}/configure \ > > + CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) \ > > + $$s/$$module_srcdir/configure \ > > + --srcdir=$${topdir}/$$module_srcdir \ > > [+args+] --build=${build_alias} --host=[+host_alias+] \ > > - --target=[+target_alias+] $${srcdiroption} [+extra_configure_flags+] \ > > + --target=[+target_alias+] [+extra_configure_flags+] \ > > || exit 1 > > @endif [+prefix+][+module+] > > > > @@ -1055,12 +1056,12 @@ configure-stage[+id+]-[+prefix+][+module+]: > > *) topdir=`echo [+subdir+]/[+module+]/ | \ > > sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ > > esac; \ > > - srcdiroption="--srcdir=$${topdir}/[+module+]"; \ > > - libsrcdir="$$s/[+module+]"; \ > > - $(SHELL) $${libsrcdir}/configure \ > > + module_srcdir=[+? module_srcdir (get "module_srcdir") (get "module")+]; > > \ > > + $(SHELL) $$s/$$module_srcdir/configure \ > > + --srcdir=$${topdir}/$$module_srcdir \ > > [+args+] --build=${build_alias} --host=[+host_alias+] \ > > - --target=[+target_alias+] $${srcdiroption} [+ IF prev +]\ > > - --with-build-libsubdir=$(HOST_SUBDIR) [+ ENDIF prev +]\ > > + --target=[+target_alias+] \ > > + [+ IF prev +] --with-build-libsubdir=$(HOST_SUBDIR) [+ ENDIF prev +] \ > > $(STAGE[+id+]_CONFIGURE_FLAGS)[+ IF extra_configure_flags +] \ > > [+extra_configure_flags+][+ ENDIF extra_configure_flags +] > > @endif [+prefix+][+module+]-bootstrap > > > > commit 9292bf8e327e2c729677eaaac2c263456cb77aec > > Author: Thomas Schwinge <tho...@codesourcery.com> > > Date: Sun Oct 13 20:05:14 2013 +0200 > > > > Non-host system configuration for linker plugins. > > > > * configure.ac (--enable-linker-plugin-configure-flags) > > (--enable-linker-plugin-flags): New flags. > > (configdirs): Conditionally add libiberty-linker-plugin. > > * configure: Regenerate. > > * Makefile.def (host_modules): Add libiberty-linker-plugin. > > (host_modules) <lto-plugin>: Pay attention to > > @extra_linker_plugin_flags@ and > > @extra_linker_plugin_configure_flags@. > > (all-lto-plugin): Also depend on all-libiberty-linker-plugin. > > * Makefile.in: Regenerate. > > gcc/ > > * doc/install.texi (--enable-linker-plugin-configure-flags) > > (--enable-linker-plugin-flags): Document new flags. > > > > diff --git Makefile.def Makefile.def > > index 32296d1..2a64866 100644 > > --- Makefile.def > > +++ Makefile.def > > @@ -85,6 +85,14 @@ host_modules= { module= libdecnumber; bootstrap=true; }; > > host_modules= { module= libgui; }; > > host_modules= { module= libiberty; bootstrap=true; > > > > extra_configure_flags='@extra_host_libiberty_configure_flags@';}; > > +// Linker plugins may need their own build of libiberty; see > > +// gcc/doc/install.texi. We take care that this build of libiberty > > doesn't get > > +// installed. It's a helper library for linker plugins, so we pay > > attention to > > +// @extra_linker_plugin_flags@ and @extra_linker_plugin_configure_flags@. > > +host_modules= { module= libiberty-linker-plugin; bootstrap=true; > > + module_srcdir=libiberty; > > + extra_configure_flags='@extra_host_libiberty_configure_flags@ > > --disable-install-libiberty @extra_linker_plugin_flags@ > > @extra_linker_plugin_configure_flags@'; > > + extra_make_flags='@extra_linker_plugin_flags@'; }; > > // We abuse missing to avoid installing anything for libiconv. > > host_modules= { module= libiconv; > > extra_configure_flags='--disable-shared'; > > @@ -111,7 +119,8 @@ host_modules= { module= libtermcap; no_check=true; > > host_modules= { module= utils; no_check=true; }; > > host_modules= { module= gnattools; }; > > host_modules= { module= lto-plugin; bootstrap=true; > > - extra_configure_flags=--enable-shared; }; > > + extra_configure_flags='--enable-shared > > @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@'; > > + extra_make_flags='@extra_linker_plugin_flags@'; }; > > > > target_modules = { module= libstdc++-v3; > > bootstrap=true; > > @@ -337,7 +346,10 @@ dependencies = { module=all-fixincludes; > > on=all-libiberty; }; > > > > dependencies = { module=all-gnattools; on=all-target-libada; }; > > > > +// Depending on the specific configuration, the LTO plugin will either use > > the > > +// generic libiberty build or the specific build for linker plugins. > > dependencies = { module=all-lto-plugin; on=all-libiberty; }; > > +dependencies = { module=all-lto-plugin; on=all-libiberty-linker-plugin; }; > > > > dependencies = { module=all-utils; on=all-libiberty; }; > > > > diff --git Makefile.in Makefile.in > > [...] > > diff --git configure configure > > [...] > > diff --git configure.ac configure.ac > > index 30190d6..1fa99c3 100644 > > --- configure.ac > > +++ configure.ac > > @@ -1731,6 +1731,19 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the > > lto-plugin always. > > esac > > ]) > > > > +AC_ARG_ENABLE(linker-plugin-configure-flags, > > + [AS_HELP_STRING([[--enable-linker-plugin-configure-flags=FLAGS]], > > + [additional flags for configuring linker plugins @<:@none@:>@])], > > + extra_linker_plugin_configure_flags=$enableval, > > + extra_linker_plugin_configure_flags=) > > +AC_SUBST(extra_linker_plugin_configure_flags) > > +AC_ARG_ENABLE(linker-plugin-flags, > > + [AS_HELP_STRING([[--enable-linker-plugin-flags=FLAGS]], > > + [additional flags for configuring and building linker plugins > > @<:@none@:>@])], > > + extra_linker_plugin_flags=$enableval, > > + extra_linker_plugin_flags=) > > +AC_SUBST(extra_linker_plugin_flags) > > + > > > > # By default, C and C++ are the only stage 1 languages. > > stage1_languages=,c, > > @@ -2133,6 +2146,21 @@ for i in ${target_configdirs_all} ; do > > fi > > done > > > > +# libiberty-linker-plugin is special: it doesn't have its own source > > directory, > > +# so we have to add it after the preceding checks. > > +if test x"$extra_linker_plugin_flags$extra_linker_plugin_configure_flags" > > != x > > +then > > + case " $configdirs " in > > + *" libiberty "*) > > + # If we can build libiberty, we can also build > > libiberty-linker-plugin. > > + configdirs="$configdirs libiberty-linker-plugin" > > + > > extra_linker_plugin_configure_flags="$extra_linker_plugin_configure_flags \ > > + --with-libiberty=../libiberty-linker-plugin";; > > + *) > > + AC_MSG_ERROR([libiberty missing]);; > > + esac > > +fi > > + > > # Produce a warning message for the subdirs we can't configure. > > # This isn't especially interesting in the Cygnus tree, but in the > > individual > > # FSF releases, it's important to let people know when their machine isn't > > diff --git gcc/doc/install.texi gcc/doc/install.texi > > index 71aa7fc..19f54c4 100644 > > --- gcc/doc/install.texi > > +++ gcc/doc/install.texi > > @@ -1775,6 +1775,25 @@ GLIBC 2.11 or above, otherwise disabled. > > Enable support for link-time optimization (LTO). This is enabled by > > default, and may be disabled using @option{--disable-lto}. > > > > +@item --enable-linker-plugin-configure-flags=FLAGS > > +@itemx --enable-linker-plugin-flags=FLAGS > > +By default, linker plugins (such as the LTO plugin) are built for the > > +host system architecture. For the case that the linker has a > > +different (but run-time compatible) architecture, these flags can be > > +specified to build plugins that are compatible to the linker. For > > +example, if you are building GCC for a 64-bit x86_64 > > +(@samp{x86_64-unknown-linux-gnu}) host system, but have a 32-bit x86 > > +GNU/Linux (@samp{i686-pc-linux-gnu}) linker executable (which is > > +executable on the former system), you can configure GCC as follows for > > +getting compatible linker plugins: > > + > > +@smallexample > > +% @var{srcdir}/configure \ > > + --host=x86_64-unknown-linux-gnu \ > > + --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \ > > + --enable-linker-plugin-flags='CC=gcc\ -m32\ > > -Wl,-rpath,[...]/i686-pc-linux-gnu/lib' > > +@end smallexample > > + > > @item --with-plugin-ld=@var{pathname} > > Enable an alternate linker to be used at link-time optimization (LTO) > > link time when @option{-fuse-linker-plugin} is enabled. Grüße, Thomas
pgp5vfT3bJeAc.pgp
Description: PGP signature