From patchwork Sun Aug 22 07:11:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olivier Galibert X-Patchwork-Id: 44732 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EE088384840B for ; Sun, 22 Aug 2021 07:12:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EE088384840B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1629616356; bh=dYs5PirfLJbxSAJL1Uuiv3TavLiz6Z56jYzKWYs2/QU=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=NzW/qigbTCi1NZd9jtEwgYT9+WYCCpYekUbEyaK9aX9E1w6uAoyXKcVJKkG9uEm/D TI97i8lK+A4jk+gMdAuQ7IUQEb3BTfGsPjbY7aUcOY1iswZyio1ZBM9Kv81cmAjpxn feMTx7IG+qMObgYrlYWXuQecJ9RA9ZoXvg8Bi0m8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from pb-smtp1.pobox.com (pb-smtp1.pobox.com [64.147.108.70]) by sourceware.org (Postfix) with ESMTPS id ACCF5385740F for ; Sun, 22 Aug 2021 07:12:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ACCF5385740F Received: from pb-smtp1.pobox.com (unknown [127.0.0.1]) by pb-smtp1.pobox.com (Postfix) with ESMTP id C483DDB5B4; Sun, 22 Aug 2021 03:12:02 -0400 (EDT) (envelope-from galibert@pobox.com) Received: from pb-smtp1.nyi.icgroup.com (unknown [127.0.0.1]) by pb-smtp1.pobox.com (Postfix) with ESMTP id AF02ADB5B2; Sun, 22 Aug 2021 03:12:02 -0400 (EDT) (envelope-from galibert@pobox.com) Received: from localhost.localdomain (unknown [78.197.126.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pb-smtp1.pobox.com (Postfix) with ESMTPSA id 67E92DB5B0; Sun, 22 Aug 2021 03:12:01 -0400 (EDT) (envelope-from galibert@pobox.com) To: libc-alpha@sourceware.org Subject: [PATCH] Make using non-default as/ld/etc easier. Date: Sun, 22 Aug 2021 09:11:28 +0200 Message-Id: <20210822071127.490511-1-galibert@pobox.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 X-Pobox-Relay-ID: 3F3F65F4-0318-11EC-96A0-8B3BC6D8090B-92059326!pb-smtp1.pobox.com X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Olivier Galibert via Libc-alpha From: Olivier Galibert Reply-To: Olivier Galibert Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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 --- 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,