From 947edb094ece682e6642c497a871749e8c12d5a5 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Mon, 7 Aug 2023 13:07:11 +0200 Subject: [PATCH] configure: When host-shared, pass --with-pic to in-tree lib configs. 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. Signed-off-by: Iain Sandoe * Makefile.def: Pass host_libs_picflag to host dependent library configures. * configure.ac (host_libs_picflag): New configure variable set to '--with-pic' when building 'host_shared'. --- Makefile.def | 13 +++++++------ configure.ac | 10 ++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Makefile.def b/Makefile.def index 1156d2b..de86056 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,14 +60,14 @@ 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; @@ -76,6 +76,7 @@ host_modules= { module= libelf; lib_path=.libs; bootstrap=true; host_modules= { module= gold; bootstrap=true; }; host_modules= { module= gprof; }; host_modules= { module= gprofng; }; +// intl acts on 'host_shared' directly, and does not support --with-pic. host_modules= { module= intl; bootstrap=true; }; host_modules= { module= tcl; missing=mostlyclean; }; @@ -111,7 +112,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; @@ -126,7 +127,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 e95a9ed..86d10a6 100644 --- a/configure.ac +++ b/configure.ac @@ -2006,8 +2006,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.7.4