From: Fred Morcos Date: Tue, 8 Aug 2023 12:02:37 +0000 (+0200) Subject: Meson: LTO X-Git-Tag: rec-5.1.0-alpha1~80^2~292 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4007138c631cae558c8862a3ebfddbdb8eec7c3;p=thirdparty%2Fpdns.git Meson: LTO --- diff --git a/meson.build b/meson.build index e5f5103303..e03adcbcde 100644 --- a/meson.build +++ b/meson.build @@ -72,6 +72,8 @@ subdir('meson/auto-var-init') # Automatic Variable Initialization # TODO Use meson's -Db_sanitize option? # subdir('meson/sanitizers') # Sanitizers subdir('meson/malloc-trace') # Malloc-trace +# TODO Use meson's -Db_lto* options? +subdir('meson/lto') # Link-time Optimization # Find or generate pdns/dnslabeltext.cc if not ragel.found() and not fs.exists('pdns/dnslabeltext.cc') diff --git a/meson/lto/meson.build b/meson/lto/meson.build new file mode 100644 index 0000000000..eb9a0f1eea --- /dev/null +++ b/meson/lto/meson.build @@ -0,0 +1,35 @@ +# Link-time Optimization + +opt_lto = get_option('lto') + +if opt_lto == 'thin' + compiler_opt = '-flto=thin' + if cxx.has_argument(compiler_opt) + add_global_arguments(compiler_opt, language: ['c', 'cpp']) + add_global_link_arguments(compiler_opt, language: ['c', 'cpp']) + else + opt_lto = 'auto' + endif +endif + +if opt_lto == 'auto' + compiler_opt = '-flto=auto' + if cxx.has_argument(compiler_opt) + add_global_arguments(compiler_opt, language: ['c', 'cpp']) + add_global_link_arguments(compiler_opt, language: ['c', 'cpp']) + else + opt_lto = 'yes' + endif +endif + +if opt_lto == 'yes' + compiler_opt = '-flto' + if cxx.has_argument(compiler_opt) + add_global_arguments(compiler_opt, language: ['c', 'cpp']) + add_global_link_arguments(compiler_opt, language: ['c', 'cpp']) + else + error('LTO was requested but is not supported') + endif +endif + +summary('LTO', opt_lto, section: 'Configuration') diff --git a/meson_options.txt b/meson_options.txt index e1cd4b10f8..09e295c45d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -56,3 +56,5 @@ option('auto-var-init', type: 'combo', value: 'disabled', choices: ['zero', 'pat # option('sanitizer-leak', type: 'boolean', value: false, description: 'Enable the Leak Sanitizer') # option('sanitizer-undefined', type: 'boolean', value: false, description: 'Enable the Undefined Behavior Sanitizer') option('malloc-trace', type: 'boolean', value: false, description: 'Enable malloc-trace') +# TODO Use meson's -Db_lto* options? +option('lto', type: 'combo', choices: ['yes', 'no', 'thin', 'auto'], value: 'no', description: 'Enable link-time optimization')