dtc/libfdt/meson.build
David Gibson 28bdb653cb build: Fix linker version script support detection
The tests for linker version script support were incorrect in both make
and meson build systems. The problem was that the script needs to match
the object it's used with, whereas the tests used dummy objects with no
matching symbols.

Updated both systems to test with proper symbol matching between the test
object and version script using a dedicated test.lds file.

Generated-by: Claude Code 1.0.65 (claude-sonnet-4@20250514)
2025-08-06 16:57:40 +10:00

64 lines
1.5 KiB
Meson

version_script = '-Wl,--version-script=@0@'.format(meson.current_source_dir() / 'version.lds')
test_code = 'void test_func(){} int main(){}'
if not cc.links(test_code, args: ['-Wl,--version-script=' + meson.current_source_dir() / 'test.lds'])
version_script = []
endif
sources = files(
'fdt.c',
'fdt_addresses.c',
'fdt_check.c',
'fdt_empty_tree.c',
'fdt_overlay.c',
'fdt_ro.c',
'fdt_rw.c',
'fdt_strerror.c',
'fdt_sw.c',
'fdt_wip.c',
)
link_args = []
if cc.has_link_argument('-Wl,--no-undefined')
link_args += '-Wl,--no-undefined'
else
# -undefined error is the equivalent of --no-undefined for the macOS linker,
# but -undefined would also be understood as a valid argument for GNU ld!
link_args += cc.get_supported_link_arguments('-Wl,-undefined,error')
endif
link_args += version_script
libfdt = library(
'fdt', sources,
version: meson.project_version(),
link_args: link_args,
link_depends: 'version.lds',
install: get_option('default_library') != 'static' or not wheel_only,
)
libfdt_inc = include_directories('.')
libfdt_dep = declare_dependency(
include_directories: libfdt_inc,
link_with: libfdt,
)
meson.override_dependency('libfdt', libfdt_dep)
if not wheel_only
install_headers(
files(
'fdt.h',
'libfdt.h',
'libfdt_env.h',
)
)
pkgconfig = import('pkgconfig')
pkgconfig.generate(
libraries: libfdt,
version: meson.project_version(),
filebase: 'libfdt',
name: 'libfdt',
description: 'Flat Device Tree manipulation',
)
endif