summaryrefslogtreecommitdiffstats
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build396
1 files changed, 396 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 000000000..1923fdfb7
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,396 @@
+project('flashromutils', 'c',
+ version : '1.0',
+ license : 'GPL-2.0+',
+ meson_version : '>=0.47.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 some warnings
+warning_flags = [
+ '-Wno-unused-parameter',
+ '-Wno-sign-compare',
+ '-Wno-address-of-packed-member',
+ '-Wno-enum-conversion',
+ '-Wno-missing-field-initializers',
+ '-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', language : 'c') # required for fileno
+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_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_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')
+
+cargs = []
+deps = []
+srcs = []
+
+need_libusb0 = false
+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'
+ deps += dependency('libusb-1.0')
+else
+ config_ch341a_spi = false
+ config_dediprog = false
+ config_digilent_spi = false
+ config_developerbox_spi = false
+endif
+
+# some programmers require libpci
+if get_option('pciutils')
+ srcs += 'pcidev.c'
+ deps += dependency('libpci')
+ cargs += '-DNEED_PCI=1'
+else
+ config_atahpt = false
+ config_atapromise = false
+ config_atavia = false
+ config_drkaiser = false
+ config_gfxnvidia = 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_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_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_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'
+ 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'
+ need_libusb0 = true
+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
+ need_raw_access = 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
+
+# bitbanging SPI infrastructure
+if config_bitbang_spi
+ srcs += 'bitbang_spi.c'
+ cargs += '-DCONFIG_BITBANG_SPI=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
+
+# raw deprecated and old USB library
+if need_libusb0
+ deps += dependency('libusb')
+endif
+
+prefix = get_option('prefix')
+sbindir = join_paths(prefix, get_option('sbindir'))
+libdir = join_paths(prefix, get_option('libdir'))
+
+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 += 'sfdp.c'
+srcs += 'spi25.c'
+srcs += 'spi25_statusreg.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'
+
+mapfile = 'libflashrom.map'
+vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
+flashrom = shared_library(
+ 'flashrom',
+ sources : [
+ srcs,
+ ],
+ soversion : lt_current,
+ version : lt_version,
+ dependencies : [
+ deps,
+ ],
+ c_args : [
+ cargs,
+ ],
+ install : true,
+ link_args : vflag,
+ link_depends : mapfile,
+)
+
+pkgg = import('pkgconfig')
+pkgg.generate(
+ libraries : flashrom,
+ version : meson.project_version(),
+ name : 'libflashrom',
+ filebase : 'libflashrom',
+ description : 'libflashrom',
+)
+
+flashrom_dep = declare_dependency(
+ link_with : flashrom,
+ include_directories : include_directories('.'),
+ dependencies : deps
+)
+
+# 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,
+ '-DSTANDALONE',
+ '-DCONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_INVALID',
+ '-DCONFIG_DEFAULT_PROGRAMMER_ARGS=""',
+ ],
+ install : true,
+ install_dir : sbindir,
+)
+
+subdir('util')