public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Iain Sandoe <iains.gcc@gmail.com>
To: Joseph Myers <joseph@codesourcery.com>
Cc: FX Coudert <fxcoudert@gmail.com>, GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: Darwin: Replace environment runpath with embedded [PR88590]
Date: Fri, 18 Aug 2023 23:31:46 +0100	[thread overview]
Message-ID: <192597CA-AB73-4D97-94B8-C30B8AC1FFC3@gmail.com> (raw)
In-Reply-To: <92993a50-9667-45da-a62-5089e7e052f8@codesourcery.com>

Hi Joseph,

> On 18 Aug 2023, at 21:17, Joseph Myers <joseph@codesourcery.com> wrote:
> 
> On Tue, 15 Aug 2023, FX Coudert via Gcc-patches wrote:
> 
>> I am currently retesting the patches on various archs (Linux and Darwin) 
>> after a final rebase, but various previous versions were 
>> regression-tested, and have been shipped for a long time in Homebrew.
>> 
>> OK to commit?
> 
> The driver changes are OK.
> 
> I think the new configure options and the new -nodefaultrpaths compiler 
> option need documenting (I suppose there might be a case for the configure 
> option defined in libtool code being documented somewhere in libtool, if 
> there's somewhere appropriate, but I don't see that in the libtool patch 
> submission).
> 
> The help text for --enable-darwin-at-rpath refers to it as 
> --enable-darwin-at-path.

OK, we need to fix those things.

> Somewhere the documentation ought to discuss the considerations around 
> embedding such paths in binaries, and what's appropriate for building a 
> binary on the system where it's going to be used, versus using the 
> compiler to build redistributed binaries that will be run on a system that 
> doesn't have the compiler installed (and so shouldn't have hardcoded paths 
> that were only applicable on the system with the compiler, but will need 
> to be able to find shared libraries - probably shipped with the binary - 
> somehow).

Actually, the changes are not so dramatic as they seem (for Darwin) since we
already have less flexibility than other unix-like systems.

The status quo is that installed libraries embed their runpath e.g:
/path/to/compiler/install/lib/libgfortran.dylib

When executables are built, they embed the full library names for dependent
libraries (this "two-level" namespacing has some useful and not-so-useful
sides to it).

However, Darwin compiler installations are not relocatable without re-writing the
library names and,  because of the vendor’s decision to neuter
DYLD_LIBRARY_PATH, (the Darwin equivalent of LD_LIBRARY_PATH) it makes
it quite involved to do such a move.

===

After the change:
libraries are identified as  @rpath/libgfortran.dylib (for example)

and any executable built by the compiler has a runpath /path/to/compiler/install/lib.

Actually, after this change the compiler is initially relocatable (that is you can choose to
install it anywhere) but once installed, if you move it, that would break executables already
built because they embed the path to the installation.

So, in practice, for the “out of the tin” self-use of GCC, there is no practical difference between
the existing fixed installation and a “placed once” installation.

[however, the change means that we can correctly configure the compiler, since the runpaths
 at build time can be made to point to the uninstalled libraries, which is the underlying problem
 we are solving].

— on the topic of building applications for distribution:

The expectation for Darwin platforms is that dependent libraries are shipped along with
applications (it is not desirable to require that end users have to have elevated privs to
install them in some Well Known Place, and [other than OSS distributions like macports
and homebrew] there is no common place to expect to find OSS libraries).

There is quite extensive Apple Developer documentation on delivering packages with
co-installed libraries using @rpath (that is the intended mechanism for delivery since it
allows drag-and-drop installation and moving of built applications).

The revised compiler has libraries already built in a suitable manner for that distribution
model.

I would not propose that we repeated such information - but we could refer to it?

Generally, I’d prefer we suggested searching for such documentation, rather than linking
to it, since links can expire - does that seem reasonable?

thanks for the reviews
Iain

> -- 
> Joseph S. Myers
> joseph@codesourcery.com


  reply	other threads:[~2023-08-18 22:31 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-15 16:58 FX Coudert
2023-08-18 20:17 ` Joseph Myers
2023-08-18 22:31   ` Iain Sandoe [this message]
2023-08-18 22:59     ` Joseph Myers
2023-08-18 23:05       ` Iain Sandoe
2023-08-25  7:50   ` FX Coudert
2023-08-25 16:28     ` Joseph Myers
2023-08-29 16:06       ` FX Coudert
2023-08-29 19:55         ` Joseph Myers
2023-08-29 20:17           ` FX Coudert
2023-09-12 17:52             ` FX Coudert
2023-09-20 13:52               ` FX Coudert
2023-10-08 13:07                 ` Nathanael Nerode
2023-10-08 22:14                   ` Iain Sandoe
2023-10-21 18:05                     ` Jeff Law
2023-10-21 18:26                       ` Iain Sandoe
2023-10-21  5:27             ` Alexandre Oliva
2023-10-22 21:18               ` FX Coudert
2023-11-30 19:43                 ` Ian Lance Taylor
2023-11-30 19:56                   ` Iain Sandoe
2023-11-30 19:58                     ` Ian Lance Taylor
2023-11-30 21:25                       ` Ian Lance Taylor
2023-10-30 16:17 ` Martin Jambor
     [not found] ` <653fd72a.050a0220.a6a20.de86SMTPIN_ADDED_BROKEN@mx.google.com>
2023-10-30 16:19   ` Iain Sandoe
2023-10-30 16:31   ` FX Coudert
2023-10-30 19:08     ` Iain Sandoe
2023-11-15 20:11       ` Thomas Schwinge
2023-11-15 20:34         ` FX Coudert
2023-11-17 11:56           ` FX Coudert
2023-11-17 12:13             ` Thomas Schwinge
2023-11-17 14:20               ` FX Coudert
2023-11-22 10:52                 ` Iain Sandoe
2023-11-22 10:55                   ` FX Coudert
2023-11-13 15:27 ` gfortran.dg/dg.exp debug messages pollute test output Rainer Orth
2023-11-13 16:19   ` Iain Sandoe
2023-11-15 10:29     ` FX Coudert
2023-11-15 12:04       ` Rainer Orth
2023-11-17 12:36       ` Thomas Schwinge
2023-11-18  9:03         ` FX Coudert

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=192597CA-AB73-4D97-94B8-C30B8AC1FFC3@gmail.com \
    --to=iains.gcc@gmail.com \
    --cc=fxcoudert@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=joseph@codesourcery.com \
    /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).