diff mbox series

[v4,1/5] configure,meson: add option to enable LTO

Message ID 20201204230615.2392-2-dbuono@linux.vnet.ibm.com
State New
Headers show
Series Add support for Control-Flow Integrity | expand

Commit Message

Daniele Buono Dec. 4, 2020, 11:06 p.m. UTC
This patch allows to compile QEMU with link-time optimization (LTO).
Compilation with LTO is handled directly by meson. This patch only
adds the option in configure and forwards the request to meson

Tested with all major versions of clang from 6 to 12

Signed-off-by: Daniele Buono <dbuono@linux.vnet.ibm.com>
---
 configure   | 7 +++++++
 meson.build | 1 +
 2 files changed, 8 insertions(+)

Comments

Thomas Huth July 11, 2021, 10:22 a.m. UTC | #1
On 05/12/2020 00.06, Daniele Buono wrote:
> This patch allows to compile QEMU with link-time optimization (LTO).
> Compilation with LTO is handled directly by meson. This patch only
> adds the option in configure and forwards the request to meson
> 
> Tested with all major versions of clang from 6 to 12
> 
> Signed-off-by: Daniele Buono <dbuono@linux.vnet.ibm.com>
> ---
>   configure   | 7 +++++++
>   meson.build | 1 +
>   2 files changed, 8 insertions(+)
> 
> diff --git a/configure b/configure
> index 18c26e0389..fee118518b 100755
> --- a/configure
> +++ b/configure
> @@ -242,6 +242,7 @@ host_cc="cc"
>   audio_win_int=""
>   libs_qga=""
>   debug_info="yes"
> +lto="false"
>   stack_protector=""
>   safe_stack=""
>   use_containers="yes"
> @@ -1167,6 +1168,10 @@ for opt do
>     ;;
>     --disable-werror) werror="no"
>     ;;
> +  --enable-lto) lto="true"
> +  ;;
> +  --disable-lto) lto="false"
> +  ;;
>     --enable-stack-protector) stack_protector="yes"
>     ;;
>     --disable-stack-protector) stack_protector="no"
> @@ -1751,6 +1756,7 @@ disabled with --disable-FEATURE, default is enabled if available:
>     module-upgrades try to load modules from alternate paths for upgrades
>     debug-tcg       TCG debugging (default is disabled)
>     debug-info      debugging information
> +  lto             Enable Link-Time Optimization.
>     sparse          sparse checker
>     safe-stack      SafeStack Stack Smash Protection. Depends on
>                     clang/llvm >= 3.7 and requires coroutine backend ucontext.
> @@ -7014,6 +7020,7 @@ NINJA=$ninja $meson setup \
>           -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
>           -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
>           -Dvhost_user_blk_server=$vhost_user_blk_server \
> +        -Db_lto=$lto \
>           $cross_arg \
>           "$PWD" "$source_path"
>   
> diff --git a/meson.build b/meson.build
> index e3386196ba..ebd1c690e0 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2044,6 +2044,7 @@ summary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
>   summary_info += {'sparse enabled':    sparse.found()}
>   summary_info += {'strip binaries':    get_option('strip')}
>   summary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
> +summary_info += {'link-time optimization (LTO)': get_option('b_lto')}
>   summary_info += {'static build':      config_host.has_key('CONFIG_STATIC')}
>   if targetos == 'darwin'
>     summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
> 

I just came across this --enable-lto option ... but looking at the 
implementation here, it seems only to emit a line in the summary_info, 
without adding any compiler flags? Was this patch incomplete? Or do I miss 
something?

  Thomas
