public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
From: Iain Sandoe <iains.gcc@gmail.com>
To: libstdc++ <libstdc++@gcc.gnu.org>
Subject: Fwd: [PATCH 3/4] Darwin : Allow for configuring Darwin to use embedded runpath.
Date: Wed, 17 Nov 2021 21:27:42 +0000	[thread overview]
Message-ID: <160318AE-E2F4-4612-AEC1-5013419B6359@gmail.com> (raw)
In-Reply-To: <20211117210319.92514-4-iain@sandoe.co.uk>

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. 

> Begin forwarded message:
> 
> From: Iain Sandoe <iains.gcc@gmail.com>
> 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
> 
> Recent Darwin versions place contraints on the use of run paths
> specified in environment variables.  This breaks some assumptions
> in the GCC build.
> 
> 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).
> 
> The embedded runpath is added by default unless:
> 
> 1. the user adds an explicit -rpath / -Wl,-rpath,....
> 2. the user adds '-nodefaultrpath'.
> 
> 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).
> 
> During build-time configurations  any "-B" entries will be added to
> the runpath thus the newly-built libraries will be found by exes.
> 
> 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).
> 
> This facility is not available for Darwin 8 or earlier, however the
> existing environment variable runpath does work there.
> 
> 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).
> 
> ChangeLog:
> 
> 	* 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.
> 
> gcc/ChangeLog:
> 
> 	* aclocal.m4: Regenerate.
> 	* configure: Regenerate.
> 
> libatomic/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 	* testsuite/Makefile.in: Regenerate.
> 
> libcc1/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 
> libffi/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 
> libgcc/ChangeLog:
> 
> 	* config/t-slibgcc-darwin: Generate libgcc_s
> 	with an @rpath name.
> 
> libgfortran/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 	* configure.ac: Handle Darwin rpaths
> 
> libgomp/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 
> libhsail-rt/ChangeLog:
> 
> 	* configure: Regenerate.
> 
> libitm/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 
> libobjc/ChangeLog:
> 
> 	* configure: Regenerate.
> 	* configure.ac: Handle Darwin rpaths.
> 
> liboffloadmic/ChangeLog:
> 
> 	* configure: Regenerate.
> 	* plugin/Makefile.in: Regenerate.
> 	* plugin/aclocal.m4: Regenerate.
> 	* plugin/configure: Regenerate.
> 
> libphobos/ChangeLog:
> 
> 	* configure: Regenerate.
> 	* libdruntime/Makefile.am: Handle Darwin rpaths.
> 	* libdruntime/Makefile.in: Regenerate.
> 	* src/Makefile.am: Handle Darwin rpaths.
> 	* src/Makefile.in: Regenerate.
> 
> libquadmath/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 	* configure.ac: Handle Darwin rpaths.
> 
> libsanitizer/ChangeLog:
> 
> 	* 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.
> 
> libssp/ChangeLog:
> 
> 	* Makefile.am: Handle Darwin rpaths.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 
> libstdc++-v3/ChangeLog:
> 
> 	* configure: Regenerate.
> 	* src/Makefile.am: Handle Darwin rpaths.
> 	* src/Makefile.in: Regenerate.
> 
> Darwin, libtool : Provide a mechanism to enable embedded rpaths.
> 
> 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
> 
> 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" = ""; then
>    poststage1_ldflags="-static-libstdc++ -static-libgcc"
>  fi])
> +if test "x$enable_darwin_at_rpath" = "xyes"; then
> +  if test "x$host_shared" != "xyes"; then 
> +    poststage1_ldflags="$poststage1_ldflags -nodefaultrpath"
> +  fi
> +fi 
> AC_SUBST(poststage1_ldflags)
> 
> # GCC GRAPHITE dependency isl.
> 
> 
> 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 =
> libatomic_version_dep =
> endif
> libatomic_version_info = -version-info $(libtool_VERSION)
> +if ENABLE_DARWIN_AT_RPATH
> +libatomic_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> 
> -libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) $(lt_host_flags)
> +libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \
> +	$(lt_host_flags) $(libatomic_darwin_rpath) 
> libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \
> 	fenv.c fence.c flag.c
> 
> 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 = marshall-c.hh
> marshall_cxx_source = marshall-cp.hh
> 
> libcc1plugin_la_LDFLAGS = -module -export-symbols $(srcdir)/libcc1plugin.sym
> +if ENABLE_DARWIN_AT_RPATH
> +libcc1plugin_la_LDFLAGS += -Wl,-rpath,@loader_path
> +endif
> libcc1plugin_la_SOURCES = libcc1plugin.cc context.cc context.hh \
> 	$(shared_source) $(marshall_c_source)
> libcc1plugin.lo_CPPFLAGS = $(CPPFLAGS_FOR_C)
> @@ -65,6 +68,9 @@ libcc1plugin_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
> 	$(CXXFLAGS) $(libcc1plugin_la_LDFLAGS) $(LTLDFLAGS) -o $@
> 
> libcp1plugin_la_LDFLAGS = -module -export-symbols $(srcdir)/libcp1plugin.sym
> +if ENABLE_DARWIN_AT_RPATH
> +libcp1plugin_la_LDFLAGS += -Wl,-rpath,@loader_path
> +endif
> libcp1plugin_la_SOURCES = libcp1plugin.cc context.cc context.hh \
> 	$(shared_source) $(marshall_cxx_source)
> libcp1plugin.lo_CPPFLAGS = $(CPPFLAGS_FOR_CXX)
> @@ -76,6 +82,9 @@ libcp1plugin_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
> 
> LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
> libcc1_la_LDFLAGS = -module -export-symbols $(srcdir)/libcc1.sym
> +if ENABLE_DARWIN_AT_RPATH
> +libcc1_la_LDFLAGS += -Wl,-rpath,@loader_path
> +endif
> libcc1_la_SOURCES = findcomp.cc libcc1.cc libcp1.cc \
> 		compiler.cc compiler.hh names.cc names.hh $(shared_source) \
> 		$(marshall_c_source) $(marshall_cxx_source)
> 
> 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
> 
> -libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
> +if ENABLE_DARWIN_AT_RPATH
> +libffi_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) \
> +	$(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) \
> +	$(libffi_darwin_rpath)
> libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
> 
> AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
> 
> 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 = -Wall -g -fexceptions $(CET_FLAGS) $(am__append_2)
> @LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map
> @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun
> libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
> -libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
> +@ENABLE_DARWIN_AT_RPATH_TRUE@libffi_darwin_rpath = -Wl,-rpath,@loader_path
> +libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) \
> +	$(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) \
> +	$(libffi_darwin_rpath)
> +
> libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
> AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
> AM_CCASFLAGS = $(AM_CPPFLAGS) $(CET_FLAGS)
> 
> 
> 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=.private_extern
> -  tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-libgcc-pic t-slibgcc-darwin"
> +  tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin "
> +  tmake_file="$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" = "xyes"; then
> +    tmake_file="$tmake_file t-darwin-rpath "
> +  elif test "x$enable_darwin_at_rpath" = "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="$tmake_file t-darwin-rpath "
> +        ;;
> +    esac
> +  else
> +    echo "enable_darwin_at_rpath is '$enable_darwin_at_rpath'" 1>&2
> +  fi
>   extra_parts="crt3.o libd10-uwfef.a crttms.o crttme.o"
>   ;;
> *-*-dragonfly*)
> 
> 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 = @rpath
> +
> +# Which does not work for Darwin < 9
> +HOST_LIBGCC2_CFLAGS += -mmacosx-version-min=10.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 = @shlib_objs@
> SHLIB_DIR = @multilib_dir@
> SHLIB_LC = -lc
> 
> -# 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 = @shlib_slibdir@
> 
> SHLIB_LINK = $(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)
> 
> SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
> SHLIB_MKMAP_OPTS = -v leading_underscore=1
> 
> 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 =
> version_dep =
> endif
> +if ENABLE_DARWIN_AT_RPATH
> +extra_ldflags_libgfortran += -Wl,-rpath,@loader_path
> +endif
> 
> gfor_c_HEADERS = ISO_Fortran_binding.h
> gfor_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include
> 
> 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 =
> libgomp_version_dep =
> endif
> +
> libgomp_version_info = -version-info $(libtool_VERSION)
> +if ENABLE_DARWIN_AT_RPATH
> +libgomp_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> libgomp_la_LDFLAGS = $(libgomp_version_info) $(libgomp_version_script) \
> -        $(lt_host_flags)
> +        $(lt_host_flags) $(libgomp_darwin_rpath)
> libgomp_la_DEPENDENCIES = $(libgomp_version_dep)
> libgomp_la_LINK = $(LINK) $(libgomp_la_LDFLAGS)
> 
> 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 = libgomp.spec
> @LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.ver
> @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.ver-sun
> libgomp_version_info = -version-info $(libtool_VERSION)
> +@ENABLE_DARWIN_AT_RPATH_TRUE@libgomp_darwin_rpath = -Wl,-rpath,@loader_path
> libgomp_la_LDFLAGS = $(libgomp_version_info) $(libgomp_version_script) \
> -        $(lt_host_flags)
> +        $(lt_host_flags) $(libgomp_darwin_rpath)
> 
> libgomp_la_DEPENDENCIES = $(libgomp_version_dep)
> libgomp_la_LINK = $(LINK) $(libgomp_la_LDFLAGS)
> 
> 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 = -version-info $(libtool_VERSION)
> # want or need libstdc++.
> libitm_la_DEPENDENCIES = $(libitm_version_dep)
> libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
> -libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
> +if ENABLE_DARWIN_AT_RPATH
> +libitm_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script) $(libitm_darwin_rpath)
> 
> libitm_la_SOURCES = \
> 	aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc barrier.cc beginend.cc \
> 
> 
> 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='$(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" = "xyes"; then
> +      extra_ldflags_libobjc='$(lt_host_flags) -Wl,-rpath,@loader_path'
> +    else
> +      extra_ldflags_libobjc='$(lt_host_flags)'
> +    fi
> +    ;;
>   *-cygwin*|*-mingw*)
>     # Tell libtool to build DLLs on Windows
>     extra_ldflags_libobjc='$(lt_host_flags)'
> 
> 
> 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 += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
> endif
> libasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
> 
> -libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan)
> +if ENABLE_DARWIN_AT_RPATH
> +libasan_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
> +	$(link_libasan) $(libasan_darwin_rpath)
> 
> libasan_preinit.o: asan_preinit.o
> 	cp $< $@
> 
> 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 += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
> endif
> libhwasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
> 
> -libhwasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libhwasan)
> +if ENABLE_DARWIN_AT_RPATH
> +libhwasan_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +libhwasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
> +	$(link_libhwasan) $(libhwasan_darwin_rpath)
> 
> # 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
> 
> 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 += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
> endif
> liblsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
> -liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_liblsan)
> -
> +if ENABLE_DARWIN_AT_RPATH
> +liblsan_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
> +	$(link_liblsan) $(liblsan_darwin_rpath)
> liblsan_preinit.o: lsan_preinit.o
> 	cp $< $@
> 
> 
> 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 += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
> libtsan_la_DEPENDENCIES +=$(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
> endif
> libtsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
> -libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libtsan)
> +if ENABLE_DARWIN_AT_RPATH
> +libtsan_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
> +	$(link_libtsan) $(libtsan_darwin_rpath)
> 
> libtsan_preinit.o: tsan_preinit.o
> 	cp $< $@
> 
> 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 += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
> endif
> libubsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
> -libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libubsan)
> +if ENABLE_DARWIN_AT_RPATH
> +libubsan_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
> +	$(link_libubsan) $(libubsan_darwin_rpath)
> 
> # Use special rules for files that require RTTI support.
> ubsan_handlers_cxx.% ubsan_type_hash.% ubsan_type_hash_itanium.% : AM_CXXFLAGS += -frtti
> 
> 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 = \
> 	vsnprintf-chk.c vsprintf-chk.c
> libssp_la_LIBADD = 
> libssp_la_DEPENDENCIES = $(version_dep) $(libssp_la_LIBADD)
> +if ENABLE_DARWIN_AT_RPATH
> +libssp_darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> libssp_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
> -		    $(version_arg) $(lt_host_flags)
> +		    $(version_arg) $(lt_host_flags) $(libssp_darwin_rpath)
> 
> libssp_nonshared_la_SOURCES = \
> 	ssp-local.c
> 
> 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 = \
> 	$(top_builddir)/src/c++17/libc++17convenience.la \
> 	$(top_builddir)/src/c++20/libc++20convenience.la
> 
> +if ENABLE_DARWIN_AT_RPATH
> +libstdc___darwin_rpath = -Wl,-rpath,@loader_path
> +endif
> +
> libstdc___la_LDFLAGS = \
> -	-version-info $(libtool_VERSION) ${version_arg} -lm
> +	-version-info $(libtool_VERSION) ${version_arg} -lm $(libstdc___darwin_rpath)
> 
> libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS) $(lt_host_flags)
> 
> 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 = \
> 	$(top_builddir)/src/c++17/libc++17convenience.la \
> 	$(top_builddir)/src/c++20/libc++20convenience.la
> 
> +@ENABLE_DARWIN_AT_RPATH_TRUE@libstdc___darwin_rpath = -Wl,-rpath,@loader_path
> libstdc___la_LDFLAGS = \
> -	-version-info $(libtool_VERSION) ${version_arg} -lm
> +	-version-info $(libtool_VERSION) ${version_arg} -lm $(libstdc___darwin_rpath)
> 
> libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS) $(lt_host_flags)
> @GLIBCXX_LDBL_ALT128_COMPAT_FALSE@@GLIBCXX_LDBL_COMPAT_TRUE@LTCXXCOMPILE64 = $(LTCXXCOMPILE)
> 
> 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" = "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=no
> +      ;;
> +    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=no
> +       ;;
> +
> +    # 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=yes
> +      ;;
> +    # 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" = "xyes"])
> +
>   _LT_TAGVAR(archive_cmds_need_lc, $1)=no
>   _LT_TAGVAR(hardcode_direct, $1)=no
>   _LT_TAGVAR(hardcode_automatic, $1)=yes
> @@ -1056,13 +1097,26 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
>   esac
>   if test "$_lt_dar_can_shared" = "yes"; then
>     output_verbose_link_cmd=func_echo_all
> -    _LT_TAGVAR(archive_cmds, $1)="\$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)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
> -    _LT_TAGVAR(archive_expsym_cmds, $1)="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)="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" = "xyes"; then
> +      echo "using Darwin @rpath" 1>&AS_MESSAGE_LOG_FD
> +      _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name @rpath/\$soname \$verstring ${_lt_dsymutil}"
> +      _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
> +      _LT_TAGVAR(archive_expsym_cmds, $1)="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)="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)="\$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)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
> +      _LT_TAGVAR(archive_expsym_cmds, $1)="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)="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" != "yes"; then
> -      _LT_TAGVAR(archive_cmds, $1)="\$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" = "xyes"; then
> +        _LT_TAGVAR(archive_cmds, $1)="\$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)="\$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)="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
> ],[])
> 
> 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 = @prefix@
> program_transform_name = @program_transform_name@
> psdir = @psdir@
> real_target_noncanonical = @real_target_noncanonical@
> -runstatedir = @runstatedir@
> sbindir = @sbindir@
> sharedstatedir = @sharedstatedir@
> srcdir = @srcdir@
> 
> -- 
> 2.24.3 (Apple Git-128)
> 


       reply	other threads:[~2021-11-17 21:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20211117210319.92514-4-iain@sandoe.co.uk>
2021-11-17 21:27 ` Iain Sandoe [this message]
2021-11-18 15:34   ` Jonathan Wakely

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=160318AE-E2F4-4612-AEC1-5013419B6359@gmail.com \
    --to=iains.gcc@gmail.com \
    --cc=libstdc++@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).