blob: 9783d77e6a732b943318420487fd5eb8868597a9 [file] [log] [blame]
# Copyright (c) 2021 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//args.gni")
import("//build_overrides/bouffalolab_iot_sdk.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/mbedtls.gni")
import("//build_overrides/openthread.gni")
import("${chip_root}/src/lib/lib.gni")
declare_args() {
bl_iot_sdk_root = "${chip_root}/third_party/bouffalolab/repo"
enable_cdc_module = false
}
assert(bl_iot_sdk_root != "", "bl_iot_sdk_root must be specified")
# Defines an Bouffa Lab IOT SDK build target.
#
# Parameters:
# bl_iot_sdk_root - The location of Bouffalo Lab IOT SDK.
# sources - The sources files to build.
template("bl_iot_sdk") {
sdk_target_name = target_name
if (defined(invoker.enable_zigbee)) {
enable_zigbee = invoker.enable_zigbee
}
if (defined(invoker.enable_cdc_module)) {
enable_cdc_module = invoker.enable_cdc_module
}
config("${sdk_target_name}_config") {
defines = [
"__FILENAME__=strrchr(__FILE__,'/')?strrchr(__FILE__,'/')+1:__FILE__",
"ARCH_RISCV",
"BL702=BL702",
"BFLB_USE_ROM_DRIVER=1",
"BFLB_USE_HAL_DRIVER=1",
]
include_dirs = []
if (defined(invoker.include_dirs)) {
include_dirs += invoker.include_dirs
}
if (defined(invoker.defines)) {
defines += invoker.defines
}
cflags_c = [
"-include",
rebase_path("${invoker.freertos_config}", root_build_dir),
]
cflags_cc = [
"-include",
rebase_path("${invoker.freertos_config}", root_build_dir),
]
}
config("${sdk_target_name}_config_soc") {
include_dirs =
[ "${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_rf/include" ]
}
source_set("${sdk_target_name}_soc") {
defines = [ "CFG_CPP_ENABLE" ]
sources = [
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702/evb/src/boot/gcc/start.S",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702/evb/src/debug.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702/evb/src/strntoumax.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702/evb/src/vprint.c",
]
libs = [ "${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_rf/lib/libbl702_rf.a" ]
cflags_c = [ "-Wno-format-truncation" ]
configs += [
":${sdk_target_name}_config",
":${sdk_target_name}_config_freertos",
]
}
config("${sdk_target_name}_config_BSP_Driver") {
include_dirs = [
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/inc",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/regs",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/startup",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/risc-v/Core/Include",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/MCU_Common/soft_crc",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/MCU_Common/misc",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Common/platform/",
]
defines = [ "bl706_iot" ]
}
source_set("${sdk_target_name}_BSP_Driver") {
sources = [
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_acomp.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_adc.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_aon.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_cam.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_clock.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_common.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_dac.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_dma.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_ef_ctrl.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_emac.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_glb.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_hbn.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_i2c.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_i2c_gpio_sim.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_i2s.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_ir.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_kys.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_l1c.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_mjpeg.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_pds.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_psram.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_pwm.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_qdec.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_romapi.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sec_dbg.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sec_eng.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sf_cfg.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sf_cfg_ext.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sf_ctrl.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sflash.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_sflash_ext.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_spi.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_timer.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_uart.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_usb.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_xip_sflash.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_std/BSP_Driver/std_drv/src/bl702_xip_sflash_ext.c",
]
configs += [ ":${sdk_target_name}_config_freertos" ]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_BSP_Driver",
]
cflags_c = [
"-Wno-sign-compare",
"-Wno-unused-variable",
]
}
config("${sdk_target_name}_config_freertos") {
include_dirs = [
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/config",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/portable/GCC/RISC-V",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/panic",
]
}
source_set("${sdk_target_name}_bl702_freertos") {
defines = [ "portasmHANDLE_INTERRUPT=interrupt_entry" ]
include_dirs = [ "${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/portable/GCC/RISC-V/chip_specific_extensions/RV32F_float_abi_single" ]
sources = [
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/event_groups.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/list.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/misaligned/fp_asm.S",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/misaligned/misaligned_ldst.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/panic/panic_c.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/portable/GCC/RISC-V/port.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/portable/GCC/RISC-V/portASM.S",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/portable/MemMang/heap_5.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/portable/MemMang/heap_5_psram.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/queue.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/stream_buffer.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/tasks.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_freertos/timers.c",
]
cflags_c = [
"-Wno-sign-compare",
"-Wno-old-style-declaration",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_freertos",
]
}
source_set("${sdk_target_name}_bl702_usb_cdc") {
include_dirs = [
"${bl_iot_sdk_root}/components/fs/vfs/include",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Inc",
]
sources = [
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/bl702_hal_pcd.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/bl702_usb_cdc.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usb_device.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_cdc.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_cdc_if.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_conf.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_core.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_ctlreq.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_desc.c",
"${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_usb_cdc/Src/usbd_ioreq.c",
]
cflags_c = [ "-Wno-sign-compare" ]
configs += [
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_freertos",
":${sdk_target_name}_config_stage",
]
public_configs = [ ":${sdk_target_name}_config" ]
}
config("${sdk_target_name}_config_hosal") {
include_dirs = [
"${bl_iot_sdk_root}/components/platform/hosal/include",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/include",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal",
"${bl_iot_sdk_root}/components/platform/hosal/sec_common",
]
cflags_cc = [ "-Wno-literal-suffix" ]
}
source_set("${sdk_target_name}_hosal") {
defines = [ "CFG_USE_XTAL32K=1" ]
sources = [
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_adc.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_boot2.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_chip.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_dma.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_efuse.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_emac.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_flash.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_gpio.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_hbn.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_ir.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_irq.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_pds.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_psram.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_pwm.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_rtc.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_sec.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_sys.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_timer.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_uart.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_wdt.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_wireless.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_board.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_boot2.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_button.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_gpio.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_hbn.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_hwtimer.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_pds.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_sys.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hal_tcal.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_adc.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_dac.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_dma.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_flash.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_gpio.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_i2c.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_ota.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_pwm.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_rng.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_rtc.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_spi.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_timer.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_uart.c",
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/hosal_wdg.c",
"${bl_iot_sdk_root}/components/platform/hosal/sec_common/bl_sec_aes.c",
"${bl_iot_sdk_root}/components/platform/hosal/sec_common/bl_sec_common.c",
"${bl_iot_sdk_root}/components/platform/hosal/sec_common/bl_sec_pka.c",
"${bl_iot_sdk_root}/components/platform/hosal/sec_common/bl_sec_sha.c",
]
cflags_c = [
"-Wno-unused-variable",
"-Wno-sign-compare",
"-Wno-enum-conversion",
"-Wno-old-style-declaration",
"-Wno-stringop-overflow",
"-Wno-format-truncation",
"-Wno-shadow",
]
configs += [
":${sdk_target_name}_config_soc",
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_stage",
":${sdk_target_name}_config_sys",
":${sdk_target_name}_config_fs",
":${sdk_target_name}_config_utils",
":${sdk_target_name}_config_freertos",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_hosal",
]
}
config("${sdk_target_name}_config_fs") {
include_dirs = [ "${bl_iot_sdk_root}/components/fs/vfs/include" ]
}
source_set("${sdk_target_name}_fs") {
sources = [
"${bl_iot_sdk_root}/components/fs/vfs/device/vfs_adc.c",
"${bl_iot_sdk_root}/components/fs/vfs/device/vfs_gpio.c",
"${bl_iot_sdk_root}/components/fs/vfs/device/vfs_pwm.c",
"${bl_iot_sdk_root}/components/fs/vfs/device/vfs_spi.c",
"${bl_iot_sdk_root}/components/fs/vfs/device/vfs_uart.c",
"${bl_iot_sdk_root}/components/fs/vfs/src/vfs.c",
"${bl_iot_sdk_root}/components/fs/vfs/src/vfs_file.c",
"${bl_iot_sdk_root}/components/fs/vfs/src/vfs_inode.c",
"${bl_iot_sdk_root}/components/fs/vfs/src/vfs_register.c",
]
cflags_c = [
"-Wno-sign-compare",
"-Wno-builtin-declaration-mismatch",
]
configs += [
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_stage",
":${sdk_target_name}_config_fs",
":${sdk_target_name}_config_utils",
":${sdk_target_name}_config_freertos",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_fs",
]
}
source_set("${sdk_target_name}_libc") {
sources = [
"${bl_iot_sdk_root}/components/libc/newlibc/assert.c",
"${bl_iot_sdk_root}/components/libc/newlibc/stdatomic.c",
"${bl_iot_sdk_root}/components/libc/newlibc/syscalls.c",
]
cflags_c = [ "-Wno-builtin-declaration-mismatch" ]
configs += [ ":${sdk_target_name}_config_freertos" ]
public_configs = [ ":${sdk_target_name}_config" ]
}
config("${sdk_target_name}_config_stage") {
include_dirs = [
"${bl_iot_sdk_root}/components/stage/easyflash4/inc",
"${bl_iot_sdk_root}/components/stage/yloop/include",
"${bl_iot_sdk_root}/components/stage/blog",
"${bl_iot_sdk_root}/components/stage/yloop/include/aos",
"${bl_iot_sdk_root}/components/stage/blfdt/inc",
"${bl_iot_sdk_root}/components/stage/cli/cli/include",
]
}
source_set("${sdk_target_name}_stage") {
sources = [
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_addresses.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_empty_tree.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_overlay.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_ro.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_rw.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_strerror.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_sw.c",
"${bl_iot_sdk_root}/components/stage/blfdt/src/fdt_wip.c",
"${bl_iot_sdk_root}/components/stage/blog/blog.c",
"${bl_iot_sdk_root}/components/stage/easyflash4/src/easyflash.c",
"${bl_iot_sdk_root}/components/stage/easyflash4/src/ef_env.c",
"${bl_iot_sdk_root}/components/stage/easyflash4/src/ef_port.c",
"${bl_iot_sdk_root}/components/stage/easyflash4/src/ef_utils.c",
"${bl_iot_sdk_root}/components/stage/yloop/src/aos_freertos.c",
"${bl_iot_sdk_root}/components/stage/yloop/src/device.c",
"${bl_iot_sdk_root}/components/stage/yloop/src/local_event.c",
"${bl_iot_sdk_root}/components/stage/yloop/src/select.c",
"${bl_iot_sdk_root}/components/stage/yloop/src/yloop.c",
]
defines = [ "EF_ENV_CACHE_TABLE_SIZE=32" ]
cflags_c = [ "-Wno-sign-compare" ]
configs += [
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_freertos",
":${sdk_target_name}_config_fs",
":${sdk_target_name}_config_sys",
":${sdk_target_name}_config_utils",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_stage",
]
}
config("${sdk_target_name}_config_sys") {
include_dirs = [
"${bl_iot_sdk_root}/components/sys/bloop/bloop/include",
"${bl_iot_sdk_root}/components/sys/bloop/looprt/include",
"${bl_iot_sdk_root}/components/sys/bloop/loopset/include",
"${bl_iot_sdk_root}/components/sys/blmtd/include",
]
}
source_set("${sdk_target_name}_sys") {
include_dirs = [ "${bl_iot_sdk_root}/components/sys/bltime/include" ]
sources = [
"${bl_iot_sdk_root}/components/sys/blmtd/bl_mtd.c",
"${bl_iot_sdk_root}/components/sys/bltime/bl_sys_time.c",
]
configs += [
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_utils",
":${sdk_target_name}_config_freertos",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_sys",
]
}
config("${sdk_target_name}_config_utils") {
include_dirs = [ "${bl_iot_sdk_root}/components/utils/include/" ]
}
source_set("${sdk_target_name}_utils") {
sources = [
"${bl_iot_sdk_root}/components/utils/src/utils_base64.c",
"${bl_iot_sdk_root}/components/utils/src/utils_crc.c",
"${bl_iot_sdk_root}/components/utils/src/utils_dns.c",
"${bl_iot_sdk_root}/components/utils/src/utils_fec.c",
"${bl_iot_sdk_root}/components/utils/src/utils_getopt.c",
"${bl_iot_sdk_root}/components/utils/src/utils_hex.c",
"${bl_iot_sdk_root}/components/utils/src/utils_hexdump.c",
"${bl_iot_sdk_root}/components/utils/src/utils_hmac_sha1_fast.c",
"${bl_iot_sdk_root}/components/utils/src/utils_list.c",
"${bl_iot_sdk_root}/components/utils/src/utils_log.c",
"${bl_iot_sdk_root}/components/utils/src/utils_memp.c",
"${bl_iot_sdk_root}/components/utils/src/utils_notifier.c",
"${bl_iot_sdk_root}/components/utils/src/utils_psk_fast.c",
"${bl_iot_sdk_root}/components/utils/src/utils_rbtree.c",
"${bl_iot_sdk_root}/components/utils/src/utils_sha256.c",
"${bl_iot_sdk_root}/components/utils/src/utils_string.c",
"${bl_iot_sdk_root}/components/utils/src/utils_time.c",
"${bl_iot_sdk_root}/components/utils/src/utils_tlv_bl.c",
]
cflags_c = [
"-Wno-shadow",
"-Wno-sign-compare",
]
configs += [
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_utils",
":${sdk_target_name}_config_freertos",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_utils",
]
}
config("${sdk_target_name}_config_mbedtls") {
include_dirs = [
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/include",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port",
]
defines = [ "MBEDTLS_CONFIG_FILE=\"bl702-chip-mbedtls-config.h\"" ]
}
source_set("${sdk_target_name}_mbedtls") {
include_dirs =
[ "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library" ]
sources = [
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/aes_alt.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/bignum_hw.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/ecp_alt.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/ecp_curves_alt.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/hw_common.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/hw_common.h",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/sha1_alt.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_acc/sha256_alt.c",
]
sources += [
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/bignum_ext.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/hw_entropy_poll.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/mbedtls_port_mem.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/net_sockets.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/port/pkparse.c",
]
sources += [
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/aes.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/asn1parse.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/asn1write.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/base64.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/bignum.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ccm.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/cipher.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/cipher_wrap.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/cmac.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/constant_time.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ctr_drbg.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecdh.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecdsa.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecp.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecp_curves.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/entropy.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/hkdf.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/hmac_drbg.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/md.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/oid.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/pem.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/pk.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/pk_wrap.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/pkcs5.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/pkwrite.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/platform.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/platform_util.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/sha256.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/sha512.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/x509_create.c",
"${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/x509write_csr.c",
]
cflags_c = [
"-Wno-sign-compare",
"-Wno-implicit-function-declaration",
]
configs += [
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_freertos",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_mbedtls",
]
}
config("${sdk_target_name}_ble_config") {
include_dirs = [
"${bl_iot_sdk_root}/components/network/ble/blecontroller/ble_inc",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/include",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/include/bluetooth",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/include/drivers/bluetooth",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/include",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/include/zephyr",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/port/include",
"${bl_iot_sdk_root}/components/network/ble/blestack/src",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host",
]
defines = [
"BFLB_BLE",
"CONFIG_SET_TX_PWR",
"CFG_CON=1",
"CFG_BLE",
"CFG_SLEEP",
"CFG_BT_RESET",
"CONFIG_BT_PERIPHERAL=1",
"CFG_BLE_TX_BUFF_DATA=2",
"CONFIG_BT_GATT_DYNAMIC_DB",
"CONFIG_BT_GATT_SERVICE_CHANGED",
"CONFIG_BT_SETTINGS_CCC_LAZY_LOADING",
"CONFIG_BT_KEYS_OVERWRITE_OLDEST",
"CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS",
"CONFIG_BT_BONDABLE",
"CONFIG_BT_ASSERT",
"CFG_BLE_STACK_DBG_PRINT",
]
cflags_cc = [ "-Wno-conversion" ]
}
source_set("${sdk_target_name}_ble") {
defines = [
"CONFIG_BT_L2CAP_DYNAMIC_CHANNEL",
"CONFIG_BT_GATT_CLIENT",
"CONFIG_BT_CONN=1",
"CONFIG_BT_GATT_DIS_PNP",
"CONFIG_BT_GATT_DIS_SERIAL_NUMBER",
"CONFIG_BT_GATT_DIS_FW_REV",
"CONFIG_BT_GATT_DIS_HW_REV",
"CONFIG_BT_GATT_DIS_SW_REV",
"CONFIG_BT_ECC",
"CONFIG_BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING",
"CONFIG_BT_HCI_VS_EVT_USER",
"CONFIG_BT_SETTINGS_USE_PRINTK",
]
libs = [ "${bl_iot_sdk_root}/components/network/ble/blecontroller_702_m1s1/lib/libblecontroller_702_m1s1.a" ]
include_dirs = [
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/include",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/include/misc",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/bl_hci_wrapper",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/tinycrypt/include/tinycrypt",
]
sources = [
"${bl_iot_sdk_root}/components/network/ble/blestack/src/bl_hci_wrapper/bl_hci_wrapper.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/atomic_c.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/buf.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/dec.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/log.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/poll.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/common/work_q.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/hci_onchip/hci_driver.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/att.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/bl_host_assist.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/conn.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/crypto.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/gatt.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/hci_core.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/l2cap.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/settings.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/host/uuid.c",
"${bl_iot_sdk_root}/components/network/ble/blestack/src/port/bl_port.c",
]
configs += [
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_freertos",
":${sdk_target_name}_config_utils",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_ble_config",
]
cflags_c = [
"-Wno-sign-compare",
"-Wno-unused-but-set-variable",
"-Wno-misleading-indentation",
"-Wno-format",
"-Wno-format-nonliteral",
"-Wno-format-security",
"-Wno-unused-function",
"-Wno-incompatible-pointer-types",
"-Wno-discarded-qualifiers",
]
}
config("${sdk_target_name}_config_openthread_port") {
defines = [ "OT_FREERTOS_ENABLE=1" ]
include_dirs = [
"${chip_root}/platform/bl702",
"${chip_root}/third_party/openthread/repo/src/core",
"${chip_root}/third_party/openthread/repo/examples/platforms",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/include",
]
include_dirs += [
"${bl_iot_sdk_root}/components/network/thread/openthread_utils/include",
]
}
source_set("${sdk_target_name}_openthread_port") {
import("//build_overrides/openthread.gni")
include_dirs = [
"${bl_iot_sdk_root}/components/network/lmac154/include",
"${bl_iot_sdk_root}/components/network/thread/openthread_port",
"${openthread_root}/examples/platforms/utils/",
"${openthread_root}/examples",
]
sources = [
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_alarm.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_diag.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_entropy.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_linkmetric.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_logging.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_misc.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_radio.c",
"${bl_iot_sdk_root}/components/network/thread/openthread_port/ot_settings.c",
]
libs = [
"${bl_iot_sdk_root}/components/network/lmac154/lib/liblmac154.a",
"${bl_iot_sdk_root}/components/network/thread/openthread_utils_bl702/lib/libopenthread_utils_bl702.a",
]
configs += [
":${sdk_target_name}_config_BSP_Driver",
":${sdk_target_name}_config_utils",
":${sdk_target_name}_config_hosal",
":${sdk_target_name}_config_stage",
":${sdk_target_name}_config_freertos",
]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_openthread_port",
]
public_deps = [
"${chip_root}/third_party/openthread/platforms:libopenthread-platform-utils",
"${openthread_root}/src/core:libopenthread_core_headers",
]
}
config("${sdk_target_name}_config_lwip_port") {
_include_dirs = [
"${bl_iot_sdk_root}/components/network/lwip/lwip-port",
"${bl_iot_sdk_root}/components/network/lwip/lwip-port/config",
"${bl_iot_sdk_root}/components/stage/virt_net/include",
"${bl_iot_sdk_root}/components/stage/throughput/bl702/inc",
]
defines = [
"TCPIP_THREAD_PRIO=24",
"CFG_ETHERNET_ENABLE=1",
]
cflags = []
foreach(include_dir, _include_dirs) {
cflags += [ "-isystem" + rebase_path(include_dir, root_build_dir) ]
}
cflags += [
"-Wno-conversion",
"-Wno-unused-function",
]
}
source_set("${sdk_target_name}_lwip_port") {
defines = [
"SPI_WIFI_RXBUFF_IN_PSRAM=1",
"VIRT_NET_SPI_RX_TASK_PRIORITY=25",
]
# include_dirs = [
# "${bl_iot_sdk_root}/components/network/lwip/lwip-port/arch",
# "${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS",
# "${bl_iot_sdk_root}/components/stage/throughput"
# ]
# sources = [
# "${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS/ethernetif.c",
# "${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS/sys_arch.c"
# ]
# sources += [
# "${bl_iot_sdk_root}/components/stage/throughput/bl702/src/tp_spi_master.c",
# ]
# sources += [
# "${bl_iot_sdk_root}/components/stage/virt_net/src/virt_net.c",
# "${bl_iot_sdk_root}/components/stage/virt_net/src/virt_net_spi.c",
# ]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_lwip_port",
":${sdk_target_name}_config_lwip",
]
cflags = [ "-Wno-sign-compare" ]
}
config("${sdk_target_name}_config_lwip") {
include_dirs = [
"${bl_iot_sdk_root}/components/network/lwip/lwip-port/config",
"${bl_iot_sdk_root}/components/network/lwip/src/include",
"${bl_iot_sdk_root}/components/network/lwip/src/include/lwip/apps",
"${bl_iot_sdk_root}/components/network/lwip/lwip-port",
"${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS",
"${bl_iot_sdk_root}/components/network/lwip/lwip-port/hook",
]
defines = [
"LWIP_IPV6=1",
"LWIP_IPV4=1",
"LWIP_IPV6_DHCP6=1",
"LWIP_IPV6_SCOPES=0",
"PBUF_POOL_SIZE=20",
"PBUF_POOL_BUFSIZE=(1280+150)",
]
}
source_set("${sdk_target_name}_lwip") {
sources = [
"${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS/ethernetif.c",
"${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS/sys_arch.c",
]
sources += [
"${bl_iot_sdk_root}/components/network/lwip/src/netif/bridgeif.c",
"${bl_iot_sdk_root}/components/network/lwip/src/netif/bridgeif_fdb.c",
"${bl_iot_sdk_root}/components/network/lwip/src/netif/ethernet.c",
"${bl_iot_sdk_root}/components/network/lwip/src/netif/slipif.c",
"${bl_iot_sdk_root}/components/network/lwip/src/netif/zepif.c",
]
sources += [
"${bl_iot_sdk_root}/components/network/lwip/src/core/def.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/dns.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/inet_chksum.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/init.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ip.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/mem.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/memp.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/netif.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/pbuf.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/raw.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/stats.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/sys.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/tcp.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/tcp_in.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/tcp_out.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/timeouts.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/udp.c",
]
sources += [
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/autoip.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/dhcp.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/etharp.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/icmp.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/igmp.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/ip4.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/ip4_addr.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv4/ip4_frag.c",
]
sources += [
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/dhcp6.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/ethip6.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/icmp6.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/inet6.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/ip6.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/ip6_addr.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/ip6_frag.c",
#"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/ip6_route_table.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/mld6.c",
"${bl_iot_sdk_root}/components/network/lwip/src/core/ipv6/nd6.c",
]
sources += [
"${bl_iot_sdk_root}/components/network/lwip/src/api/api_lib.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/api_msg.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/err.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/if_api.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/netbuf.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/netifapi.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/sockets.c",
"${bl_iot_sdk_root}/components/network/lwip/src/api/tcpip.c",
]
sources +=
[ "${bl_iot_sdk_root}/components/network/lwip/src/apps/mdns/mdns.c" ]
configs += [ ":${sdk_target_name}_config_freertos" ]
public_configs = [
":${sdk_target_name}_config",
":${sdk_target_name}_config_lwip",
]
}
group(sdk_target_name) {
public_deps = [
":${sdk_target_name}_BSP_Driver",
":${sdk_target_name}_bl702_freertos",
":${sdk_target_name}_ble",
":${sdk_target_name}_fs",
":${sdk_target_name}_hosal",
":${sdk_target_name}_libc",
":${sdk_target_name}_mbedtls",
":${sdk_target_name}_soc",
":${sdk_target_name}_stage",
":${sdk_target_name}_sys",
":${sdk_target_name}_utils",
]
if (chip_enable_openthread) {
public_deps += [ ":${sdk_target_name}_openthread_port" ]
}
if (chip_enable_wifi) {
public_deps += [ ":${sdk_target_name}_lwip_port" ]
public_deps += [ ":${sdk_target_name}_lwip" ]
}
if (enable_cdc_module) {
public_deps += [ ":${sdk_target_name}_bl702_usb_cdc" ]
}
}
}