def build(bld):
    # FreeRTOS vendor code
    if bld.env.MICRO_FAMILY == 'STM32F2':
        freertos_port_name = 'ARM_CM3'
    elif bld.env.MICRO_FAMILY == 'STM32F4':
        freertos_port_name = 'ARM_CM4F'
    elif bld.env.MICRO_FAMILY == 'STM32F7':
        freertos_port_name = 'ARM_CM4F' # fix to CM7 when we have it
    elif bld.env.MICRO_FAMILY == 'NRF52840':
        freertos_port_name = 'ARM_CM4F'
    elif bld.env.MICRO_FAMILY == 'SF32LB52':
        freertos_port_name = 'ARM_CM33'
    else:
        bld.fatal('Unrecognized env.MICRO_FAMILY value %r' %
                  bld.env.MICRO_FAMILY)

    freertos_includes = [
        '.',
        'FreeRTOS-Kernel/FreeRTOS/Source/include',
        f'FreeRTOS-Kernel/FreeRTOS/Source/portable/GCC/{freertos_port_name}'
    ]

    freertos_source_paths = [
        'FreeRTOS-Kernel/FreeRTOS/Source',
        f'FreeRTOS-Kernel/FreeRTOS/Source/portable/GCC/{freertos_port_name}'
    ]
    freertos_sources = sum([bld.path.ant_glob(d + '/*.c')
                           for d in freertos_source_paths], [])
    freertos_defines = []

    # FIXME(SF32LB52): Add valid regions once MPU can be used
    # This currently results in 0 regions!
    if bld.env.MICRO_FAMILY == 'SF32LB52':
        freertos_defines += [
            'FREERTOS_FIRST_MPU_REGION=8',
            'FREERTOS_LAST_MPU_REGION=7',
        ]

    bld(export_includes=freertos_includes,
        export_defines=freertos_defines,
        name='freertos_includes')

    bld.stlib(source=freertos_sources,
              target='freertos',
              use=['pblibc',
                   'fw_includes',
                   'freertos_includes'],
              export_defines='GCC_{}'.format(freertos_port_name))

# vim:filetype=python


