xref: /aosp_15_r20/external/flashrom/meson.build (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Workerproject('flashrom', 'c',
2*0d6140beSAndroid Build Coastguard Worker  version : run_command('cat', 'VERSION', check: true).stdout().strip(),
3*0d6140beSAndroid Build Coastguard Worker  license : 'GPL-2.0',
4*0d6140beSAndroid Build Coastguard Worker  meson_version : '>=0.56.0',
5*0d6140beSAndroid Build Coastguard Worker  default_options : [
6*0d6140beSAndroid Build Coastguard Worker    'warning_level=2',
7*0d6140beSAndroid Build Coastguard Worker    'c_std=c99',
8*0d6140beSAndroid Build Coastguard Worker    'werror=true',
9*0d6140beSAndroid Build Coastguard Worker    'optimization=s',
10*0d6140beSAndroid Build Coastguard Worker    'debug=false',
11*0d6140beSAndroid Build Coastguard Worker    'default_library=both'
12*0d6140beSAndroid Build Coastguard Worker  ],
13*0d6140beSAndroid Build Coastguard Worker)
14*0d6140beSAndroid Build Coastguard Worker
15*0d6140beSAndroid Build Coastguard Workerfs = import('fs')
16*0d6140beSAndroid Build Coastguard Worker
17*0d6140beSAndroid Build Coastguard Workerif get_option('classic_cli').enabled() and get_option('default_library') == 'shared'
18*0d6140beSAndroid Build Coastguard Worker  error('''
19*0d6140beSAndroid Build Coastguard Worker    Cannot build cli_classic with shared libflashrom. Use \'-Dclassic_cli=disabled\' to disable the cli,
20*0d6140beSAndroid Build Coastguard Worker    or use \'--default-library=both\' to also build the classic_cli
21*0d6140beSAndroid Build Coastguard Worker  ''')
22*0d6140beSAndroid Build Coastguard Workerendif
23*0d6140beSAndroid Build Coastguard Worker
24*0d6140beSAndroid Build Coastguard Worker# libtool versioning
25*0d6140beSAndroid Build Coastguard Workerlt_current = '1'
26*0d6140beSAndroid Build Coastguard Workerlt_revision = '0'
27*0d6140beSAndroid Build Coastguard Workerlt_age = '0'
28*0d6140beSAndroid Build Coastguard Workerlt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision)
29*0d6140beSAndroid Build Coastguard Worker
30*0d6140beSAndroid Build Coastguard Workerflashrom_version = meson.project_version()
31*0d6140beSAndroid Build Coastguard Workergit = find_program('git', native : true, required : false)
32*0d6140beSAndroid Build Coastguard Workerif git.found()
33*0d6140beSAndroid Build Coastguard Worker  version_git = run_command('git', 'describe', check : false)
34*0d6140beSAndroid Build Coastguard Worker  if version_git.returncode() == 0
35*0d6140beSAndroid Build Coastguard Worker    flashrom_version += ' (git:@0@)'.format(version_git.stdout().strip())
36*0d6140beSAndroid Build Coastguard Worker  endif
37*0d6140beSAndroid Build Coastguard Workerendif
38*0d6140beSAndroid Build Coastguard Worker
39*0d6140beSAndroid Build Coastguard Workersubdir('doc')
40*0d6140beSAndroid Build Coastguard Worker
41*0d6140beSAndroid Build Coastguard Worker# hide/enable some warnings
42*0d6140beSAndroid Build Coastguard Workerwarning_flags = [
43*0d6140beSAndroid Build Coastguard Worker  '-Wshadow',
44*0d6140beSAndroid Build Coastguard Worker  '-Wmissing-prototypes',
45*0d6140beSAndroid Build Coastguard Worker  '-Wwrite-strings',
46*0d6140beSAndroid Build Coastguard Worker  '-Wno-unused-parameter',
47*0d6140beSAndroid Build Coastguard Worker  '-Wno-address-of-packed-member',
48*0d6140beSAndroid Build Coastguard Worker  '-Wno-enum-conversion',
49*0d6140beSAndroid Build Coastguard Worker  '-Wno-missing-braces',
50*0d6140beSAndroid Build Coastguard Worker]
51*0d6140beSAndroid Build Coastguard Worker
52*0d6140beSAndroid Build Coastguard Workercc = meson.get_compiler('c')
53*0d6140beSAndroid Build Coastguard Workeradd_project_arguments(cc.get_supported_arguments(warning_flags), language : 'c')
54*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D_DEFAULT_SOURCE', language : 'c')
55*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D_POSIX_C_SOURCE=200809L', language : 'c') # required for fileno, nanosleep, and strndup
56*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D_BSD_SOURCE', language : 'c') # required for glibc < v2.19
57*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D__BSD_VISIBLE', language : 'c') # required for u_char, u_int, u_long on FreeBSD
58*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D__XSI_VISIBLE', language : 'c') # required for gettimeofday() on FreeBSD
59*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D_NETBSD_SOURCE', language : 'c') # required for indirect include of strings.h on NetBSD
60*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-D_DARWIN_C_SOURCE', language : 'c') # required for indirect include of strings.h on MacOS
61*0d6140beSAndroid Build Coastguard Workeradd_project_arguments('-DFLASHROM_VERSION="' + flashrom_version + '"', language : 'c')
62*0d6140beSAndroid Build Coastguard Worker
63*0d6140beSAndroid Build Coastguard Worker# get defaults from configure
64*0d6140beSAndroid Build Coastguard Workerconfig_print_wiki= get_option('classic_cli_print_wiki')
65*0d6140beSAndroid Build Coastguard Workerconfig_default_programmer_name = get_option('default_programmer_name')
66*0d6140beSAndroid Build Coastguard Workerconfig_default_programmer_args = get_option('default_programmer_args')
67*0d6140beSAndroid Build Coastguard Worker
68*0d6140beSAndroid Build Coastguard Workercargs = []
69*0d6140beSAndroid Build Coastguard Workerlink_args = []
70*0d6140beSAndroid Build Coastguard Workerdeps = []
71*0d6140beSAndroid Build Coastguard Workersrcs = files(
72*0d6140beSAndroid Build Coastguard Worker  '82802ab.c',
73*0d6140beSAndroid Build Coastguard Worker  'at45db.c',
74*0d6140beSAndroid Build Coastguard Worker  'bitbang_spi.c',
75*0d6140beSAndroid Build Coastguard Worker  'edi.c',
76*0d6140beSAndroid Build Coastguard Worker  'en29lv640b.c',
77*0d6140beSAndroid Build Coastguard Worker  'erasure_layout.c',
78*0d6140beSAndroid Build Coastguard Worker  'flashchips.c',
79*0d6140beSAndroid Build Coastguard Worker  'flashrom.c',
80*0d6140beSAndroid Build Coastguard Worker  'fmap.c',
81*0d6140beSAndroid Build Coastguard Worker  'helpers.c',
82*0d6140beSAndroid Build Coastguard Worker  'helpers_fileio.c',
83*0d6140beSAndroid Build Coastguard Worker  'ich_descriptors.c',
84*0d6140beSAndroid Build Coastguard Worker  'jedec.c',
85*0d6140beSAndroid Build Coastguard Worker  'printlock.c',
86*0d6140beSAndroid Build Coastguard Worker  'layout.c',
87*0d6140beSAndroid Build Coastguard Worker  'libflashrom.c',
88*0d6140beSAndroid Build Coastguard Worker  'opaque.c',
89*0d6140beSAndroid Build Coastguard Worker  'parallel.c',
90*0d6140beSAndroid Build Coastguard Worker  'print.c',
91*0d6140beSAndroid Build Coastguard Worker  'programmer.c',
92*0d6140beSAndroid Build Coastguard Worker  'programmer_table.c',
93*0d6140beSAndroid Build Coastguard Worker  's25f.c',
94*0d6140beSAndroid Build Coastguard Worker  'sfdp.c',
95*0d6140beSAndroid Build Coastguard Worker  'spi25.c',
96*0d6140beSAndroid Build Coastguard Worker  'spi25_statusreg.c',
97*0d6140beSAndroid Build Coastguard Worker  'spi95.c',
98*0d6140beSAndroid Build Coastguard Worker  'spi.c',
99*0d6140beSAndroid Build Coastguard Worker  'sst28sf040.c',
100*0d6140beSAndroid Build Coastguard Worker  'sst49lfxxxc.c',
101*0d6140beSAndroid Build Coastguard Worker  'sst_fwhub.c',
102*0d6140beSAndroid Build Coastguard Worker  'stm50.c',
103*0d6140beSAndroid Build Coastguard Worker  'w29ee011.c',
104*0d6140beSAndroid Build Coastguard Worker  'w39.c',
105*0d6140beSAndroid Build Coastguard Worker  'writeprotect.c',
106*0d6140beSAndroid Build Coastguard Worker  'writeprotect_ranges.c',
107*0d6140beSAndroid Build Coastguard Worker)
108*0d6140beSAndroid Build Coastguard Worker
109*0d6140beSAndroid Build Coastguard Worker# Select an appropriate delay implementation for the target OS
110*0d6140beSAndroid Build Coastguard Workerdelay_src = files('udelay.c')
111*0d6140beSAndroid Build Coastguard Workerif target_machine.system() == 'dos'
112*0d6140beSAndroid Build Coastguard Worker  delay_src = files('udelay_dos.c')
113*0d6140beSAndroid Build Coastguard Workerendif
114*0d6140beSAndroid Build Coastguard Workersrcs += delay_src
115*0d6140beSAndroid Build Coastguard Workercargs += ['-DCONFIG_DELAY_MINIMUM_SLEEP_US=@0@'.format(
116*0d6140beSAndroid Build Coastguard Worker  get_option('delay_minimum_sleep_us')
117*0d6140beSAndroid Build Coastguard Worker)]
118*0d6140beSAndroid Build Coastguard Worker
119*0d6140beSAndroid Build Coastguard Worker### CrOS Tree
120*0d6140beSAndroid Build Coastguard Workersrcs += files(
121*0d6140beSAndroid Build Coastguard Worker  'power.c',
122*0d6140beSAndroid Build Coastguard Worker  'action_descriptor.c',
123*0d6140beSAndroid Build Coastguard Worker  'flashchips_crosbl.c',
124*0d6140beSAndroid Build Coastguard Worker  'cros_ec.c',
125*0d6140beSAndroid Build Coastguard Worker  'big_lock.c',
126*0d6140beSAndroid Build Coastguard Worker  'file_lock.c',
127*0d6140beSAndroid Build Coastguard Worker)
128*0d6140beSAndroid Build Coastguard Workercargs += '-DCONFIG_CROS_EC=1'
129*0d6140beSAndroid Build Coastguard Workercargs += '-DUSE_BIG_LOCK=1'
130*0d6140beSAndroid Build Coastguard Worker###
131*0d6140beSAndroid Build Coastguard Worker
132*0d6140beSAndroid Build Coastguard Worker# check for required symbols
133*0d6140beSAndroid Build Coastguard Workerif cc.has_function('clock_gettime')
134*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DHAVE_CLOCK_GETTIME=1', language : 'c')
135*0d6140beSAndroid Build Coastguard Workerendif
136*0d6140beSAndroid Build Coastguard Workerif cc.has_function('strnlen')
137*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DHAVE_STRNLEN=1', language : 'c')
138*0d6140beSAndroid Build Coastguard Workerendif
139*0d6140beSAndroid Build Coastguard Workerif cc.check_header('getopt.h')
140*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DHAVE_GETOPT_H=1', language : 'c')
141*0d6140beSAndroid Build Coastguard Workerendif
142*0d6140beSAndroid Build Coastguard Workerif cc.check_header('pciutils/pci.h')
143*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DHAVE_PCIUTILS_PCI_H=1', language : 'c')
144*0d6140beSAndroid Build Coastguard Workerendif
145*0d6140beSAndroid Build Coastguard Workerif cc.check_header('sys/utsname.h')
146*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DHAVE_UTSNAME=1', language : 'c')
147*0d6140beSAndroid Build Coastguard Workerendif
148*0d6140beSAndroid Build Coastguard Workerif host_machine.system() in ['cygwin', 'windows']
149*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DIS_WINDOWS=1', language : 'c')
150*0d6140beSAndroid Build Coastguard Workerelse
151*0d6140beSAndroid Build Coastguard Worker  add_project_arguments('-DIS_WINDOWS=0', language : 'c')
152*0d6140beSAndroid Build Coastguard Workerendif
153*0d6140beSAndroid Build Coastguard Worker
154*0d6140beSAndroid Build Coastguard Workerif host_machine.system() == 'linux'
155*0d6140beSAndroid Build Coastguard Worker  custom_baud_c = 'custom_baud_linux.c'
156*0d6140beSAndroid Build Coastguard Workerelif host_machine.system() == 'darwin'
157*0d6140beSAndroid Build Coastguard Worker  custom_baud_c = 'custom_baud_darwin.c'
158*0d6140beSAndroid Build Coastguard Workerelse
159*0d6140beSAndroid Build Coastguard Worker  custom_baud_c = 'custom_baud.c'
160*0d6140beSAndroid Build Coastguard Workerendif
161*0d6140beSAndroid Build Coastguard Worker
162*0d6140beSAndroid Build Coastguard Workersystems_hwaccess   = [ 'linux', 'openbsd', 'freebsd', 'dragonfly', 'netbsd', 'dos' ]
163*0d6140beSAndroid Build Coastguard Workersystems_serial     = [ 'linux', 'openbsd', 'freebsd', 'dragonfly', 'netbsd', 'darwin', 'windows' ]
164*0d6140beSAndroid Build Coastguard Worker
165*0d6140beSAndroid Build Coastguard Workercpus_port_io = [ 'x86', 'x86_64' ]
166*0d6140beSAndroid Build Coastguard Worker
167*0d6140beSAndroid Build Coastguard Workergroup_ftdi   = get_option('programmer').contains('group_ftdi')
168*0d6140beSAndroid Build Coastguard Workergroup_pci    = get_option('programmer').contains('group_pci')
169*0d6140beSAndroid Build Coastguard Workergroup_usb    = get_option('programmer').contains('group_usb')
170*0d6140beSAndroid Build Coastguard Workergroup_i2c    = get_option('programmer').contains('group_i2c')
171*0d6140beSAndroid Build Coastguard Workergroup_serial = get_option('programmer').contains('group_serial')
172*0d6140beSAndroid Build Coastguard Workergroup_jlink  = get_option('programmer').contains('group_jlink')
173*0d6140beSAndroid Build Coastguard Workergroup_internal = get_option('programmer').contains('group_internal')
174*0d6140beSAndroid Build Coastguard Workergroup_external = get_option('programmer').contains('group_external')
175*0d6140beSAndroid Build Coastguard Worker
176*0d6140beSAndroid Build Coastguard Workerlibpci     = dependency('libpci', required : group_pci, version : '>=2.2.0',
177*0d6140beSAndroid Build Coastguard Worker  static : (host_machine.system() == 'openbsd' ? true : false)) # On openbsd a static version of libpci is needed to get also -libz
178*0d6140beSAndroid Build Coastguard Workerlibusb1    = dependency('libusb-1.0', required : group_usb)
179*0d6140beSAndroid Build Coastguard Workerlibftdi1   = dependency('libftdi1', required : group_ftdi)
180*0d6140beSAndroid Build Coastguard Workerlibjaylink = dependency('libjaylink', required : group_jlink, version : '>=0.3.0')
181*0d6140beSAndroid Build Coastguard Worker
182*0d6140beSAndroid Build Coastguard Worker# ECAM is supported in libpci after 3.13.0
183*0d6140beSAndroid Build Coastguard Workerif libpci.version().version_compare('>=3.13.0')
184*0d6140beSAndroid Build Coastguard Worker    add_project_arguments('-DCONFIG_USE_LIBPCI_ECAM=1', language: 'c')
185*0d6140beSAndroid Build Coastguard Workerelse
186*0d6140beSAndroid Build Coastguard Worker    add_project_arguments('-DCONFIG_USE_LIBPCI_ECAM=0', language: 'c')
187*0d6140beSAndroid Build Coastguard Workerendif
188*0d6140beSAndroid Build Coastguard Worker
189*0d6140beSAndroid Build Coastguard Workerif host_machine.system() == 'windows'
190*0d6140beSAndroid Build Coastguard Worker  # Specifying an include_path that doesn't exist is an error,
191*0d6140beSAndroid Build Coastguard Worker  # but we only use this if the library is found in the same directory.
192*0d6140beSAndroid Build Coastguard Worker  ni845x_search_path = get_option('ni845x_search_path')
193*0d6140beSAndroid Build Coastguard Worker  if fs.is_dir(ni845x_search_path)
194*0d6140beSAndroid Build Coastguard Worker    ni845x_include_path = [ni845x_search_path]
195*0d6140beSAndroid Build Coastguard Worker  else
196*0d6140beSAndroid Build Coastguard Worker    ni845x_include_path = []
197*0d6140beSAndroid Build Coastguard Worker  endif
198*0d6140beSAndroid Build Coastguard Worker
199*0d6140beSAndroid Build Coastguard Worker  libni845x = declare_dependency(
200*0d6140beSAndroid Build Coastguard Worker    dependencies : [
201*0d6140beSAndroid Build Coastguard Worker      cc.find_library(
202*0d6140beSAndroid Build Coastguard Worker        'ni845x',
203*0d6140beSAndroid Build Coastguard Worker        dirs : get_option('ni845x_search_path'),
204*0d6140beSAndroid Build Coastguard Worker        required : get_option('programmer').contains('ni845x_spi')
205*0d6140beSAndroid Build Coastguard Worker      ),
206*0d6140beSAndroid Build Coastguard Worker    ],
207*0d6140beSAndroid Build Coastguard Worker    include_directories : ni845x_include_path,
208*0d6140beSAndroid Build Coastguard Worker  )
209*0d6140beSAndroid Build Coastguard Workerelse
210*0d6140beSAndroid Build Coastguard Worker  libni845x = dependency('', required : false)
211*0d6140beSAndroid Build Coastguard Workerendif
212*0d6140beSAndroid Build Coastguard Worker
213*0d6140beSAndroid Build Coastguard Workersubdir('platform')
214*0d6140beSAndroid Build Coastguard Worker
215*0d6140beSAndroid Build Coastguard Workerif systems_hwaccess.contains(host_machine.system())
216*0d6140beSAndroid Build Coastguard Worker  srcs += files('hwaccess_physmap.c')
217*0d6140beSAndroid Build Coastguard Worker  if ['x86', 'x86_64'].contains(host_machine.cpu_family())
218*0d6140beSAndroid Build Coastguard Worker    srcs += files('hwaccess_x86_msr.c', 'hwaccess_x86_io.c')
219*0d6140beSAndroid Build Coastguard Worker  endif
220*0d6140beSAndroid Build Coastguard Workerendif
221*0d6140beSAndroid Build Coastguard Worker
222*0d6140beSAndroid Build Coastguard Worker# Pseudo dependencies
223*0d6140beSAndroid Build Coastguard Workerlinux_headers = \
224*0d6140beSAndroid Build Coastguard Worker  cc.has_header('linux/i2c.h')     and \
225*0d6140beSAndroid Build Coastguard Worker  cc.has_header('linux/i2c-dev.h') and \
226*0d6140beSAndroid Build Coastguard Worker  cc.has_header('mtd/mtd-user.h')  and \
227*0d6140beSAndroid Build Coastguard Worker  cc.has_header('linux/spi/spidev.h') ? declare_dependency() : dependency('', required : false)
228*0d6140beSAndroid Build Coastguard Worker
229*0d6140beSAndroid Build Coastguard Worker# '<programmer_name>' : {
230*0d6140beSAndroid Build Coastguard Worker#   'system'      : list[string],  # default: ['all']
231*0d6140beSAndroid Build Coastguard Worker#   'cpu_families : list[string],  # default: ['all']
232*0d6140beSAndroid Build Coastguard Worker#   'deps'        : list[dep],     # default: []
233*0d6140beSAndroid Build Coastguard Worker#   'groups       : list[boolean], # default: []
234*0d6140beSAndroid Build Coastguard Worker#   'srcs'        : list[file],    # default: []
235*0d6140beSAndroid Build Coastguard Worker#   'flags'       : list[string],  # default: []
236*0d6140beSAndroid Build Coastguard Worker#   'default'     : boolean,       # default: true
237*0d6140beSAndroid Build Coastguard Worker#   'active'      : boolean,       # added on runtime
238*0d6140beSAndroid Build Coastguard Worker# }
239*0d6140beSAndroid Build Coastguard Workerprogrammer = {
240*0d6140beSAndroid Build Coastguard Worker  'asm106x' : {
241*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
242*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
243*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
244*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('asm106x.c', 'pcidev.c'),
245*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_ASM106X=1' ],
246*0d6140beSAndroid Build Coastguard Worker  },
247*0d6140beSAndroid Build Coastguard Worker  'atahpt' : {
248*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
249*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
250*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
251*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
252*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('atahpt.c', 'pcidev.c'),
253*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_ATAHPT=1' ],
254*0d6140beSAndroid Build Coastguard Worker    'default' : false, # not yet working
255*0d6140beSAndroid Build Coastguard Worker  },
256*0d6140beSAndroid Build Coastguard Worker  'atapromise' : {
257*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
258*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
259*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
260*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
261*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('atapromise.c', 'pcidev.c'),
262*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_ATAPROMISE=1' ],
263*0d6140beSAndroid Build Coastguard Worker    'default' : false,
264*0d6140beSAndroid Build Coastguard Worker  },
265*0d6140beSAndroid Build Coastguard Worker  'atavia' : {
266*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
267*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
268*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
269*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('atavia.c', 'pcidev.c'),
270*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_ATAVIA=1' ],
271*0d6140beSAndroid Build Coastguard Worker  },
272*0d6140beSAndroid Build Coastguard Worker  'buspirate_spi' : {
273*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_serial,
274*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_serial, group_external ],
275*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('buspirate_spi.c', 'serial.c', custom_baud_c),
276*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_BUSPIRATE_SPI=1' ],
277*0d6140beSAndroid Build Coastguard Worker  },
278*0d6140beSAndroid Build Coastguard Worker  'ch341a_spi' : {
279*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
280*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
281*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('ch341a_spi.c'),
282*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/ch341a_spi.c'),
283*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_CH341A_SPI=1' ],
284*0d6140beSAndroid Build Coastguard Worker  },
285*0d6140beSAndroid Build Coastguard Worker  'ch347_spi' : {
286*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
287*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
288*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('ch347_spi.c'),
289*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_CH347_SPI=1' ],
290*0d6140beSAndroid Build Coastguard Worker  },
291*0d6140beSAndroid Build Coastguard Worker  'dediprog' : {
292*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
293*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
294*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('dediprog.c', 'usbdev.c'),
295*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/dediprog.c'),
296*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_DEDIPROG=1' ],
297*0d6140beSAndroid Build Coastguard Worker  },
298*0d6140beSAndroid Build Coastguard Worker  'developerbox_spi' : {
299*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
300*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
301*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('developerbox_spi.c', 'usbdev.c'),
302*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_DEVELOPERBOX_SPI=1' ],
303*0d6140beSAndroid Build Coastguard Worker  },
304*0d6140beSAndroid Build Coastguard Worker  'digilent_spi' : {
305*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
306*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
307*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('digilent_spi.c'),
308*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_DIGILENT_SPI=1' ],
309*0d6140beSAndroid Build Coastguard Worker  },
310*0d6140beSAndroid Build Coastguard Worker  'dirtyjtag_spi' : {
311*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
312*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
313*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('dirtyjtag_spi.c'),
314*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_DIRTYJTAG_SPI=1' ],
315*0d6140beSAndroid Build Coastguard Worker  },
316*0d6140beSAndroid Build Coastguard Worker  'drkaiser' : {
317*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
318*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
319*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
320*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('drkaiser.c', 'pcidev.c'),
321*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_DRKAISER=1' ],
322*0d6140beSAndroid Build Coastguard Worker  },
323*0d6140beSAndroid Build Coastguard Worker  'dummy'     : {
324*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('dummyflasher.c'),
325*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/dummyflasher.c'),
326*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_DUMMY=1' ],
327*0d6140beSAndroid Build Coastguard Worker  },
328*0d6140beSAndroid Build Coastguard Worker  'ft2232_spi' : {
329*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libftdi1 ],
330*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_ftdi, group_external ],
331*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('ft2232_spi.c' ),
332*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_FT2232_SPI=1' ],
333*0d6140beSAndroid Build Coastguard Worker  },
334*0d6140beSAndroid Build Coastguard Worker  'gfxnvidia' : {
335*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
336*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
337*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
338*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('gfxnvidia.c', 'pcidev.c'),
339*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_GFXNVIDIA=1' ],
340*0d6140beSAndroid Build Coastguard Worker  },
341*0d6140beSAndroid Build Coastguard Worker  'internal' : {
342*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess + ['linux'],
343*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : (host_machine.system() == 'linux' ? [host_machine.cpu_family()] : ['x86', 'x86_64']),
344*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
345*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_internal ],
346*0d6140beSAndroid Build Coastguard Worker    'srcs'    : (host_machine.cpu_family() in ['x86', 'x86_64'] ? files(
347*0d6140beSAndroid Build Coastguard Worker      'processor_enable.c',
348*0d6140beSAndroid Build Coastguard Worker      'chipset_enable.c',
349*0d6140beSAndroid Build Coastguard Worker      'board_enable.c',
350*0d6140beSAndroid Build Coastguard Worker      'cbtable.c',
351*0d6140beSAndroid Build Coastguard Worker      'internal.c',
352*0d6140beSAndroid Build Coastguard Worker      'internal_par.c',
353*0d6140beSAndroid Build Coastguard Worker      'it87spi.c',
354*0d6140beSAndroid Build Coastguard Worker      'sb600spi.c',
355*0d6140beSAndroid Build Coastguard Worker      'superio.c',
356*0d6140beSAndroid Build Coastguard Worker      'amd_imc.c',
357*0d6140beSAndroid Build Coastguard Worker      'wbsio_spi.c',
358*0d6140beSAndroid Build Coastguard Worker      'mcp6x_spi.c',
359*0d6140beSAndroid Build Coastguard Worker      'ichspi.c',
360*0d6140beSAndroid Build Coastguard Worker      'dmi.c',
361*0d6140beSAndroid Build Coastguard Worker      'pcidev.c',
362*0d6140beSAndroid Build Coastguard Worker      'known_boards.c',
363*0d6140beSAndroid Build Coastguard Worker    ) : files(
364*0d6140beSAndroid Build Coastguard Worker      'board_enable.c',
365*0d6140beSAndroid Build Coastguard Worker      'cbtable.c',
366*0d6140beSAndroid Build Coastguard Worker      'chipset_enable.c',
367*0d6140beSAndroid Build Coastguard Worker      'internal.c',
368*0d6140beSAndroid Build Coastguard Worker      'internal_par.c',
369*0d6140beSAndroid Build Coastguard Worker      'processor_enable.c',
370*0d6140beSAndroid Build Coastguard Worker      'pcidev.c',
371*0d6140beSAndroid Build Coastguard Worker      'known_boards.c',
372*0d6140beSAndroid Build Coastguard Worker    )),
373*0d6140beSAndroid Build Coastguard Worker    'flags' : [
374*0d6140beSAndroid Build Coastguard Worker      '-DCONFIG_INTERNAL=1',
375*0d6140beSAndroid Build Coastguard Worker      '-DCONFIG_INTERNAL_DMI=' + (get_option('use_internal_dmi') ? '1' : '0'),
376*0d6140beSAndroid Build Coastguard Worker    ]
377*0d6140beSAndroid Build Coastguard Worker  },
378*0d6140beSAndroid Build Coastguard Worker  'it8212' : {
379*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
380*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
381*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
382*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('it8212.c', 'pcidev.c'),
383*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_IT8212=1' ],
384*0d6140beSAndroid Build Coastguard Worker  },
385*0d6140beSAndroid Build Coastguard Worker  'jlink_spi' : {
386*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libjaylink ],
387*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_jlink, group_external ],
388*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('jlink_spi.c'),
389*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_JLINK_SPI=1' ],
390*0d6140beSAndroid Build Coastguard Worker  },
391*0d6140beSAndroid Build Coastguard Worker  'linux_mtd' : {
392*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'linux' ],
393*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ linux_headers ],
394*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_internal ],
395*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('linux_mtd.c'),
396*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/linux_mtd.c'),
397*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_LINUX_MTD=1' ],
398*0d6140beSAndroid Build Coastguard Worker  },
399*0d6140beSAndroid Build Coastguard Worker  'linux_spi' : {
400*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'linux' ],
401*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ linux_headers ],
402*0d6140beSAndroid Build Coastguard Worker              # internal / external?
403*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('linux_spi.c'),
404*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/linux_spi.c'),
405*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_LINUX_SPI=1' ],
406*0d6140beSAndroid Build Coastguard Worker  },
407*0d6140beSAndroid Build Coastguard Worker  'parade_lspcon' : {
408*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'linux' ],
409*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ linux_headers ],
410*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_i2c ],
411*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('parade_lspcon.c', 'i2c_helper_linux.c'),
412*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/parade_lspcon.c'),
413*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_PARADE_LSPCON=1' ],
414*0d6140beSAndroid Build Coastguard Worker    'default' : false
415*0d6140beSAndroid Build Coastguard Worker  },
416*0d6140beSAndroid Build Coastguard Worker  'mediatek_i2c_spi' : {
417*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'linux' ],
418*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ linux_headers ],
419*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_i2c ],
420*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('mediatek_i2c_spi.c', 'i2c_helper_linux.c'),
421*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/mediatek_i2c_spi.c'),
422*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_MEDIATEK_I2C_SPI=1' ],
423*0d6140beSAndroid Build Coastguard Worker    'default' : false,
424*0d6140beSAndroid Build Coastguard Worker  },
425*0d6140beSAndroid Build Coastguard Worker  'mstarddc_spi' : {
426*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'linux' ],
427*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ linux_headers ],
428*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_i2c ],
429*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('mstarddc_spi.c', 'i2c_helper_linux.c'),
430*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_MSTARDDC_SPI=1' ],
431*0d6140beSAndroid Build Coastguard Worker    'default' : false
432*0d6140beSAndroid Build Coastguard Worker  },
433*0d6140beSAndroid Build Coastguard Worker  'ni845x_spi' : {
434*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'windows' ],
435*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : [ 'x86' ], # The required ni845x library is 32-bit only
436*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libni845x ],
437*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('ni845x_spi.c'),
438*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NI845X_SPI=1' ],
439*0d6140beSAndroid Build Coastguard Worker    'default' : false,
440*0d6140beSAndroid Build Coastguard Worker  },
441*0d6140beSAndroid Build Coastguard Worker  'nic3com' : {
442*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
443*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
444*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
445*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
446*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('nic3com.c', 'pcidev.c'),
447*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NIC3COM=1' ],
448*0d6140beSAndroid Build Coastguard Worker  },
449*0d6140beSAndroid Build Coastguard Worker  'nicintel' : {
450*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
451*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
452*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
453*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('nicintel.c', 'pcidev.c'),
454*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NICINTEL=1' ],
455*0d6140beSAndroid Build Coastguard Worker  },
456*0d6140beSAndroid Build Coastguard Worker  'nicintel_eeprom' : {
457*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
458*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
459*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
460*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('nicintel_eeprom.c', 'pcidev.c'),
461*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NICINTEL_EEPROM=1' ],
462*0d6140beSAndroid Build Coastguard Worker  },
463*0d6140beSAndroid Build Coastguard Worker  'nicintel_spi' : {
464*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
465*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
466*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
467*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('nicintel_spi.c', 'pcidev.c'),
468*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NICINTEL_SPI=1' ],
469*0d6140beSAndroid Build Coastguard Worker  },
470*0d6140beSAndroid Build Coastguard Worker  'nicnatsemi' : {
471*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
472*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
473*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
474*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
475*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('nicnatsemi.c', 'pcidev.c'),
476*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NICNATSEMI=1' ],
477*0d6140beSAndroid Build Coastguard Worker    'default' : false, # not complete nor tested
478*0d6140beSAndroid Build Coastguard Worker  },
479*0d6140beSAndroid Build Coastguard Worker  'nicrealtek' : {
480*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
481*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
482*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
483*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
484*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('nicrealtek.c', 'pcidev.c'),
485*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/nicrealtek.c'),
486*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_NICREALTEK=1' ],
487*0d6140beSAndroid Build Coastguard Worker  },
488*0d6140beSAndroid Build Coastguard Worker  'ogp_spi' : {
489*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
490*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
491*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
492*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('ogp_spi.c', 'pcidev.c'),
493*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_OGP_SPI=1' ],
494*0d6140beSAndroid Build Coastguard Worker  },
495*0d6140beSAndroid Build Coastguard Worker  'pickit2_spi' : {
496*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
497*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
498*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('pickit2_spi.c'),
499*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_PICKIT2_SPI=1' ],
500*0d6140beSAndroid Build Coastguard Worker  },
501*0d6140beSAndroid Build Coastguard Worker  'pony_spi' : {
502*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_serial,
503*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_serial, group_external ],
504*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('pony_spi.c', 'serial.c', custom_baud_c),
505*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_PONY_SPI=1' ],
506*0d6140beSAndroid Build Coastguard Worker  },
507*0d6140beSAndroid Build Coastguard Worker  'raiden_debug_spi' : {
508*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
509*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
510*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('raiden_debug_spi.c', 'usb_device.c'),
511*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/raiden_debug_spi.c'),
512*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_RAIDEN_DEBUG_SPI=1' ],
513*0d6140beSAndroid Build Coastguard Worker  },
514*0d6140beSAndroid Build Coastguard Worker  'rayer_spi' : {
515*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
516*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
517*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_internal ],
518*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('rayer_spi.c'),
519*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_RAYER_SPI=1' ],
520*0d6140beSAndroid Build Coastguard Worker  },
521*0d6140beSAndroid Build Coastguard Worker  'realtek_mst_i2c_spi' : {
522*0d6140beSAndroid Build Coastguard Worker    'systems' : [ 'linux' ],
523*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ linux_headers ],
524*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_i2c ],
525*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('realtek_mst_i2c_spi.c', 'i2c_helper_linux.c'),
526*0d6140beSAndroid Build Coastguard Worker    'test_srcs' : files('tests/realtek_mst_i2c_spi.c'),
527*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_REALTEK_MST_I2C_SPI=1' ],
528*0d6140beSAndroid Build Coastguard Worker    'default' : false,
529*0d6140beSAndroid Build Coastguard Worker  },
530*0d6140beSAndroid Build Coastguard Worker  'satamv' : {
531*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
532*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : cpus_port_io,
533*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
534*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
535*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('satamv.c', 'pcidev.c'),
536*0d6140beSAndroid Build Coastguard Worker    'flags'   : ['-DCONFIG_SATAMV=1'],
537*0d6140beSAndroid Build Coastguard Worker  },
538*0d6140beSAndroid Build Coastguard Worker  'satasii' : {
539*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_hwaccess,
540*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libpci ],
541*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_pci, group_internal ],
542*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('satasii.c', 'pcidev.c'),
543*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_SATASII=1' ],
544*0d6140beSAndroid Build Coastguard Worker  },
545*0d6140beSAndroid Build Coastguard Worker  'serprog' : {
546*0d6140beSAndroid Build Coastguard Worker    'systems' : systems_serial,
547*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_serial, group_external ],
548*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('serprog.c', 'serial.c', custom_baud_c),
549*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_SERPROG=1' ],
550*0d6140beSAndroid Build Coastguard Worker  },
551*0d6140beSAndroid Build Coastguard Worker  'stlinkv3_spi' : {
552*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libusb1 ],
553*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_usb, group_external ],
554*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('stlinkv3_spi.c', 'usbdev.c'),
555*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_STLINKV3_SPI=1' ],
556*0d6140beSAndroid Build Coastguard Worker  },
557*0d6140beSAndroid Build Coastguard Worker  'usbblaster_spi' : {
558*0d6140beSAndroid Build Coastguard Worker    'deps'    : [ libftdi1 ],
559*0d6140beSAndroid Build Coastguard Worker    'groups'  : [ group_ftdi, group_external ],
560*0d6140beSAndroid Build Coastguard Worker    'srcs'    : files('usbblaster_spi.c'),
561*0d6140beSAndroid Build Coastguard Worker    'flags'   : [ '-DCONFIG_USBBLASTER_SPI=1' ],
562*0d6140beSAndroid Build Coastguard Worker  },
563*0d6140beSAndroid Build Coastguard Worker}
564*0d6140beSAndroid Build Coastguard Worker
565*0d6140beSAndroid Build Coastguard Workeractive_programmer_count = 0
566*0d6140beSAndroid Build Coastguard Workerforeach p_name, p_data : programmer
567*0d6140beSAndroid Build Coastguard Worker  p_data += {
568*0d6140beSAndroid Build Coastguard Worker    'systems' : p_data.get('systems', ['all']),
569*0d6140beSAndroid Build Coastguard Worker    'cpu_families' : p_data.get('cpu_families', ['all']),
570*0d6140beSAndroid Build Coastguard Worker    'deps' : p_data.get('deps', []),
571*0d6140beSAndroid Build Coastguard Worker    'groups' : p_data.get('groups', []),
572*0d6140beSAndroid Build Coastguard Worker    'srcs' : p_data.get('srcs', []),
573*0d6140beSAndroid Build Coastguard Worker    'test_srcs': p_data.get('test_srcs', []),
574*0d6140beSAndroid Build Coastguard Worker    'flags' : p_data.get('flags', []),
575*0d6140beSAndroid Build Coastguard Worker    'default' : p_data.get('default', true),
576*0d6140beSAndroid Build Coastguard Worker  }
577*0d6140beSAndroid Build Coastguard Worker
578*0d6140beSAndroid Build Coastguard Worker  active        = false
579*0d6140beSAndroid Build Coastguard Worker  deps_found    = true
580*0d6140beSAndroid Build Coastguard Worker  not_found_dep = ''
581*0d6140beSAndroid Build Coastguard Worker  not_active_message = ''
582*0d6140beSAndroid Build Coastguard Worker  selected_hard = p_name in get_option('programmer')
583*0d6140beSAndroid Build Coastguard Worker  selected_soft = p_data.get('groups').contains(true) or \
584*0d6140beSAndroid Build Coastguard Worker                  'all' in get_option('programmer') or \
585*0d6140beSAndroid Build Coastguard Worker                  'auto' in get_option('programmer') and p_data.get('default')
586*0d6140beSAndroid Build Coastguard Worker  available     = (p_data.get('systems').contains('all') or p_data.get('systems').contains(host_machine.system())) \
587*0d6140beSAndroid Build Coastguard Worker                  and (p_data.get('cpu_families').contains('all') or p_data.get('cpu_families').contains(host_machine.cpu_family()))
588*0d6140beSAndroid Build Coastguard Worker
589*0d6140beSAndroid Build Coastguard Worker  foreach dep : p_data.get('deps')
590*0d6140beSAndroid Build Coastguard Worker    if not dep.found()
591*0d6140beSAndroid Build Coastguard Worker      deps_found = false
592*0d6140beSAndroid Build Coastguard Worker      not_found_dep = dep.name()
593*0d6140beSAndroid Build Coastguard Worker      break
594*0d6140beSAndroid Build Coastguard Worker    endif
595*0d6140beSAndroid Build Coastguard Worker  endforeach
596*0d6140beSAndroid Build Coastguard Worker
597*0d6140beSAndroid Build Coastguard Worker  if selected_hard
598*0d6140beSAndroid Build Coastguard Worker    if not available
599*0d6140beSAndroid Build Coastguard Worker      error('programmer @0@ was selected but is not supported on this platform (needs @1@/@2@, but system is @3@/@4@)'.format(
600*0d6140beSAndroid Build Coastguard Worker        p_name,
601*0d6140beSAndroid Build Coastguard Worker        p_data.get('systems'),
602*0d6140beSAndroid Build Coastguard Worker        p_data.get('cpu_families'),
603*0d6140beSAndroid Build Coastguard Worker        host_machine.system(),
604*0d6140beSAndroid Build Coastguard Worker        host_machine.cpu_family()
605*0d6140beSAndroid Build Coastguard Worker      ))
606*0d6140beSAndroid Build Coastguard Worker    elif not deps_found
607*0d6140beSAndroid Build Coastguard Worker      error(p_name + ' selected but dependency ' + not_found_dep +'not found')
608*0d6140beSAndroid Build Coastguard Worker    else
609*0d6140beSAndroid Build Coastguard Worker      active = true
610*0d6140beSAndroid Build Coastguard Worker    endif
611*0d6140beSAndroid Build Coastguard Worker  elif selected_soft
612*0d6140beSAndroid Build Coastguard Worker    if not available
613*0d6140beSAndroid Build Coastguard Worker      not_active_message = 'Not available on platform'
614*0d6140beSAndroid Build Coastguard Worker    elif not deps_found
615*0d6140beSAndroid Build Coastguard Worker      not_active_message = 'dependency ' + not_found_dep + ' not found'
616*0d6140beSAndroid Build Coastguard Worker    else
617*0d6140beSAndroid Build Coastguard Worker      active = true
618*0d6140beSAndroid Build Coastguard Worker    endif
619*0d6140beSAndroid Build Coastguard Worker  else
620*0d6140beSAndroid Build Coastguard Worker    not_active_message = 'not selected'
621*0d6140beSAndroid Build Coastguard Worker  endif
622*0d6140beSAndroid Build Coastguard Worker
623*0d6140beSAndroid Build Coastguard Worker  p_data += {
624*0d6140beSAndroid Build Coastguard Worker    'active' : active,
625*0d6140beSAndroid Build Coastguard Worker    'summary' : not_active_message,
626*0d6140beSAndroid Build Coastguard Worker  }
627*0d6140beSAndroid Build Coastguard Worker  programmer += {p_name : p_data}
628*0d6140beSAndroid Build Coastguard Worker  if active
629*0d6140beSAndroid Build Coastguard Worker    active_programmer_count += 1
630*0d6140beSAndroid Build Coastguard Worker  endif
631*0d6140beSAndroid Build Coastguard Workerendforeach
632*0d6140beSAndroid Build Coastguard Worker
633*0d6140beSAndroid Build Coastguard Workerif active_programmer_count == 0
634*0d6140beSAndroid Build Coastguard Worker  error('At least one programmer must be selected')
635*0d6140beSAndroid Build Coastguard Workerendif
636*0d6140beSAndroid Build Coastguard Worker
637*0d6140beSAndroid Build Coastguard Worker# add srcs, cargs & deps from active programmer to global srcs, cargs & deps
638*0d6140beSAndroid Build Coastguard Workerforeach p_name, p_data : programmer
639*0d6140beSAndroid Build Coastguard Worker  if p_data.get('active')
640*0d6140beSAndroid Build Coastguard Worker    srcs += p_data.get('srcs')
641*0d6140beSAndroid Build Coastguard Worker    cargs += p_data.get('flags')
642*0d6140beSAndroid Build Coastguard Worker    deps += p_data.get('deps')
643*0d6140beSAndroid Build Coastguard Worker  endif
644*0d6140beSAndroid Build Coastguard Workerendforeach
645*0d6140beSAndroid Build Coastguard Worker
646*0d6140beSAndroid Build Coastguard Workerif config_print_wiki.enabled()
647*0d6140beSAndroid Build Coastguard Worker  if get_option('classic_cli').disabled()
648*0d6140beSAndroid Build Coastguard Worker    error('`classic_cli_print_wiki` can not be enabled without `classic_cli`')
649*0d6140beSAndroid Build Coastguard Worker  else
650*0d6140beSAndroid Build Coastguard Worker    srcs += files('print_wiki.c')
651*0d6140beSAndroid Build Coastguard Worker    cargs += '-DCONFIG_PRINT_WIKI=1'
652*0d6140beSAndroid Build Coastguard Worker  endif
653*0d6140beSAndroid Build Coastguard Workerendif
654*0d6140beSAndroid Build Coastguard Worker
655*0d6140beSAndroid Build Coastguard Workerif config_default_programmer_name != ''
656*0d6140beSAndroid Build Coastguard Worker  cargs += '-DCONFIG_DEFAULT_PROGRAMMER_NAME=&programmer_' + config_default_programmer_name
657*0d6140beSAndroid Build Coastguard Workerelse
658*0d6140beSAndroid Build Coastguard Worker  cargs += '-DCONFIG_DEFAULT_PROGRAMMER_NAME=NULL'
659*0d6140beSAndroid Build Coastguard Workerendif
660*0d6140beSAndroid Build Coastguard Worker
661*0d6140beSAndroid Build Coastguard Workercargs += '-DCONFIG_DEFAULT_PROGRAMMER_ARGS="' + config_default_programmer_args + '"'
662*0d6140beSAndroid Build Coastguard Worker
663*0d6140beSAndroid Build Coastguard Workerif get_option('llvm_cov').enabled()
664*0d6140beSAndroid Build Coastguard Worker  cargs += ['-fprofile-instr-generate', '-fcoverage-mapping']
665*0d6140beSAndroid Build Coastguard Worker  link_args += ['-fprofile-instr-generate', '-fcoverage-mapping']
666*0d6140beSAndroid Build Coastguard Workerendif
667*0d6140beSAndroid Build Coastguard Worker
668*0d6140beSAndroid Build Coastguard Workerinstall_headers([
669*0d6140beSAndroid Build Coastguard Worker    'include/libflashrom.h',
670*0d6140beSAndroid Build Coastguard Worker  ],
671*0d6140beSAndroid Build Coastguard Worker)
672*0d6140beSAndroid Build Coastguard Worker
673*0d6140beSAndroid Build Coastguard Workerinclude_dir = include_directories('include')
674*0d6140beSAndroid Build Coastguard Worker
675*0d6140beSAndroid Build Coastguard Workermapfile = 'libflashrom.map'
676*0d6140beSAndroid Build Coastguard Workerif host_machine.system() == 'darwin'
677*0d6140beSAndroid Build Coastguard Worker  vflag = ''
678*0d6140beSAndroid Build Coastguard Workerelse
679*0d6140beSAndroid Build Coastguard Worker  vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
680*0d6140beSAndroid Build Coastguard Workerendif
681*0d6140beSAndroid Build Coastguard Workerlibflashrom = library(
682*0d6140beSAndroid Build Coastguard Worker  'flashrom',
683*0d6140beSAndroid Build Coastguard Worker  sources : [
684*0d6140beSAndroid Build Coastguard Worker    srcs,
685*0d6140beSAndroid Build Coastguard Worker  ],
686*0d6140beSAndroid Build Coastguard Worker  include_directories : include_dir,
687*0d6140beSAndroid Build Coastguard Worker  soversion : lt_current,
688*0d6140beSAndroid Build Coastguard Worker  version : lt_version,
689*0d6140beSAndroid Build Coastguard Worker  dependencies : [
690*0d6140beSAndroid Build Coastguard Worker    deps,
691*0d6140beSAndroid Build Coastguard Worker  ],
692*0d6140beSAndroid Build Coastguard Worker  c_args : [
693*0d6140beSAndroid Build Coastguard Worker    cargs,
694*0d6140beSAndroid Build Coastguard Worker  ],
695*0d6140beSAndroid Build Coastguard Worker  install : true,
696*0d6140beSAndroid Build Coastguard Worker  link_args : link_args + [vflag],
697*0d6140beSAndroid Build Coastguard Worker  link_depends : mapfile,
698*0d6140beSAndroid Build Coastguard Worker)
699*0d6140beSAndroid Build Coastguard Worker
700*0d6140beSAndroid Build Coastguard Workerpkgg = import('pkgconfig')
701*0d6140beSAndroid Build Coastguard Workerpkgg.generate(
702*0d6140beSAndroid Build Coastguard Worker  libraries : libflashrom,
703*0d6140beSAndroid Build Coastguard Worker  version : flashrom_version.split()[0], # cut off the git version
704*0d6140beSAndroid Build Coastguard Worker  name : 'flashrom',
705*0d6140beSAndroid Build Coastguard Worker  filebase : 'flashrom',
706*0d6140beSAndroid Build Coastguard Worker  description : 'library to interact with flashrom',
707*0d6140beSAndroid Build Coastguard Worker)
708*0d6140beSAndroid Build Coastguard Worker
709*0d6140beSAndroid Build Coastguard Workerif get_option('classic_cli').enabled() or get_option('classic_cli').auto() and not get_option('default_library') == 'shared'
710*0d6140beSAndroid Build Coastguard Worker
711*0d6140beSAndroid Build Coastguard Worker  cli_srcs = files(
712*0d6140beSAndroid Build Coastguard Worker    'cli_classic.c',
713*0d6140beSAndroid Build Coastguard Worker    'cli_common.c',
714*0d6140beSAndroid Build Coastguard Worker    'cli_output.c'
715*0d6140beSAndroid Build Coastguard Worker  )
716*0d6140beSAndroid Build Coastguard Worker
717*0d6140beSAndroid Build Coastguard Worker  if not cc.has_function('getopt_long')
718*0d6140beSAndroid Build Coastguard Worker    cli_srcs += files('cli_getopt.c')
719*0d6140beSAndroid Build Coastguard Worker  endif
720*0d6140beSAndroid Build Coastguard Worker
721*0d6140beSAndroid Build Coastguard Worker  classic_cli = executable(
722*0d6140beSAndroid Build Coastguard Worker    'flashrom',
723*0d6140beSAndroid Build Coastguard Worker    cli_srcs,
724*0d6140beSAndroid Build Coastguard Worker    c_args : cargs,
725*0d6140beSAndroid Build Coastguard Worker    include_directories : include_dir,
726*0d6140beSAndroid Build Coastguard Worker    install : true,
727*0d6140beSAndroid Build Coastguard Worker    install_dir : get_option('sbindir'),
728*0d6140beSAndroid Build Coastguard Worker    link_args : link_args,
729*0d6140beSAndroid Build Coastguard Worker    # flashrom needs internal symbols of libflashrom
730*0d6140beSAndroid Build Coastguard Worker    link_with : get_option('default_library') == 'static' ? libflashrom : libflashrom.get_static_lib(),
731*0d6140beSAndroid Build Coastguard Worker  )
732*0d6140beSAndroid Build Coastguard Worker  if get_option('llvm_cov').enabled()
733*0d6140beSAndroid Build Coastguard Worker    run_target('llvm-cov-cli', command : ['scripts/llvm-cov', classic_cli])
734*0d6140beSAndroid Build Coastguard Worker  endif
735*0d6140beSAndroid Build Coastguard Workerendif
736*0d6140beSAndroid Build Coastguard Worker
737*0d6140beSAndroid Build Coastguard Workerif get_option('ich_descriptors_tool').auto() or get_option('ich_descriptors_tool').enabled()
738*0d6140beSAndroid Build Coastguard Worker  subdir('util/ich_descriptors_tool')
739*0d6140beSAndroid Build Coastguard Workerendif
740*0d6140beSAndroid Build Coastguard Worker
741*0d6140beSAndroid Build Coastguard Workerif get_option('bash_completion').auto() or get_option('bash_completion').enabled()
742*0d6140beSAndroid Build Coastguard Worker  if get_option('classic_cli').disabled()
743*0d6140beSAndroid Build Coastguard Worker    if get_option('bash_completion').enabled()
744*0d6140beSAndroid Build Coastguard Worker      error('`bash_completion` can not be enabled without `classic_cli`')
745*0d6140beSAndroid Build Coastguard Worker    endif
746*0d6140beSAndroid Build Coastguard Worker  else
747*0d6140beSAndroid Build Coastguard Worker    bash_comp = dependency('bash-completion', required : false)
748*0d6140beSAndroid Build Coastguard Worker    if bash_comp.found()
749*0d6140beSAndroid Build Coastguard Worker      bash_comp_install_dir = bash_comp.get_variable(
750*0d6140beSAndroid Build Coastguard Worker        pkgconfig : 'completionsdir',
751*0d6140beSAndroid Build Coastguard Worker        pkgconfig_define : ['datadir', get_option('datadir')]
752*0d6140beSAndroid Build Coastguard Worker      )
753*0d6140beSAndroid Build Coastguard Worker    else
754*0d6140beSAndroid Build Coastguard Worker      bash_comp_install_dir = join_paths(get_option('datadir'), 'bash-completion', 'completions')
755*0d6140beSAndroid Build Coastguard Worker    endif
756*0d6140beSAndroid Build Coastguard Worker
757*0d6140beSAndroid Build Coastguard Worker    programmer_names_active_str = ''
758*0d6140beSAndroid Build Coastguard Worker    foreach p_name, p_data : programmer
759*0d6140beSAndroid Build Coastguard Worker      if p_data.get('active')
760*0d6140beSAndroid Build Coastguard Worker        programmer_names_active_str += p_name + ' '
761*0d6140beSAndroid Build Coastguard Worker      endif
762*0d6140beSAndroid Build Coastguard Worker    endforeach
763*0d6140beSAndroid Build Coastguard Worker
764*0d6140beSAndroid Build Coastguard Worker    configure_file(
765*0d6140beSAndroid Build Coastguard Worker      input : 'util/flashrom.bash-completion.tmpl',
766*0d6140beSAndroid Build Coastguard Worker      output : 'flashrom.bash',
767*0d6140beSAndroid Build Coastguard Worker      configuration : {
768*0d6140beSAndroid Build Coastguard Worker        'PROGRAMMERS' : programmer_names_active_str,
769*0d6140beSAndroid Build Coastguard Worker      },
770*0d6140beSAndroid Build Coastguard Worker      install: true,
771*0d6140beSAndroid Build Coastguard Worker      install_dir: bash_comp_install_dir,
772*0d6140beSAndroid Build Coastguard Worker    )
773*0d6140beSAndroid Build Coastguard Worker  endif
774*0d6140beSAndroid Build Coastguard Workerendif
775*0d6140beSAndroid Build Coastguard Worker
776*0d6140beSAndroid Build Coastguard Worker# Use `.auto() or .enabled()` instead of `.allowed()` to keep the minimum meson version as low as possible.
777*0d6140beSAndroid Build Coastguard Worker# `.allowed()` gets introduced in 0.59.0
778*0d6140beSAndroid Build Coastguard Workerif get_option('tests').auto() or get_option('tests').enabled()
779*0d6140beSAndroid Build Coastguard Worker  # unit-test framework
780*0d6140beSAndroid Build Coastguard Worker  cmocka_dep = dependency(
781*0d6140beSAndroid Build Coastguard Worker    'cmocka',
782*0d6140beSAndroid Build Coastguard Worker    fallback: ['cmocka', 'cmocka_dep'],
783*0d6140beSAndroid Build Coastguard Worker    required : get_option('tests')
784*0d6140beSAndroid Build Coastguard Worker  )
785*0d6140beSAndroid Build Coastguard Worker
786*0d6140beSAndroid Build Coastguard Worker  flashrom_test_dep = declare_dependency(
787*0d6140beSAndroid Build Coastguard Worker    include_directories : include_dir,
788*0d6140beSAndroid Build Coastguard Worker    sources : [
789*0d6140beSAndroid Build Coastguard Worker      srcs,
790*0d6140beSAndroid Build Coastguard Worker      'cli_common.c',
791*0d6140beSAndroid Build Coastguard Worker      'cli_output.c',
792*0d6140beSAndroid Build Coastguard Worker      'flashrom.c',
793*0d6140beSAndroid Build Coastguard Worker    ],
794*0d6140beSAndroid Build Coastguard Worker    compile_args : [
795*0d6140beSAndroid Build Coastguard Worker      '-includestdlib.h',
796*0d6140beSAndroid Build Coastguard Worker      '-includeunittest_env.h',
797*0d6140beSAndroid Build Coastguard Worker    ],
798*0d6140beSAndroid Build Coastguard Worker    dependencies : [
799*0d6140beSAndroid Build Coastguard Worker      deps,
800*0d6140beSAndroid Build Coastguard Worker    ],
801*0d6140beSAndroid Build Coastguard Worker  )
802*0d6140beSAndroid Build Coastguard Worker
803*0d6140beSAndroid Build Coastguard Worker  if cmocka_dep.found()
804*0d6140beSAndroid Build Coastguard Worker    subdir('tests')
805*0d6140beSAndroid Build Coastguard Worker  endif
806*0d6140beSAndroid Build Coastguard Workerendif
807*0d6140beSAndroid Build Coastguard Worker
808*0d6140beSAndroid Build Coastguard Workerprogrammer_names_active     = []
809*0d6140beSAndroid Build Coastguard Workerprogrammer_names_not_active = []
810*0d6140beSAndroid Build Coastguard Workerforeach p_name, p_data : programmer
811*0d6140beSAndroid Build Coastguard Worker  if p_data.get('active')
812*0d6140beSAndroid Build Coastguard Worker    programmer_names_active += p_name
813*0d6140beSAndroid Build Coastguard Worker  else
814*0d6140beSAndroid Build Coastguard Worker    programmer_names_not_active += p_name + ' (' + p_data.get('summary', '') + ')'
815*0d6140beSAndroid Build Coastguard Worker  endif
816*0d6140beSAndroid Build Coastguard Workerendforeach
817*0d6140beSAndroid Build Coastguard Worker
818*0d6140beSAndroid Build Coastguard Workersummary({
819*0d6140beSAndroid Build Coastguard Worker  'active' : [programmer_names_active],
820*0d6140beSAndroid Build Coastguard Worker  'non active' : [programmer_names_not_active],
821*0d6140beSAndroid Build Coastguard Worker}, section : 'Programmer')
822