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 d2e6f9272d
("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>
This commit is contained in:
parent
7b1070a7e1
commit
4408155ac5
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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.
|
||||||
|
@ -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))
|
||||||
|
17
meson.build
17
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(),
|
dependencies: common_ss.all_dependencies())
|
||||||
name_suffix: 'fa')
|
|
||||||
|
|
||||||
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,
|
build_by_default: false)
|
||||||
name_suffix: 'fa')
|
|
||||||
|
|
||||||
if target.endswith('-softmmu')
|
if target.endswith('-softmmu')
|
||||||
execs = [{
|
execs = [{
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user