Import("env")

env.Append(
    CPPPATH=[
        "#/lib/cmsis_core",
        "#/lib/stm32wb_cmsis/Include",
        "#/lib/stm32wb_hal/Inc",
        "#/lib/stm32wb_copro/wpan",
    ],
    CPPDEFINES=[
        "STM32WB",
        "STM32WB55xx",
        "USE_FULL_ASSERT",
        "USE_FULL_LL_DRIVER",
    ],
    SDK_HEADERS=env.GlobRecursive(
        "*_ll_*.h",
        Dir("stm32wb_hal/Inc"),
        exclude="*usb.h",
    ),
)

if env["RAM_EXEC"]:
    env.Append(
        CPPDEFINES=[
            "VECT_TAB_SRAM",
        ],
    )


libenv = env.Clone(FW_LIB_NAME="stm32wb")
libenv.Append(
    CPPPATH=[
        "#/lib/stm32wb_copro/wpan/ble",
        "#/lib/stm32wb_copro/wpan/ble/core",
        "#/lib/stm32wb_copro/wpan/interface/patterns/ble_thread",
        "#/lib/stm32wb_copro/wpan/interface/patterns/ble_thread/shci",
        "#/lib/stm32wb_copro/wpan/interface/patterns/ble_thread/tl",
        "#/lib/stm32wb_copro/wpan/utilities",
    ]
)
libenv.ApplyLibFlags()

sources = libenv.GlobRecursive("*_ll_*.c", "stm32wb_hal/Src/", exclude="*usb.c")
sources += Glob(
    "stm32wb_copro/wpan/interface/patterns/ble_thread/shci/*.c",
    source=True,
)
sources += Glob(
    "stm32wb_copro/wpan/interface/patterns/ble_thread/tl/*_tl*.c",
    exclude=[
        "stm32wb_copro/wpan/interface/patterns/ble_thread/tl/hci_tl_if.c",
        "stm32wb_copro/wpan/interface/patterns/ble_thread/tl/shci_tl_if.c",
    ],
    source=True,
)
sources += [
    "stm32wb_copro/wpan/interface/patterns/ble_thread/tl/tl_mbox.c",
    "stm32wb_copro/wpan/ble/svc/Src/svc_ctl.c",
    "stm32wb_copro/wpan/ble/core/auto/ble_gap_aci.c",
    "stm32wb_copro/wpan/ble/core/auto/ble_gatt_aci.c",
    "stm32wb_copro/wpan/ble/core/auto/ble_hal_aci.c",
    "stm32wb_copro/wpan/ble/core/auto/ble_hci_le.c",
    "stm32wb_copro/wpan/ble/core/auto/ble_l2cap_aci.c",
    "stm32wb_copro/wpan/ble/core/template/osal.c",
    "stm32wb_copro/wpan/utilities/dbg_trace.c",
    "stm32wb_copro/wpan/utilities/otp.c",
    "stm32wb_copro/wpan/utilities/stm_list.c",
]


lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources)
libenv.Install("${LIB_DIST_DIR}", lib)
Return("lib")