Pierre-Clément Tosi | ef1978a | 2022-05-30 20:57:34 +0100 | [diff] [blame] | 1 | project('dtc', 'c', |
| 2 | version: '1.6.0', |
| 3 | license: ['GPL2+', 'BSD-2'], |
| 4 | default_options: 'werror=true', |
| 5 | ) |
| 6 | |
| 7 | cc = meson.get_compiler('c') |
| 8 | |
| 9 | add_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 | |
| 22 | if host_machine.system() == 'windows' |
| 23 | add_project_arguments( |
| 24 | '-D__USE_MINGW_ANSI_STDIO=1', |
| 25 | language: 'c' |
| 26 | ) |
| 27 | endif |
| 28 | |
| 29 | add_project_arguments( |
| 30 | '-DFDT_ASSUME_MASK=' + get_option('assume-mask').to_string(), |
| 31 | language: 'c' |
| 32 | ) |
| 33 | |
| 34 | yamltree = 'yamltree.c' |
| 35 | yaml = dependency('yaml-0.1', required: get_option('yaml')) |
| 36 | if not yaml.found() |
| 37 | add_project_arguments('-DNO_YAML', language: 'c') |
| 38 | yamltree = [] |
| 39 | endif |
| 40 | |
| 41 | valgrind = dependency('valgrind', required: get_option('valgrind')) |
| 42 | if not valgrind.found() |
| 43 | add_project_arguments('-DNO_VALGRIND', language: 'c') |
| 44 | endif |
| 45 | |
| 46 | py = import('python') |
| 47 | py = py.find_installation(required: get_option('python')) |
| 48 | swig = find_program('swig', required: get_option('python')) |
| 49 | |
| 50 | version_gen_h = vcs_tag( |
| 51 | input: 'version_gen.h.in', |
| 52 | output: 'version_gen.h', |
| 53 | ) |
| 54 | |
| 55 | subdir('libfdt') |
| 56 | |
| 57 | if 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 | ) |
| 119 | endif |
| 120 | |
| 121 | if 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 |
| 129 | endif |