trees = static_library('trees', files('trees.S'), c_args: '-D__ASSEMBLY__',
                       include_directories: libfdt_inc)

dumptrees = executable('dumptrees', files('dumptrees.c'),
                       link_with: trees, dependencies: libfdt_dep)

dumptrees_dtb = custom_target(
  'dumptrees',
  command: [dumptrees, meson.current_build_dir()],
  output: [
    'test_tree1.dtb',
    'bad_node_char.dtb',
    'bad_node_format.dtb',
    'bad_prop_char.dtb',
    'ovf_size_strings.dtb',
    'truncated_property.dtb',
    'truncated_string.dtb',
    'truncated_memrsv.dtb',
  ]
)

testutil_dep = declare_dependency(sources: ['testutils.c'], link_with: trees)

tests = [
  'add_subnode_with_nops',
  'addr_size_cells',
  'addr_size_cells2',
  'appendprop1',
  'appendprop2',
  'appendprop_addrrange',
  'boot-cpuid',
  'char_literal',
  'check_full',
  'check_header',
  'check_path',
  'del_node',
  'del_property',
  'dtb_reverse',
  'dtbs_equal_ordered',
  'dtbs_equal_unordered',
  'extra-terminating-null',
  'find_property',
  'fs_tree1',
  'get_alias',
  'get_mem_rsv',
  'get_name',
  'get_path',
  'get_phandle',
  'get_prop_offset',
  'get_next_tag_invalid_prop_len',
  'getprop',
  'incbin',
  'integer-expressions',
  'mangle-layout',
  'move_and_save',
  'node_check_compatible',
  'node_offset_by_compatible',
  'node_offset_by_phandle',
  'node_offset_by_prop_value',
  'nop_node',
  'nop_property',
  'nopulate',
  'notfound',
  'open_pack',
  'overlay',
  'overlay_bad_fixup',
  'parent_offset',
  'path-references',
  'path_offset',
  'path_offset_aliases',
  'phandle_format',
  'property_iterate',
  'propname_escapes',
  'references',
  'relref_merge',
  'root_node',
  'rw_oom',
  'rw_tree1',
  'set_name',
  'setprop',
  'setprop_inplace',
  'sized_cells',
  'string_escapes',
  'stringlist',
  'subnode_iterate',
  'subnode_offset',
  'supernode_atdepth_offset',
  'sw_states',
  'sw_tree1',
  'utilfdt_test',
]

tests += [
  'truncated_memrsv',
  'truncated_property',
  'truncated_string',
]

dl = cc.find_library('dl', required: false)
if dl.found() and not static_build
  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)
endforeach

run_tests = find_program('run_tests.sh')

env = []
if not py.found()
  env += 'NO_PYTHON=1'
else
  env += [
    'PYTHON=' + py.full_path(),
    'PYTHONPATH=' + meson.project_source_root() / 'pylibfdt',
    'NO_PYTHON=0',
  ]
endif
if not yaml.found()
  env += 'NO_YAML=1'
else
  env += 'NO_YAML=0'
endif

run_test_types = [
  'libfdt',
  'utilfdt',
  'dtc',
  'dtbs_equal',
  'fdtget',
  'fdtput',
  'fdtdump',
  'fdtoverlay'
]
run_test_deps = [
  dtc_tools, dumptrees_dtb, tests_exe
]
if pylibfdt_enabled
  run_test_types += 'pylibfdt'
  run_test_deps += pylibfdt
endif
foreach test_type : run_test_types
  test(
    test_type,
    run_tests,
    args: ['-t', test_type],
    is_parallel: false,
    workdir: meson.current_build_dir(),
    depends: run_test_deps,
    env: env,
    timeout: 1800, # mostly for valgrind
  )
endforeach
