blob: b23ea1b159b239c811d44573517651aebd8788a6 [file] [log] [blame]
Pierre-Clément Tosief1978a2022-05-30 20:57:34 +01001project('dtc', 'c',
2 version: '1.6.0',
3 license: ['GPL2+', 'BSD-2'],
4 default_options: 'werror=true',
5)
6
7cc = meson.get_compiler('c')
8
9add_project_arguments(
10 cc.get_supported_arguments([
11 '-Wpointer-arith',
12 '-Wcast-qual',
13 '-Wnested-externs',
14 '-Wstrict-prototypes',
15 '-Wmissing-prototypes',
16 '-Wredundant-decls',
17 '-Wshadow'
18 ]),
19 language: 'c'
20)
21
22if host_machine.system() == 'windows'
23 add_project_arguments(
24 '-D__USE_MINGW_ANSI_STDIO=1',
25 language: 'c'
26 )
27endif
28
29add_project_arguments(
30 '-DFDT_ASSUME_MASK=' + get_option('assume-mask').to_string(),
31 language: 'c'
32)
33
34yamltree = 'yamltree.c'
35yaml = dependency('yaml-0.1', required: get_option('yaml'))
36if not yaml.found()
37 add_project_arguments('-DNO_YAML', language: 'c')
38 yamltree = []
39endif
40
41valgrind = dependency('valgrind', required: get_option('valgrind'))
42if not valgrind.found()
43 add_project_arguments('-DNO_VALGRIND', language: 'c')
44endif
45
46py = import('python')
47py = py.find_installation(required: get_option('python'))
48swig = find_program('swig', required: get_option('python'))
49
50version_gen_h = vcs_tag(
51 input: 'version_gen.h.in',
52 output: 'version_gen.h',
53)
54
55subdir('libfdt')
56
57if get_option('tools')
58 flex = find_program('flex', required: true)
59 bison = find_program('bison', required: true)
60
61 util_dep = declare_dependency(
62 sources: ['util.c', version_gen_h],
63 include_directories: '.',
64 dependencies: libfdt_dep
65 )
66
67 lgen = generator(
68 flex,
69 output: '@PLAINNAME@.lex.c',
70 arguments: ['-o', '@OUTPUT@', '@INPUT@'],
71 )
72
73 pgen = generator(
74 bison,
75 output: ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
76 arguments: ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'],
77 )
78
79 if cc.check_header('fnmatch.h')
80 executable(
81 'convert-dtsv0',
82 [
83 lgen.process('convert-dtsv0-lexer.l'),
84 'srcpos.c',
85 ],
86 dependencies: util_dep,
87 install: true,
88 )
89 endif
90
91 executable(
92 'dtc',
93 [
94 lgen.process('dtc-lexer.l'),
95 pgen.process('dtc-parser.y'),
96 'checks.c',
97 'data.c',
98 'dtc.c',
99 'flattree.c',
100 'fstree.c',
101 'livetree.c',
102 'srcpos.c',
103 'treesource.c',
104 yamltree,
105 ],
106 dependencies: [util_dep, yaml],
107 install: true,
108 )
109
110 foreach e: ['fdtdump', 'fdtget', 'fdtput', 'fdtoverlay']
111 executable(e, files(e + '.c'), dependencies: util_dep, install: true)
112 endforeach
113
114 install_data(
115 'dtdiff',
116 install_dir: get_option('prefix') / get_option('bindir'),
117 install_mode: 'rwxr-xr-x',
118 )
119endif
120
121if not meson.is_cross_build()
122 if py.found() and swig.found()
123 subdir('pylibfdt')
124 endif
125
126 if get_option('tools')
127 subdir('tests')
128 endif
129endif