build: Use a dict to define drivers build info

We used multiple arrays, making things more complicated than we should
with current meson
This commit is contained in:
Marco Trevisan (Treviño)
2026-07-01 14:00:56 +02:00
parent accbf7828e
commit 3e04f15179
2 changed files with 67 additions and 103 deletions
+2 -1
View File
@@ -1,7 +1,7 @@
spi_sources = [] spi_sources = []
spi_headers = [] spi_headers = []
if enabled_spi_drivers.length() > 0 if have_spi
spi_headers = ['fpi-spi-transfer.h'] spi_headers = ['fpi-spi-transfer.h']
spi_sources = ['fpi-spi-transfer.c'] spi_sources = ['fpi-spi-transfer.c']
endif endif
@@ -146,6 +146,7 @@ helper_sources = {
'aesx660': files('drivers/aesx660.c'), 'aesx660': files('drivers/aesx660.c'),
'aes3k': files('drivers/aes3k.c'), 'aes3k': files('drivers/aes3k.c'),
'openssl': files(), 'openssl': files(),
'pixman': files(),
'udev': files(), 'udev': files(),
'virtual': files('drivers/virtual-device-listener.c'), 'virtual': files('drivers/virtual-device-listener.c'),
} }
+63 -100
View File
@@ -109,81 +109,60 @@ have_spi = host_machine.system() == 'linux'
# Drivers # Drivers
drivers = get_option('drivers').split(',') drivers = get_option('drivers').split(',')
virtual_drivers = [
'virtual_image',
'virtual_device',
'virtual_device_storage',
]
default_drivers = [ drivers_info = {
'upektc_img', 'upektc_img': {},
'vfs5011', 'vfs5011': { 'endian_dependent': true },
'vfs7552', 'vfs7552': {},
'aes3500', 'aes3500': { 'helper': ['aeslib', 'aes3k', 'pixman'] },
'aes4000', 'aes4000': { 'helper': ['aeslib', 'aes3k', 'pixman'] },
'aes1610', 'aes1610': { 'helper': ['aeslib'] },
'aes1660', 'aes1660': { 'helper': ['aeslib', 'aesx660'] },
'aes2660', 'aes2660': { 'helper': ['aeslib', 'aesx660'] },
'aes2501', 'aes2501': { 'helper': ['aeslib'], 'endian_dependent': true },
'aes2550', 'aes2550': { 'helper': ['aeslib'] },
'vfs101', 'vfs101': {},
'vfs301', 'vfs301': { 'endian_dependent': true },
'vfs0050', 'vfs0050': { 'endian_dependent': true },
'etes603', 'etes603': {},
'egis0570', 'egis0570': {},
'egismoc', 'egismoc': {},
'egis_etu905', 'egis_etu905': {},
'vcom5s', 'vcom5s': {},
'synaptics', 'synaptics': {},
'elan', 'elan': { 'endian_dependent': true },
'elanmoc', 'elanmoc': {},
'uru4000', 'uru4000': { 'helper': ['openssl'], 'endian_dependent': true },
'upektc', 'upektc': {},
'upeksonly', 'upeksonly': {},
'upekts', 'upekts': {},
'goodixmoc', 'goodixmoc': { 'endian_dependent': true },
'nb1010', 'nb1010': {},
'fpcmoc', 'fpcmoc': { 'endian_dependent': true },
'realtek', 'realtek': {},
'focaltech_moc', 'focaltech_moc': {},
'mafpmoc', 'mafpmoc': { 'endian_dependent': true },
'secugen', 'secugen': { 'endian_dependent': true },
]
spi_drivers = [ # SPI driver (non-optional if SPI is available)
'elanspi' 'elanspi': { 'spi': true, 'helper': ['udev'], 'optional': not have_spi, 'endian_dependent': true },
]
if have_spi # Virtual drivers (test-only, optional)
default_drivers += spi_drivers 'virtual_image': { 'virtual': true, 'helper': ['virtual'], 'optional': true },
'virtual_device': { 'virtual': true, 'helper': ['virtual'], 'optional': true },
'virtual_device_storage': { 'virtual': true, 'helper': ['virtual'], 'optional': true },
}
default_drivers = []
virtual_drivers = []
foreach name, info : drivers_info
if not info.get('optional', false)
default_drivers += name
endif endif
if info.get('virtual', false)
# FIXME: All the drivers should be fixed by adjusting the byte order. virtual_drivers += name
# See https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/236 endif
endian_independent_drivers = virtual_drivers + [ endforeach
'aes1610',
'aes1660',
'aes2550',
'aes2660',
'aes3500',
'aes4000',
'egis0570',
'egismoc',
'egis_etu905',
'elanmoc',
'etes603',
'focaltech_moc',
'nb1010',
'realtek',
'synaptics',
'upeksonly',
'upektc',
'upektc_img',
'upekts',
'vcom5s',
'vfs101',
'vfs7552',
]
all_drivers = default_drivers + virtual_drivers all_drivers = default_drivers + virtual_drivers
@@ -195,36 +174,18 @@ if drivers == [ 'default' ]
drivers = default_drivers drivers = default_drivers
endif endif
enabled_spi_drivers = [] if not have_spi
foreach driver : spi_drivers foreach driver: drivers
if driver in drivers if drivers_info[driver].get('spi', false)
enabled_spi_drivers += driver error('SPI driver @0@ is not supported'.format(driver))
endif endif
endforeach endforeach
if enabled_spi_drivers.length() > 0 and not have_spi
error('SPI drivers @0@ are not supported'.format(enabled_spi_drivers))
endif endif
driver_helper_mapping = {
'aes1610' : [ 'aeslib' ],
'aes1660' : [ 'aeslib', 'aesx660' ],
'aes2501' : [ 'aeslib' ],
'aes2550' : [ 'aeslib' ],
'aes2660' : [ 'aeslib', 'aesx660' ],
'aes3500' : [ 'aeslib', 'aes3k' ],
'aes4000' : [ 'aeslib', 'aes3k' ],
'uru4000' : [ 'openssl' ],
'elanspi' : [ 'udev' ],
'virtual_image' : [ 'virtual' ],
'virtual_device' : [ 'virtual' ],
'virtual_device_storage' : [ 'virtual' ],
}
driver_helpers = [] driver_helpers = []
foreach driver : drivers foreach driver : drivers
if driver in driver_helper_mapping if driver in drivers_info
foreach helper : driver_helper_mapping[driver] foreach helper : drivers_info[driver].get('helper', [])
if helper not in driver_helpers if helper not in driver_helpers
driver_helpers += helper driver_helpers += helper
endif endif
@@ -256,14 +217,14 @@ optional_deps = []
# Resolve extra dependencies # Resolve extra dependencies
foreach i : driver_helpers foreach i : driver_helpers
foreach d, helpers : driver_helper_mapping foreach name, info : drivers_info
if i in helpers if i in info.get('helper', [])
driver = d driver = name
break break
endif endif
endforeach endforeach
if i == 'aes3k' if i == 'pixman'
imaging_dep = dependency('pixman-1', required: false) imaging_dep = dependency('pixman-1', required: false)
if not imaging_dep.found() if not imaging_dep.found()
error('pixman is required for @0@ and possibly others'.format(driver)) error('pixman is required for @0@ and possibly others'.format(driver))
@@ -304,9 +265,11 @@ if install_udev_rules
endif endif
endif endif
# FIXME: All the drivers should be fixed by adjusting the byte order.
# See https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/236
supported_drivers = [] supported_drivers = []
foreach driver: drivers foreach driver: drivers
if build_machine.endian() == 'little' or driver in endian_independent_drivers if build_machine.endian() == 'little' or not drivers_info[driver].get('endian_dependent', false)
supported_drivers += driver supported_drivers += driver
else else
warning('Driver @0@ is not supported by big endian cpu @1@. Please, fix it!'.format( warning('Driver @0@ is not supported by big endian cpu @1@. Please, fix it!'.format(