diff options
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..1923fdfb --- /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') |