diff mbox series

[5/6] meson: merge lib{system, user}_ss with {system, user}_ss.

Message ID 20250516052708.930928-6-pierrick.bouvier@linaro.org
State Superseded
Headers show
Series single-binary: build target common libraries with dependencies | expand

Commit Message

Pierrick Bouvier May 16, 2025, 5:27 a.m. UTC
Now that target configuration can be applied to lib{system, user}_ss,
there is no reason to keep that separate from the existing {system,
user}_ss.

We extract existing system/user code common common libraries to
lib{system, user}.

To not break existing meson files, we alias libsystem_ss to system_ss
and libuser_ss to user_ss, so we can do the cleanup in next commit.

Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
---
 meson.build | 38 +++++++++++++++++++++++---------------
 1 file changed, 23 insertions(+), 15 deletions(-)

Comments

Paolo Bonzini May 17, 2025, 3:04 p.m. UTC | #1
On 5/16/25 07:27, Pierrick Bouvier wrote:
> Now that target configuration can be applied to lib{system, user}_ss,
> there is no reason to keep that separate from the existing {system,
> user}_ss.

The reason would be that previously you wouldn't have 
-DCOMPILING_SYSTEM_VS_USER defined for the files in system_ss/user_ss. 
I don't think it's a problem, because it's usually clear if a file is 
common QEMU infrastructure or specific to system emulation; but it's 
worth mentioning it in the commit message.

Paolo

>                            c_args: ['-DCONFIG_USER_ONLY',
>                                     '-DCOMPILING_SYSTEM_VS_USER'],
> -                         dependencies: libuser_ss.all_dependencies(),
> +                         include_directories: common_user_inc,
> +                         dependencies: user_ss.all_dependencies(),
>                            build_by_default: false)
>   
>   libsystem = static_library('system',
> -                           libsystem_ss.all_sources() + genh,
> +                           system_ss.all_sources() + genh,
>                              c_args: ['-DCONFIG_SOFTMMU',
>                                       '-DCOMPILING_SYSTEM_VS_USER'],
> -                           dependencies: libsystem_ss.all_dependencies(),
> +                           dependencies: system_ss.all_dependencies(),
>                              build_by_default: false)
>   
>   # Note that this library is never used directly (only through extract_objects)
> @@ -4121,7 +4119,6 @@ libsystem = static_library('system',
>   common_all = static_library('common',
>                               build_by_default: false,
>                               sources: common_ss.all_sources() + genh,
> -                            include_directories: common_user_inc,
>                               implicit_include_directories: false,
>                               dependencies: common_ss.all_dependencies())
>   
> @@ -4135,10 +4132,20 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>     inc = [common_user_inc + target_inc]
>   
>     target_common = common_ss.apply(config_target, strict: false)
> +  target_system = system_ss.apply(config_target, strict: false)
> +  target_user = user_ss.apply(config_target, strict: false)
>     common_deps = []
> +  system_deps = []
> +  user_deps = []
>     foreach dep: target_common.dependencies()
>       common_deps += dep.partial_dependency(compile_args: true, includes: true)
>     endforeach
> +  foreach dep: target_system.dependencies()
> +    system_deps += dep.partial_dependency(compile_args: true, includes: true)
> +  endforeach
> +  foreach dep: target_user.dependencies()
> +    user_deps += dep.partial_dependency(compile_args: true, includes: true)
> +  endforeach
>   
>     # prevent common code to access cpu compile time definition,
>     # but still allow access to cpu.h
> @@ -4154,7 +4161,7 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>           sources: src.all_sources() + genh,
>           include_directories: inc,
>           c_args: target_system_c_args,
> -        dependencies: src.all_dependencies() + common_deps)
> +        dependencies: src.all_dependencies() + common_deps + system_deps)
>         hw_common_arch_libs += {target_base_arch: lib}
>       endif
>     endif
> @@ -4168,7 +4175,8 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>           sources: src.all_sources() + genh,
>           include_directories: inc,
>           c_args: target_c_args,
> -        dependencies: src.all_dependencies() + common_deps)
> +        dependencies: src.all_dependencies() + common_deps +
> +                      system_deps + user_deps)
>         target_common_arch_libs += {target_base_arch: lib}
>       endif
>     endif
> @@ -4182,7 +4190,7 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>           sources: src.all_sources() + genh,
>           include_directories: inc,
>           c_args: target_system_c_args,
> -        dependencies: src.all_dependencies() + common_deps)
> +        dependencies: src.all_dependencies() + common_deps + system_deps)
>         target_common_system_arch_libs += {target_base_arch: lib}
>       endif
>     endif
> @@ -4358,12 +4366,12 @@ foreach target : target_dirs
>     objects = [common_all.extract_objects(target_common.sources())]
>     arch_deps += target_common.dependencies()
>     if target_type == 'system'
> -    src = libsystem_ss.apply(config_target, strict: false)
> +    src = system_ss.apply(config_target, strict: false)
>       objects += libsystem.extract_objects(src.sources())
>       arch_deps += src.dependencies()
>     endif
>     if target_type == 'user'
> -    src = libuser_ss.apply(config_target, strict: false)
> +    src = user_ss.apply(config_target, strict: false)
>       objects += libuser.extract_objects(src.sources())
>       arch_deps += src.dependencies()
>     endif
Pierrick Bouvier May 17, 2025, 7:34 p.m. UTC | #2
On 5/17/25 8:04 AM, Paolo Bonzini wrote:
> On 5/16/25 07:27, Pierrick Bouvier wrote:
>> Now that target configuration can be applied to lib{system, user}_ss,
>> there is no reason to keep that separate from the existing {system,
>> user}_ss.
> 
> The reason would be that previously you wouldn't have
> -DCOMPILING_SYSTEM_VS_USER defined for the files in system_ss/user_ss.
> I don't think it's a problem, because it's usually clear if a file is
> common QEMU infrastructure or specific to system emulation; but it's
> worth mentioning it in the commit message.
>