Thomas Huth July 15, 2021, 3:46 p.m. UTC | #2
On 11/07/2021 12.22, Thomas Huth wrote:
> On 05/12/2020 00.06, Daniele Buono wrote:
>> This patch allows to compile QEMU with link-time optimization (LTO).
>> Compilation with LTO is handled directly by meson. This patch only
>> adds the option in configure and forwards the request to meson
>>
>> Tested with all major versions of clang from 6 to 12
>>
>> Signed-off-by: Daniele Buono <dbuono@linux.vnet.ibm.com>
>> ---
>>   configure   | 7 +++++++
>>   meson.build | 1 +
>>   2 files changed, 8 insertions(+)
>>
>> diff --git a/configure b/configure
>> index 18c26e0389..fee118518b 100755
>> --- a/configure
>> +++ b/configure
>> @@ -242,6 +242,7 @@ host_cc="cc"
>>   audio_win_int=""
>>   libs_qga=""
>>   debug_info="yes"
>> +lto="false"
>>   stack_protector=""
>>   safe_stack=""
>>   use_containers="yes"
>> @@ -1167,6 +1168,10 @@ for opt do
>>     ;;
>>     --disable-werror) werror="no"
>>     ;;
>> +  --enable-lto) lto="true"
>> +  ;;
>> +  --disable-lto) lto="false"
>> +  ;;
>>     --enable-stack-protector) stack_protector="yes"
>>     ;;
>>     --disable-stack-protector) stack_protector="no"
>> @@ -1751,6 +1756,7 @@ disabled with --disable-FEATURE, default is enabled 
>> if available:
>>     module-upgrades try to load modules from alternate paths for upgrades
>>     debug-tcg       TCG debugging (default is disabled)
>>     debug-info      debugging information
>> +  lto             Enable Link-Time Optimization.
>>     sparse          sparse checker
>>     safe-stack      SafeStack Stack Smash Protection. Depends on
>>                     clang/llvm >= 3.7 and requires coroutine backend 
>> ucontext.
>> @@ -7014,6 +7020,7 @@ NINJA=$ninja $meson setup \
>>           -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
>>           -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
>>           -Dvhost_user_blk_server=$vhost_user_blk_server \
>> +        -Db_lto=$lto \
>>           $cross_arg \
>>           "$PWD" "$source_path"
>> diff --git a/meson.build b/meson.build
>> index e3386196ba..ebd1c690e0 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -2044,6 +2044,7 @@ summary_info += {'gprof enabled':     
>> config_host.has_key('CONFIG_GPROF')}
>>   summary_info += {'sparse enabled':    sparse.found()}
>>   summary_info += {'strip binaries':    get_option('strip')}
>>   summary_info += {'profiler':          
>> config_host.has_key('CONFIG_PROFILER')}
>> +summary_info += {'link-time optimization (LTO)': get_option('b_lto')}
>>   summary_info += {'static build':      config_host.has_key('CONFIG_STATIC')}
>>   if targetos == 'darwin'
>>     summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
>>
> 
> I just came across this --enable-lto option ... but looking at the 
> implementation here, it seems only to emit a line in the summary_info, 
> without adding any compiler flags? Was this patch incomplete? Or do I miss 
> something?

Never mind, I now learnt that b_lto is apparently an option that is directly 
understood by meson already :-)

  Thomas
diff mbox series

Patch

diff --git a/configure b/configure
index 18c26e0389..fee118518b 100755
--- a/configure
+++ b/configure
@@ -242,6 +242,7 @@  host_cc="cc"
 audio_win_int=""
 libs_qga=""
 debug_info="yes"
+lto="false"
 stack_protector=""
 safe_stack=""
 use_containers="yes"
@@ -1167,6 +1168,10 @@  for opt do
   ;;
   --disable-werror) werror="no"
   ;;
+  --enable-lto) lto="true"
+  ;;
+  --disable-lto) lto="false"
+  ;;
   --enable-stack-protector) stack_protector="yes"
   ;;
   --disable-stack-protector) stack_protector="no"
@@ -1751,6 +1756,7 @@  disabled with --disable-FEATURE, default is enabled if available:
   module-upgrades try to load modules from alternate paths for upgrades
   debug-tcg       TCG debugging (default is disabled)
   debug-info      debugging information
+  lto             Enable Link-Time Optimization.
   sparse          sparse checker
   safe-stack      SafeStack Stack Smash Protection. Depends on
                   clang/llvm >= 3.7 and requires coroutine backend ucontext.
@@ -7014,6 +7020,7 @@  NINJA=$ninja $meson setup \
         -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
         -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
         -Dvhost_user_blk_server=$vhost_user_blk_server \
+        -Db_lto=$lto \
         $cross_arg \
         "$PWD" "$source_path"
 
diff --git a/meson.build b/meson.build
index e3386196ba..ebd1c690e0 100644
--- a/meson.build
+++ b/meson.build
@@ -2044,6 +2044,7 @@  summary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
 summary_info += {'sparse enabled':    sparse.found()}
 summary_info += {'strip binaries':    get_option('strip')}
 summary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
+summary_info += {'link-time optimization (LTO)': get_option('b_lto')}
 summary_info += {'static build':      config_host.has_key('CONFIG_STATIC')}
 if targetos == 'darwin'
   summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}