#!/usr/bin/env python
# encoding: utf-8

import fnmatch
import sys

try:
    import em
except ImportError:
    print("you need to install empy with 'python -m pip install empy'")
    sys.exit(1)

try:
    import pexpect
except ImportError:
    print("you need to install pexpect with 'python -m pip install pexpect'")
    sys.exit(1)
    

def build(bld):
    targets = bld.ap_periph_boards()
    valid_target = False
    for t in targets:
        if fnmatch.fnmatch(bld.env.BOARD, t):
            valid_target = True
    if not valid_target:
        return

    if bld.env.AP_PERIPH_HEAVY:
        libraries = bld.ap_get_all_libraries()
        bld.env.DEFINES += ['HAL_BOARD_AP_PERIPH_HEAVY']
    else:
        libraries = ['AP_Common',
                     'AP_HAL',
                     'AP_HAL_Empty',
                     'AP_Math',
                     'AP_BoardConfig',
                     'AP_BattMonitor',
                     'AP_CANManager',
                     'AP_Param',
                     'StorageManager',
                     'AP_FlashStorage',
                     'AP_RAMTRON',
                     'AP_GPS',
                     'AP_SerialManager',
                     'AP_RTC',
                     'AP_Compass',
                     'AP_Baro',
                     'Filter',
                     'AP_InternalError',
                     'AP_Airspeed',
                     'AP_RangeFinder',
                     'AP_ROMFS',
                     'AP_MSP',
                     'SRV_Channel',
                     'AP_Notify',
                     'AP_SerialLED',
                     'AP_Filesystem',
                     'AP_InertialSensor',
                     'AP_AccelCal',
                     'AP_Logger',
                     'AC_PID',
                     'AP_BLHeli',
                     'AP_ESC_Telem',
                     'AP_Stats',
                     'AP_EFI',
                     'AP_CheckFirmware',
                     ]
    bld.ap_stlib(
        name= 'AP_Periph_libs',
        ap_vehicle='AP_Periph',
        ap_libraries= libraries,
        exclude_src=[
            'libraries/AP_HAL_ChibiOS/Storage.cpp'
        ]
    )

    # build external libcanard library
    bld.stlib(source=['../../modules/DroneCAN/libcanard/canard.c'] +
                     bld.bldnode.ant_glob('modules/DroneCAN/libcanard/dsdlc_generated/src/**.c'),
              includes=[bld.env.SRCROOT + '/modules/DroneCAN/libcanard', 
                        bld.env.BUILDROOT + '/modules/DroneCAN/libcanard/dsdlc_generated/include'],
              target='libcanard')

    bld.ap_program(
        program_name='AP_Periph',
        use=['AP_Periph_libs', 'libcanard'],
        program_groups=['bin','AP_Periph'],
        includes=[bld.env.SRCROOT + '/modules/DroneCAN/libcanard',
                  bld.env.BUILDROOT + '/modules/DroneCAN/libcanard/dsdlc_generated/include']
    )
