[PATCH] Make using non-default as/ld/etc easier.
Olivier Galibert
galibert@pobox.com
Sun Aug 22 07:11:28 GMT 2021
Add the configure parameters
--with-{as,ld,ar,objdump,objcopy,gprof}=path to optionally force the
path for these programs without having to tweak the output of
$CC -print-prog-name in some way.
In addition, when --with-{as,ld} is used the corresponding program
version is not check. The user gets to keep all the pieces if it
blows.
In practice, according to a build log on x86-64, $AS and $LD are never
used directly. $AR, $OBJDUMP and $OBJCOPY are though, and the llvm
variants don't seem to have any issue.
Signed-off-by: Olivier Galibert <galibert@pobox.com>
---
aclocal.m4 | 31 ++++++++++++++----
configure | 89 +++++++++++++++++++++++++++++++++++++++++++---------
configure.ac | 38 ++++++++++++----------
3 files changed, 121 insertions(+), 37 deletions(-)
diff --git a/aclocal.m4 b/aclocal.m4
index c195c4db56..cf19230145 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -114,15 +114,34 @@ if test -n "$path_binutils"; then
path_binutils=`(cd $path_binutils; pwd) | sed 's%/*$%/%'`
CC="$CC -B$path_binutils"
fi
-AS=`$CC -print-prog-name=as`
-LD=`$CC -print-prog-name=ld`
-AR=`$CC -print-prog-name=ar`
+AC_ARG_WITH([as],
+ [AS_HELP_STRING([--with-as=path], [select the as program to use])],
+ [AS=$with_as],
+ [AS=`$CC -print-prog-name=as`])
+AC_ARG_WITH([ld],
+ [AS_HELP_STRING([--with-ld=path], [select the ld program to use])],
+ [LD=$with_ld],
+ [LD=`$CC -print-prog-name=ld`])
+AC_ARG_WITH([ar],
+ [AS_HELP_STRING([--with-ar=path], [select the ar program to use])],
+ [AR=$with_ar],
+ [AR=`$CC -print-prog-name=ar`])
+AC_ARG_WITH([objdump],
+ [AS_HELP_STRING([--with-objdump=path], [select the objdump program to use])],
+ [OBJDUMP=$with_objdump],
+ [OBJDUMP=`$CC -print-prog-name=objdump`])
+AC_ARG_WITH([objcopy],
+ [AS_HELP_STRING([--with-objcopy=path], [select the objcopy program to use])],
+ [OBJCOPY=$with_objcopy],
+ [OBJCOPY=`$CC -print-prog-name=objcopy`])
+AC_ARG_WITH([gprof],
+ [AS_HELP_STRING([--with-gprof=path], [select the gprof program to use])],
+ [GPROF=$with_gprof],
+ [GPROF=`$CC -print-prog-name=gprof`])
+
AC_SUBST(AR)
-OBJDUMP=`$CC -print-prog-name=objdump`
AC_SUBST(OBJDUMP)
-OBJCOPY=`$CC -print-prog-name=objcopy`
AC_SUBST(OBJCOPY)
-GPROF=`$CC -print-prog-name=gprof`
AC_SUBST(GPROF)
# Determine whether we are using GNU binutils.
diff --git a/configure b/configure
index 7272fbf6ea..2778ac6307 100755
--- a/configure
+++ b/configure
@@ -793,6 +793,12 @@ enable_mathvec
enable_cet
enable_scv
with_cpu
+with_as
+with_ld
+with_ar
+with_objdump
+with_objcopy
+with_gprof
'
ac_precious_vars='build_alias
host_alias
@@ -1483,6 +1489,12 @@ Optional Packages:
--with-nonshared-cflags=CFLAGS
build nonshared libraries with additional CFLAGS
--with-cpu=CPU select code for CPU variant
+ --with-as=path select the as program to use
+ --with-ld=path select the ld program to use
+ --with-ar=path select the ar program to use
+ --with-objdump=path select the objdump program to use
+ --with-objcopy=path select the objcopy program to use
+ --with-gprof=path select the gprof program to use
Some influential environment variables:
CC C compiler command
@@ -4549,15 +4561,58 @@ if test -n "$path_binutils"; then
path_binutils=`(cd $path_binutils; pwd) | sed 's%/*$%/%'`
CC="$CC -B$path_binutils"
fi
-AS=`$CC -print-prog-name=as`
-LD=`$CC -print-prog-name=ld`
-AR=`$CC -print-prog-name=ar`
-OBJDUMP=`$CC -print-prog-name=objdump`
+# Check whether --with-as was given.
+if test "${with_as+set}" = set; then :
+ withval=$with_as; AS=$with_as
+else
+ AS=`$CC -print-prog-name=as`
+fi
+
+
+# Check whether --with-ld was given.
+if test "${with_ld+set}" = set; then :
+ withval=$with_ld; LD=$with_ld
+else
+ LD=`$CC -print-prog-name=ld`
+fi
+
+
+# Check whether --with-ar was given.
+if test "${with_ar+set}" = set; then :
+ withval=$with_ar; AR=$with_ar
+else
+ AR=`$CC -print-prog-name=ar`
+fi
+
+
+# Check whether --with-objdump was given.
+if test "${with_objdump+set}" = set; then :
+ withval=$with_objdump; OBJDUMP=$with_objdump
+else
+ OBJDUMP=`$CC -print-prog-name=objdump`
+fi
+
+
+# Check whether --with-objcopy was given.
+if test "${with_objcopy+set}" = set; then :
+ withval=$with_objcopy; OBJCOPY=$with_objcopy
+else
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+fi
+
+
+# Check whether --with-gprof was given.
+if test "${with_gprof+set}" = set; then :
+ withval=$with_gprof; GPROF=$with_gprof
+else
+ GPROF=`$CC -print-prog-name=gprof`
+fi
+
+
+
-OBJCOPY=`$CC -print-prog-name=objcopy`
-GPROF=`$CC -print-prog-name=gprof`
# Determine whether we are using GNU binutils.
@@ -4599,8 +4654,9 @@ $as_echo "$libc_cv_prog_ld_gnu" >&6; }
gnu_ld=$libc_cv_prog_ld_gnu
-# Accept binutils 2.25 or newer.
-for ac_prog in $AS
+# Accept binutils 2.25 or newer. Don't check version if the path is forced.
+if test "x$with_as" == x; then :
+ for ac_prog in $AS
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -4660,13 +4716,16 @@ $as_echo_n "checking version of $AS... " >&6; }
$as_echo "$ac_prog_version" >&6; }
fi
if test $ac_verc_fail = yes; then
- AS=: critic_missing="$critic_missing as"
+ AS=: critic_missing="$critic_missing GNU as"
fi
-if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
- # Accept gold 1.14 or higher
- for ac_prog in $LD
+fi
+
+if test "x$with_as" == x; then :
+ if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
+ # Accept gold 1.14 or higher
+ for ac_prog in $LD
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -4729,8 +4788,8 @@ if test $ac_verc_fail = yes; then
LD=: critic_missing="$critic_missing GNU gold"
fi
-else
- for ac_prog in $LD
+ else
+ for ac_prog in $LD
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -4793,6 +4852,8 @@ if test $ac_verc_fail = yes; then
LD=: critic_missing="$critic_missing GNU ld"
fi
+ fi
+
fi
# These programs are version sensitive.
diff --git a/configure.ac b/configure.ac
index af47cd51e6..e7af44ba91 100644
--- a/configure.ac
+++ b/configure.ac
@@ -989,24 +989,28 @@ AC_PROG_LN_S
LIBC_PROG_BINUTILS
-# Accept binutils 2.25 or newer.
-AC_CHECK_PROG_VER(AS, $AS, --version,
- [GNU assembler.* \([0-9]*\.[0-9.]*\)],
- [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
- AS=: critic_missing="$critic_missing as")
-
-if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
- # Accept gold 1.14 or higher
- AC_CHECK_PROG_VER(LD, $LD, --version,
- [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
- [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
- LD=: critic_missing="$critic_missing GNU gold")
-else
- AC_CHECK_PROG_VER(LD, $LD, --version,
- [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
+# Accept binutils 2.25 or newer. Don't check version if the path is forced.
+AS_IF([test "x$with_as" == x],
+ [AC_CHECK_PROG_VER(AS, $AS, --version,
+ [GNU assembler.* \([0-9]*\.[0-9.]*\)],
[2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
- LD=: critic_missing="$critic_missing GNU ld")
-fi
+ AS=: critic_missing="$critic_missing GNU as")
+])
+
+AS_IF([test "x$with_as" == x],
+ [if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
+ # Accept gold 1.14 or higher
+ AC_CHECK_PROG_VER(LD, $LD, --version,
+ [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
+ [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
+ LD=: critic_missing="$critic_missing GNU gold")
+ else
+ AC_CHECK_PROG_VER(LD, $LD, --version,
+ [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
+ [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
+ LD=: critic_missing="$critic_missing GNU ld")
+ fi
+])
# These programs are version sensitive.
AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
--
2.33.0
More information about the Libc-alpha
mailing list