pebble/src/fw/drivers/wscript_build
2025-01-27 11:38:16 -08:00

1156 lines
26 KiB
Python

mcu_family = bld.env.MICRO_FAMILY
if mcu_family not in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.fatal('src/fw/drivers/wscript: '
'Unknown MICRO_FAMILY {}'.format(mcu_family))
if bld.is_tintin():
bld(
name='drivers',
use=[
'driver_ambient_light',
'driver_backlight',
'driver_battery',
'driver_button',
'driver_clocksource',
'driver_display',
'driver_flash',
'driver_gpio_defaults',
'driver_hci_passthrough',
'driver_imu',
'driver_led_controller',
'driver_mcu',
'driver_mpu',
'driver_otp',
'driver_pwr',
'driver_rng',
'driver_rtc',
'driver_system_flash',
'driver_task_watchdog',
'driver_uart',
'driver_vibe',
'driver_voltage_monitor',
'driver_watchdog',
],
)
elif bld.is_silk():
bld(
name='drivers',
use=[
'driver_accessory',
'driver_ambient_light',
'driver_backlight',
'driver_battery',
'driver_button',
'driver_clocksource',
'driver_crc',
'driver_display',
'driver_flash',
'driver_gpio_defaults',
'driver_hci_passthrough',
'driver_hrm',
'driver_imu',
'driver_led_controller',
'driver_mcu',
'driver_mic',
'driver_mpu',
'driver_otp',
'driver_pmic',
'driver_pwr',
'driver_rng',
'driver_rtc',
'driver_system_flash',
'driver_task_watchdog',
'driver_temperature',
'driver_uart',
'driver_vibe',
'driver_voltage_monitor',
'driver_watchdog',
],
)
elif bld.is_snowy_compatible():
bld(
name='drivers',
use=[
'driver_accessory',
'driver_ambient_light',
'driver_backlight',
'driver_battery',
'driver_button',
'driver_clocksource',
'driver_display',
'driver_flash',
'driver_fpc_pinstrap',
'driver_gpio_defaults',
'driver_hci_passthrough',
'driver_imu',
'driver_led_controller',
'driver_mcu',
'driver_mic',
'driver_mpu',
'driver_otp',
'driver_pmic',
'driver_pwr',
'driver_rng',
'driver_rtc',
'driver_system_flash',
'driver_task_watchdog',
'driver_temperature',
'driver_touch',
'driver_uart',
'driver_vibe',
'driver_voltage_monitor',
'driver_watchdog',
],
)
elif bld.is_cutts():
bld(
name='drivers',
use=[
'driver_accessory',
'driver_ambient_light',
'driver_backlight',
'driver_battery',
'driver_button',
'driver_clocksource',
'driver_display',
'driver_flash',
'driver_gpio_defaults',
'driver_hci_passthrough',
'driver_imu',
'driver_led_controller',
'driver_mcu',
'driver_mic',
'driver_mpu',
'driver_otp',
'driver_pmic',
'driver_pwr',
'driver_rng',
'driver_rtc',
'driver_system_flash',
'driver_task_watchdog',
'driver_temperature',
'driver_touch',
'driver_uart',
'driver_vibe',
'driver_voltage_monitor',
'driver_watchdog',
],
)
elif bld.is_robert():
bld(
name='drivers',
use=[
'driver_accessory',
'driver_ambient_light',
'driver_backlight',
'driver_battery',
'driver_button',
'driver_clocksource',
'driver_display',
'driver_flash',
'driver_gpio_defaults',
'driver_hci_passthrough',
'driver_hrm',
'driver_imu',
'driver_led_controller',
'driver_mcu',
'driver_mic',
'driver_mpu',
'driver_otp',
'driver_pmic',
'driver_pwr',
'driver_rng',
'driver_rtc',
'driver_system_flash',
'driver_task_watchdog',
'driver_temperature',
'driver_uart',
'driver_vibe',
'driver_voltage_monitor',
'driver_watchdog',
],
)
## ----------
if bld.is_snowy_compatible() or bld.is_silk() or bld.is_cutts() or bld.is_robert():
bld.objects(
name='driver_accessory',
source=[
'accessory.c',
],
use=[
'driver_dma',
'driver_exti',
'driver_gpio',
'driver_periph_config',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_ambient_light',
source=[
'ambient_light.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F4', 'STM32F7'):
bld.objects(
name='driver_temperature',
source=[
'stm32f4/temperature.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
# FIXME: break dependency on driver_led_controller when not needed
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_backlight',
source=[
'backlight.c',
],
use=[
'driver_pwm',
'driver_gpio',
'driver_led_controller',
'fw_includes',
'root_includes',
],
)
if bld.env.QEMU:
bld.objects(
name='driver_battery',
source=[
'battery/battery_adc_conversion.c',
'battery/battery_common.c',
'qemu/qemu_battery.c',
],
use=[
'driver_qemu_serial',
'driver_qemu_settings',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif bld.is_tintin():
bld.objects(
name='driver_battery',
source=[
'battery/battery_adc_conversion.c',
'battery/battery_common.c',
'battery/battery_tintin.c',
],
use=[
'driver_exti',
'driver_gpio',
'driver_otp',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
else:
bld.objects(
name='driver_battery',
source=[
'battery/battery_adc_conversion.c',
'battery/battery_common.c',
'battery/battery_pmic.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_pmic',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if (bld.is_snowy_compatible() or bld.is_cutts() or bld.is_robert()) and not bld.env.QEMU:
bld.objects(
name='driver_bmi160',
source=[
'imu/bmi160/bmi160.c',
'imu/bmi160/bmi160_spi.c',
],
use=[
'driver_exti',
'driver_rtc',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_silk() and not bld.env.QEMU:
bld.objects(
name='driver_bma255',
source=[
'imu/bma255/bma255.c',
'imu/bma255/bma255_spi.c',
],
use=[
'driver_gpio',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_button',
source=[
'button.c',
'debounced_button.c',
],
use=[
'driver_exti',
'driver_gpio',
'driver_periph_config',
'driver_timer',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_clocksource',
source=[
'stm32f2/clocksource.c',
],
use=[
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_tintin() or bld.is_silk():
bld.objects(
name='driver_display',
source=[
'display/sharp_ls013b7dh01/sharp_ls013b7dh01.c',
],
use=[
'driver_dma',
'driver_gpio',
'driver_periph_config',
'driver_spi',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif bld.is_snowy_compatible() or bld.is_cutts() or bld.is_robert():
bld.objects(
name='driver_display',
source=[
'display/ice40lp/ice40lp.c',
'display/ice40lp/ice40lp_internal.c',
'display/ice40lp/snowy_boot.c',
],
use=[
'driver_dma',
'driver_exti',
'driver_gpio',
'driver_periph_config',
'driver_pmic',
'driver_spi',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_dma',
source=[
'stm32f2/dma.c',
],
use=[
'driver_periph_config',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_exti',
source=[
'stm32f2/exti.c',
],
use=[
'driver_periph_config',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_tintin():
bld.objects(
name='driver_flash',
source=[
'flash/flash_crc.c',
'flash/micron_n25q/cd_flash_driver.c',
'flash/micron_n25q/flash.c',
'flash/micron_n25q/flash_core.c',
],
use=[
'driver_dma',
'driver_gpio',
'driver_periph_config',
'driver_spi',
'driver_watchdog',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif bld.is_silk():
bld.objects(
name='driver_flash',
source=[
'flash/cd_flash_driver.c',
'flash/flash_api.c',
'flash/flash_crc.c',
'flash/flash_erase.c',
'flash/mx25u.c',
'flash/nvram_bkp.c',
'flash/qspi_flash.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_qspi',
'driver_task_watchdog',
'driver_watchdog',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif bld.is_cutts() or bld.is_robert():
bld.objects(
name='driver_flash',
source=[
'flash/cd_flash_driver.c',
'flash/flash_api.c',
'flash/flash_crc.c',
'flash/flash_erase.c',
'flash/mt25q.c',
'flash/nvram_bkp.c',
'flash/qspi_flash.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_qspi',
'driver_task_watchdog',
'driver_watchdog',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif bld.is_snowy_compatible():
bld.objects(
name='driver_flash',
source=[
'flash/cd_flash_driver.c',
'flash/flash_api.c',
'flash/flash_crc.c',
'flash/flash_erase.c',
'flash/nvram_bkp.c',
'flash/spansion_s29vs.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_task_watchdog',
'driver_watchdog',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_snowy_compatible():
bld.objects(
name='driver_fpc_pinstrap',
source=[
'fpc_pinstrap/fpc_pinstrap_snowy.c',
],
use=[
'driver_gpio',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_gpio',
source=[
'stm32f2/gpio.c',
],
use=[
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family == 'STM32F7':
bld.objects(
name='driver_pwr',
source=[
'stm32f7/pwr.c',
],
use=[
'fw_includes',
],
)
elif mcu_family == 'STM32F4':
bld.objects(
name='driver_pwr',
source=[
'stm32f4/pwr.c',
],
use=[
'fw_includes',
'root_includes',
],
)
else:
bld.objects(
name='driver_pwr',
source=[
'stm32f2/pwr.c',
],
use=[
'fw_includes',
'root_includes',
],
)
# FIXME: More of a board config than driver
if mcu_family == 'STM32F2':
bld.objects(
name='driver_gpio_defaults',
source=[
'stm32f2/gpio_defaults.c',
],
use=[
'driver_gpio',
],
)
elif mcu_family in ('STM32F4', 'STM32F7'):
bld.objects(
name='driver_gpio_defaults',
source=[
'stm32f4/gpio_defaults.c',
],
use=[
'driver_gpio',
],
)
if mcu_family in ('STM32F2', 'STM32F4'):
bld.objects(
name='driver_i2c',
source=[
'i2c.c',
'stm32f2/i2c_hal.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_rtc',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif mcu_family in ('STM32F7',):
bld.objects(
name='driver_i2c',
source=[
'i2c.c',
'stm32f7/i2c_hal.c',
'stm32f7/i2c_timingr.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_rtc',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.env.QEMU:
mag_driver = ('driver_mag3110' if bld.capability('HAS_MAGNETOMETER')
else 'driver_mag_null')
bld.objects(
name='driver_imu',
source=[
'imu/imu_qemu.c',
'qemu/qemu_accel.c',
],
use=[
mag_driver,
'driver_qemu_serial',
'fw_includes',
'root_includes',
],
)
elif bld.is_tintin():
bld.objects(
name='driver_imu',
source=[
'imu/imu_tintin.c',
],
use=[
'driver_lis3dh',
'driver_mag3110',
'fw_includes',
'root_includes',
],
)
elif bld.is_snowy_compatible() or bld.is_cutts() or bld.is_robert():
bld.objects(
name='driver_imu',
source=[
'imu/imu_snowy_evt2.c',
],
use=[
'driver_bmi160',
'driver_mag3110',
'fw_includes',
'root_includes',
],
)
elif bld.is_silk():
bld.objects(
name='driver_imu',
source=[
'imu/imu_silk.c',
],
use=[
'driver_bma255',
'driver_mag_null',
'fw_includes',
'root_includes',
],
)
if bld.env.BOARD == "v2_0":
bld.objects(
name='driver_led_controller',
source=[
'led_controller.c',
],
use=[
'driver_gpio',
'driver_i2c',
'driver_periph_config',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_tintin() and not bld.env.QEMU:
bld.objects(
name='driver_lis3dh',
source=[
'imu/lis3dh/config.c',
'imu/lis3dh/lis3dh.c',
],
use=[
'driver_exti',
'driver_gpio',
'driver_i2c',
'driver_periph_config',
'driver_vibe',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_tintin() or bld.is_snowy_compatible() or bld.is_cutts() or bld.is_robert():
bld.objects(
name='driver_mag3110',
source=[
'imu/mag3110/mag3110.c',
],
use=[
'driver_exti',
'driver_gpio',
'driver_i2c',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if not bld.capability('HAS_MAGNETOMETER'):
bld.objects(
name='driver_mag_null',
source=[
'imu/mag_null.c',
],
use=[
'fw_includes',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_mcu',
source=[
'stm32f2/mcu.c',
],
use=[
'freertos',
],
)
if bld.capability('HAS_MICROPHONE'):
bld.objects(
name='driver_mic',
source=[
'mic/mic_command.c',
],
use=[
'driver_accessory',
'driver_dma',
'driver_gpio',
'driver_periph_config',
'driver_pmic',
'fw_includes',
'root_includes',
'freertos',
'stm32_stdlib',
],
)
# FIXME: make generic to Cortex-M
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_mpu',
source=[
'mpu.c',
],
use=[
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_otp',
source=[
'stm32f2/otp.c',
],
use=[
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_periph_config',
source=[
'stm32f2/periph_config.c',
],
use=[
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_snowy_compatible() or bld.is_cutts() or bld.is_robert():
bld.objects(
name='driver_pmic',
source=[
'pmic/max14690_pmic.c',
],
use=[
'driver_exti',
'driver_gpio',
'driver_i2c',
'driver_periph_config',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif bld.is_silk():
bld.objects(
name='driver_pmic',
source=[
'pmic/as3701b.c',
],
use=[
'driver_gpio',
'driver_i2c',
'fw_includes',
'root_includes',
],
)
if bld.env.QEMU:
bld.objects(
name='driver_qemu_serial',
source=[
'qemu/qemu_serial.c',
'qemu/qemu_serial_util.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
'root_includes',
],
)
if bld.env.QEMU:
bld.objects(
name='driver_qemu_settings',
source=[
'qemu/qemu_settings.c',
],
use=[
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4'):
bld.objects(
name='driver_pwm',
source=[
'stm32f2/pwm.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
]
)
elif mcu_family in ('STM32F7',):
bld.objects(
name='driver_pwm',
source=[
'stm32f7/pwm.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
]
)
if 'STM32F412xG' in bld.env.DEFINES or mcu_family in ('STM32F7',):
bld.objects(
name='driver_qspi',
source=[
'stm32f412/qspi.c',
],
use=[
'driver_dma',
'driver_periph_config',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if 'STM32F412xG' in bld.env.DEFINES:
bld.objects(
name='driver_voltage_monitor',
source=[
'stm32f412/voltage_monitor.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
]
)
elif mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_voltage_monitor',
source=[
'stm32f2/voltage_monitor.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
]
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_rng',
source=[
'stm32f2/rng.c',
],
use=[
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family == 'STM32F2':
bld.objects(
name='driver_rtc',
source=[
'rtc_common.c',
'stm32f2/rtc.c',
'stm32f2/rtc_calibration.c',
],
use=[
'driver_clocksource',
'driver_gpio',
'driver_pwr',
'driver_periph_config',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif mcu_family in ('STM32F4', 'STM32F7'):
bld.objects(
name='driver_rtc',
source=[
'rtc_common.c',
'stm32f4/rtc.c',
],
use=[
'driver_pwr',
'driver_clocksource',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_spi',
source=[
'stm32f2/spi.c',
'stm32f2/spi_legacy.c'
],
use=[
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family == 'STM32F7':
bld.objects(
name='driver_spi',
source=[
'stm32f2/spi.c',
],
use=[
'fw_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_system_flash',
source=[
'stm32f2/system_flash.c',
],
use=[
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
# FIXME: not really a driver
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_task_watchdog',
source=[
'task_watchdog.c',
],
use=[
'driver_periph_config',
'driver_watchdog',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_timer',
source=[
'stm32f2/timer.c',
],
use=[
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if bld.is_cutts():
if bld.env.QEMU:
bld.objects(
name='driver_touch',
source=[
'qemu/qemu_touch.c',
],
)
else:
bld.objects(
name='driver_touch',
source=bld.path.ant_glob('touch/ewd1000/*.c'),
use=[
'freertos',
'fw_includes',
'root_includes',
],
)
if mcu_family in ('STM32F2', 'STM32F4'):
bld.objects(
name='driver_uart',
source=[
'stm32f2/uart.c',
],
use=[
'driver_gpio',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
elif mcu_family == 'STM32F7':
bld.objects(
name='driver_uart',
source=[
'stm32f7/uart.c',
],
use=[
'driver_gpio',
'freertos',
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_vibe',
source=[
'vibe.c',
],
use=[
'driver_gpio',
'driver_periph_config',
'driver_pwm'
'freertos',
'fw_includes',
'root_includes',
],
)
if mcu_family in ('STM32F2', 'STM32F4', 'STM32F7'):
bld.objects(
name='driver_watchdog',
source=[
'stm32f2/watchdog.c',
],
use=[
'fw_includes',
'root_includes',
'stm32_stdlib',
],
)
# vim:filetype=python