Yes, sure, I'll add it.
Indeed, it's not changing much, just unpoisoining CONFIG_USER_ONLY and 
CONFIG_SOFTMMU.
The only difference this change make is that existing system/user files 
now can eventually use those defines, which should be harmless as they 
were not using them before.

> Paolo
> 
>>                             c_args: ['-DCONFIG_USER_ONLY',
>>                                      '-DCOMPILING_SYSTEM_VS_USER'],
>> -                         dependencies: libuser_ss.all_dependencies(),
>> +                         include_directories: common_user_inc,
>> +                         dependencies: user_ss.all_dependencies(),
>>                             build_by_default: false)
>>    
>>    libsystem = static_library('system',
>> -                           libsystem_ss.all_sources() + genh,
>> +                           system_ss.all_sources() + genh,
>>                               c_args: ['-DCONFIG_SOFTMMU',
>>                                        '-DCOMPILING_SYSTEM_VS_USER'],
>> -                           dependencies: libsystem_ss.all_dependencies(),
>> +                           dependencies: system_ss.all_dependencies(),
>>                               build_by_default: false)
>>    
>>    # Note that this library is never used directly (only through extract_objects)
>> @@ -4121,7 +4119,6 @@ libsystem = static_library('system',
>>    common_all = static_library('common',
>>                                build_by_default: false,
>>                                sources: common_ss.all_sources() + genh,
>> -                            include_directories: common_user_inc,
>>                                implicit_include_directories: false,
>>                                dependencies: common_ss.all_dependencies())
>>    
>> @@ -4135,10 +4132,20 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>>      inc = [common_user_inc + target_inc]
>>    
>>      target_common = common_ss.apply(config_target, strict: false)
>> +  target_system = system_ss.apply(config_target, strict: false)
>> +  target_user = user_ss.apply(config_target, strict: false)
>>      common_deps = []
>> +  system_deps = []
>> +  user_deps = []
>>      foreach dep: target_common.dependencies()
>>        common_deps += dep.partial_dependency(compile_args: true, includes: true)
>>      endforeach
>> +  foreach dep: target_system.dependencies()
>> +    system_deps += dep.partial_dependency(compile_args: true, includes: true)
>> +  endforeach
>> +  foreach dep: target_user.dependencies()
>> +    user_deps += dep.partial_dependency(compile_args: true, includes: true)
>> +  endforeach
>>    
>>      # prevent common code to access cpu compile time definition,
>>      # but still allow access to cpu.h
>> @@ -4154,7 +4161,7 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>>            sources: src.all_sources() + genh,
>>            include_directories: inc,
>>            c_args: target_system_c_args,
>> -        dependencies: src.all_dependencies() + common_deps)
>> +        dependencies: src.all_dependencies() + common_deps + system_deps)
>>          hw_common_arch_libs += {target_base_arch: lib}
>>        endif
>>      endif
>> @@ -4168,7 +4175,8 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>>            sources: src.all_sources() + genh,
>>            include_directories: inc,
>>            c_args: target_c_args,
>> -        dependencies: src.all_dependencies() + common_deps)
>> +        dependencies: src.all_dependencies() + common_deps +
>> +                      system_deps + user_deps)
>>          target_common_arch_libs += {target_base_arch: lib}
>>        endif
>>      endif
>> @@ -4182,7 +4190,7 @@ foreach target_base_arch, config_base_arch : config_base_arch_mak
>>            sources: src.all_sources() + genh,
>>            include_directories: inc,
>>            c_args: target_system_c_args,
>> -        dependencies: src.all_dependencies() + common_deps)
>> +        dependencies: src.all_dependencies() + common_deps + system_deps)
>>          target_common_system_arch_libs += {target_base_arch: lib}
>>        endif
>>      endif
>> @@ -4358,12 +4366,12 @@ foreach target : target_dirs
>>      objects = [common_all.extract_objects(target_common.sources())]
>>      arch_deps += target_common.dependencies()
>>      if target_type == 'system'
>> -    src = libsystem_ss.apply(config_target, strict: false)
>> +    src = system_ss.apply(config_target, strict: false)
>>        objects += libsystem.extract_objects(src.sources())
>>        arch_deps += src.dependencies()
>>      endif
>>      if target_type == 'user'
>> -    src = libuser_ss.apply(config_target, strict: false)
>> +    src = user_ss.apply(config_target, strict: false)
>>        objects += libuser.extract_objects(src.sources())
>>        arch_deps += src.dependencies()
>>      endif
>
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index fadee0f29fa..98b97fd7ba3 100644
--- a/meson.build
+++ b/meson.build
@@ -3712,14 +3712,14 @@  io_ss = ss.source_set()
 qmp_ss = ss.source_set()
 qom_ss = ss.source_set()
 system_ss = ss.source_set()
