Am 12. Juni 2025 05:46:03 UTC schrieb Paolo Bonzini <pbonz...@redhat.com>:
>On 6/12/25 07:12, Paolo Bonzini wrote:
>> I'll send a patch to the upstream dtc project and you can add it to QEMU via 
>> diff_files (see commit 64644bc4eab2f for an example).
>This is the patch, backported to QEMU's version of the dtc subproject:
>
>diff --git a/libfdt/meson.build b/libfdt/meson.build
>index 0307ffb..6581965 100644
>--- a/libfdt/meson.build
>+++ b/libfdt/meson.build
>@@ -30,6 +30,7 @@ libfdt_dep = declare_dependency(
>   include_directories: libfdt_inc,
>   link_with: libfdt,
> )
>+meson.override_dependency('libfdt', libfdt_dep)
>  install_headers(
>   files(
>diff --git a/meson.build b/meson.build
>index b23ea1b..7def0a6 100644
>--- a/meson.build
>+++ b/meson.build
>@@ -54,6 +54,7 @@ version_gen_h = vcs_tag(
>  subdir('libfdt')
> +dtc_tools = []
> if get_option('tools')
>   flex = find_program('flex', required: true)
>   bison = find_program('bison', required: true)
>@@ -77,7 +78,7 @@ if get_option('tools')
>   )
>    if cc.check_header('fnmatch.h')
>-    executable(
>+    dtc_tools += executable(
>       'convert-dtsv0',
>       [
>         lgen.process('convert-dtsv0-lexer.l'),
>@@ -88,7 +89,7 @@ if get_option('tools')
>     )
>   endif
> -  executable(
>+  dtc_tools += executable(
>     'dtc',
>     [
>       lgen.process('dtc-lexer.l'),
>@@ -108,7 +109,7 @@ if get_option('tools')
>   )
>    foreach e: ['fdtdump', 'fdtget', 'fdtput', 'fdtoverlay']
>-    executable(e, files(e + '.c'), dependencies: util_dep, install: true)
>+    dtc_tools += executable(e, files(e + '.c'), dependencies: util_dep, 
>install: true)
>   endforeach
>    install_data(
>@@ -118,6 +119,10 @@ if get_option('tools')
>   )
> endif
> +foreach e: dtc_tools
>+  meson.override_find_program(e.name(), e)
>+endforeach
>+
> if not meson.is_cross_build()
>   if py.found() and swig.found()
>     subdir('pylibfdt')
>
>
>and this is how you can then find dtc in QEMU's meson.build:
>
>diff --git a/meson.build b/meson.build
>index 61595015802..831678b4580 100644
>--- a/meson.build
>+++ b/meson.build
>@@ -2121,13 +2121,15 @@ if numa.found() and not cc.links('''
> endif
>  fdt = not_found
>+dtc = not_found
> fdt_opt = get_option('fdt')
> if fdt_opt == 'enabled' and get_option('wrap_mode') == 'nodownload'
>   fdt_opt = 'system'
> endif
> if fdt_opt in ['enabled', 'system'] or (fdt_opt == 'auto' and have_system)
>   fdt = cc.find_library('fdt', required: fdt_opt == 'system')
>-  if fdt.found() and cc.links('''
>+  dtc = find_program('dtc', required: fdt_opt == 'system')
>+  if dtc.found() and fdt.found() and cc.links('''
>      #include <libfdt.h>
>      #include <libfdt_env.h>
>      int main(void) { fdt_find_max_phandle(NULL, NULL); return 0; }''',
>@@ -2136,8 +2138,12 @@ if fdt_opt in ['enabled', 'system'] or (fdt_opt == 
>'auto' and have_system)
>   elif fdt_opt != 'system'
>     fdt_opt = get_option('wrap_mode') == 'nodownload' ? 'disabled' : 
> 'internal'
>     fdt = not_found
>+    dtc = not_found
>   else
>-    error('system libfdt is too old (1.5.1 or newer required)')
>+    if dtc.found()
>+      error('system libfdt is too old (1.5.1 or newer required)')
>+    else
>+      error('device tree compiler not found')
>   endif
> endif
> if fdt_opt == 'internal'
>@@ -2145,7 +2148,8 @@ if fdt_opt == 'internal'
>   libfdt_proj = subproject('dtc', required: true,
>                            default_options: ['tools=false',  'yaml=disabled',
>                                              'python=disabled', 
> 'default_library=static'])
>-  fdt = libfdt_proj.get_variable('libfdt_dep')
>+  fdt = dependency('libfdt', required: true)
>+  dtc = find_program('dtc', required: true)
> endif
>  rdma = not_found
>

Thanks Paolo, I'll send a v2.

Best regards,
Bernhard

Reply via email to