Przeglądaj źródła

meson: Drop the .fa library suffix

The non-standard .fa library suffix breaks the link source
de-duplication done by Meson so drop it.

The lack of link source de-duplication causes AddressSanitizer to
complain ODR violations, and makes GNU ld abort when combined with
clang's LTO.

Fortunately, the non-standard suffix is not necessary anymore for
two reasons.

First, the non-standard suffix was necessary for fork-fuzzing.
Meson wraps all standard-suffixed libraries with --start-group and
--end-group. This made a fork-fuzz.ld linker script wrapped as well and
broke builds. Commit d2e6f9272d33 ("fuzz: remove fork-fuzzing
scaffolding") dropped fork-fuzzing so we can now restore the standard
suffix.

Second, the libraries are not even built anymore, because it is
possible to just use the object files directly via extract_all_objects().

The occurences of the suffix were detected and removed by performing
a tree-wide search with 'fa' and .fa (note the quotes and dot).

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-ID: <20240524-xkb-v4-4-2de564e5c859@daynix.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo Bonzini 1 rok temu
rodzic
commit
4408155ac5

+ 0 - 2
.gitlab-ci.d/buildtest-template.yml

@@ -45,10 +45,8 @@
     exclude:
     exclude:
       - build/**/*.p
       - build/**/*.p
       - build/**/*.a.p
       - build/**/*.a.p
-      - build/**/*.fa.p
       - build/**/*.c.o
       - build/**/*.c.o
       - build/**/*.c.o.d
       - build/**/*.c.o.d
-      - build/**/*.fa
 
 
 .common_test_job_template:
 .common_test_job_template:
   extends: .base_job_template
   extends: .base_job_template

+ 0 - 2
.gitlab-ci.d/buildtest.yml

@@ -178,10 +178,8 @@ build-previous-qemu:
     exclude:
     exclude:
       - build-previous/**/*.p
       - build-previous/**/*.p
       - build-previous/**/*.a.p
       - build-previous/**/*.a.p
-      - build-previous/**/*.fa.p
       - build-previous/**/*.c.o
       - build-previous/**/*.c.o
       - build-previous/**/*.c.o.d
       - build-previous/**/*.c.o.d
-      - build-previous/**/*.fa
   needs:
   needs:
     job: amd64-opensuse-leap-container
     job: amd64-opensuse-leap-container
   variables:
   variables:

+ 0 - 5
docs/devel/build-system.rst

@@ -235,16 +235,11 @@ Subsystem sourcesets:
   are then turned into static libraries as follows::
   are then turned into static libraries as follows::
 
 
     libchardev = static_library('chardev', chardev_ss.sources(),
     libchardev = static_library('chardev', chardev_ss.sources(),
-                                name_suffix: 'fa',
                                 build_by_default: false)
                                 build_by_default: false)
 
 
     chardev = declare_dependency(objects: libchardev.extract_all_objects(recursive: false),
     chardev = declare_dependency(objects: libchardev.extract_all_objects(recursive: false),
                                  dependencies: chardev_ss.dependencies())
                                  dependencies: chardev_ss.dependencies())
 
 
-  As of Meson 0.55.1, the special ``.fa`` suffix should be used for everything
-  that is used with ``link_whole``, to ensure that the link flags are placed
-  correctly in the command line.
-
 Target-independent emulator sourcesets:
 Target-independent emulator sourcesets:
   Various general purpose helper code is compiled only once and
   Various general purpose helper code is compiled only once and
   the .o files are linked into all output binaries that need it.
   the .o files are linked into all output binaries that need it.

+ 0 - 2
gdbstub/meson.build

@@ -19,13 +19,11 @@ gdb_system_ss = gdb_system_ss.apply({})
 
 
 libgdb_user = static_library('gdb_user',
 libgdb_user = static_library('gdb_user',
                              gdb_user_ss.sources() + genh,
                              gdb_user_ss.sources() + genh,
-                             name_suffix: 'fa',
                              c_args: '-DCONFIG_USER_ONLY',
                              c_args: '-DCONFIG_USER_ONLY',
                              build_by_default: false)
                              build_by_default: false)
 
 
 libgdb_system = static_library('gdb_system',
 libgdb_system = static_library('gdb_system',
                                 gdb_system_ss.sources() + genh,
                                 gdb_system_ss.sources() + genh,
-                                name_suffix: 'fa',
                                 build_by_default: false)
                                 build_by_default: false)
 
 
 gdb_user = declare_dependency(objects: libgdb_user.extract_all_objects(recursive: false))
 gdb_user = declare_dependency(objects: libgdb_user.extract_all_objects(recursive: false))

+ 2 - 15
meson.build

@@ -3467,7 +3467,6 @@ endif
 qom_ss = qom_ss.apply({})
 qom_ss = qom_ss.apply({})
 libqom = static_library('qom', qom_ss.sources() + genh,
 libqom = static_library('qom', qom_ss.sources() + genh,
                         dependencies: [qom_ss.dependencies()],
                         dependencies: [qom_ss.dependencies()],
-                        name_suffix: 'fa',
                         build_by_default: false)
                         build_by_default: false)
 qom = declare_dependency(objects: libqom.extract_all_objects(recursive: false),
 qom = declare_dependency(objects: libqom.extract_all_objects(recursive: false),
                          dependencies: qom_ss.dependencies())
                          dependencies: qom_ss.dependencies())
@@ -3475,7 +3474,6 @@ qom = declare_dependency(objects: libqom.extract_all_objects(recursive: false),
 event_loop_base = files('event-loop-base.c')
 event_loop_base = files('event-loop-base.c')
 event_loop_base = static_library('event-loop-base',
 event_loop_base = static_library('event-loop-base',
                                  sources: event_loop_base + genh,
                                  sources: event_loop_base + genh,
-                                 name_suffix: 'fa',
                                  build_by_default: false)
                                  build_by_default: false)
 event_loop_base = declare_dependency(objects: event_loop_base.extract_all_objects(recursive: false),
 event_loop_base = declare_dependency(objects: event_loop_base.extract_all_objects(recursive: false),
                                      dependencies: [qom])
                                      dependencies: [qom])
@@ -3728,7 +3726,6 @@ qemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
 authz_ss = authz_ss.apply({})
 authz_ss = authz_ss.apply({})
 libauthz = static_library('authz', authz_ss.sources() + genh,
 libauthz = static_library('authz', authz_ss.sources() + genh,
                           dependencies: [authz_ss.dependencies()],
                           dependencies: [authz_ss.dependencies()],
-                          name_suffix: 'fa',
                           build_by_default: false)
                           build_by_default: false)
 
 
 authz = declare_dependency(objects: libauthz.extract_all_objects(recursive: false),
 authz = declare_dependency(objects: libauthz.extract_all_objects(recursive: false),
@@ -3737,7 +3734,6 @@ authz = declare_dependency(objects: libauthz.extract_all_objects(recursive: fals
 crypto_ss = crypto_ss.apply({})
 crypto_ss = crypto_ss.apply({})
 libcrypto = static_library('crypto', crypto_ss.sources() + genh,
 libcrypto = static_library('crypto', crypto_ss.sources() + genh,
                            dependencies: [crypto_ss.dependencies()],
                            dependencies: [crypto_ss.dependencies()],
-                           name_suffix: 'fa',
                            build_by_default: false)
                            build_by_default: false)
 
 
 crypto = declare_dependency(objects: libcrypto.extract_all_objects(recursive: false),
 crypto = declare_dependency(objects: libcrypto.extract_all_objects(recursive: false),
@@ -3747,14 +3743,12 @@ io_ss = io_ss.apply({})
 libio = static_library('io', io_ss.sources() + genh,
 libio = static_library('io', io_ss.sources() + genh,
                        dependencies: [io_ss.dependencies()],
                        dependencies: [io_ss.dependencies()],
                        link_with: libqemuutil,
                        link_with: libqemuutil,
-                       name_suffix: 'fa',
                        build_by_default: false)
                        build_by_default: false)
 
 
 io = declare_dependency(objects: libio.extract_all_objects(recursive: false),
 io = declare_dependency(objects: libio.extract_all_objects(recursive: false),
                         dependencies: [io_ss.dependencies(), crypto, qom])
                         dependencies: [io_ss.dependencies(), crypto, qom])
 
 
 libmigration = static_library('migration', sources: migration_files + genh,
 libmigration = static_library('migration', sources: migration_files + genh,
-                              name_suffix: 'fa',
                               build_by_default: false)
                               build_by_default: false)
 migration = declare_dependency(objects: libmigration.extract_all_objects(recursive: false),
 migration = declare_dependency(objects: libmigration.extract_all_objects(recursive: false),
                                dependencies: [qom, io])
                                dependencies: [qom, io])
@@ -3763,7 +3757,6 @@ system_ss.add(migration)
 block_ss = block_ss.apply({})
 block_ss = block_ss.apply({})
 libblock = static_library('block', block_ss.sources() + genh,
 libblock = static_library('block', block_ss.sources() + genh,
                           dependencies: block_ss.dependencies(),
                           dependencies: block_ss.dependencies(),
-                          name_suffix: 'fa',
                           build_by_default: false)
                           build_by_default: false)
 
 
 block = declare_dependency(objects: libblock.extract_all_objects(recursive: false),
 block = declare_dependency(objects: libblock.extract_all_objects(recursive: false),
@@ -3772,7 +3765,6 @@ block = declare_dependency(objects: libblock.extract_all_objects(recursive: fals
 blockdev_ss = blockdev_ss.apply({})
 blockdev_ss = blockdev_ss.apply({})
 libblockdev = static_library('blockdev', blockdev_ss.sources() + genh,
 libblockdev = static_library('blockdev', blockdev_ss.sources() + genh,
                              dependencies: blockdev_ss.dependencies(),
                              dependencies: blockdev_ss.dependencies(),
-                             name_suffix: 'fa',
                              build_by_default: false)
                              build_by_default: false)
 
 
 blockdev = declare_dependency(objects: libblockdev.extract_all_objects(recursive: false),
 blockdev = declare_dependency(objects: libblockdev.extract_all_objects(recursive: false),
@@ -3781,14 +3773,12 @@ blockdev = declare_dependency(objects: libblockdev.extract_all_objects(recursive
 qmp_ss = qmp_ss.apply({})
 qmp_ss = qmp_ss.apply({})
 libqmp = static_library('qmp', qmp_ss.sources() + genh,
 libqmp = static_library('qmp', qmp_ss.sources() + genh,
                         dependencies: qmp_ss.dependencies(),
                         dependencies: qmp_ss.dependencies(),
-                        name_suffix: 'fa',
                         build_by_default: false)
                         build_by_default: false)
 
 
 qmp = declare_dependency(objects: libqmp.extract_all_objects(recursive: false),
 qmp = declare_dependency(objects: libqmp.extract_all_objects(recursive: false),
                          dependencies: qmp_ss.dependencies())
                          dependencies: qmp_ss.dependencies())
 
 
 libchardev = static_library('chardev', chardev_ss.sources() + genh,
 libchardev = static_library('chardev', chardev_ss.sources() + genh,
-                            name_suffix: 'fa',
                             dependencies: chardev_ss.dependencies(),
                             dependencies: chardev_ss.dependencies(),
                             build_by_default: false)
                             build_by_default: false)
 
 
@@ -3797,7 +3787,6 @@ chardev = declare_dependency(objects: libchardev.extract_all_objects(recursive:
 
 
 hwcore_ss = hwcore_ss.apply({})
 hwcore_ss = hwcore_ss.apply({})
 libhwcore = static_library('hwcore', sources: hwcore_ss.sources() + genh,
 libhwcore = static_library('hwcore', sources: hwcore_ss.sources() + genh,
-                           name_suffix: 'fa',
                            build_by_default: false)
                            build_by_default: false)
 hwcore = declare_dependency(objects: libhwcore.extract_all_objects(recursive: false))
 hwcore = declare_dependency(objects: libhwcore.extract_all_objects(recursive: false))
 common_ss.add(hwcore)
 common_ss.add(hwcore)
@@ -3820,8 +3809,7 @@ common_all = static_library('common',
                             sources: common_ss.all_sources() + genh,
                             sources: common_ss.all_sources() + genh,
                             include_directories: common_user_inc,
                             include_directories: common_user_inc,
                             implicit_include_directories: false,
                             implicit_include_directories: false,
-                            dependencies: common_ss.all_dependencies(),
-                            name_suffix: 'fa')
+                            dependencies: common_ss.all_dependencies())
 
 
 feature_to_c = find_program('scripts/feature_to_c.py')
 feature_to_c = find_program('scripts/feature_to_c.py')
 
 
@@ -3930,8 +3918,7 @@ foreach target : target_dirs
                  objects: objects,
                  objects: objects,
                  include_directories: target_inc,
                  include_directories: target_inc,
                  c_args: c_args,
                  c_args: c_args,
-                 build_by_default: false,
-                 name_suffix: 'fa')
+                 build_by_default: false)
 
 
   if target.endswith('-softmmu')
   if target.endswith('-softmmu')
     execs = [{
     execs = [{

+ 1 - 1
stubs/blk-exp-close-all.c

@@ -1,7 +1,7 @@
 #include "qemu/osdep.h"
 #include "qemu/osdep.h"
 #include "block/export.h"
 #include "block/export.h"
 
 
-/* Only used in programs that support block exports (libblockdev.fa) */
+/* Only used in programs that support block exports (libblockdev.a) */
 void blk_exp_close_all(void)
 void blk_exp_close_all(void)
 {
 {
 }
 }

+ 0 - 2
tcg/meson.build

@@ -31,7 +31,6 @@ tcg_ss = tcg_ss.apply({})
 
 
 libtcg_user = static_library('tcg_user',
 libtcg_user = static_library('tcg_user',
                              tcg_ss.sources() + genh,
                              tcg_ss.sources() + genh,
-                             name_suffix: 'fa',
                              dependencies: tcg_ss.dependencies(),
                              dependencies: tcg_ss.dependencies(),
                              c_args: '-DCONFIG_USER_ONLY',
                              c_args: '-DCONFIG_USER_ONLY',
                              build_by_default: false)
                              build_by_default: false)
@@ -42,7 +41,6 @@ user_ss.add(tcg_user)
 
 
 libtcg_system = static_library('tcg_system',
 libtcg_system = static_library('tcg_system',
                                 tcg_ss.sources() + genh,
                                 tcg_ss.sources() + genh,
-                                name_suffix: 'fa',
                                 dependencies: tcg_ss.dependencies(),
                                 dependencies: tcg_ss.dependencies(),
                                 c_args: '-DCONFIG_SOFTMMU',
                                 c_args: '-DCONFIG_SOFTMMU',
                                 build_by_default: false)
                                 build_by_default: false)

+ 1 - 1
tests/Makefile.include

@@ -87,7 +87,7 @@ distclean-tcg: $(DISTCLEAN_TCG_TARGET_RULES)
 .PHONY: check-venv check-avocado check-acceptance check-acceptance-deprecated-warning
 .PHONY: check-venv check-avocado check-acceptance check-acceptance-deprecated-warning
 
 
 # Build up our target list from the filtered list of ninja targets
 # Build up our target list from the filtered list of ninja targets
-TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets)))
+TARGETS=$(patsubst libqemu-%.a, %, $(filter libqemu-%.a, $(ninja-targets)))
 
 
 TESTS_VENV_TOKEN=$(BUILD_DIR)/pyvenv/tests.group
 TESTS_VENV_TOKEN=$(BUILD_DIR)/pyvenv/tests.group
 TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
 TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results

+ 0 - 1
tests/qtest/libqos/meson.build

@@ -69,7 +69,6 @@ if have_virtfs
 endif
 endif
 
 
 libqos = static_library('qos', libqos_srcs + genh,
 libqos = static_library('qos', libqos_srcs + genh,
-                        name_suffix: 'fa',
                         build_by_default: false)
                         build_by_default: false)
 
 
 qos = declare_dependency(objects: libqos.extract_all_objects(recursive: false))
 qos = declare_dependency(objects: libqos.extract_all_objects(recursive: false))