-libsystem_ss = ss.source_set()
+libsystem_ss = system_ss
 specific_fuzz_ss = ss.source_set()
 specific_ss = ss.source_set()
 rust_devices_ss = ss.source_set()
 stub_ss = ss.source_set()
 trace_ss = ss.source_set()
 user_ss = ss.source_set()
-libuser_ss = ss.source_set()
+libuser_ss = user_ss
 util_ss = ss.source_set()
 
 # accel modules
@@ -4098,21 +4098,19 @@  common_ss.add(hwcore)
 system_ss.add(authz, blockdev, chardev, crypto, io, qmp)
 common_ss.add(qom, qemuutil)
 
-common_ss.add_all(when: 'CONFIG_SYSTEM_ONLY', if_true: [system_ss])
-common_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
-
 libuser = static_library('user',
-                         libuser_ss.all_sources() + genh,
+                         user_ss.all_sources() + genh,
                          c_args: ['-DCONFIG_USER_ONLY',
                                   '-DCOMPILING_SYSTEM_VS_USER'],
-                         dependencies: libuser_ss.all_dependencies(),
+                         include_directories: common_user_inc,
+                         dependencies: user_ss.all_dependencies(),
                          build_by_default: false)
 
 libsystem = static_library('system',
-                           libsystem_ss.all_sources() + genh,
+                           system_ss.all_sources() + genh,
                            c_args: ['-DCONFIG_SOFTMMU',
                                     '-DCOMPILING_SYSTEM_VS_USER'],
-                           dependencies: libsystem_ss.all_dependencies(),
+                           dependencies: system_ss.all_dependencies(),
                            build_by_default: false)
 
 # Note that this library is never used directly (only through extract_objects)
