def options(opt):
    opt.add_option(
        "--nimble-hci-sf32lb52-trace",
        choices=['none', 'binary', 'log'],
        default='none',
        help="Enable SF32LB52 HCI tracing",
    )

def configure(conf):
    if (
        conf.env.MICRO_FAMILY == 'SF32LB52' and
        conf.options.nimble_hci_sf32lb52_trace != 'none'
    ):
        conf.env.append_value('DEFINES', ['NIMBLE_HCI_SF32LB52_TRACE'])
        if conf.options.nimble_hci_sf32lb52_trace == 'log':
            conf.env.append_value('DEFINES', ['NIMBLE_HCI_SF32LB52_TRACE_LOG'])
        else:
            conf.env.append_value('DEFINES', ['NIMBLE_HCI_SF32LB52_TRACE_BINARY'])

def build(bld):
    nimble_includes = [
        'mynewt-nimble/nimble/include',
        'mynewt-nimble/nimble/host/include',
        'mynewt-nimble/nimble/host/services/ans/include',
        'mynewt-nimble/nimble/host/services/bas/include',
        'mynewt-nimble/nimble/host/services/bleuart/include',
        'mynewt-nimble/nimble/host/services/gap/include',
        'mynewt-nimble/nimble/host/services/gatt/include',
        'mynewt-nimble/nimble/host/services/ias/include',
        'mynewt-nimble/nimble/host/services/dis/include',
        'mynewt-nimble/nimble/host/services/lls/include',
        'mynewt-nimble/nimble/host/services/tps/include',
        'mynewt-nimble/nimble/host/util/include',
        'mynewt-nimble/nimble/transport/include',
        'mynewt-nimble/nimble/transport/common/hci_h4/include',
        'mynewt-nimble/porting/nimble/include',
        'mynewt-nimble/ext/tinycrypt/include',
        'port/include',
    ]

    nimble_sources = bld.path.ant_glob(
        [
            'mynewt-nimble/porting/nimble/src/*.c',
            'mynewt-nimble/nimble/src/*.c',
            'mynewt-nimble/nimble/host/src/*.c',
            'mynewt-nimble/nimble/host/util/src/*.c',
            'mynewt-nimble/nimble/host/services/bas/src/*.c',
            'mynewt-nimble/nimble/host/services/gap/src/*.c',
            'mynewt-nimble/nimble/host/services/gatt/src/*.c',
            'mynewt-nimble/nimble/host/services/dis/src/*.c',
            'mynewt-nimble/nimble/transport/src/*.c',
            'mynewt-nimble/nimble/transport/common/hci_h4/src/*.c',
            'mynewt-nimble/ext/tinycrypt/src/*.c',
            'port/src/npl_os_pebble.c',
        ],
        excl = [
            'mynewt-nimble/nimble/host/src/ble_gatts_lcl.c', # has a duplicate define, not needed anyway
            'mynewt-nimble/porting/nimble/src/hal_timer.c',
        ]
    )

    nimble_env = bld.env.derive()

    nimble_env.append_value('CFLAGS', [
        '-Wno-pointer-arith',
        '-Wno-unused-function',
        '-Wno-sign-compare',
        '-Wno-old-style-declaration',
        '-Wimplicit-fallthrough=1',
    ])

    nimble_export_defines = []

    nimble_use =[
        'fw_includes',
        'freertos',
    ]

    if bld.env.bt_controller == 'cc2564x':
        nimble_sources += [
            'transport/hci_uart_transport.c',
            'transport/chipset/cc2564.c',
        ]

        nimble_includes = [
            'port/include/cc2564x',
        ] + nimble_includes

    elif bld.env.bt_controller == 'nrf52':
        nimble_sources += bld.path.ant_glob([
            'mynewt-nimble/nimble/controller/src/*.c',
            'mynewt-nimble/nimble/drivers/nrf5x/src/*.c',
            'mynewt-nimble/nimble/drivers/nrf5x/src/nrf52/*.c',
            'mynewt-nimble/porting/nimble/src/hal_timer.c',
            'port/src/nrf52.c',
        ])

        nimble_includes = [
            'port/include/nrf52',
            'mynewt-nimble/nimble/controller/include',
            'mynewt-nimble/nimble/drivers/nrf5x/include',
        ] + nimble_includes

        nimble_env.append_value('DEFINES', [
            'FREERTOS=1',
            'PEBBLEOS',
            'NRF52_SERIES',
            'NIMBLE_CFG_CONTROLLER=1',
        ])

        nimble_export_defines.append('NIMBLE_CFG_CONTROLLER=1')

        nimble_use.append('hal_nordic')

    elif bld.env.bt_controller == 'sf32lb52':
        nimble_sources += [
            'transport/hci_sf32lb52.c',
            '../nonfree/pebbleos-nonfree/sf32lb52/lcpu_52x.c',
        ]

        nimble_includes = [
            'port/include/sf32lb52',
        ] + nimble_includes

        nimble_use.append('hal_sifli')


    bld.objects(
        source=nimble_sources,
        target='nimble',
        defines=['FILE_LOG_COLOR=LOG_COLOR_BLUE'],
        use=nimble_use,
        includes=nimble_includes,
        export_includes=nimble_includes,
        export_defines=nimble_export_defines,
        env=nimble_env,
    )
