* [FFmpeg-devel] [PATCH] configure: add LTO optarg
@ 2023-03-23 13:46 J. Dekker
2023-03-23 13:56 ` Martin Storsjö
0 siblings, 1 reply; 4+ messages in thread
From: J. Dekker @ 2023-03-23 13:46 UTC (permalink / raw)
To: ffmpeg-devel
This allows users to call with './configure --enable-lto' (or more
explicitly './configure --enable-lto=full') for the old functionality or
specify './configure --enable-lto=thin' to use ThinLTO.
Signed-off-by: J. Dekker <jdek@itanimul.li>
---
configure | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/configure b/configure
index 8980cec7ee..b65001d39d 100755
--- a/configure
+++ b/configure
@@ -412,7 +412,7 @@ Toolchain options:
--build-suffix=SUFFIX library name suffix []
--enable-pic build position-independent code
--enable-thumb compile for Thumb instruction set
- --enable-lto use link-time optimization
+ --enable-lto[=arg] use link-time optimization
--env="ENV=override" override the environment variables
Advanced options (experts only):
@@ -2524,7 +2524,6 @@ CMDLINE_SELECT="
debug
extra_warnings
logging
- lto
optimizations
rpath
stripping
@@ -4170,6 +4169,12 @@ for opt do
--enable-sdl)
enable sdl2
;;
+ --enable-lto)
+ lto=full
+ ;;
+ --enable-lto=*)
+ lto="$optval"
+ ;;
--enable-*=*|--disable-*=*)
eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
@@ -4639,7 +4644,7 @@ icl_flags(){
# on Windows, does enable remarks so disable them here.
-Wall) echo $flag -Qdiag-disable:remark ;;
-std=c99) echo -Qstd=c99 ;;
- -flto) echo -ipo ;;
+ -flto*) echo -ipo ;;
esac
done
}
@@ -4647,7 +4652,7 @@ icl_flags(){
icc_flags(){
for flag; do
case $flag in
- -flto) echo -ipo ;;
+ -flto*) echo -ipo ;;
*) echo $flag ;;
esac
done
@@ -7182,17 +7187,17 @@ fi
check_optflags(){
check_cflags "$@"
- enabled lto && check_ldflags "$@"
+ [ -z "$lto" ] || check_ldflags "$@"
}
check_optflags $optflags
check_optflags -fno-math-errno
check_optflags -fno-signed-zeros
-if enabled lto; then
+if [ ! -z "$lto" ]; then
test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
- check_cflags -flto
- check_ldflags -flto $cpuflags
+ check_cflags -flto=$lto
+ check_ldflags -flto=$lto $cpuflags
disable inline_asm_direct_symbol_refs
fi
@@ -7223,7 +7228,7 @@ if enabled icc; then
# icc 11.0 and 11.1 work with ebp_available, but don't pass the test
enable ebp_available
# The test above does not test linking
- enabled lto && disable symver_asm_label
+ [ -z "$lto" ] || disable symver_asm_label
if enabled x86_32; then
icc_version=$($cc -dumpversion)
test ${icc_version%%.*} -ge 11 &&
--
2.37.1 (Apple Git-137.1)
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] configure: add LTO optarg
2023-03-23 13:46 [FFmpeg-devel] [PATCH] configure: add LTO optarg J. Dekker
@ 2023-03-23 13:56 ` Martin Storsjö
2023-03-23 14:16 ` J. Dekker
0 siblings, 1 reply; 4+ messages in thread
From: Martin Storsjö @ 2023-03-23 13:56 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Thu, 23 Mar 2023, J. Dekker wrote:
> This allows users to call with './configure --enable-lto' (or more
> explicitly './configure --enable-lto=full') for the old functionality or
> specify './configure --enable-lto=thin' to use ThinLTO.
>
> Signed-off-by: J. Dekker <jdek@itanimul.li>
> ---
> configure | 23 ++++++++++++++---------
> 1 file changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/configure b/configure
> index 8980cec7ee..b65001d39d 100755
> --- a/configure
> +++ b/configure
> @@ -412,7 +412,7 @@ Toolchain options:
> --build-suffix=SUFFIX library name suffix []
> --enable-pic build position-independent code
> --enable-thumb compile for Thumb instruction set
> - --enable-lto use link-time optimization
> + --enable-lto[=arg] use link-time optimization
> --env="ENV=override" override the environment variables
>
> Advanced options (experts only):
> @@ -2524,7 +2524,6 @@ CMDLINE_SELECT="
> debug
> extra_warnings
> logging
> - lto
> optimizations
> rpath
> stripping
> @@ -4170,6 +4169,12 @@ for opt do
> --enable-sdl)
> enable sdl2
> ;;
> + --enable-lto)
> + lto=full
> + ;;
> + --enable-lto=*)
> + lto="$optval"
> + ;;
> --enable-*=*|--disable-*=*)
> eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
> is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
> @@ -4639,7 +4644,7 @@ icl_flags(){
> # on Windows, does enable remarks so disable them here.
> -Wall) echo $flag -Qdiag-disable:remark ;;
> -std=c99) echo -Qstd=c99 ;;
> - -flto) echo -ipo ;;
> + -flto*) echo -ipo ;;
> esac
> done
> }
> @@ -4647,7 +4652,7 @@ icl_flags(){
> icc_flags(){
> for flag; do
> case $flag in
> - -flto) echo -ipo ;;
> + -flto*) echo -ipo ;;
> *) echo $flag ;;
> esac
> done
> @@ -7182,17 +7187,17 @@ fi
>
> check_optflags(){
> check_cflags "$@"
> - enabled lto && check_ldflags "$@"
> + [ -z "$lto" ] || check_ldflags "$@"
With [ -n "$lto" ] you could retain the old logic with && instead of ||,
although I don't think it matters much.
Also, this extra check when LTO is enabled, mirrors kinda what we've seen
that we could need in meson, if LTO would be enabled surprisingly there.
> }
>
> check_optflags $optflags
> check_optflags -fno-math-errno
> check_optflags -fno-signed-zeros
>
> -if enabled lto; then
> +if [ ! -z "$lto" ]; then
This can be [ -n "$lto" ] to avoid the negation.
> test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
> - check_cflags -flto
> - check_ldflags -flto $cpuflags
> + check_cflags -flto=$lto
> + check_ldflags -flto=$lto $cpuflags
Does GCC support -flto=full too, and is that the same thing as just -flto?
Or should we stick to just passing -flto to the compiler without any
argument if the user configured with plain --enable-lto?
> disable inline_asm_direct_symbol_refs
> fi
>
> @@ -7223,7 +7228,7 @@ if enabled icc; then
> # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
> enable ebp_available
> # The test above does not test linking
> - enabled lto && disable symver_asm_label
> + [ -z "$lto" ] || disable symver_asm_label
[ -n "$lto" ] would retain the previous code structure, making the patch
even clearer.
// Martin
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] configure: add LTO optarg
2023-03-23 13:56 ` Martin Storsjö
@ 2023-03-23 14:16 ` J. Dekker
2023-03-23 23:38 ` alice
0 siblings, 1 reply; 4+ messages in thread
From: J. Dekker @ 2023-03-23 14:16 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On 23 Mar 2023, at 14:56, Martin Storsjö wrote:
[...]
>>
>> @@ -4647,7 +4652,7 @@ icl_flags(){
>> icc_flags(){
>> for flag; do
>> case $flag in
>> - -flto) echo -ipo ;;
>> + -flto*) echo -ipo ;;
>> *) echo $flag ;;
>> esac
>> done
>> @@ -7182,17 +7187,17 @@ fi
>>
>> check_optflags(){
>> check_cflags "$@"
>> - enabled lto && check_ldflags "$@"
>> + [ -z "$lto" ] || check_ldflags "$@"
>
> With [ -n "$lto" ] you could retain the old logic with && instead of ||, although I don't think it matters much.
>
> Also, this extra check when LTO is enabled, mirrors kinda what we've seen that we could need in meson, if LTO would be enabled surprisingly there.
Since not all checks are working with only cflags checks.
>> }
>>
>> check_optflags $optflags
>> check_optflags -fno-math-errno
>> check_optflags -fno-signed-zeros
>>
>> -if enabled lto; then
>> +if [ ! -z "$lto" ]; then
>
> This can be [ -n "$lto" ] to avoid the negation.
Thanks.
>> test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
>> - check_cflags -flto
>> - check_ldflags -flto $cpuflags
>> + check_cflags -flto=$lto
>> + check_ldflags -flto=$lto $cpuflags
>
> Does GCC support -flto=full too, and is that the same thing as just -flto? Or should we stick to just passing -flto to the compiler without any argument if the user configured with plain --enable-lto?
No, actually checking it. We might benefit from gcc's -ffat-lto-objects and/or -fwhole-program which is maybe more similar to LLVM's -flto=full. Seems like there is non-trivial mapping between LTO features.
>> disable inline_asm_direct_symbol_refs
>> fi
>>
>> @@ -7223,7 +7228,7 @@ if enabled icc; then
>> # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
>> enable ebp_available
>> # The test above does not test linking
>> - enabled lto && disable symver_asm_label
>> + [ -z "$lto" ] || disable symver_asm_label
>
> [ -n "$lto" ] would retain the previous code structure, making the patch even clearer.
>
Will do.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] configure: add LTO optarg
2023-03-23 14:16 ` J. Dekker
@ 2023-03-23 23:38 ` alice
0 siblings, 0 replies; 4+ messages in thread
From: alice @ 2023-03-23 23:38 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Thu Mar 23, 2023 at 3:16 PM CET, J. Dekker wrote:
> On 23 Mar 2023, at 14:56, Martin Storsjö wrote:
> >> test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
> >> - check_cflags -flto
> >> - check_ldflags -flto $cpuflags
> >> + check_cflags -flto=$lto
> >> + check_ldflags -flto=$lto $cpuflags
> >
> > Does GCC support -flto=full too, and is that the same thing as just -flto? Or should we stick to just passing -flto to the compiler without any argument if the user configured with plain --enable-lto?
>
> No, actually checking it. We might benefit from gcc's -ffat-lto-objects and/or -fwhole-program which is maybe more similar to LLVM's -flto=full. Seems like there is non-trivial mapping between LTO features.
-ffat-lto-objects is only about keeping non-lto object code as well as the
intermediate (lto) code in the .o objects.
this is 'required' if one wants to then later link the resulting .a's *without*
using lto, as having only the 'intermediate' output forces using lto during the
link step.
by default for gcc, the only difference between -flto and -flto=[n]/auto is the
amount of threads used during linking. =auto is generally preferred, since under
the gnu make jobserver it controls the jobs instead (or defaults to nproc). the
existing `-flto` forces 1-thread link under gcc, and it prints a warning for
this:
lto-wrapper: warning: using serial compilation of 12 LTRANS jobs
lto-wrapper: note: see the '-flto' option documentation for more information
(the gcc(1) manpage documents this quite well.)
however, i'd say the existing behaviour here is fine. there are indeed a lot of
toolchain-specifics between all this- and people building that care about this
would usually know better than a 'magic' configure script that tries to learn
all of it. simply respecting -flto[=arg] with a user-supplied arg is all that is
generally needed.
as for -fwhole-program, i'm not sure it has any use:
With -flto this option has a limited use. In most cases the precise list of
symbols used or exported from the binary is known the resolution info passed to
the link-time optimizer by the linker plugin. It is still useful if no linker
plugin is used or during incremental link step when final code is produced (with
-flto -flinker-output=nolto-rel).
(by default, the linker plugin is automatically used for modern-ish gcc (since
maybe 4.9?))
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-03-23 23:38 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-23 13:46 [FFmpeg-devel] [PATCH] configure: add LTO optarg J. Dekker
2023-03-23 13:56 ` Martin Storsjö
2023-03-23 14:16 ` J. Dekker
2023-03-23 23:38 ` alice
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git