commit a881a5b110d2f23a11924604bff64ab3c2755bc6 Author: Brandon Maier Date: Thu Mar 6 20:30:47 2025 -0600 meson: support building libfdt without static library Some packaging systems like NixOS don't support compiling static libraries. However libfdt's meson.build uses `both_library()` which forces the build to always compile shared and static libraries. Removing `both_library()` will make packaging easier. libfdt uses `both_libraries()` to support the 'static-build' option. But we do not need the 'static-build' option as Meson can natively build static using > meson setup builddir/ -Dc_link_args='-static' --prefer-static --default-library=static So drop 'static-build' and then replace `both_libraries()` with `library()`. Signed-off-by: Brandon Maier Signed-off-by: David Gibson diff --git a/libfdt/meson.build b/libfdt/meson.build index bf8343f..c2f4bd6 100644 --- a/libfdt/meson.build +++ b/libfdt/meson.build @@ -26,7 +26,7 @@ else endif link_args += version_script -libfdt = both_libraries( +libfdt = library( 'fdt', sources, version: meson.project_version(), link_args: link_args, @@ -34,17 +34,11 @@ libfdt = both_libraries( install: true, ) -if static_build - link_with = libfdt.get_static_lib() -else - link_with = libfdt.get_shared_lib() -endif - libfdt_inc = include_directories('.') libfdt_dep = declare_dependency( include_directories: libfdt_inc, - link_with: link_with, + link_with: libfdt, ) install_headers( diff --git a/meson.build b/meson.build index 310699f..603ffaa 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ project('dtc', 'c', version: files('VERSION.txt'), license: ['GPL2+', 'BSD-2'], - default_options: 'werror=true', + default_options: ['werror=true', 'default_library=both'], meson_version: '>=0.57.0' ) @@ -27,16 +27,8 @@ add_project_arguments( language: 'c' ) -if get_option('static-build') - static_build = true - extra_link_args = ['-static'] -else - static_build = false - extra_link_args = [] -endif - yamltree = 'yamltree.c' -yaml = dependency('yaml-0.1', version: '>=0.2.3', required: get_option('yaml'), static: static_build) +yaml = dependency('yaml-0.1', version: '>=0.2.3', required: get_option('yaml')) if not yaml.found() add_project_arguments('-DNO_YAML', language: 'c') yamltree = [] @@ -92,7 +84,6 @@ if get_option('tools') ], dependencies: util_dep, install: true, - link_args: extra_link_args, ) endif @@ -113,11 +104,10 @@ if get_option('tools') ], dependencies: [util_dep, yaml], install: true, - link_args: extra_link_args, ) foreach e: ['fdtdump', 'fdtget', 'fdtput', 'fdtoverlay'] - dtc_tools += executable(e, files(e + '.c'), dependencies: util_dep, install: true, link_args: extra_link_args) + dtc_tools += executable(e, files(e + '.c'), dependencies: util_dep, install: true) endforeach install_data( diff --git a/meson_options.txt b/meson_options.txt index 36f391a..62b31b3 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -8,7 +8,5 @@ option('valgrind', type: 'feature', value: 'auto', description: 'Valgrind support') option('python', type: 'feature', value: 'auto', description: 'Build pylibfdt Python library') -option('static-build', type: 'boolean', value: false, - description: 'Build static binaries') option('tests', type: 'boolean', value: true, description: 'Build tests') diff --git a/tests/meson.build b/tests/meson.build index 9cf6e3d..baed174 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -96,22 +96,20 @@ tests += [ 'truncated_string', ] +test_deps = [testutil_dep, util_dep, libfdt_dep] + dl = cc.find_library('dl', required: false) -if dl.found() and not static_build +if dl.found() tests += [ 'asm_tree_dump', 'value-labels', ] -endif - -test_deps = [testutil_dep, util_dep, libfdt_dep] -if not static_build test_deps += [dl] endif tests_exe = [] foreach t: tests - tests_exe += executable(t, files(t + '.c'), dependencies: test_deps, link_args: extra_link_args) + tests_exe += executable(t, files(t + '.c'), dependencies: test_deps) endforeach run_tests = find_program('run_tests.sh')