From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id A7F473858402 for ; Wed, 17 Nov 2021 21:27:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A7F473858402 Received: by mail-wr1-x42a.google.com with SMTP id c4so7290834wrd.9 for ; Wed, 17 Nov 2021 13:27:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:mime-version:subject:message-id:references :to:date; bh=4huX8ZGqZMeuLyGbVnPGqrFmJQpPL1cPgJoVOoajOnE=; b=JKpWi/U/BzniAlh35u0zUbjj0cxEE+YxgFeAVG7lPgc5bhzl9Yqp8J+ytlx0kcHPDj EivfbpFTCNwXNEs26BP8/ERiE7anj4LO1zFpwASqhtUeJU+nWyNjTyQgGx2UsNxGZN/w Z9Qb1ShkvdiGOGNyBKv+UEqm17Xt14BxU9EiuyRVLDCKM/+cA6k7PcbydhM82NB48J9n 7xozcvK1e/9n7FPC98Sbx74Dwt/I3gX8gF1Rrqsnb2gIsJEp/Deb1Ke4aDP48YZM5gOE JpKzI160ZXkGHyiEuUyBxt2jlXTMlAmhVz/gZIEQUkPGYIL9UtLf1YN71mQMX+X1taTs RNAg== X-Gm-Message-State: AOAM532XEf1GNbVoETBhGQqUIcl13m/w65rxsJ7XzuxCJpQkb5r2YmZ5 yDLfBg4ZQeQv5+iKPHIvpQpH7W13UBw= X-Google-Smtp-Source: ABdhPJya5rUfYLhcFMRXt6uCKhSztl/VxYsvyNtPqaZj47AphPSpuMP/7TIeM1tGCyD3MTWFkuKi2Q== X-Received: by 2002:adf:e7cf:: with SMTP id e15mr24120440wrn.287.1637184463347; Wed, 17 Nov 2021 13:27:43 -0800 (PST) Received: from [192.168.1.214] (host81-138-1-83.in-addr.btopenworld.com. [81.138.1.83]) by smtp.gmail.com with ESMTPSA id v8sm1035899wrd.84.2021.11.17.13.27.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Nov 2021 13:27:42 -0800 (PST) From: Iain Sandoe Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.21\)) Subject: Fwd: [PATCH 3/4] Darwin : Allow for configuring Darwin to use embedded runpath. Message-Id: <160318AE-E2F4-4612-AEC1-5013419B6359@gmail.com> References: <20211117210319.92514-4-iain@sandoe.co.uk> To: libstdc++ Date: Wed, 17 Nov 2021 21:27:42 +0000 X-Mailer: Apple Mail (2.3445.104.21) X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, 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 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Nov 2021 21:27:51 -0000 this refers to the libstdc++ changes (mostly a regeneration from the = libtool change) but a small addition to Makefile.am to add @loader_path as a default for libstdc++ to find its dependent libs.=20 > Begin forwarded message: >=20 > From: Iain Sandoe > Subject: [PATCH 3/4] Darwin : Allow for configuring Darwin to use = embedded runpath. > Date: 17 November 2021 at 21:03:18 GMT > To: gcc-patches@gcc.gnu.org > Cc: joseph@codesourcery.com > Reply-To: iain@sandoe.co.uk >=20 > Recent Darwin versions place contraints on the use of run paths > specified in environment variables. This breaks some assumptions > in the GCC build. >=20 > This change allows the user to configure a Darwin build to use > '@rpath/libraryname.dylib' in library names and then to add an > embedded runpath to executables (and libraries with dependents). >=20 > The embedded runpath is added by default unless: >=20 > 1. the user adds an explicit -rpath / -Wl,-rpath,.... > 2. the user adds '-nodefaultrpath'. >=20 > For an installed compiler, it means that any executable built with > that compiler will reference the runtimes installed with the > compiler (equivalent to hard-coding the library path into the name > of the library). >=20 > During build-time configurations any "-B" entries will be added to > the runpath thus the newly-built libraries will be found by exes. >=20 > Since the install name is set in libtool, that decision needs to be > available here (but might also cause dependent ones in Makefiles, > so we need to export a conditional). >=20 > This facility is not available for Darwin 8 or earlier, however the > existing environment variable runpath does work there. >=20 > We default this on for systems where the external DYLD_LIBRARY_PATH > does not work and off for Darwin 8 or earlier. For systems that can > use either method, if the value is unset, we use the default (which > is currently DYLD_LIBRARY_PATH). >=20 > ChangeLog: >=20 > * configure: Regenerate. > * configure.ac: Do not add default runpaths to GCC exes > when we are building -static-libstdc++/-static-libgcc (the > default). > * libtool.m4: Add 'enable-darwin-at-runpath'. Act on the > enable flag to alter Darwin libraries to use @rpath names. >=20 > gcc/ChangeLog: >=20 > * aclocal.m4: Regenerate. > * configure: Regenerate. >=20 > libatomic/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. > * testsuite/Makefile.in: Regenerate. >=20 > libcc1/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. >=20 > libffi/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. >=20 > libgcc/ChangeLog: >=20 > * config/t-slibgcc-darwin: Generate libgcc_s > with an @rpath name. >=20 > libgfortran/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. > * configure.ac: Handle Darwin rpaths >=20 > libgomp/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. >=20 > libhsail-rt/ChangeLog: >=20 > * configure: Regenerate. >=20 > libitm/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. >=20 > libobjc/ChangeLog: >=20 > * configure: Regenerate. > * configure.ac: Handle Darwin rpaths. >=20 > liboffloadmic/ChangeLog: >=20 > * configure: Regenerate. > * plugin/Makefile.in: Regenerate. > * plugin/aclocal.m4: Regenerate. > * plugin/configure: Regenerate. >=20 > libphobos/ChangeLog: >=20 > * configure: Regenerate. > * libdruntime/Makefile.am: Handle Darwin rpaths. > * libdruntime/Makefile.in: Regenerate. > * src/Makefile.am: Handle Darwin rpaths. > * src/Makefile.in: Regenerate. >=20 > libquadmath/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. > * configure.ac: Handle Darwin rpaths. >=20 > libsanitizer/ChangeLog: >=20 > * asan/Makefile.am: Handle Darwin rpaths. > * asan/Makefile.in: Regenerate. > * configure: Regenerate. > * hwasan/Makefile.am: Handle Darwin rpaths. > * hwasan/Makefile.in: Regenerate. > * lsan/Makefile.am: Handle Darwin rpaths. > * lsan/Makefile.in: Regenerate. > * tsan/Makefile.am: Handle Darwin rpaths. > * tsan/Makefile.in: Regenerate. > * ubsan/Makefile.am: Handle Darwin rpaths. > * ubsan/Makefile.in: Regenerate. >=20 > libssp/ChangeLog: >=20 > * Makefile.am: Handle Darwin rpaths. > * Makefile.in: Regenerate. > * configure: Regenerate. >=20 > libstdc++-v3/ChangeLog: >=20 > * configure: Regenerate. > * src/Makefile.am: Handle Darwin rpaths. > * src/Makefile.in: Regenerate. >=20 > Darwin, libtool : Provide a mechanism to enable embedded rpaths. >=20 > We need to be able to build libraries with install names that begin > with @rpath so that we can use rpaths in DSOs that depend on > them. Since the install name is set in libtool, that decision needs > to be available here (but might also cause dependent ones in > Makefiles, so we need to export a conditional). > --- > configure | 5 + > configure.ac | 5 + > gcc/aclocal.m4 | 50 +++++++ > gcc/configure | 157 +++++++++++++++++++-- > libatomic/Makefile.am | 6 +- > libatomic/Makefile.in | 5 +- > libatomic/configure | 82 ++++++++++- > libatomic/testsuite/Makefile.in | 1 + > libbacktrace/configure | 80 ++++++++++- > libcc1/Makefile.am | 9 ++ > libcc1/Makefile.in | 12 +- > libcc1/configure | 157 +++++++++++++++++++-- > libffi/Makefile.am | 7 +- > libffi/Makefile.in | 6 +- > libffi/configure | 157 +++++++++++++++++++-- > libgcc/config.host | 22 ++- > libgcc/config/t-darwin-rpath | 5 + > libgcc/config/t-slibgcc-darwin | 13 +- > libgfortran/Makefile.am | 3 + > libgfortran/Makefile.in | 30 ++-- > libgfortran/configure | 155 ++++++++++++++++++-- > libgfortran/configure.ac | 4 +- > libgomp/Makefile.am | 6 +- > libgomp/Makefile.in | 3 +- > libgomp/configure | 151 ++++++++++++++++++-- > libitm/Makefile.am | 5 +- > libitm/Makefile.in | 3 +- > libitm/configure | 171 ++++++++++++++++++++--- > libobjc/configure | 96 +++++++++++-- > libobjc/configure.ac | 14 +- > liboffloadmic/configure | 199 +++++++++++++++++++++----- > liboffloadmic/plugin/Makefile.in | 2 +- > liboffloadmic/plugin/aclocal.m4 | 2 +- > liboffloadmic/plugin/configure | 199 +++++++++++++++++++++----- > libphobos/configure | 151 ++++++++++++++++++-- > libphobos/libdruntime/Makefile.am | 5 +- > libphobos/libdruntime/Makefile.in | 3 +- > libphobos/src/Makefile.am | 5 +- > libphobos/src/Makefile.in | 3 +- > libquadmath/Makefile.am | 6 +- > libquadmath/Makefile.in | 4 +- > libquadmath/configure | 225 +++++++++++++++++++++++++++++- > libquadmath/configure.ac | 2 + > libsanitizer/asan/Makefile.am | 6 +- > libsanitizer/asan/Makefile.in | 5 +- > libsanitizer/configure | 157 +++++++++++++++++++-- > libsanitizer/hwasan/Makefile.am | 6 +- > libsanitizer/hwasan/Makefile.in | 5 +- > libsanitizer/lsan/Makefile.am | 7 +- > libsanitizer/lsan/Makefile.in | 6 +- > libsanitizer/tsan/Makefile.am | 6 +- > libsanitizer/tsan/Makefile.in | 5 +- > libsanitizer/ubsan/Makefile.am | 6 +- > libsanitizer/ubsan/Makefile.in | 5 +- > libssp/Makefile.am | 5 +- > libssp/Makefile.in | 3 +- > libssp/configure | 82 ++++++++++- > libstdc++-v3/configure | 169 +++++++++++++++++++--- > libstdc++-v3/src/Makefile.am | 6 +- > libstdc++-v3/src/Makefile.in | 3 +- > libtool.m4 | 64 ++++++++- > libvtv/configure | 171 ++++++++++++++++++++--- > lto-plugin/Makefile.in | 1 - > lto-plugin/configure | 80 ++++++++++- > zlib/configure | 82 ++++++++++- > 67 files changed, 2780 insertions(+), 532 deletions(-) > create mode 100644 libgcc/config/t-darwin-rpath >=20 > diff --git a/configure.ac b/configure.ac > index bed60bcaf72..bd79a2ffcb9 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1769,6 +1769,11 @@ AC_ARG_WITH(boot-ldflags, > if test "$poststage1_libs" =3D ""; then > poststage1_ldflags=3D"-static-libstdc++ -static-libgcc" > fi]) > +if test "x$enable_darwin_at_rpath" =3D "xyes"; then > + if test "x$host_shared" !=3D "xyes"; then=20 > + poststage1_ldflags=3D"$poststage1_ldflags -nodefaultrpath" > + fi > +fi=20 > AC_SUBST(poststage1_ldflags) >=20 > # GCC GRAPHITE dependency isl. >=20 >=20 > diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am > index 0f3cd6f7121..cde856e532e 100644 > --- a/libatomic/Makefile.am > +++ b/libatomic/Makefile.am > @@ -65,8 +65,12 @@ libatomic_version_script =3D > libatomic_version_dep =3D > endif > libatomic_version_info =3D -version-info $(libtool_VERSION) > +if ENABLE_DARWIN_AT_RPATH > +libatomic_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif >=20 > -libatomic_la_LDFLAGS =3D $(libatomic_version_info) = $(libatomic_version_script) $(lt_host_flags) > +libatomic_la_LDFLAGS =3D $(libatomic_version_info) = $(libatomic_version_script) \ > + $(lt_host_flags) $(libatomic_darwin_rpath)=20 > libatomic_la_SOURCES =3D gload.c gstore.c gcas.c gexch.c glfree.c = lock.c init.c \ > fenv.c fence.c flag.c >=20 > diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am > index 49a9543ea7d..aa07d5923bb 100644 > --- a/libcc1/Makefile.am > +++ b/libcc1/Makefile.am > @@ -55,6 +55,9 @@ marshall_c_source =3D marshall-c.hh > marshall_cxx_source =3D marshall-cp.hh >=20 > libcc1plugin_la_LDFLAGS =3D -module -export-symbols = $(srcdir)/libcc1plugin.sym > +if ENABLE_DARWIN_AT_RPATH > +libcc1plugin_la_LDFLAGS +=3D -Wl,-rpath,@loader_path > +endif > libcc1plugin_la_SOURCES =3D libcc1plugin.cc context.cc context.hh \ > $(shared_source) $(marshall_c_source) > libcc1plugin.lo_CPPFLAGS =3D $(CPPFLAGS_FOR_C) > @@ -65,6 +68,9 @@ libcc1plugin_la_LINK =3D $(LIBTOOL) --tag=3DCXX = $(AM_LIBTOOLFLAGS) \ > $(CXXFLAGS) $(libcc1plugin_la_LDFLAGS) $(LTLDFLAGS) -o $@ >=20 > libcp1plugin_la_LDFLAGS =3D -module -export-symbols = $(srcdir)/libcp1plugin.sym > +if ENABLE_DARWIN_AT_RPATH > +libcp1plugin_la_LDFLAGS +=3D -Wl,-rpath,@loader_path > +endif > libcp1plugin_la_SOURCES =3D libcp1plugin.cc context.cc context.hh \ > $(shared_source) $(marshall_cxx_source) > libcp1plugin.lo_CPPFLAGS =3D $(CPPFLAGS_FOR_CXX) > @@ -76,6 +82,9 @@ libcp1plugin_la_LINK =3D $(LIBTOOL) --tag=3DCXX = $(AM_LIBTOOLFLAGS) \ >=20 > LTLDFLAGS =3D $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags = $(LDFLAGS)) > libcc1_la_LDFLAGS =3D -module -export-symbols $(srcdir)/libcc1.sym > +if ENABLE_DARWIN_AT_RPATH > +libcc1_la_LDFLAGS +=3D -Wl,-rpath,@loader_path > +endif > libcc1_la_SOURCES =3D findcomp.cc libcc1.cc libcp1.cc \ > compiler.cc compiler.hh names.cc names.hh = $(shared_source) \ > $(marshall_c_source) $(marshall_cxx_source) >=20 > diff --git a/libffi/Makefile.am b/libffi/Makefile.am > index c6d6f849c53..d2ae0c04c7b 100644 > --- a/libffi/Makefile.am > +++ b/libffi/Makefile.am > @@ -214,7 +214,12 @@ libffi.map: $(top_srcdir)/libffi.map.in > $(COMPILE) -D$(TARGET) -DGENERATE_LIBFFI_MAP \ > -E -x assembler-with-cpp -o $@ $(top_srcdir)/libffi.map.in >=20 > -libffi_la_LDFLAGS =3D -no-undefined $(libffi_version_info) = $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) > +if ENABLE_DARWIN_AT_RPATH > +libffi_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +libffi_la_LDFLAGS =3D -no-undefined $(libffi_version_info) \ > + $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) \ > + $(libffi_darwin_rpath) > libffi_la_DEPENDENCIES =3D $(libffi_la_LIBADD) $(libffi_version_dep) >=20 > AM_CPPFLAGS =3D -I. -I$(top_srcdir)/include -Iinclude = -I$(top_srcdir)/src >=20 > diff --git a/libffi/Makefile.in b/libffi/Makefile.in > index 5524a6a571e..34e77a45d1a 100644 > --- a/libffi/Makefile.in > +++ b/libffi/Makefile.in > @@ -597,7 +597,11 @@ AM_CFLAGS =3D -Wall -g -fexceptions $(CET_FLAGS) = $(am__append_2) > = @LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@= libffi_version_dep =3D libffi.map > = @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@= libffi_version_dep =3D libffi.map-sun > libffi_version_info =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` > -libffi_la_LDFLAGS =3D -no-undefined $(libffi_version_info) = $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) > +@ENABLE_DARWIN_AT_RPATH_TRUE@libffi_darwin_rpath =3D = -Wl,-rpath,@loader_path > +libffi_la_LDFLAGS =3D -no-undefined $(libffi_version_info) \ > + $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) \ > + $(libffi_darwin_rpath) > + > libffi_la_DEPENDENCIES =3D $(libffi_la_LIBADD) $(libffi_version_dep) > AM_CPPFLAGS =3D -I. -I$(top_srcdir)/include -Iinclude = -I$(top_srcdir)/src > AM_CCASFLAGS =3D $(AM_CPPFLAGS) $(CET_FLAGS) >=20 >=20 > diff --git a/libgcc/config.host b/libgcc/config.host > index 168535b1780..5306a509ff8 100644 > --- a/libgcc/config.host > +++ b/libgcc/config.host > @@ -214,7 +214,27 @@ esac > case ${host} in > *-*-darwin*) > asm_hidden_op=3D.private_extern > - tmake_file=3D"$tmake_file t-darwin ${cpu_type}/t-darwin = t-libgcc-pic t-slibgcc-darwin" > + tmake_file=3D"$tmake_file t-darwin ${cpu_type}/t-darwin " > + tmake_file=3D"$tmake_file t-libgcc-pic t-slibgcc-darwin " > + # We are not using libtool to build the libs here, so we need to = replicate > + # a little of the logic around setting Darwin rpaths. Setting an = explicit > + # yes or no is honoured, otherwise we choose a suitable default. > + # Sadly, this has to be kept in line with the rules in libtool.m4. > + if test "x$enable_darwin_at_rpath" =3D "xyes"; then > + tmake_file=3D"$tmake_file t-darwin-rpath " > + elif test "x$enable_darwin_at_rpath" =3D "x"; then > + echo "enable_darwin_at_rpath is unset" 1>&2 > + case ${host} in > + *-darwin[45678]*) ;; > + *-darwin9* | *-darwin1[01234]*) ;; # We might default these on = later. > + *-darwin*) > + echo "but is needed after macOS 10.11 (setting it on)" 1>&2 > + tmake_file=3D"$tmake_file t-darwin-rpath " > + ;; > + esac > + else > + echo "enable_darwin_at_rpath is '$enable_darwin_at_rpath'" 1>&2 > + fi > extra_parts=3D"crt3.o libd10-uwfef.a crttms.o crttme.o" > ;; > *-*-dragonfly*) >=20 > diff --git a/libgcc/config/t-darwin-rpath = b/libgcc/config/t-darwin-rpath > new file mode 100644 > index 00000000000..7cf63d9cb6b > --- /dev/null > +++ b/libgcc/config/t-darwin-rpath > @@ -0,0 +1,5 @@ > +# Use @rpath and add a search path to exes and dylibs that depend on = this. > +SHLIB_RPATH =3D @rpath > + > +# Which does not work for Darwin < 9 > +HOST_LIBGCC2_CFLAGS +=3D -mmacosx-version-min=3D10.5 > diff --git a/libgcc/config/t-slibgcc-darwin = b/libgcc/config/t-slibgcc-darwin > index bd1e9631c17..b800a9aa175 100644 > --- a/libgcc/config/t-slibgcc-darwin > +++ b/libgcc/config/t-slibgcc-darwin > @@ -10,17 +10,16 @@ SHLIB_OBJS =3D @shlib_objs@ > SHLIB_DIR =3D @multilib_dir@ > SHLIB_LC =3D -lc >=20 > -# Darwin only searches in /usr/lib for shared libraries, not in = subdirectories, > -# so the libgcc variants have different names not different = locations. > -# Note that this version is used for the loader, not the linker; the = linker > -# uses the stub versions named by the versioned members of = $(INSTALL_FILES). > +# Instead of using @shlib_slibdir@, use @rpath and add a search path = to exes > +# and dylibs that depend on this. > +SHLIB_RPATH =3D @shlib_slibdir@ >=20 > SHLIB_LINK =3D $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib = -nodefaultlibs \ > - -install_name @shlib_slibdir@/$(SHLIB_INSTALL_NAME) \ > + -install_name $(SHLIB_RPATH)/$(SHLIB_INSTALL_NAME) \ > -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME) \ > -Wl,-exported_symbols_list,$(SHLIB_MAP) \ > - $(SHLIB_VERSTRING) \ > - @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) > + $(SHLIB_VERSTRING) -nodefaultrpath \ > + @multilib_flags@ @shlib_objs@ $(SHLIB_LC) >=20 > SHLIB_MKMAP =3D $(srcdir)/mkmap-flat.awk > SHLIB_MKMAP_OPTS =3D -v leading_underscore=3D1 >=20 > diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am > index 008f2e7549c..e036b88119e 100644 > --- a/libgfortran/Makefile.am > +++ b/libgfortran/Makefile.am > @@ -29,6 +29,9 @@ else > version_arg =3D > version_dep =3D > endif > +if ENABLE_DARWIN_AT_RPATH > +extra_ldflags_libgfortran +=3D -Wl,-rpath,@loader_path > +endif >=20 > gfor_c_HEADERS =3D ISO_Fortran_binding.h > gfor_cdir =3D $(libdir)/gcc/$(target_alias)/$(gcc_version)/include >=20 > diff --git a/libgomp/Makefile.am b/libgomp/Makefile.am > index f8b2a06d63e..4dca7e532bf 100644 > --- a/libgomp/Makefile.am > +++ b/libgomp/Makefile.am > @@ -53,9 +53,13 @@ else > libgomp_version_script =3D > libgomp_version_dep =3D > endif > + > libgomp_version_info =3D -version-info $(libtool_VERSION) > +if ENABLE_DARWIN_AT_RPATH > +libgomp_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > libgomp_la_LDFLAGS =3D $(libgomp_version_info) = $(libgomp_version_script) \ > - $(lt_host_flags) > + $(lt_host_flags) $(libgomp_darwin_rpath) > libgomp_la_DEPENDENCIES =3D $(libgomp_version_dep) > libgomp_la_LINK =3D $(LINK) $(libgomp_la_LDFLAGS) >=20 > diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in > index 22cb2136a08..7a45add6a36 100644 > --- a/libgomp/Makefile.in > +++ b/libgomp/Makefile.in > @@ -546,8 +546,9 @@ nodist_toolexeclib_HEADERS =3D libgomp.spec > = @LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRU= E@libgomp_version_dep =3D libgomp.ver > = @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRU= E@libgomp_version_dep =3D libgomp.ver-sun > libgomp_version_info =3D -version-info $(libtool_VERSION) > +@ENABLE_DARWIN_AT_RPATH_TRUE@libgomp_darwin_rpath =3D = -Wl,-rpath,@loader_path > libgomp_la_LDFLAGS =3D $(libgomp_version_info) = $(libgomp_version_script) \ > - $(lt_host_flags) > + $(lt_host_flags) $(libgomp_darwin_rpath) >=20 > libgomp_la_DEPENDENCIES =3D $(libgomp_version_dep) > libgomp_la_LINK =3D $(LINK) $(libgomp_la_LDFLAGS) >=20 > diff --git a/libitm/Makefile.am b/libitm/Makefile.am > index 3f31ad30556..053a54fb093 100644 > --- a/libitm/Makefile.am > +++ b/libitm/Makefile.am > @@ -54,7 +54,10 @@ libitm_version_info =3D -version-info = $(libtool_VERSION) > # want or need libstdc++. > libitm_la_DEPENDENCIES =3D $(libitm_version_dep) > libitm_la_LINK =3D $(LINK) $(libitm_la_LDFLAGS) > -libitm_la_LDFLAGS =3D $(libitm_version_info) $(libitm_version_script) > +if ENABLE_DARWIN_AT_RPATH > +libitm_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +libitm_la_LDFLAGS =3D $(libitm_version_info) $(libitm_version_script) = $(libitm_darwin_rpath) >=20 > libitm_la_SOURCES =3D \ > aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc barrier.cc = beginend.cc \ >=20 >=20 > diff --git a/libobjc/configure.ac b/libobjc/configure.ac > index c1104db85f0..92b77dc1700 100644 > --- a/libobjc/configure.ac > +++ b/libobjc/configure.ac > @@ -148,10 +148,20 @@ = m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) > # extra LD Flags which are required for targets > ACX_LT_HOST_FLAGS > case "${host}" in > - *-darwin*) > - # Darwin needs -single_module when linking libobjc > + *-darwin[[4567]]*) > + # Earlier Darwin versions need -single_module when linking = libobjc; they > + # do not support @rpath. > extra_ldflags_libobjc=3D'$(lt_host_flags) -Wl,-single_module' > ;; > + *-darwin*) > + # Otherwise, single_module is the default and multi-module is = ignored and > + # obsolete. > + if test "x$enable_darwin_at_rpath" =3D "xyes"; then > + extra_ldflags_libobjc=3D'$(lt_host_flags) = -Wl,-rpath,@loader_path' > + else > + extra_ldflags_libobjc=3D'$(lt_host_flags)' > + fi > + ;; > *-cygwin*|*-mingw*) > # Tell libtool to build DLLs on Windows > extra_ldflags_libobjc=3D'$(lt_host_flags)' >=20 >=20 > diff --git a/libsanitizer/asan/Makefile.am = b/libsanitizer/asan/Makefile.am > index 4f802f723d6..86ac110466b 100644 > --- a/libsanitizer/asan/Makefile.am > +++ b/libsanitizer/asan/Makefile.am > @@ -60,7 +60,11 @@ libasan_la_LIBADD +=3D = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la > endif > libasan_la_LIBADD +=3D $(LIBSTDCXX_RAW_CXX_LDFLAGS) >=20 > -libasan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` $(link_libasan) > +if ENABLE_DARWIN_AT_RPATH > +libasan_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +libasan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` \ > + $(link_libasan) $(libasan_darwin_rpath) >=20 > libasan_preinit.o: asan_preinit.o > cp $< $@ >=20 > diff --git a/libsanitizer/hwasan/Makefile.am = b/libsanitizer/hwasan/Makefile.am > index e12c0a0ce71..d73bcac782a 100644 > --- a/libsanitizer/hwasan/Makefile.am > +++ b/libsanitizer/hwasan/Makefile.am > @@ -46,7 +46,11 @@ libhwasan_la_LIBADD +=3D = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la > endif > libhwasan_la_LIBADD +=3D $(LIBSTDCXX_RAW_CXX_LDFLAGS) >=20 > -libhwasan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` $(link_libhwasan) > +if ENABLE_DARWIN_AT_RPATH > +libhwasan_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +libhwasan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` \ > + $(link_libhwasan) $(libhwasan_darwin_rpath) >=20 > # Work around what appears to be a GNU make bug handling MAKEFLAGS > # values defined in terms of make variables, as is the case for CC and >=20 > diff --git a/libsanitizer/lsan/Makefile.am = b/libsanitizer/lsan/Makefile.am > index 6ff28ff5eea..34a9f7b9977 100644 > --- a/libsanitizer/lsan/Makefile.am > +++ b/libsanitizer/lsan/Makefile.am > @@ -41,8 +41,11 @@ if LIBBACKTRACE_SUPPORTED > liblsan_la_LIBADD +=3D = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la > endif > liblsan_la_LIBADD +=3D $(LIBSTDCXX_RAW_CXX_LDFLAGS) > -liblsan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` $(link_liblsan) > - > +if ENABLE_DARWIN_AT_RPATH > +liblsan_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +liblsan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` \ > + $(link_liblsan) $(liblsan_darwin_rpath) > liblsan_preinit.o: lsan_preinit.o > cp $< $@ >=20 >=20 > diff --git a/libsanitizer/tsan/Makefile.am = b/libsanitizer/tsan/Makefile.am > index ae588a67df6..eed8f321b3c 100644 > --- a/libsanitizer/tsan/Makefile.am > +++ b/libsanitizer/tsan/Makefile.am > @@ -58,7 +58,11 @@ libtsan_la_LIBADD +=3D = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la > libtsan_la_DEPENDENCIES = +=3D$(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la > endif > libtsan_la_LIBADD +=3D $(LIBSTDCXX_RAW_CXX_LDFLAGS) > -libtsan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` $(link_libtsan) > +if ENABLE_DARWIN_AT_RPATH > +libtsan_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +libtsan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` \ > + $(link_libtsan) $(libtsan_darwin_rpath) >=20 > libtsan_preinit.o: tsan_preinit.o > cp $< $@ >=20 > diff --git a/libsanitizer/ubsan/Makefile.am = b/libsanitizer/ubsan/Makefile.am > index d480f26adc0..0bfae37ba09 100644 > --- a/libsanitizer/ubsan/Makefile.am > +++ b/libsanitizer/ubsan/Makefile.am > @@ -36,7 +36,11 @@ if LIBBACKTRACE_SUPPORTED > libubsan_la_LIBADD +=3D = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la > endif > libubsan_la_LIBADD +=3D $(LIBSTDCXX_RAW_CXX_LDFLAGS) > -libubsan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` $(link_libubsan) > +if ENABLE_DARWIN_AT_RPATH > +libubsan_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > +libubsan_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` \ > + $(link_libubsan) $(libubsan_darwin_rpath) >=20 > # Use special rules for files that require RTTI support. > ubsan_handlers_cxx.% ubsan_type_hash.% ubsan_type_hash_itanium.% : = AM_CXXFLAGS +=3D -frtti >=20 > diff --git a/libssp/Makefile.am b/libssp/Makefile.am > index 6045c320cfa..1155e987a9b 100644 > --- a/libssp/Makefile.am > +++ b/libssp/Makefile.am > @@ -49,8 +49,11 @@ libssp_la_SOURCES =3D \ > vsnprintf-chk.c vsprintf-chk.c > libssp_la_LIBADD =3D=20 > libssp_la_DEPENDENCIES =3D $(version_dep) $(libssp_la_LIBADD) > +if ENABLE_DARWIN_AT_RPATH > +libssp_darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > libssp_la_LDFLAGS =3D -version-info `grep -v '^\#' = $(srcdir)/libtool-version` \ > - $(version_arg) $(lt_host_flags) > + $(version_arg) $(lt_host_flags) = $(libssp_darwin_rpath) >=20 > libssp_nonshared_la_SOURCES =3D \ > ssp-local.c >=20 > diff --git a/libstdc++-v3/src/Makefile.am = b/libstdc++-v3/src/Makefile.am > index f27d3f8c87e..77e7cedb17a 100644 > --- a/libstdc++-v3/src/Makefile.am > +++ b/libstdc++-v3/src/Makefile.am > @@ -122,8 +122,12 @@ libstdc___la_DEPENDENCIES =3D \ > $(top_builddir)/src/c++17/libc++17convenience.la \ > $(top_builddir)/src/c++20/libc++20convenience.la >=20 > +if ENABLE_DARWIN_AT_RPATH > +libstdc___darwin_rpath =3D -Wl,-rpath,@loader_path > +endif > + > libstdc___la_LDFLAGS =3D \ > - -version-info $(libtool_VERSION) ${version_arg} -lm > + -version-info $(libtool_VERSION) ${version_arg} -lm = $(libstdc___darwin_rpath) >=20 > libstdc___la_LINK =3D $(CXXLINK) $(libstdc___la_LDFLAGS) = $(lt_host_flags) >=20 > diff --git a/libstdc++-v3/src/Makefile.in = b/libstdc++-v3/src/Makefile.in > index 05b25ed5e9d..c4eb9e8c546 100644 > --- a/libstdc++-v3/src/Makefile.in > +++ b/libstdc++-v3/src/Makefile.in > @@ -534,8 +534,9 @@ libstdc___la_DEPENDENCIES =3D \ > $(top_builddir)/src/c++17/libc++17convenience.la \ > $(top_builddir)/src/c++20/libc++20convenience.la >=20 > +@ENABLE_DARWIN_AT_RPATH_TRUE@libstdc___darwin_rpath =3D = -Wl,-rpath,@loader_path > libstdc___la_LDFLAGS =3D \ > - -version-info $(libtool_VERSION) ${version_arg} -lm > + -version-info $(libtool_VERSION) ${version_arg} -lm = $(libstdc___darwin_rpath) >=20 > libstdc___la_LINK =3D $(CXXLINK) $(libstdc___la_LDFLAGS) = $(lt_host_flags) > = @GLIBCXX_LDBL_ALT128_COMPAT_FALSE@@GLIBCXX_LDBL_COMPAT_TRUE@LTCXXCOMPILE64= =3D $(LTCXXCOMPILE) >=20 > diff --git a/libtool.m4 b/libtool.m4 > index 17f8e5f3074..b474089fc3e 100644 > --- a/libtool.m4 > +++ b/libtool.m4 > @@ -1039,6 +1039,47 @@ _LT_EOF > m4_defun([_LT_DARWIN_LINKER_FEATURES], > [ > m4_require([_LT_REQUIRED_DARWIN_CHECKS]) > + > + # Publish an arg to allow the user to select that Darwin host (and = target) > + # libraries should be given install-names like @rpath/libfoo.dylib. = This > + # requires that the user of the library then adds an 'rpath' to the = DSO that > + # needs access. > + # NOTE: there are defaults below, for systems that support rpaths. = The person > + # configuring can override the defaults for any system version that = supports > + # them - they are, however, forced off for system versions without = support. > + AC_ARG_ENABLE([darwin-at-rpath], > + AS_HELP_STRING([--enable-darwin-at-path], > + [install libraries with @rpath/library-name, requires rpaths to = be added to executables]), > + [if test "x$enable_darwin_at_rpath" =3D "xyes"; then > + # This is not supported before macOS 10.5 / Darwin9. > + case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in > + UNSET,darwin[[45678]]*|UNSET,rhapsody*|10.[[01234]][[,.]]*) > + echo "WARNING: Darwin @rpath library names are incompatible with = macOS versions earlier than 10.5 (rpaths disabled)" 1>&AS_MESSAGE_LOG_FD > + enable_darwin_at_rpath=3Dno > + ;; > + esac > + fi], > + [case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in > + # As above, before 10.5 / Darwin9 this does not work. > + UNSET,darwin[[45678]]*|UNSET,rhapsody*|10.[[01234]][[,.]]*) > + enable_darwin_at_rpath=3Dno > + ;; > + > + # We cannot build and test reliably on macOS 10.11+ (Darwin15+) = without use > + # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided = by key > + # system executables (e.g. /bin/sh). Force rpaths on for these = systems. > + = UNSET,darwin1[[56789]]*|UNSET,darwin2*|10.1[[123456789]][[,.]]*|1[[12]].*[= [,.]]* ) > + echo "@rpath library names are needed on macOS versions later = than 10.11 (rpaths enabled)" 1>&AS_MESSAGE_LOG_FD > + enable_darwin_at_rpath=3Dyes > + ;; > + # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since = they can > + # work with either DYLD_LIBRARY_PATH or embedded rpaths. > + > + esac > + ]) > + > + AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test = "x$enable_darwin_at_rpath" =3D "xyes"]) > + > _LT_TAGVAR(archive_cmds_need_lc, $1)=3Dno > _LT_TAGVAR(hardcode_direct, $1)=3Dno > _LT_TAGVAR(hardcode_automatic, $1)=3Dyes > @@ -1056,13 +1097,26 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], > esac > if test "$_lt_dar_can_shared" =3D "yes"; then > output_verbose_link_cmd=3Dfunc_echo_all > - _LT_TAGVAR(archive_cmds, $1)=3D"\$CC -dynamiclib = \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags = -install_name \$rpath/\$soname \$verstring = $_lt_dar_single_mod${_lt_dsymutil}" > - _LT_TAGVAR(module_cmds, $1)=3D"\$CC \$allow_undefined_flag -o = \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" > - _LT_TAGVAR(archive_expsym_cmds, $1)=3D"sed 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC = -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs = \$compiler_flags -install_name \$rpath/\$soname \$verstring = ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" > - _LT_TAGVAR(module_expsym_cmds, $1)=3D"sed -e 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC = \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs = \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" > + if test "x$enable_darwin_at_rpath" =3D "xyes"; then > + echo "using Darwin @rpath" 1>&AS_MESSAGE_LOG_FD > + _LT_TAGVAR(archive_cmds, $1)=3D"\$CC -dynamiclib = \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags = -install_name @rpath/\$soname \$verstring ${_lt_dsymutil}" > + _LT_TAGVAR(module_cmds, $1)=3D"\$CC \$allow_undefined_flag -o = \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" > + _LT_TAGVAR(archive_expsym_cmds, $1)=3D"sed 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC = -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs = \$compiler_flags -install_name @rpath/\$soname \$verstring = ${_lt_dar_export_syms}${_lt_dsymutil}" > + _LT_TAGVAR(module_expsym_cmds, $1)=3D"sed -e 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC = \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs = \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" > + else > + echo "NOT using Darwin @rpath" 1>&AS_MESSAGE_LOG_FD > + _LT_TAGVAR(archive_cmds, $1)=3D"\$CC -dynamiclib = \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags = -install_name \$rpath/\$soname \$verstring = $_lt_dar_single_mod${_lt_dsymutil}" > + _LT_TAGVAR(module_cmds, $1)=3D"\$CC \$allow_undefined_flag -o = \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" > + _LT_TAGVAR(archive_expsym_cmds, $1)=3D"sed 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC = -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs = \$compiler_flags -install_name \$rpath/\$soname \$verstring = ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" > + _LT_TAGVAR(module_expsym_cmds, $1)=3D"sed -e 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC = \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs = \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" > + fi > m4_if([$1], [CXX], > [ if test "$lt_cv_apple_cc_single_mod" !=3D "yes"; then > - _LT_TAGVAR(archive_cmds, $1)=3D"\$CC -r -keep_private_externs = -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib = \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs = \$compiler_flags -install_name \$rpath/\$soname = \$verstring${_lt_dsymutil}" > + if test "x$enable_darwin_at_rpath" =3D "xyes"; then > + _LT_TAGVAR(archive_cmds, $1)=3D"\$CC -r -keep_private_externs = -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib = \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs = \$compiler_flags -install_name @rpath/\$soname = \$verstring${_lt_dsymutil}" > + else > + _LT_TAGVAR(archive_cmds, $1)=3D"\$CC -r -keep_private_externs = -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib = \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs = \$compiler_flags -install_name \$rpath/\$soname = \$verstring${_lt_dsymutil}" > + fi > _LT_TAGVAR(archive_expsym_cmds, $1)=3D"sed 's,^,_,' < = \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r = -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC = -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs = \$compiler_flags -install_name \$rpath/\$soname = \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" > fi > ],[]) >=20 > diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in > index f8df31bb1e8..591a1624e98 100644 > --- a/lto-plugin/Makefile.in > +++ b/lto-plugin/Makefile.in > @@ -323,7 +323,6 @@ prefix =3D @prefix@ > program_transform_name =3D @program_transform_name@ > psdir =3D @psdir@ > real_target_noncanonical =3D @real_target_noncanonical@ > -runstatedir =3D @runstatedir@ > sbindir =3D @sbindir@ > sharedstatedir =3D @sharedstatedir@ > srcdir =3D @srcdir@ >=20 > --=20 > 2.24.3 (Apple Git-128) >=20