mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00

This commit enables the feature and makes changes to existing files and tests. I am writing more new tests with this. Commit includes tests/flashrom.c because after enabling memory checks the test started to fail (it used to leak memory indeed). If you are wondering how to verify it works (because at the moment all tests [still] pass so it’s not obvious that anything has changed), then for example: 1) Remove free’s in flashbuses_to_text_test_success test, and it will fail with message similar to this (line numbers from your local source) [ ERROR ] --- Blocks allocated... ../flashrom.c:1239: note: block 0x55f42304b640 allocated here ../flashrom.c:1239: note: block 0x55f42304b5c0 allocated here ../flashrom.c:1239: note: block 0x55f42304b3d0 allocated here ../flashrom.c:1239: note: block 0x55f42304b700 allocated here ../flashrom.c:1239: note: block 0x55f42304b780 allocated here ../flashrom.c:1239: note: block 0x55f42304bb00 allocated here ../flashrom.c:1239: note: block 0x55f42304b810 allocated here ERROR: flashbuses_to_text_test_success leaked 7 block(s) 2) Add char *temp = malloc just before return from strcat_realloc [ ERROR ] --- Blocks allocated... ../helpers.c:88: note: block 0x55a51307b6c0 allocated here ../helpers.c:88: note: block 0x55a51307b9e0 allocated here ERROR: strcat_realloc_test_success leaked 2 block(s) BUG=b:181803212 TEST=builds and ninja test nm builddir/tests/flashrom_unit_tests.p/.._flashrom.c.o nm builddir/tests/flashrom_unit_tests.p/flashrom.c.o nm builddir/flashrom.p/flashrom.c.o Change-Id: I0c6b6b8dc17aaee28640e3fca3d1fc9f7feabf5f Signed-off-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/51243 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
485 lines
12 KiB
Meson
485 lines
12 KiB
Meson
project('flashromutils', 'c',
|
|
version : run_command('util/getversion.sh', '-v').stdout().strip(),
|
|
license : 'GPL-2.0',
|
|
meson_version : '>=0.50.0',
|
|
default_options : ['warning_level=2', 'c_std=c99'],
|
|
)
|
|
|
|
# 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 = [
|
|
'-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')
|
|
|
|
# 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_ene_lpc = get_option('config_ene_lpc')
|
|
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_mec1308 = get_option('config_mec1308')
|
|
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_realtek_mst_i2c_spi = get_option('config_realtek_mst_i2c_spi')
|
|
config_print_wiki= get_option('print_wiki')
|
|
|
|
cargs = []
|
|
deps = []
|
|
srcs = []
|
|
|
|
need_raw_access = false
|
|
need_serial = false
|
|
|
|
# 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
|
|
|
|
# some programmers require libusb
|
|
if get_option('usb')
|
|
srcs += 'usbdev.c'
|
|
srcs += 'usb_device.c'
|
|
deps += dependency('libusb-1.0')
|
|
else
|
|
config_ch341a_spi = false
|
|
config_dediprog = false
|
|
config_digilent_spi = false
|
|
config_developerbox_spi = false
|
|
config_pickit2_spi = false
|
|
endif
|
|
|
|
# some programmers require libpci
|
|
if get_option('pciutils')
|
|
srcs += 'pcidev.c'
|
|
deps += dependency('libpci')
|
|
need_raw_access = true
|
|
cargs += '-DNEED_PCI=1'
|
|
else
|
|
config_atahpt = false
|
|
config_atapromise = false
|
|
config_atavia = false
|
|
config_drkaiser = false
|
|
config_gfxnvidia = false
|
|
config_raiden_debug_spi = false
|
|
config_internal = false
|
|
config_it8212 = false
|
|
config_nic3com = false
|
|
config_nicintel_eeprom = false
|
|
config_nicintel = false
|
|
config_nicintel_spi = false
|
|
config_nicnatsemi = false
|
|
config_nicrealtek = false
|
|
config_ogp_spi = false
|
|
config_rayer_spi = false
|
|
config_satamv = false
|
|
config_satasii = false
|
|
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'
|
|
need_serial = true
|
|
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'
|
|
deps += dependency('libjaylink')
|
|
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'
|
|
deps += dependency('libftdi1')
|
|
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 target_machine.cpu_family() == 'x86' or target_machine.cpu_family() == 'x86_64'
|
|
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
|
|
config_bitbang_spi = true
|
|
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_ene_lpc
|
|
srcs += 'ene_lpc.c'
|
|
cargs += '-DCONFIG_ENE_LPC=1'
|
|
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_mec1308
|
|
srcs += 'mec1308.c'
|
|
cargs += '-DCONFIG_MEC1308=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'
|
|
config_bitbang_spi = true
|
|
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
|
|
config_bitbang_spi = true
|
|
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'
|
|
need_serial = true
|
|
config_bitbang_spi = true
|
|
cargs += '-DCONFIG_PONY_SPI=1'
|
|
endif
|
|
if config_rayer_spi
|
|
srcs += 'rayer_spi.c'
|
|
config_bitbang_spi = true
|
|
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'
|
|
need_serial = true
|
|
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_realtek_mst_i2c_spi
|
|
srcs += 'realtek_mst_i2c_spi.c'
|
|
cargs += '-DCONFIG_REALTEK_MST_I2C_SPI=1'
|
|
endif
|
|
|
|
# bitbanging SPI infrastructure
|
|
if config_bitbang_spi
|
|
srcs += 'bitbang_spi.c'
|
|
cargs += '-DCONFIG_BITBANG_SPI=1'
|
|
endif
|
|
|
|
if host_machine.system() == 'linux'
|
|
srcs += 'i2c_helper_linux.c'
|
|
cargs += '-DCONFIG_I2C_SUPPORT=1'
|
|
endif
|
|
|
|
# raw memory, MSR or PCI port I/O access
|
|
if need_raw_access
|
|
srcs += 'hwaccess.c'
|
|
srcs += 'physmap.c'
|
|
cargs += '-DNEED_RAW_ACCESS=1'
|
|
endif
|
|
|
|
# raw serial IO
|
|
if need_serial
|
|
srcs += 'custom_baud.c'
|
|
srcs += 'serial.c'
|
|
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([
|
|
'libflashrom.h',
|
|
],
|
|
)
|
|
|
|
# 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 += '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'
|
|
|
|
mapfile = 'libflashrom.map'
|
|
vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
|
|
flashrom = library(
|
|
'flashrom',
|
|
sources : [
|
|
srcs,
|
|
],
|
|
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/getrevision.sh', '--date', 'flashrom.8.tmpl').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_directories('.'),
|
|
dependencies : deps
|
|
)
|
|
|
|
if config_print_wiki
|
|
srcs += 'print_wiki.c'
|
|
cargs += '-DCONFIG_PRINT_WIKI=1'
|
|
endif
|
|
|
|
# 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',
|
|
],
|
|
dependencies : [
|
|
deps,
|
|
],
|
|
c_args : [
|
|
cargs,
|
|
'-DCONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_INVALID',
|
|
'-DCONFIG_DEFAULT_PROGRAMMER_ARGS=""',
|
|
],
|
|
install : true,
|
|
install_dir : sbindir,
|
|
)
|
|
|
|
subdir('util')
|
|
|
|
# unit-test framework
|
|
cmocka_dep = dependency(
|
|
'cmocka',
|
|
fallback: ['cmocka', 'cmocka_dep']
|
|
)
|
|
flashrom_test_dep = declare_dependency(
|
|
include_directories : include_directories('.'),
|
|
sources : [
|
|
srcs,
|
|
'cli_common.c',
|
|
'cli_output.c',
|
|
'flashrom.c',
|
|
],
|
|
compile_args : [
|
|
'-includestdlib.h',
|
|
'-includeunittest_env.h',
|
|
],
|
|
dependencies : [
|
|
deps,
|
|
],
|
|
)
|
|
|
|
subdir('tests')
|