@@ -4121,7 +4119,6 @@  libsystem = static_library('system',
 common_all = static_library('common',
                             build_by_default: false,
                             sources: common_ss.all_sources() + genh,
-                            include_directories: common_user_inc,
                             implicit_include_directories: false,
                             dependencies: common_ss.all_dependencies())
 
@@ -4135,10 +4132,20 @@  foreach target_base_arch, config_base_arch : config_base_arch_mak
   inc = [common_user_inc + target_inc]
 
   target_common = common_ss.apply(config_target, strict: false)
+  target_system = system_ss.apply(config_target, strict: false)
+  target_user = user_ss.apply(config_target, strict: false)
   common_deps = []
+  system_deps = []
+  user_deps = []
   foreach dep: target_common.dependencies()
     common_deps += dep.partial_dependency(compile_args: true, includes: true)
   endforeach
+  foreach dep: target_system.dependencies()
+    system_deps += dep.partial_dependency(compile_args: true, includes: true)
+  endforeach
+  foreach dep: target_user.dependencies()
+    user_deps += dep.partial_dependency(compile_args: true, includes: true)
+  endforeach
 
   # prevent common code to access cpu compile time definition,
   # but still allow access to cpu.h
@@ -4154,7 +4161,7 @@  foreach target_base_arch, config_base_arch : config_base_arch_mak
         sources: src.all_sources() + genh,
         include_directories: inc,
         c_args: target_system_c_args,
-        dependencies: src.all_dependencies() + common_deps)
+        dependencies: src.all_dependencies() + common_deps + system_deps)
       hw_common_arch_libs += {target_base_arch: lib}
     endif
   endif
@@ -4168,7 +4175,8 @@  foreach target_base_arch, config_base_arch : config_base_arch_mak
         sources: src.all_sources() + genh,
         include_directories: inc,
         c_args: target_c_args,
-        dependencies: src.all_dependencies() + common_deps)
+        dependencies: src.all_dependencies() + common_deps +
+                      system_deps + user_deps)
       target_common_arch_libs += {target_base_arch: lib}
     endif
   endif
@@ -4182,7 +4190,7 @@  foreach target_base_arch, config_base_arch : config_base_arch_mak
         sources: src.all_sources() + genh,
         include_directories: inc,
         c_args: target_system_c_args,
-        dependencies: src.all_dependencies() + common_deps)
+        dependencies: src.all_dependencies() + common_deps + system_deps)
       target_common_system_arch_libs += {target_base_arch: lib}
     endif
   endif
@@ -4358,12 +4366,12 @@  foreach target : target_dirs
   objects = [common_all.extract_objects(target_common.sources())]
   arch_deps += target_common.dependencies()
   if target_type == 'system'
-    src = libsystem_ss.apply(config_target, strict: false)
+    src = system_ss.apply(config_target, strict: false)
     objects += libsystem.extract_objects(src.sources())
     arch_deps += src.dependencies()
   endif
   if target_type == 'user'
-    src = libuser_ss.apply(config_target, strict: false)
+    src = user_ss.apply(config_target, strict: false)
     objects += libuser.extract_objects(src.sources())
     arch_deps += src.dependencies()
   endif