Re: Build with LTO / -flto on macOS

Поиск
Список
Период
Сортировка
От Wolfgang Walther
Тема Re: Build with LTO / -flto on macOS
Дата
Msg-id 721bf39a-ed8a-44b0-8b8e-be3bd81db748@technowledgy.de
обсуждение исходный текст
Ответ на Re: Build with LTO / -flto on macOS  (Peter Eisentraut <peter@eisentraut.org>)
Ответы Re: Build with LTO / -flto on macOS
Re: Build with LTO / -flto on macOS
Re: Build with LTO / -flto on macOS
Список pgsql-hackers
Peter Eisentraut:
> It's probably worth clarifying that this option is needed on macOS only 
> if LTO is also enabled.  For standard (non-LTO) builds, the 
> export-dynamic behavior is already the default on macOS (otherwise 
> nothing in PostgreSQL would work).

Right, man page say this:

 > Preserves all global symbols in main executables during LTO.  Without 
this option, Link Time Optimization is allowed to inline and remove 
global functions. This option is used when a main executable may load a 
plug-in which requires certain symbols from the main executable.

Peter:
> I don't think we explicitly offer LTO builds as part of the make build 
> system, so anyone trying this would do it sort of self-service, by 
> passing additional options to configure or make.  In which case they 
> might as well pass the -export_dynamic option along in the same way?

The challenge is that it defeats the purpose of LTO to pass this along 
to everything, e.g. via CFLAGS. The Makefiles set this in LDFLAGS_EX_BE 
only, so it only affects the backend binary. This is not at all obvious 
and took me quite a while to figure out why LTO silently didn't strip 
symbols from other binaries. It does work to explicitly set 
LDFLAGS_EX_BE, though.

Also, passing the LTO flag on Linux "just works" (clang, not GCC 
necessarily).

> I don't mind addressing this in PG18, but I would hesitate with 
> backpatching.  With macOS, it's always hard to figure out whether these 
> kinds of options work the same way going versions back.

All the versions for ld64 are in [1]. It seems this was introduced in 
ld64-224.1 [2] the first time. It was not there in ld64-136 [3]. Finally 
the man page has **exactly** the same wording in the latest version 
ld64-609 [4].

We could go further and compare the source, but I think it's safe to 
assume that this flag hasn't changed much and should not affect non-LTO 
builds. And for even older versions it would just not be supported, so 
configure would not use it.

Best,

Wolfgang

[1]: https://opensource.apple.com/source/ld64/
[2]: 
https://opensource.apple.com/source/ld64/ld64-224.1/doc/man/man1/ld.1.auto.html
[3]: 
https://opensource.apple.com/source/ld64/ld64-136/doc/man/man1/ld.1.auto.html
[4]: 
https://opensource.apple.com/source/ld64/ld64-609/doc/man/man1/ld.1.auto.html



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Nathan Bossart
Дата:
Сообщение: Re: Optimizing COPY with SIMD
Следующее
От: Nathan Bossart
Дата:
Сообщение: Re: An improved README experience for PostgreSQL