On Sun, Jun 26, 2022 at 5:28 PM Iain Sandoe via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > If we are building PIC/PIE host executables, and we are building dependent > libs (e.g. GMP) in-tree those libs need to be configured to generate PIC code. > > At present, if an --enable-host-shared build is attempted on ELF platforms, > with in-tree dependents, the build will fail with incompatible relocations. > One can append --with-pic to the configure, but then that is applied > everywhere > not just on the libraries that need it. > > Tested on x86_64-linux-gnu "--enable-host-shared" and compared with an > "--enable-host-shared --with-pic" version, > > OK for master? > comments?
Looks reasonable to me, so go ahead (for trunk). Richard. > thanks > Iain > > Signed-off-by: Iain Sandoe <i...@sandoe.co.uk> > > ChangeLog: > > * Makefile.def: Pass host_libs_picflag to host dependent library > configures. > * Makefile.in: Regenerate. > * configure: Regenerate. > * configure.ac (host_libs_picflag): New configure variable set to > '--with-pic' when building 'host_shared'. > --- > Makefile.def | 15 +++--- > Makefile.in | 140 +++++++++++++++++++++++++-------------------------- > configure | 11 ++++ > configure.ac | 10 ++++ > 4 files changed, 99 insertions(+), 77 deletions(-) > > diff --git a/Makefile.def b/Makefile.def > index 72d58549645..92239aebb57 100644 > --- a/Makefile.def > +++ b/Makefile.def > @@ -50,7 +50,7 @@ host_modules= { module= gcc; bootstrap=true; > extra_make_flags="$(EXTRA_GCC_FLAGS)"; }; > host_modules= { module= gmp; lib_path=.libs; bootstrap=true; > // Work around in-tree gmp configure bug with missing flex. > - extra_configure_flags='--disable-shared LEX="touch lex.yy.c"'; > + extra_configure_flags='--disable-shared LEX="touch lex.yy.c" > @host_libs_picflag@'; > extra_make_flags='AM_CFLAGS="-DNO_ASM"'; > no_install= true; > // none-*-* disables asm optimizations, bootstrap-testing > @@ -60,21 +60,22 @@ host_modules= { module= gmp; lib_path=.libs; > bootstrap=true; > // different from host for target. > target="none-${host_vendor}-${host_os}"; }; > host_modules= { module= mpfr; lib_path=src/.libs; bootstrap=true; > - extra_configure_flags='--disable-shared > @extra_mpfr_configure_flags@'; > + extra_configure_flags='--disable-shared > @extra_mpfr_configure_flags@ @host_libs_picflag@'; > extra_make_flags='AM_CFLAGS="-DNO_ASM"'; > no_install= true; }; > host_modules= { module= mpc; lib_path=src/.libs; bootstrap=true; > - extra_configure_flags='--disable-shared > @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ > --disable-maintainer-mode'; > + extra_configure_flags='--disable-shared > @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ > @host_libs_picflag@ --disable-maintainer-mode'; > no_install= true; }; > host_modules= { module= isl; lib_path=.libs; bootstrap=true; > - extra_configure_flags='--disable-shared > @extra_isl_gmp_configure_flags@'; > + extra_configure_flags='--disable-shared > @extra_isl_gmp_configure_flags@ @host_libs_picflag@'; > extra_make_flags='V=1'; > no_install= true; }; > host_modules= { module= libelf; lib_path=.libs; bootstrap=true; > - extra_configure_flags='--disable-shared'; > + extra_configure_flags='--disable-shared @host_libs_picflag@'; > no_install= true; }; > host_modules= { module= gold; bootstrap=true; }; > host_modules= { module= gprof; }; > +// intl acts on 'host_shared' directly, and does not support --with-pic. > host_modules= { module= intl; bootstrap=true; }; > host_modules= { module= tcl; > missing=mostlyclean; }; > @@ -110,7 +111,7 @@ host_modules= { module= libiberty-linker-plugin; > bootstrap=true; > // We abuse missing to avoid installing anything for libiconv. > host_modules= { module= libiconv; > bootstrap=true; > - extra_configure_flags='--disable-shared'; > + extra_configure_flags='--disable-shared @host_libs_picflag@'; > no_install= true; > missing= pdf; > missing= html; > @@ -125,7 +126,7 @@ host_modules= { module= sim; }; > host_modules= { module= texinfo; no_install= true; }; > host_modules= { module= zlib; no_install=true; no_check=true; > bootstrap=true; > - extra_configure_flags='@extra_host_zlib_configure_flags@';}; > + extra_configure_flags='@extra_host_zlib_configure_flags@ > @host_libs_picflag@';}; > host_modules= { module= gnulib; }; > host_modules= { module= gdbsupport; }; > host_modules= { module= gdbserver; }; > > diff --git a/configure.ac b/configure.ac > index dcea067759d..09958bd7782 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1928,8 +1928,18 @@ AC_ARG_ENABLE(host-shared, > x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;; > *) host_shared=no ;; > esac]) > + > AC_SUBST(host_shared) > > +# If we are building PIC/PIE host executables, and we are building dependent > +# libs (e.g. GMP) in-tree those libs need to be configured to generate PIC > +# code. > +host_libs_picflag= > +if test "$host_shared" = "yes";then > +host_libs_picflag='--with-pic' > +fi > +AC_SUBST(host_libs_picflag) > + > # By default, C and C++ are the only stage 1 languages. > stage1_languages=,c, > > -- > 2.24.3 (Apple Git-128) >