From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id E18243856253; Thu, 19 May 2022 09:47:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E18243856253 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Alexandre Oliva To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/testme)] Support multilib-aware target lib flags self-specs overriding X-Act-Checkin: gcc X-Git-Author: Alexandre Oliva X-Git-Refname: refs/users/aoliva/heads/testme X-Git-Oldrev: b8944f0438a183a0245ffe17aeaeaf3a1a00069c X-Git-Newrev: 273f851aa568ef762fd35f95ec7599b063bbbddb Message-Id: <20220519094706.E18243856253@sourceware.org> Date: Thu, 19 May 2022 09:47:06 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 May 2022 09:47:07 -0000 https://gcc.gnu.org/g:273f851aa568ef762fd35f95ec7599b063bbbddb commit 273f851aa568ef762fd35f95ec7599b063bbbddb Author: Alexandre Oliva Date: Thu May 19 06:45:57 2022 -0300 Support multilib-aware target lib flags self-specs overriding This patch introduces -multiflags, short for multilib TFLAGS, as an option that does nothing by default, but that can be added to TFLAGS and mapped to useful options by driver self-specs. I realize -m is reserved for machine-specific flags, which this option sort-of isn't, but its intended use is indeed to stand for machine-specific flags, so it's kind of ok. But that's just my official excuse, the reason I couldn't help picking it up is that it is a portmanteau of multi[lib] and TFLAGS. for gcc/ChangeLog * common.opt (multiflags): New. * doc/invoke.texi: Document it. * gcc.cc (driver_self_specs): Discard it. * opts.cc (common_handle_option): Ignore it in the driver. Diff: --- gcc/common.opt | 4 ++++ gcc/doc/invoke.texi | 30 +++++++++++++++++++++++++++++- gcc/gcc.cc | 6 +++++- gcc/opts.cc | 4 ++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index 8a0dafc522d..73b69ba3118 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -1786,6 +1786,10 @@ fif-conversion2 Common Var(flag_if_conversion2) Optimization Perform conversion of conditional jumps to conditional execution. +multiflags +Common Driver +Building block for specs-based multilib-aware TFLAGS. + fstack-reuse= Common Joined RejectNegative Enum(stack_reuse_level) Var(flag_stack_reuse) Init(SR_ALL) Optimization -fstack-reuse=[all|named_vars|none] Set stack reuse level for local variables. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 98a543ae06f..b4556134eb0 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -727,7 +727,7 @@ Objective-C and Objective-C++ Dialects}. -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol -fstats -fstack-usage -ftime-report -ftime-report-details @gol -fvar-tracking-assignments-toggle -gtoggle @gol --print-file-name=@var{library} -print-libgcc-file-name @gol +-multiflags -print-file-name=@var{library} -print-libgcc-file-name @gol -print-multi-directory -print-multi-lib -print-multi-os-directory @gol -print-prog-name=@var{program} -print-search-dirs -Q @gol -print-sysroot -print-sysroot-headers-suffix @gol @@ -18870,6 +18870,34 @@ For example, with @option{-fdbg-cnt=dce:2-4:10-11,tail_call:10}, eleventh invocation. For @code{dbg_cnt(tail_call)} true is returned for first 10 invocations. +@item -multiflags +@opindex multiflags +This option enables multilib-aware @code{TFLAGS} to be used to build +target libraries with options different from those the compiler is +configured to use by default, through the use of specs (@xref{Spec +Files}) set up by compiler internals, by the target, or by builders at +configure time. + +Like @code{TFLAGS}, this allows the target libraries to be built for +portable baseline environments, while the compiler defaults to more +demanding ones. That's useful because users can easily override the +defaults the compiler is configured to use to build their own programs, +if the defaults are not ideal for their target environment, whereas +rebuilding the runtime libraries is usually not as easy or desirable. + +Unlike @code{TFLAGS}, the use of specs enables different flags to be +selected for different multilibs. The way to accomplish that is to +build with @samp{make TFLAGS=-multiflags}, after configuring +@samp{--with-specs=%@{multiflags:...@}}. + +This option is discarded by the driver once it's done processing driver +self spec. + +It is also useful to check that @code{TFLAGS} are being used to build +all target libraries, in a non-bootstrap configuration, by configuring +the compiler @samp{--with-specs=%@{!multiflags:%emissing TFLAGS@}} and +building the compiler and target libraries. + @item -print-file-name=@var{library} @opindex print-file-name Print the full absolute name of the library file @var{library} that diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 299e09c4f54..fd9523c48f1 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -1347,7 +1347,11 @@ static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS; static const char *const driver_self_specs[] = { "%{fdump-final-insns:-fdump-final-insns=.} %report_bug = value; break; + case OPT_multiflags: + gcc_checking_assert (lang_mask == CL_DRIVER); + break; + default: /* If the flag was handled in a standard way, assume the lack of processing here is intentional. */