blob: 67c6c01c88ebb286d9a9effa53bdd5c5b863adff [file] [log] [blame]
Richard Hughescb973682018-12-19 11:44:22 +00001project('flashromutils', 'c',
Nikolai Artemiev47cb6fc2022-07-22 09:58:14 +10002 version : run_command('util/getversion.sh', '--version', check : true).stdout().strip(),
Nico Huberb417c0c2019-09-24 22:12:40 +02003 license : 'GPL-2.0',
Angel Pons30649432021-01-26 10:21:46 +01004 meson_version : '>=0.50.0',
Anastasia Klimchuk3c508432022-04-13 15:15:24 +10005 default_options : [
6 'warning_level=2',
7 'c_std=c99',
Anastasia Klimchukc676be92022-04-26 14:53:18 +10008 'werror=true',
Anastasia Klimchuk3c508432022-04-13 15:15:24 +10009 'optimization=s',
Nikolai Artemiev47cb6fc2022-07-22 09:58:14 +100010 'debug=false',
11 ],
Richard Hughescb973682018-12-19 11:44:22 +000012)
13
14# libtool versioning
15lt_current = '1'
16lt_revision = '0'
17lt_age = '0'
18lt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision)
19
Jacob Garber4a84ec22019-07-25 19:12:31 -060020# hide/enable some warnings
Richard Hughescb973682018-12-19 11:44:22 +000021warning_flags = [
Anastasia Klimchukcde70112021-10-25 13:20:26 +110022 '-Wshadow',
23 '-Wmissing-prototypes',
Jacob Garber4a84ec22019-07-25 19:12:31 -060024 '-Wwrite-strings',
Richard Hughescb973682018-12-19 11:44:22 +000025 '-Wno-unused-parameter',
Richard Hughescb973682018-12-19 11:44:22 +000026 '-Wno-address-of-packed-member',
27 '-Wno-enum-conversion',
Richard Hughescb973682018-12-19 11:44:22 +000028 '-Wno-missing-braces',
29]
30
31conf = configuration_data()
32
33cc = meson.get_compiler('c')
34add_project_arguments(cc.get_supported_arguments(warning_flags), language : 'c')
35add_project_arguments('-D_DEFAULT_SOURCE', language : 'c')
Rosen Penev566193f2020-07-18 12:50:16 -070036add_project_arguments('-D_POSIX_C_SOURCE=200809L', language : 'c') # required for fileno, nanosleep, and strndup
Richard Hughescb973682018-12-19 11:44:22 +000037add_project_arguments('-D_BSD_SOURCE', language : 'c') # required for glibc < v2.19
38add_project_arguments('-DFLASHROM_VERSION="' + meson.project_version() + '"', language : 'c')
39
40# get defaults from configure
41config_atahpt = get_option('config_atahpt')
42config_atapromise = get_option('config_atapromise')
43config_atavia = get_option('config_atavia')
44config_buspirate_spi = get_option('config_buspirate_spi')
45config_ch341a_spi = get_option('config_ch341a_spi')
46config_dediprog = get_option('config_dediprog')
47config_developerbox_spi = get_option('config_developerbox_spi')
48config_digilent_spi = get_option('config_digilent_spi')
Jean THOMASe28d8e42022-10-11 17:54:30 +020049config_dirtyjtag_spi = get_option('config_dirtyjtag_spi')
Richard Hughescb973682018-12-19 11:44:22 +000050config_drkaiser = get_option('config_drkaiser')
51config_dummy = get_option('config_dummy')
52config_ft2232_spi = get_option('config_ft2232_spi')
53config_gfxnvidia = get_option('config_gfxnvidia')
54config_internal = get_option('config_internal')
55config_it8212 = get_option('config_it8212')
Marc Schink7ec2d632020-12-08 22:20:50 +010056config_jlink_spi = get_option('config_jlink_spi')
Richard Hughescb973682018-12-19 11:44:22 +000057config_linux_mtd = get_option('config_linux_mtd')
58config_linux_spi = get_option('config_linux_spi')
59config_mstarddc_spi = get_option('config_mstarddc_spi')
60config_nic3com = get_option('config_nic3com')
61config_nicintel_eeprom = get_option('config_nicintel_eeprom')
62config_nicintel = get_option('config_nicintel')
63config_nicintel_spi = get_option('config_nicintel_spi')
64config_nicnatsemi = get_option('config_nicnatsemi')
65config_nicrealtek = get_option('config_nicrealtek')
66config_ogp_spi = get_option('config_ogp_spi')
67config_pickit2_spi = get_option('config_pickit2_spi')
68config_pony_spi = get_option('config_pony_spi')
69config_rayer_spi = get_option('config_rayer_spi')
70config_satamv = get_option('config_satamv')
71config_satasii = get_option('config_satasii')
72config_serprog = get_option('config_serprog')
73config_usbblaster_spi = get_option('config_usbblaster_spi')
Miklós Márton324929c2019-08-01 19:14:10 +020074config_stlinkv3_spi = get_option('config_stlinkv3_spi')
Thomas Heijligen84e9c912021-06-01 16:22:14 +020075config_default_programmer_name = get_option('default_programmer_name')
76config_default_programmer_args = get_option('default_programmer_args')
Daniel Campellof7a84fd2021-03-16 17:17:14 -060077config_print_wiki= get_option('print_wiki')
Richard Hughescb973682018-12-19 11:44:22 +000078
79cargs = []
80deps = []
Thomas Heijligen51208f32022-04-28 11:07:29 +020081srcs = files(
82 '82802ab.c',
83 'at45db.c',
84 'bitbang_spi.c',
85 'edi.c',
86 'en29lv640b.c',
87 'flashchips.c',
88 'flashrom.c',
89 'fmap.c',
90 'helpers.c',
Edward O'Callaghan4c76c732022-08-12 11:03:00 +100091 'helpers_fileio.c',
Thomas Heijligen51208f32022-04-28 11:07:29 +020092 'ich_descriptors.c',
93 'jedec.c',
94 'layout.c',
95 'libflashrom.c',
96 'opaque.c',
Edward O'Callaghan63f6a372022-08-12 12:56:43 +100097 'parallel.c',
Thomas Heijligen51208f32022-04-28 11:07:29 +020098 'print.c',
99 'programmer.c',
100 'programmer_table.c',
101 'sfdp.c',
102 'spi25.c',
103 'spi25_statusreg.c',
104 'spi95.c',
105 'spi.c',
106 'sst28sf040.c',
107 'sst49lfxxxc.c',
108 'sst_fwhub.c',
109 'stm50.c',
110 'udelay.c',
111 'w29ee011.c',
112 'w39.c',
113 'writeprotect.c',
114 'writeprotect_ranges.c',
115)
Richard Hughescb973682018-12-19 11:44:22 +0000116
Thomas Heijligen328a64a2022-04-25 14:42:17 +0200117subdir('platform')
118
Peter Marheine306c8b72022-01-21 02:07:30 +0000119host_is_x86 = ['x86', 'x86_64'].contains(host_machine.cpu_family())
120
121need_serial = [
122 config_buspirate_spi, config_pony_spi, config_serprog,
123].contains(true)
124need_bitbang_spi = [
125 config_internal, config_nicintel_spi, config_ogp_spi,
126 config_pony_spi, config_rayer_spi,
127].contains(true)
128need_raw_mem_access = [
129 config_atapromise, config_drkaiser, config_gfxnvidia, config_internal,
130 config_it8212, config_nicintel, config_nicintel_eeprom, config_nicintel_spi,
131 config_ogp_spi, config_satamv, config_satasii,
132].contains(true)
133# Internal programmer uses x86 features if the system is x86
134need_x86_msr = config_internal and host_is_x86
135need_x86_port_io = [
136 config_atahpt, config_atapromise, config_internal and host_is_x86,
137 config_nic3com, config_nicnatsemi, config_nicrealtek, config_rayer_spi,
138 config_satamv,
139].contains(true)
140need_libpci = [
141 config_atahpt, config_atapromise, config_atavia,
142 config_drkaiser, config_gfxnvidia, config_internal, config_it8212,
143 config_nic3com, config_nicintel, config_nicintel_eeprom, config_nicintel_spi,
144 config_nicnatsemi, config_nicrealtek, config_ogp_spi, config_satamv,
145 config_satasii,
146].contains(true)
147need_libusb1 = [
148 config_ch341a_spi, config_dediprog, config_developerbox_spi,
149 config_digilent_spi, config_dirtyjtag_spi, config_pickit2_spi,
150 config_stlinkv3_spi,
151].contains(true)
152need_libftdi1 = [
153 config_ft2232_spi, config_usbblaster_spi,
154].contains(true)
155need_libjaylink = config_jlink_spi
156
157if (need_x86_port_io or need_x86_msr) and not host_is_x86
158 error('one or more enabled programmer only supports x86 and target is not')
159endif
160
Richard Hughescb973682018-12-19 11:44:22 +0000161
162# check for required symbols
163if cc.has_function('clock_gettime')
164 add_project_arguments('-DHAVE_CLOCK_GETTIME=1', language : 'c')
165endif
166if cc.has_function('strnlen')
167 add_project_arguments('-DHAVE_STRNLEN=1', language : 'c')
168endif
169if cc.check_header('sys/utsname.h')
170 add_project_arguments('-DHAVE_UTSNAME=1', language : 'c')
171endif
Thomas Heijligenc02b1a92022-04-25 14:54:10 +0200172if host_machine.system() in ['cygwin', 'windows']
173 add_project_arguments('-DIS_WINDOWS=1', language : 'c')
174else
175 add_project_arguments('-DIS_WINDOWS=0', language : 'c')
176endif
Richard Hughescb973682018-12-19 11:44:22 +0000177
178# some programmers require libusb
179if get_option('usb')
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200180 srcs += files('usbdev.c')
Richard Hughescb973682018-12-19 11:44:22 +0000181 deps += dependency('libusb-1.0')
Peter Marheine306c8b72022-01-21 02:07:30 +0000182elif need_libusb1
183 error('usb is disabled but one or more enabled programmer requires USB access')
Richard Hughescb973682018-12-19 11:44:22 +0000184endif
185
186# some programmers require libpci
187if get_option('pciutils')
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200188 srcs += files('pcidev.c')
Richard Hughescb973682018-12-19 11:44:22 +0000189 deps += dependency('libpci')
Peter Marheine306c8b72022-01-21 02:07:30 +0000190elif need_libpci
191 error('pciutils is disabled but one or more enabled programmer requires PCI access')
192endif
193
194if need_libftdi1
195 deps += dependency('libftdi1')
196endif
197
198if need_libjaylink
199 deps += dependency('libjaylink')
Richard Hughescb973682018-12-19 11:44:22 +0000200endif
201
202# set defines for configured programmers
203if config_atahpt
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200204 srcs += files('atahpt.c')
Richard Hughescb973682018-12-19 11:44:22 +0000205 cargs += '-DCONFIG_ATAHPT=1'
206endif
207if config_atapromise
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200208 srcs += files('atapromise.c')
Richard Hughescb973682018-12-19 11:44:22 +0000209 cargs += '-DCONFIG_ATAPROMISE=1'
210endif
211if config_atavia
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200212 srcs += files('atavia.c')
Richard Hughescb973682018-12-19 11:44:22 +0000213 cargs += '-DCONFIG_ATAVIA=1'
214endif
215if config_buspirate_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200216 srcs += files('buspirate_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000217 cargs += '-DCONFIG_BUSPIRATE_SPI=1'
Richard Hughescb973682018-12-19 11:44:22 +0000218endif
219if config_ch341a_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200220 srcs += files('ch341a_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000221 cargs += '-DCONFIG_CH341A_SPI=1'
222endif
223if config_dediprog
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200224 srcs += files('dediprog.c')
Richard Hughescb973682018-12-19 11:44:22 +0000225 cargs += '-DCONFIG_DEDIPROG=1'
226endif
227if config_developerbox_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200228 srcs += files('developerbox_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000229 cargs += '-DCONFIG_DEVELOPERBOX_SPI=1'
230endif
231if config_digilent_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200232 srcs += files('digilent_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000233 cargs += '-DCONFIG_DIGILENT_SPI=1'
234endif
Jean THOMASe28d8e42022-10-11 17:54:30 +0200235if config_dirtyjtag_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200236 srcs += files('dirtyjtag_spi.c')
Jean THOMASe28d8e42022-10-11 17:54:30 +0200237 cargs += '-DCONFIG_DIRTYJTAG_SPI=1'
238endif
Richard Hughescb973682018-12-19 11:44:22 +0000239if config_drkaiser
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200240 srcs += files('drkaiser.c')
Richard Hughescb973682018-12-19 11:44:22 +0000241 cargs += '-DCONFIG_DRKAISER=1'
242endif
243if config_dummy
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200244 srcs += files('dummyflasher.c')
Richard Hughescb973682018-12-19 11:44:22 +0000245 cargs += '-DCONFIG_DUMMY=1'
246endif
247if config_ft2232_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200248 srcs += files('ft2232_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000249 cargs += '-DCONFIG_FT2232_SPI=1'
Richard Hughescb973682018-12-19 11:44:22 +0000250 cargs += '-DHAVE_FT232H=1'
251endif
252if config_gfxnvidia
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200253 srcs += files('gfxnvidia.c')
Richard Hughescb973682018-12-19 11:44:22 +0000254 cargs += '-DCONFIG_GFXNVIDIA=1'
255endif
256if config_internal
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200257 srcs += files(
258 'board_enable.c',
259 'cbtable.c',
260 'chipset_enable.c',
261 'internal.c',
262 'processor_enable.c',
263 )
Peter Marheine306c8b72022-01-21 02:07:30 +0000264 if host_is_x86
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200265 srcs += files(
266 'amd_imc.c',
267 'dmi.c',
268 'ichspi.c',
269 'it87spi.c',
270 'mcp6x_spi.c',
271 'sb600spi.c',
272 'wbsio_spi.c',
273 )
Richard Hughescb973682018-12-19 11:44:22 +0000274 endif
Richard Hughescb973682018-12-19 11:44:22 +0000275 cargs += '-DCONFIG_INTERNAL=1'
276 if get_option('config_internal_dmi')
277 # Use internal DMI/SMBIOS decoder by default instead of relying on dmidecode.
278 cargs += '-DCONFIG_INTERNAL_DMI=1'
279 endif
280endif
281if config_it8212
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200282 srcs += files('it8212.c')
Richard Hughescb973682018-12-19 11:44:22 +0000283 cargs += '-DCONFIG_IT8212=1'
284endif
Marc Schink7ec2d632020-12-08 22:20:50 +0100285if config_jlink_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200286 srcs += files('jlink_spi.c')
Marc Schink7ec2d632020-12-08 22:20:50 +0100287 cargs += '-DCONFIG_JLINK_SPI=1'
Marc Schink7ec2d632020-12-08 22:20:50 +0100288endif
Richard Hughescb973682018-12-19 11:44:22 +0000289if config_linux_mtd
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200290 srcs += files('linux_mtd.c')
Richard Hughescb973682018-12-19 11:44:22 +0000291 cargs += '-DCONFIG_LINUX_MTD=1'
292endif
293if config_linux_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200294 srcs += files('linux_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000295 cargs += '-DCONFIG_LINUX_SPI=1'
296endif
297if config_mstarddc_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200298 srcs += files('mstarddc_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000299 cargs += '-DCONFIG_MSTARDDC_SPI=1'
300endif
301if config_nic3com
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200302 srcs += files('nic3com.c')
Richard Hughescb973682018-12-19 11:44:22 +0000303 cargs += '-DCONFIG_NIC3COM=1'
304endif
305if config_nicintel
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200306 srcs += files('nicintel.c')
Richard Hughescb973682018-12-19 11:44:22 +0000307 cargs += '-DCONFIG_NICINTEL=1'
308endif
309if config_nicintel_eeprom
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200310 srcs += files('nicintel_eeprom.c')
Richard Hughescb973682018-12-19 11:44:22 +0000311 cargs += '-DCONFIG_NICINTEL_EEPROM=1'
312endif
313if config_nicintel_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200314 srcs += files('nicintel_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000315 cargs += '-DCONFIG_NICINTEL_SPI=1'
316endif
317if config_nicnatsemi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200318 srcs += files('nicnatsemi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000319 cargs += '-DCONFIG_NICNATSEMI=1'
320endif
321if config_nicrealtek
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200322 srcs += files('nicrealtek.c')
Richard Hughescb973682018-12-19 11:44:22 +0000323 cargs += '-DCONFIG_NICREALTEK=1'
324endif
325if config_ogp_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200326 srcs += files('ogp_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000327 cargs += '-DCONFIG_OGP_SPI=1'
328endif
329if config_pickit2_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200330 srcs += files('pickit2_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000331 cargs += '-DCONFIG_PICKIT2_SPI=1'
Richard Hughescb973682018-12-19 11:44:22 +0000332endif
333if config_pony_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200334 srcs += files('pony_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000335 cargs += '-DCONFIG_PONY_SPI=1'
336endif
337if config_rayer_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200338 srcs += files('rayer_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000339 cargs += '-DCONFIG_RAYER_SPI=1'
340endif
341if config_satamv
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200342 srcs += files('satamv.c')
Richard Hughescb973682018-12-19 11:44:22 +0000343 cargs += '-DCONFIG_SATAMV=1'
344endif
345if config_satasii
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200346 srcs += files('satasii.c')
Richard Hughescb973682018-12-19 11:44:22 +0000347 cargs += '-DCONFIG_SATASII=1'
348endif
349if config_serprog
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200350 srcs += files('serprog.c')
Richard Hughescb973682018-12-19 11:44:22 +0000351 cargs += '-DCONFIG_SERPROG=1'
Richard Hughescb973682018-12-19 11:44:22 +0000352endif
353if config_usbblaster_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200354 srcs += files('usbblaster_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000355 cargs += '-DCONFIG_USBBLASTER_SPI=1'
356endif
Miklós Márton324929c2019-08-01 19:14:10 +0200357if config_stlinkv3_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200358 srcs += files('stlinkv3_spi.c')
Miklós Márton324929c2019-08-01 19:14:10 +0200359 cargs += '-DCONFIG_STLINKV3_SPI=1'
360endif
Richard Hughescb973682018-12-19 11:44:22 +0000361
362# bitbanging SPI infrastructure
Peter Marheine306c8b72022-01-21 02:07:30 +0000363if need_bitbang_spi
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200364 srcs += files('bitbang_spi.c')
Richard Hughescb973682018-12-19 11:44:22 +0000365 cargs += '-DCONFIG_BITBANG_SPI=1'
366endif
367
Peter Marheine306c8b72022-01-21 02:07:30 +0000368if need_raw_mem_access
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200369 srcs += files('hwaccess_physmap.c')
Peter Marheine306c8b72022-01-21 02:07:30 +0000370endif
371
372if need_x86_port_io
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200373 srcs += files('hwaccess_x86_io.c')
Thomas Heijligena0655202021-12-14 16:36:05 +0100374 cargs += '-D__FLASHROM_HAVE_OUTB__=1'
Richard Hughescb973682018-12-19 11:44:22 +0000375endif
376
Peter Marheine306c8b72022-01-21 02:07:30 +0000377if need_x86_msr
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200378 srcs += files('hwaccess_x86_msr.c')
Peter Marheine306c8b72022-01-21 02:07:30 +0000379endif
380
Richard Hughescb973682018-12-19 11:44:22 +0000381# raw serial IO
382if need_serial
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200383 srcs += files('serial.c')
Thomas Heijligen140c1262021-09-27 15:12:26 +0200384 if host_machine.system() == 'linux'
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200385 srcs += files('custom_baud_linux.c')
Thomas Heijligen140c1262021-09-27 15:12:26 +0200386 else
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200387 srcs += files('custom_baud.c')
Thomas Heijligen140c1262021-09-27 15:12:26 +0200388 endif
Richard Hughescb973682018-12-19 11:44:22 +0000389endif
390
Thomas Heijligen2ae9bf22022-05-03 12:00:14 +0200391if config_print_wiki
Thomas Heijligen4bd966c2022-05-16 10:56:55 +0200392 srcs += files('print_wiki.c')
Thomas Heijligen2ae9bf22022-05-03 12:00:14 +0200393 cargs += '-DCONFIG_PRINT_WIKI=1'
394endif
395
396if config_default_programmer_name != ''
397 cargs += '-DCONFIG_DEFAULT_PROGRAMMER_NAME=&programmer_' + config_default_programmer_name
398else
399 cargs += '-DCONFIG_DEFAULT_PROGRAMMER_NAME=NULL'
400endif
401
402cargs += '-DCONFIG_DEFAULT_PROGRAMMER_ARGS="' + config_default_programmer_args + '"'
403
Richard Hughescb973682018-12-19 11:44:22 +0000404install_headers([
Thomas Heijligen58015c22022-04-14 13:50:55 +0200405 'include/libflashrom.h',
Richard Hughescb973682018-12-19 11:44:22 +0000406 ],
407)
408
Thomas Heijligen58015c22022-04-14 13:50:55 +0200409include_dir = include_directories('include')
410
Richard Hughescb973682018-12-19 11:44:22 +0000411mapfile = 'libflashrom.map'
412vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
Thomas Heijligenf6a273b2022-05-03 12:21:47 +0200413libflashrom = both_libraries(
Richard Hughescb973682018-12-19 11:44:22 +0000414 'flashrom',
415 sources : [
416 srcs,
417 ],
Thomas Heijligen58015c22022-04-14 13:50:55 +0200418 include_directories : include_dir,
Richard Hughescb973682018-12-19 11:44:22 +0000419 soversion : lt_current,
420 version : lt_version,
421 dependencies : [
422 deps,
423 ],
424 c_args : [
425 cargs,
426 ],
427 install : true,
428 link_args : vflag,
429 link_depends : mapfile,
430)
431
Mario Limonciellod954d5d2019-09-24 16:06:57 -0500432version = meson.project_version()
433#strip leading characters
434if version.startswith('v')
435 version = version.split('v')[1]
436endif
437if version.startswith('p')
438 version = version.split('p')[1]
439endif
440
Richard Hughescb973682018-12-19 11:44:22 +0000441pkgg = import('pkgconfig')
442pkgg.generate(
Thomas Heijligenf6a273b2022-05-03 12:21:47 +0200443 libraries : libflashrom,
Mario Limonciellod954d5d2019-09-24 16:06:57 -0500444 version : version,
Mario Limonciello2a8d4392019-10-15 13:32:19 -0500445 name : 'flashrom',
446 filebase : 'flashrom',
447 description : 'library to interact with flashrom',
Richard Hughescb973682018-12-19 11:44:22 +0000448)
449
Richard Hughesdad3a162020-02-17 09:57:01 +0000450conf.set('VERSION', version)
Nikolai Artemiev47cb6fc2022-07-22 09:58:14 +1000451conf.set('MAN_DATE', run_command('util/getversion.sh', '--man-date', check : true).stdout().strip())
Richard Hughesdad3a162020-02-17 09:57:01 +0000452configure_file(
453 input : 'flashrom.8.tmpl',
454 output : 'flashrom.8',
455 configuration : conf,
456 install: true,
Thomas Heijligen454a28c2022-05-03 11:50:16 +0200457 install_dir: join_paths(get_option('mandir'), 'man8'),
Richard Hughesdad3a162020-02-17 09:57:01 +0000458)
459
Richard Hughescb973682018-12-19 11:44:22 +0000460executable(
461 'flashrom',
Thomas Heijligenf6a273b2022-05-03 12:21:47 +0200462 files(
Richard Hughescb973682018-12-19 11:44:22 +0000463 'cli_classic.c',
464 'cli_common.c',
465 'cli_output.c',
Thomas Heijligenf6a273b2022-05-03 12:21:47 +0200466 ),
467 c_args : cargs,
Thomas Heijligen58015c22022-04-14 13:50:55 +0200468 include_directories : include_dir,
Richard Hughescb973682018-12-19 11:44:22 +0000469 install : true,
Thomas Heijligenf6a273b2022-05-03 12:21:47 +0200470 install_dir : get_option('sbindir'),
471 link_with : libflashrom.get_static_lib(), # flashrom needs internal symbols of libflashrom
Richard Hughescb973682018-12-19 11:44:22 +0000472)
473
Thomas Heijligenb7341b12022-08-13 12:21:44 +0200474if get_option('ich_descriptors_tool').auto() or get_option('ich_descriptors_tool').enabled()
475 subdir('util/ich_descriptors_tool')
476endif