From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 8F1521382C5 for ; Sun, 29 Nov 2020 13:41:47 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9377CE0849; Sun, 29 Nov 2020 13:41:46 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 65836E0849 for ; Sun, 29 Nov 2020 13:41:46 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id E0023340ECD for ; Sun, 29 Nov 2020 13:41:44 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 648573F0 for ; Sun, 29 Nov 2020 13:41:43 +0000 (UTC) From: "Fabian Groffen" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Fabian Groffen" Message-ID: <1606657264.22340228f5dbbfcbb63f05b3b848616d6892f245.grobian@gentoo> Subject: [gentoo-commits] repo/proj/prefix:master commit in: eclass/ X-VCS-Repository: repo/proj/prefix X-VCS-Files: eclass/flag-o-matic.eclass X-VCS-Directories: eclass/ X-VCS-Committer: grobian X-VCS-Committer-Name: Fabian Groffen X-VCS-Revision: 22340228f5dbbfcbb63f05b3b848616d6892f245 X-VCS-Branch: master Date: Sun, 29 Nov 2020 13:41:43 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: a8bd7902-b96f-46eb-9331-d40a5be91731 X-Archives-Hash: 648d157cf88eee0c1465f8b60e2ab540 commit: 22340228f5dbbfcbb63f05b3b848616d6892f245 Author: Fabian Groffen gentoo org> AuthorDate: Sun Nov 29 13:41:04 2020 +0000 Commit: Fabian Groffen gentoo org> CommitDate: Sun Nov 29 13:41:04 2020 +0000 URL: https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=22340228 eclass/flag-o-matic: sync with gx86, bug #757258 Closes: https://bugs.gentoo.org/757258 Signed-off-by: Fabian Groffen gentoo.org> eclass/flag-o-matic.eclass | 129 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 99 insertions(+), 30 deletions(-) diff --git a/eclass/flag-o-matic.eclass b/eclass/flag-o-matic.eclass index 1a5d1e8099..f75a975a08 100644 --- a/eclass/flag-o-matic.eclass +++ b/eclass/flag-o-matic.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2017 Gentoo Foundation +# Copyright 1999-2020 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: flag-o-matic.eclass @@ -27,7 +27,14 @@ setup-allowed-flags() { '-fstack-protector*' '-fsanitize*' '-fstack-check*' -fno-stack-check -fbounds-check -fbounds-checking -fno-strict-overflow -fno-PIE -fno-pie -nopie -no-pie -fno-unit-at-a-time - -g '-g[0-9]' -ggdb '-ggdb[0-9]' '-gdwarf-*' gstabs -gstabs+ -gz + + # debugging symbols should generally be very safe to add + -g '-g[0-9]' + -ggdb '-ggdb[0-9]' + -gdwarf '-gdwarf-*' + -gstabs -gstabs+ + -gz + -fno-ident -fpermissive -frecord-gcc-switches '-fdiagnostics*' '-fplugin*' '-W*' -w @@ -56,7 +63,9 @@ setup-allowed-flags() { -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt '-m*-toc' -mfloat-abi - -mfix-r10000 -mno-fix-r10000 -mthumb -marm + -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 + -mfix-rm7000 -mno-fix-rm7000 -mfix-r10000 -mno-fix-r10000 + -mr10k-cache-barrier -mthumb -marm # gcc 4.5 -mno-fma4 -mno-movbe -mno-xop -mno-lwp @@ -395,6 +404,7 @@ filter-mfpmath() { # Strip *FLAGS of everything except known good/safe flags. This runs over all # flags returned by all_flag_vars(). strip-flags() { + [[ $# -ne 0 ]] && die "strip-flags takes no arguments" local x y var local ALLOWED_FLAGS @@ -436,25 +446,81 @@ test-flag-PROG() { local lang=$2 shift 2 - [[ -z ${comp} || -z $1 ]] && return 1 + if [[ -z ${comp} ]]; then + return 1 + fi + if [[ -z $1 ]]; then + return 1 + fi - local src=${T}/tf-${comp}-${SECONDS}.${lang} + # verify selected compiler exists before using it + comp=($(tc-get${comp})) + # 'comp' can already contain compiler options. + # 'type' needs a binary name + if ! type -p ${comp[0]} >/dev/null; then + return 1 + fi + + # Set up test file. + local in_src in_ext cmdline_extra=() + case "${lang}" in + # compiler/assembler only + c) + in_ext='c' + in_src='int main(void) { return 0; }' + cmdline_extra+=(-xc -c) + ;; + c++) + in_ext='cc' + in_src='int main(void) { return 0; }' + cmdline_extra+=(-xc++ -c) + ;; + f77) + in_ext='f' + # fixed source form + in_src=' end' + cmdline_extra+=(-xf77 -c) + ;; + f95) + in_ext='f90' + in_src='end' + cmdline_extra+=(-xf95 -c) + ;; + + # C compiler/assembler/linker + c+ld) + in_ext='c' + in_src='int main(void) { return 0; }' + cmdline_extra+=(-xc) + ;; + esac + local test_in=${T}/test-flag.${in_ext} + local test_out=${T}/test-flag.exe + + printf "%s\n" "${in_src}" > "${test_in}" || die "Failed to create '${test_in}'" + + # Currently we rely on warning-free output of a compiler + # before the flag to see if a flag prduces any warnings. + # This has a few drawbacks: + # - if compiler already generates warnings we filter out + # every single flag: bug #712488 + # - if user actually wants to see warnings we just strip + # them regardless of warnings type. + # + # We can add more selective detection of no-op flags via + # '-Werror=ignored-optimization-argument' and similar error options + # similar to what we are doing with '-Qunused-arguments'. local cmdline=( - $(tc-get${comp}) + "${comp[@]}" # Clang will warn about unknown gcc flags but exit 0. # Need -Werror to force it to exit non-zero. -Werror - # Use -c so we can test the assembler as well. - # don't use -o /dev/null: /usr/ccs/bin/as: File exists (Sun LD) - -c -o "${src}.o" + "$@" + # -x options need to go before first source file + "${cmdline_extra[@]}" + + "${test_in}" -o "${test_out}" ) - if "${cmdline[@]}" -x${lang} - /dev/null ; then - cmdline+=( "$@" -x${lang} - ) - else - # don't use /dev/null as input: -xc flag needs not to exist #254120 - echo "int main() { return 0; }" > "${src}" - cmdline+=( "$@" -c -o "${src}.o" "${src}" ) - fi if ! "${cmdline[@]}" /dev/null; then # -Werror makes clang bail out on unused arguments as well; @@ -464,9 +530,6 @@ test-flag-PROG() { cmdline+=( -Qunused-arguments ) "${cmdline[@]}" /dev/null fi - local ret=$? - rm -f "${src}"{,.o} - [[ ${ret} == 0 ]] && true || false } # @FUNCTION: test-flag-CC @@ -493,6 +556,12 @@ test-flag-F77() { test-flag-PROG "F77" f77 "$@"; } # Returns shell true if is supported by the Fortran 90 compiler, else returns shell false. test-flag-FC() { test-flag-PROG "FC" f95 "$@"; } +# @FUNCTION: test-flag-CCLD +# @USAGE: +# @DESCRIPTION: +# Returns shell true if is supported by the C compiler and linker, else returns shell false. +test-flag-CCLD() { test-flag-PROG "CC" c+ld "$@"; } + test-flags-PROG() { local comp=$1 local flags=() @@ -549,6 +618,12 @@ test-flags-F77() { test-flags-PROG "F77" "$@"; } # Returns shell true if are supported by the Fortran 90 compiler, else returns shell false. test-flags-FC() { test-flags-PROG "FC" "$@"; } +# @FUNCTION: test-flags-CCLD +# @USAGE: +# @DESCRIPTION: +# Returns shell true if are supported by the C compiler and default linker, else returns shell false. +test-flags-CCLD() { test-flags-PROG "CCLD" "$@"; } + # @FUNCTION: test-flags # @USAGE: # @DESCRIPTION: @@ -573,13 +648,12 @@ test_version_info() { # @DESCRIPTION: # Strip {C,CXX,F,FC}FLAGS of any flags not supported by the active toolchain. strip-unsupported-flags() { + [[ $# -ne 0 ]] && die "strip-unsupported-flags takes no arguments" export CFLAGS=$(test-flags-CC ${CFLAGS}) export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}) export FFLAGS=$(test-flags-F77 ${FFLAGS}) export FCFLAGS=$(test-flags-FC ${FCFLAGS}) - # note: this does not verify the linker flags but it is enough - # to strip invalid C flags which are much more likely, #621274 - export LDFLAGS=$(test-flags-CC ${LDFLAGS}) + export LDFLAGS=$(test-flags-CCLD ${LDFLAGS}) } # @FUNCTION: get-flag @@ -587,6 +661,7 @@ strip-unsupported-flags() { # @DESCRIPTION: # Find and echo the value for a particular flag. Accepts shell globs. get-flag() { + [[ $# -ne 1 ]] && die "usage: " local f var findflag="$1" # this code looks a little flaky but seems to work for @@ -605,18 +680,11 @@ get-flag() { return 1 } -has_m64() { - die "${FUNCNAME}: don't use this anymore" -} - -has_m32() { - die "${FUNCNAME}: don't use this anymore" -} - # @FUNCTION: replace-sparc64-flags # @DESCRIPTION: # Sets mcpu to v8 and uses the original value as mtune if none specified. replace-sparc64-flags() { + [[ $# -ne 0 ]] && die "replace-sparc64-flags takes no arguments" local SPARC64_CPUS="ultrasparc3 ultrasparc v9" if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then @@ -700,6 +768,7 @@ raw-ldflags() { # @FUNCTION: no-as-needed # @RETURN: Flag to disable asneeded behavior for use with append-ldflags. no-as-needed() { + [[ $# -ne 0 ]] && die "no-as-needed takes no arguments" case $($(tc-getLD) -v 2>&1