public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-2225] Darwin, config: Revise host config fragment.
@ 2021-07-09 16:36 Iain D Sandoe
  0 siblings, 0 replies; only message in thread
From: Iain D Sandoe @ 2021-07-09 16:36 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:54258e22b0846aaa6bd3265f592feb161eecda75

commit r12-2225-g54258e22b0846aaa6bd3265f592feb161eecda75
Author: Iain Sandoe <iain@sandoe.co.uk>
Date:   Sat Jul 3 15:42:16 2021 +0100

    Darwin, config: Revise host config fragment.
    
    There were two uses for the Darwin host config fragment:
    
    The first is to arrange for targets that support mdynamic-no-pic
    to be built with that enabled (since it makes a significant
    difference to the compiler performance).  We can be more specific
    in the application of this, since it only applies to 32b hosts
    plus powerpc64-darwin9.
    
    The second was to work around a tool bug where -fno-PIE was not
    propagated to the link stage.  This second use is redundant,
    since the buggy toolchain cannot bootstrap current GCC sources
    anyway.
    
    This makes the host fragment more specific and reduces the number
    of toolchains for which it is included which reduces clutter in
    configure lines.
    
    Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
    
    config/ChangeLog:
    
            * mh-darwin: Make this specific to handling the
            mdynamic-no-pic case.
    
    ChangeLog:
    
            * configure: Regenerate.
            * configure.ac: Adjust cases for which it is necessary to
            include the Darwin host config fragment.

Diff:
---
 config/mh-darwin | 57 ++++++++++++++++++++++++++++++++------------------------
 configure        |  2 +-
 configure.ac     |  2 +-
 3 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/config/mh-darwin b/config/mh-darwin
index 148b73038c3..fb2bb5ad1d9 100644
--- a/config/mh-darwin
+++ b/config/mh-darwin
@@ -1,29 +1,38 @@
 # The -mdynamic-no-pic ensures that the compiler executable is built without
-# position-independent-code -- the usual default on Darwin. This fix speeds
-# compiles by 3-5%.  Don't add it if the compiler doesn't also support
-# -mno-dynamic-no-pic to undo it.
-DARWIN_MDYNAMIC_NO_PIC := \
-`case ${host} in i?86-*-darwin* | powerpc-*-darwin*) \
-   $(CC) -S -xc /dev/null -o /dev/null -mno-dynamic-no-pic 2>/dev/null \
-   && echo -mdynamic-no-pic ;; esac`
-DARWIN_GCC_MDYNAMIC_NO_PIC := \
-`case ${host} in i?86-*-darwin* | powerpc-*-darwin*) \
-   $(CC) -S -xc /dev/null -o /dev/null -mno-dynamic-no-pic 2>/dev/null \
-   || echo -mdynamic-no-pic ;; esac`
+# position-independent-code -- the usual default on Darwin. This speeds compiles
+# by 8-20% (measurements made against GCC-11).
+# However, we cannot add it unless the bootstrap compiler supports
+# -mno-dynamic-no-pic to undo it, since libiberty, at least, needs this.
 
-# ld on Darwin versions >= 10.7 defaults to PIE executables. Disable this for
-# gcc components, since it is incompatible with our pch implementation.
-DARWIN_NO_PIE := `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie ;; esac;`
+# We use Werror, since some versions of clang report unknown command line flags
+# as a warning only.
 
-BOOT_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC)
-BOOT_LDFLAGS += $(DARWIN_NO_PIE)
+# We only need to determine this for the host tool used to build stage1 (or a
+# non-bootstrapped compiler), later stages will be built by GCC which supports
+# the required flags.
 
-# Similarly, for cross-compilation.
-STAGE1_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC)
-STAGE1_LDFLAGS += $(DARWIN_NO_PIE)
+BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC := $(shell \
+  $(CC) -S -xc /dev/null -o /dev/null -Werror -mno-dynamic-no-pic 2>/dev/null \
+  && echo true)
 
-# Without -mno-dynamic-no-pic support, add -mdynamic-no-pic just to later
-# stages when we know it is built with gcc.
-STAGE2_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC)
-STAGE3_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC)
-STAGE4_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC)
+@if gcc-bootstrap
+ifeq (${BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC},true)
+STAGE1_CFLAGS += -mdynamic-no-pic
+else
+STAGE1_CFLAGS += -fPIC
+endif
+# Add -mdynamic-no-pic to later stages when we know it is built with GCC.
+BOOT_CFLAGS += -mdynamic-no-pic
+@endif gcc-bootstrap
+
+@unless gcc-bootstrap
+ifeq (${BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC},true)
+# FIXME: we should also enable this for cross and non-bootstrap builds but
+# that needs amendment to libcc1.
+# CFLAGS += -mdynamic-no-pic
+# CXXFLAGS += -mdynamic-no-pic
+else
+CFLAGS += -fPIC
+CXXFLAGS += -fPIC
+endif
+@endunless gcc-bootstrap
diff --git a/configure b/configure
index 732d1870b3d..85ab9915402 100755
--- a/configure
+++ b/configure
@@ -4074,7 +4074,7 @@ fi
   hppa*-*)
     host_makefile_frag="config/mh-pa"
     ;;
-  *-*-darwin*)
+  i?86-*-darwin[89]* | i?86-*-darwin1[0-7]* | powerpc*-*-darwin*)
     host_makefile_frag="config/mh-darwin"
     ;;
   powerpc-*-aix*)
diff --git a/configure.ac b/configure.ac
index 041ee249bac..1df038b04f3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1318,7 +1318,7 @@ case "${host}" in
   hppa*-*)	
     host_makefile_frag="config/mh-pa"
     ;;
-  *-*-darwin*)
+  i?86-*-darwin[[89]]* | i?86-*-darwin1[[0-7]]* | powerpc*-*-darwin*)
     host_makefile_frag="config/mh-darwin"
     ;;
   powerpc-*-aix*)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-07-09 16:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-09 16:36 [gcc r12-2225] Darwin, config: Revise host config fragment Iain D Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).