1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-27 07:02:34 +02:00
flashrom/meson.build
Anastasia Klimchuk b899ab233f meson: Treat warnings as errors
Makefile treats warnings as errors, so enable the same option
for meson.

Makefile has an option to disable "warnings as errors" option
from command line. The same can be achieved with meson, see
scenario 2 below.

TEST=I verified the following scenarious

1) check that warnings treated as errors by enforcing higher
warning level
`meson setup --warnlevel=3 --wipe`
`ninja test`
shows tons of errors because warning level 3 is pedantic,
build fails

2) disable "warning as errors" option from command line
`meson configure -Dwerror=false`
`ninja test`
Now all warnings are non-blocking for build, so tests pass

3) back home
`meson configure -Dwerror=true`
`meson setup --warnlevel=2 --wipe`
`ninja test`
No warnings and tests pass

4) defaults: create new directory and run meson will all default
options
No warnings, all tests pass.

Change-Id: I06c72abf1c861f9b35736e02ef7f4a4fb6909b97
Signed-off-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/63852
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Thomas Heijligen <src@posteo.de>
Reviewed-by: Peter Marheine <pmarheine@chromium.org>
2022-04-29 05:40:08 +00:00

546 lines
14 KiB
Meson

project('flashromutils', 'c',
version : run_command('util/getversion.sh', '--version').stdout().strip(),
license : 'GPL-2.0',
meson_version : '>=0.50.0',
default_options : [
'warning_level=2',
'c_std=c99',
'werror=true',
'optimization=s',
'debug=false'],
)
# libtool versioning
lt_current = '1'
lt_revision = '0'
lt_age = '0'
lt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision)
# hide/enable some warnings
warning_flags = [
'-Wshadow',
'-Wmissing-prototypes',
'-Wwrite-strings',
'-Wno-unused-parameter',
'-Wno-address-of-packed-member',
'-Wno-enum-conversion',
'-Wno-missing-braces',
]
conf = configuration_data()
cc = meson.get_compiler('c')
add_project_arguments(cc.get_supported_arguments(warning_flags), language : 'c')
add_project_arguments('-D_DEFAULT_SOURCE', language : 'c')
add_project_arguments('-D_POSIX_C_SOURCE=200809L', language : 'c') # required for fileno, nanosleep, and strndup
add_project_arguments('-D_BSD_SOURCE', language : 'c') # required for glibc < v2.19
add_project_arguments('-DFLASHROM_VERSION="' + meson.project_version() + '"', language : 'c')
if host_machine.system() in ['cygwin', 'windows']
add_project_arguments('-DIS_WINDOWS=1', language : 'c')
else
add_project_arguments('-DIS_WINDOWS=0', language : 'c')
endif
# get defaults from configure
config_atahpt = get_option('config_atahpt')
config_atapromise = get_option('config_atapromise')
config_atavia = get_option('config_atavia')
config_buspirate_spi = get_option('config_buspirate_spi')
config_ch341a_spi = get_option('config_ch341a_spi')
config_dediprog = get_option('config_dediprog')
config_developerbox_spi = get_option('config_developerbox_spi')
config_digilent_spi = get_option('config_digilent_spi')
config_jlink_spi = get_option('config_jlink_spi')
config_drkaiser = get_option('config_drkaiser')
config_dummy = get_option('config_dummy')
config_ft2232_spi = get_option('config_ft2232_spi')
config_gfxnvidia = get_option('config_gfxnvidia')
config_raiden_debug_spi = get_option('config_raiden_debug_spi')
config_internal = get_option('config_internal')
config_it8212 = get_option('config_it8212')
config_linux_mtd = get_option('config_linux_mtd')
config_linux_spi = get_option('config_linux_spi')
config_mstarddc_spi = get_option('config_mstarddc_spi')
config_nic3com = get_option('config_nic3com')
config_nicintel_eeprom = get_option('config_nicintel_eeprom')
config_nicintel = get_option('config_nicintel')
config_nicintel_spi = get_option('config_nicintel_spi')
config_nicnatsemi = get_option('config_nicnatsemi')
config_nicrealtek = get_option('config_nicrealtek')
config_ogp_spi = get_option('config_ogp_spi')
config_pickit2_spi = get_option('config_pickit2_spi')
config_pony_spi = get_option('config_pony_spi')
config_rayer_spi = get_option('config_rayer_spi')
config_satamv = get_option('config_satamv')
config_satasii = get_option('config_satasii')
config_serprog = get_option('config_serprog')
config_usbblaster_spi = get_option('config_usbblaster_spi')
config_stlinkv3_spi = get_option('config_stlinkv3_spi')
config_lspcon_i2c_spi = get_option('config_lspcon_i2c_spi')
config_mediatek_i2c_spi = get_option('config_mediatek_i2c_spi')
config_realtek_mst_i2c_spi = get_option('config_realtek_mst_i2c_spi')
config_print_wiki= get_option('print_wiki')
config_default_programmer_name = get_option('default_programmer_name')
config_default_programmer_args = get_option('default_programmer_args')
cargs = []
deps = []
srcs = []
host_is_x86 = ['x86', 'x86_64'].contains(host_machine.cpu_family())
need_serial = [
config_buspirate_spi, config_pony_spi, config_serprog,
].contains(true)
need_bitbang_spi = [
config_internal, config_nicintel_spi, config_ogp_spi,
config_pony_spi, config_rayer_spi,
].contains(true)
need_raw_mem_access = [
config_atapromise, config_drkaiser, config_gfxnvidia, config_internal,
config_it8212, config_nicintel, config_nicintel_eeprom, config_nicintel_spi,
config_ogp_spi, config_satamv, config_satasii,
].contains(true)
# Internal programmer uses x86 features if the system is x86
need_x86_msr = config_internal and host_is_x86
need_x86_port_io = [
config_atahpt, config_atapromise, config_internal and host_is_x86,
config_nic3com, config_nicnatsemi, config_nicrealtek, config_rayer_spi,
config_satamv,
].contains(true)
need_libpci = [
config_atahpt, config_atapromise, config_atavia,
config_drkaiser, config_gfxnvidia, config_internal, config_it8212,
config_nic3com, config_nicintel, config_nicintel_eeprom, config_nicintel_spi,
config_nicnatsemi, config_nicrealtek, config_ogp_spi, config_satamv,
config_satasii,
].contains(true)
need_libusb1 = [
config_ch341a_spi, config_dediprog, config_developerbox_spi,
config_digilent_spi, config_pickit2_spi, config_raiden_debug_spi,
config_stlinkv3_spi,
].contains(true)
need_libftdi1 = [
config_ft2232_spi, config_usbblaster_spi,
].contains(true)
need_libjaylink = config_jlink_spi
if (need_x86_port_io or need_x86_msr) and not host_is_x86
error('one or more enabled programmer only supports x86 and target is not')
endif
# check for required symbols
if cc.has_function('clock_gettime')
add_project_arguments('-DHAVE_CLOCK_GETTIME=1', language : 'c')
endif
if cc.has_function('strnlen')
add_project_arguments('-DHAVE_STRNLEN=1', language : 'c')
endif
if cc.check_header('sys/utsname.h')
add_project_arguments('-DHAVE_UTSNAME=1', language : 'c')
endif
srcs += 'platform/memaccess.c'
if host_machine.endian() == 'little'
srcs += 'platform/endian_little.c'
add_project_arguments('-D__FLASHROM_LITTLE_ENDIAN__=1', language : 'c')
endif
if host_machine.endian() == 'big'
srcs += 'platform/endian_big.c'
add_project_arguments('-D__FLASHROM_BIG_ENDIAN__=1', language : 'c')
endif
# some programmers require libusb
if get_option('usb')
srcs += 'usbdev.c'
srcs += 'usb_device.c'
deps += dependency('libusb-1.0')
elif need_libusb1
error('usb is disabled but one or more enabled programmer requires USB access')
endif
# some programmers require libpci
if get_option('pciutils')
srcs += 'pcidev.c'
deps += dependency('libpci')
elif need_libpci
error('pciutils is disabled but one or more enabled programmer requires PCI access')
endif
if need_libftdi1
deps += dependency('libftdi1')
endif
if need_libjaylink
deps += dependency('libjaylink')
endif
# set defines for configured programmers
if config_atahpt
srcs += 'atahpt.c'
cargs += '-DCONFIG_ATAHPT=1'
endif
if config_atapromise
srcs += 'atapromise.c'
cargs += '-DCONFIG_ATAPROMISE=1'
endif
if config_atavia
srcs += 'atavia.c'
cargs += '-DCONFIG_ATAVIA=1'
endif
if config_buspirate_spi
srcs += 'buspirate_spi.c'
cargs += '-DCONFIG_BUSPIRATE_SPI=1'
endif
if config_ch341a_spi
srcs += 'ch341a_spi.c'
cargs += '-DCONFIG_CH341A_SPI=1'
endif
if config_dediprog
srcs += 'dediprog.c'
cargs += '-DCONFIG_DEDIPROG=1'
endif
if config_developerbox_spi
srcs += 'developerbox_spi.c'
cargs += '-DCONFIG_DEVELOPERBOX_SPI=1'
endif
if config_digilent_spi
srcs += 'digilent_spi.c'
cargs += '-DCONFIG_DIGILENT_SPI=1'
endif
if config_jlink_spi
srcs += 'jlink_spi.c'
cargs += '-DCONFIG_JLINK_SPI=1'
endif
if config_drkaiser
srcs += 'drkaiser.c'
cargs += '-DCONFIG_DRKAISER=1'
endif
if config_dummy
srcs += 'dummyflasher.c'
cargs += '-DCONFIG_DUMMY=1'
endif
if config_ft2232_spi
srcs += 'ft2232_spi.c'
cargs += '-DCONFIG_FT2232_SPI=1'
cargs += '-DHAVE_FT232H=1'
endif
if config_gfxnvidia
srcs += 'gfxnvidia.c'
cargs += '-DCONFIG_GFXNVIDIA=1'
endif
if config_raiden_debug_spi
srcs += 'raiden_debug_spi.c'
cargs += '-DCONFIG_RAIDEN_DEBUG_SPI=1'
endif
if config_internal
srcs += 'board_enable.c'
srcs += 'cbtable.c'
srcs += 'chipset_enable.c'
srcs += 'internal.c'
srcs += 'processor_enable.c'
if host_is_x86
srcs += 'amd_imc.c'
srcs += 'dmi.c'
srcs += 'ichspi.c'
srcs += 'it85spi.c'
srcs += 'it87spi.c'
srcs += 'mcp6x_spi.c'
srcs += 'sb600spi.c'
srcs += 'wbsio_spi.c'
endif
cargs += '-DCONFIG_INTERNAL=1'
if get_option('config_internal_dmi')
# Use internal DMI/SMBIOS decoder by default instead of relying on dmidecode.
cargs += '-DCONFIG_INTERNAL_DMI=1'
endif
endif
if config_it8212
srcs += 'it8212.c'
cargs += '-DCONFIG_IT8212=1'
endif
if config_linux_mtd
srcs += 'linux_mtd.c'
cargs += '-DCONFIG_LINUX_MTD=1'
endif
if config_linux_spi
srcs += 'linux_spi.c'
cargs += '-DCONFIG_LINUX_SPI=1'
endif
if config_mstarddc_spi
srcs += 'mstarddc_spi.c'
cargs += '-DCONFIG_MSTARDDC_SPI=1'
endif
if config_nic3com
srcs += 'nic3com.c'
cargs += '-DCONFIG_NIC3COM=1'
endif
if config_nicintel
srcs += 'nicintel.c'
cargs += '-DCONFIG_NICINTEL=1'
endif
if config_nicintel_eeprom
srcs += 'nicintel_eeprom.c'
cargs += '-DCONFIG_NICINTEL_EEPROM=1'
endif
if config_nicintel_spi
srcs += 'nicintel_spi.c'
cargs += '-DCONFIG_NICINTEL_SPI=1'
endif
if config_nicnatsemi
srcs += 'nicnatsemi.c'
cargs += '-DCONFIG_NICNATSEMI=1'
endif
if config_nicrealtek
srcs += 'nicrealtek.c'
cargs += '-DCONFIG_NICREALTEK=1'
endif
if config_ogp_spi
srcs += 'ogp_spi.c'
cargs += '-DCONFIG_OGP_SPI=1'
endif
if config_pickit2_spi
srcs += 'pickit2_spi.c'
cargs += '-DCONFIG_PICKIT2_SPI=1'
endif
if config_pony_spi
srcs += 'pony_spi.c'
cargs += '-DCONFIG_PONY_SPI=1'
endif
if config_rayer_spi
srcs += 'rayer_spi.c'
cargs += '-DCONFIG_RAYER_SPI=1'
endif
if config_satamv
srcs += 'satamv.c'
cargs += '-DCONFIG_SATAMV=1'
endif
if config_satasii
srcs += 'satasii.c'
cargs += '-DCONFIG_SATASII=1'
endif
if config_serprog
srcs += 'serprog.c'
cargs += '-DCONFIG_SERPROG=1'
endif
if config_usbblaster_spi
srcs += 'usbblaster_spi.c'
cargs += '-DCONFIG_USBBLASTER_SPI=1'
endif
if config_stlinkv3_spi
srcs += 'stlinkv3_spi.c'
cargs += '-DCONFIG_STLINKV3_SPI=1'
endif
if config_lspcon_i2c_spi
srcs += 'lspcon_i2c_spi.c'
cargs += '-DCONFIG_LSPCON_I2C_SPI=1'
endif
if config_mediatek_i2c_spi
srcs += 'mediatek_i2c_spi.c'
cargs += '-DCONFIG_MEDIATEK_I2C_SPI=1'
endif
if config_realtek_mst_i2c_spi
srcs += 'realtek_mst_i2c_spi.c'
cargs += '-DCONFIG_REALTEK_MST_I2C_SPI=1'
endif
# bitbanging SPI infrastructure
if need_bitbang_spi
srcs += 'bitbang_spi.c'
cargs += '-DCONFIG_BITBANG_SPI=1'
endif
if host_machine.system() == 'linux'
srcs += 'i2c_helper_linux.c'
endif
if need_raw_mem_access
srcs += 'hwaccess_physmap.c'
endif
if need_x86_port_io
srcs += 'hwaccess_x86_io.c'
cargs += '-D__FLASHROM_HAVE_OUTB__=1'
endif
if need_x86_msr
srcs += 'hwaccess_x86_msr.c'
endif
# raw serial IO
if need_serial
srcs += 'serial.c'
if host_machine.system() == 'linux'
srcs += 'custom_baud_linux.c'
else
srcs += 'custom_baud.c'
endif
endif
prefix = get_option('prefix')
sbindir = join_paths(prefix, get_option('sbindir'))
libdir = join_paths(prefix, get_option('libdir'))
mandir = join_paths(prefix, get_option('mandir'))
install_headers([
'include/libflashrom.h',
],
)
include_dir = include_directories('include')
# core modules needed by both the library and the CLI
srcs += '82802ab.c'
srcs += 'at45db.c'
srcs += 'edi.c'
srcs += 'en29lv640b.c'
srcs += 'flashchips.c'
srcs += 'flashrom.c'
srcs += 'fmap.c'
srcs += 'helpers.c'
srcs += 'ich_descriptors.c'
srcs += 'jedec.c'
srcs += 'layout.c'
srcs += 'libflashrom.c'
srcs += 'opaque.c'
srcs += 'print.c'
srcs += 'programmer.c'
srcs += 'programmer_table.c'
srcs += 's25f.c'
srcs += 'sfdp.c'
srcs += 'spi25.c'
srcs += 'spi25_statusreg.c'
srcs += 'spi95.c'
srcs += 'spi.c'
srcs += 'sst28sf040.c'
srcs += 'sst49lfxxxc.c'
srcs += 'sst_fwhub.c'
srcs += 'stm50.c'
srcs += 'udelay.c'
srcs += 'w29ee011.c'
srcs += 'w39.c'
srcs += 'writeprotect.c'
srcs += 'writeprotect_ranges.c'
mapfile = 'libflashrom.map'
vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
flashrom = library(
'flashrom',
sources : [
srcs,
],
include_directories : include_dir,
soversion : lt_current,
version : lt_version,
dependencies : [
deps,
],
c_args : [
cargs,
],
install : true,
link_args : vflag,
link_depends : mapfile,
)
version = meson.project_version()
#strip leading characters
if version.startswith('v')
version = version.split('v')[1]
endif
if version.startswith('p')
version = version.split('p')[1]
endif
pkgg = import('pkgconfig')
pkgg.generate(
libraries : flashrom,
version : version,
name : 'flashrom',
filebase : 'flashrom',
description : 'library to interact with flashrom',
)
conf.set('VERSION', version)
conf.set('MAN_DATE', run_command('util/getversion.sh', '--man-date').stdout().strip())
configure_file(
input : 'flashrom.8.tmpl',
output : 'flashrom.8',
configuration : conf,
install: true,
install_dir: join_paths(mandir, 'man8'),
)
flashrom_dep = declare_dependency(
link_with : flashrom,
include_directories : include_dir,
dependencies : deps
)
if config_print_wiki
srcs += 'print_wiki.c'
cargs += '-DCONFIG_PRINT_WIKI=1'
endif
if config_default_programmer_name != ''
cargs += '-DCONFIG_DEFAULT_PROGRAMMER_NAME=&programmer_' + config_default_programmer_name
else
cargs += '-DCONFIG_DEFAULT_PROGRAMMER_NAME=NULL'
endif
cargs += '-DCONFIG_DEFAULT_PROGRAMMER_ARGS="' + config_default_programmer_args + '"'
# we can't just link_with libflashrom as we require all the internal symbols...
executable(
'flashrom',
sources : [
srcs,
'cli_classic.c',
'cli_common.c',
'cli_output.c',
'flashrom.c',
],
include_directories : include_dir,
dependencies : [
deps,
],
c_args : [
cargs
],
install : true,
install_dir : sbindir,
)
subdir('util')
# unit-test framework
cmocka_dep = dependency(
'cmocka',
fallback: ['cmocka', 'cmocka_dep'],
required: false
)
flashrom_test_dep = declare_dependency(
include_directories : include_dir,
sources : [
srcs,
'cli_common.c',
'cli_output.c',
'flashrom.c',
],
compile_args : [
'-includestdlib.h',
'-includeunittest_env.h',
'-includehwaccess_x86_io_unittest.h'
],
dependencies : [
deps,
],
)
if cmocka_dep.found()
subdir('tests')
endif