blob: 7bed70cf01ec28f498eb304f71d9305b8a81fae4 [file] [log] [blame]
# Copyright (c) 2020 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("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/cyw30739_sdk.gni")
import("${chip_root}/src/platform/device.gni")
declare_args() {
# Location of the CYW30739 SDK.
cyw30739_sdk_root = "${cyw30739_sdk_build_root}/repos"
cyw30739_sdk_verbose = false
cyw30739_sdk_debug = 0
}
assert(cyw30739_sdk_root != "", "cyw30739_sdk_root must be specified")
cyw30739_sdk_bsp_design_modus_dir =
"${cyw30739_sdk_build_root}/bsp_design_modus"
cyw30739_sdk_baselib_dir = "${cyw30739_sdk_root}/30739A0/COMPONENT_30739A0"
cyw30739_sdk_board_dir = "${cyw30739_sdk_root}/CYW930739M2EVB-01"
cyw30739_sdk_include_dir = "${cyw30739_sdk_root}/btsdk-include"
cyw30739_sdk_patch_dir =
"${cyw30739_sdk_baselib_dir}/internal/30739A0/patches_CYW930739M2EVB_01"
cyw30739_sdk_platform_dir = "${cyw30739_sdk_baselib_dir}/platforms"
cyw30739_sdk_scripts_dir = "${cyw30739_sdk_baselib_dir}/make/scripts"
cyw30739_sdk_btp_file = "${cyw30739_sdk_build_root}/flash.btp"
cyw30739_sdk_patch_sym_file = "${cyw30739_sdk_patch_dir}/patch.sym"
cyw30739_sdk_tools_dir = "${cyw30739_sdk_root}/btsdk-tools/"
if (host_os == "linux") {
cyw30739_sdk_tools_dir += "Linux64"
} else if (host_os == "mac") {
cyw30739_sdk_tools_dir += "OSX"
} else if (host_os == "win") {
cyw30739_sdk_tools_dir += "Windows"
}
btp_reader_args =
[ "--btp=" + rebase_path(cyw30739_sdk_btp_file, root_build_dir) ]
if (chip_enable_ota_requestor) {
btp_reader_args += [ "--enable_ota" ]
}
btp = exec_script("${cyw30739_sdk_build_root}/btp_reader.py",
btp_reader_args,
"json",
[ cyw30739_sdk_btp_file ])
cyw30739_sdk_crt_entry = "spar_crt_setup"
template("cyw30739_sdk_script") {
action(target_name) {
forward_variables_from(invoker,
[
"deps",
"script_file_name",
"sources",
"outputs",
])
script_file = "${cyw30739_sdk_scripts_dir}/${script_file_name}"
script = "${build_root}/gn_run_binary.py"
inputs = [ script_file ]
args = [
"bash",
"--norc",
"--noprofile",
rebase_path(script_file, root_build_dir),
"--scripts=" + rebase_path(cyw30739_sdk_scripts_dir, root_build_dir),
]
if (defined(invoker.args)) {
args += invoker.args
}
if (cyw30739_sdk_verbose) {
args += [ "--verbose" ]
}
}
}
# Defines a CYW30739 SDK build target.
#
# Parameters:
# cyw30739_sdk_root - The location of the erf32 SDK.
# sources - The sources files to build.
template("cyw30739_sdk") {
if (defined(invoker.cyw30739_sdk_root)) {
cyw30739_sdk_root = invoker.cyw30739_sdk_root
}
assert(cyw30739_sdk_root != "", "cyw30739_sdk_root must be specified")
config("${target_name}_config") {
include_dirs = []
defines = []
libs = []
if (defined(invoker.include_dirs)) {
include_dirs += invoker.include_dirs
}
if (defined(invoker.defines)) {
defines += invoker.defines
}
include_dirs += [
"${cyw30739_sdk_baselib_dir}/WICED/common",
"${cyw30739_sdk_baselib_dir}/include",
"${cyw30739_sdk_baselib_dir}/include/hal",
"${cyw30739_sdk_baselib_dir}/include/internal",
"${cyw30739_sdk_baselib_dir}/include/stack",
"${cyw30739_sdk_baselib_dir}/platforms",
"${cyw30739_sdk_board_dir}",
"${cyw30739_sdk_build_root}/include",
"${cyw30739_sdk_include_dir}",
]
cflags = [ "--specs=nano.specs" ]
if (is_debug) {
cflags += [ "-Wno-unused" ]
}
ldflags = [
"--specs=nano.specs",
"-Wl,--entry=${cyw30739_sdk_crt_entry}",
"-Wl,--just-symbols=" +
rebase_path(cyw30739_sdk_patch_sym_file, root_build_dir),
"-nostartfiles",
]
}
cyw30739_sdk_script("${target_name}_gen_lib_installer") {
script_file_name = "bt_gen_lib_installer.bash"
lib_installer_file = "${root_gen_dir}/lib_installer.c"
args = [ "--out=" + rebase_path(lib_installer_file, root_build_dir) ]
outputs = [ lib_installer_file ]
}
source_set(target_name) {
sources = [
"${cyw30739_sdk_baselib_dir}/WICED/common/spar_setup.c",
"${cyw30739_sdk_baselib_dir}/platforms/platform_entropy.c",
"${cyw30739_sdk_baselib_dir}/platforms/platform_nvram.h",
"${cyw30739_sdk_baselib_dir}/platforms/platform_retarget_lock.h",
"${cyw30739_sdk_baselib_dir}/platforms/platform_stdio.c",
"${cyw30739_sdk_baselib_dir}/platforms/wiced_platform.c",
"${cyw30739_sdk_baselib_dir}/platforms/wiced_platform_bt_cfg.c",
"${cyw30739_sdk_baselib_dir}/platforms/wiced_platform_bt_cfg.h",
"${cyw30739_sdk_baselib_dir}/platforms/wiced_platform_memory.c",
"${cyw30739_sdk_baselib_dir}/platforms/wiced_platform_os.c",
"${cyw30739_sdk_board_dir}/gpio_button.c",
"${cyw30739_sdk_board_dir}/gpio_button.h",
"${cyw30739_sdk_board_dir}/platform.c",
"${cyw30739_sdk_board_dir}/platform_button.c",
"${cyw30739_sdk_board_dir}/wiced_platform.h",
"${cyw30739_sdk_board_dir}/wiced_platform_memory.h",
"${cyw30739_sdk_board_dir}/wiced_platform_os.h",
"${cyw30739_sdk_bsp_design_modus_dir}/cycfg_notices.h",
"${cyw30739_sdk_bsp_design_modus_dir}/cycfg_pins.c",
"${cyw30739_sdk_bsp_design_modus_dir}/cycfg_pins.h",
"${cyw30739_sdk_bsp_design_modus_dir}/cycfg_routing.h",
"${cyw30739_sdk_build_root}/include/auto_flags.h",
"${cyw30739_sdk_build_root}/include/wiced_button_manager.h",
"${cyw30739_sdk_build_root}/include/wiced_led_manager.h",
"${cyw30739_sdk_build_root}/src/platform_retarget_lock.c",
"${cyw30739_sdk_build_root}/src/wiced_button_manager.c",
"${cyw30739_sdk_build_root}/src/wiced_led_manager.c",
]
if (chip_enable_ota_requestor) {
sources += [
"${cyw30739_sdk_build_root}/include/ota_fw_upgrade.h",
"${cyw30739_sdk_build_root}/src/ota_fw_upgrade.c",
]
}
sources += get_target_outputs(":${target_name}_gen_lib_installer")
if (defined(invoker.sources)) {
sources += invoker.sources
}
defines = [
"CHIP_HAVE_CONFIG_H=1",
"CY_PLATFORM_SWDCK=WICED_P05",
"CY_PLATFORM_SWDIO=WICED_P03",
"ENABLE_DEBUG=${cyw30739_sdk_debug}",
"SPAR_CRT_SETUP=${cyw30739_sdk_crt_entry}",
"XS_LOCATION_ACTIVE=${btp.ConfigXS1Location}",
"XS_LOCATION_UPGRADE=${btp.ConfigXS2Location}",
]
if (chip_enable_ota_requestor) {
defines += [ "BLE_OTA_FW_UPGRADE=1" ]
}
public_configs = [ ":${target_name}_config" ]
deps = [ ":${target_name}_gen_lib_installer" ]
}
}
template("cyw30739_sdk_pre_build") {
action(target_name) {
script_file = "${cyw30739_sdk_build_root}/scripts/wiced-gen-ld.pl"
script = "${build_root}/gn_run_binary.py"
inputs = [
"${cyw30739_sdk_build_root}/btp_reader.py",
script_file,
]
sources = [ cyw30739_sdk_btp_file ]
outputs = [ invoker.ldscript_file ]
args = [
"perl",
"-I",
rebase_path(cyw30739_sdk_scripts_dir, root_build_dir),
rebase_path(script_file, root_build_dir),
"FLASH0_BEGIN_ADDR=${btp.DLConfigSSLocation}",
"FLASH0_LENGTH=0x00100000",
"XIP_DS_OFFSET=${btp.ConfigXS1DS1Offset}",
"XIP_LEN=${btp.ConfigXS1Length}",
"SRAM_BEGIN_ADDR=0x00200000",
"SRAM_LENGTH=0x00070000",
"AON_AREA_END=0x00284000",
"ISTATIC_BEGIN=0x500C00",
"ISTATIC_LEN=0x400",
"NUM_PATCH_ENTRIES=256",
"BTP=" + rebase_path(cyw30739_sdk_btp_file, root_build_dir),
rebase_path(cyw30739_sdk_patch_sym_file, root_build_dir),
"out=" + rebase_path(invoker.ldscript_file, root_build_dir),
]
}
}
template("cyw30739_sdk_post_build") {
output_base_path = "${root_out_dir}/${invoker.output_base_name}"
elf = "${output_base_path}.elf"
hex = "${output_base_path}_download.hex"
ds_hex = "${output_base_path}.ds.hex"
xs_hex = "${output_base_path}.xs.hex"
ss_cgs = "${output_base_path}.ss.cgs"
cgs = "${output_base_path}.cgs"
cx_cgs = "${output_base_path}.cx.cgs"
static_config = "${output_base_path}.static_config.txt"
hdf = "${root_out_dir}/configdef30739A0.hdf"
patched_cgs_args =
exec_script("${build_root}/gn_run_binary.py",
[
"perl",
rebase_path("${cyw30739_sdk_scripts_dir}/wiced-bdaddr.pl",
root_build_dir),
"30739A0",
rebase_path(cyw30739_sdk_btp_file, root_build_dir),
"-O",
"DLConfigBD_ADDRBase:default",
],
"list lines",
[ "${cyw30739_sdk_scripts_dir}/wiced-bdaddr.pl" ])
cgs_args = []
foreach(arg, patched_cgs_args) {
cgs_args += string_split(arg)
}
action(target_name) {
script = "${cyw30739_sdk_build_root}/merge_hex.py"
outputs = [ hex ]
sources = [
ds_hex,
xs_hex,
]
args = [
"--output=" + rebase_path(hex, root_build_dir),
"--ds_hex=" + rebase_path(ds_hex, root_build_dir),
"--xs_hex=" + rebase_path(xs_hex, root_build_dir),
]
deps = [
":${target_name}_gen_ds_hex",
":${target_name}_gen_xs_hex",
]
data_deps = [
":${target_name}_btp",
":${target_name}_disassemble",
":${target_name}_hci_id",
":${target_name}_minidriver",
]
}
action("${target_name}_gen_ds_hex") {
cgs_map = "${cgs}.map"
script = "${build_root}/gn_run_binary.py"
outputs = [
cgs_map,
ds_hex,
]
sources = [
cx_cgs,
cyw30739_sdk_btp_file,
ss_cgs,
]
args = [
rebase_path("${cyw30739_sdk_tools_dir}/CGS/cgs", root_build_dir),
"-D",
rebase_path(root_out_dir, root_build_dir),
"-M",
rebase_path(cgs_map, root_build_dir),
"-I",
rebase_path(ds_hex, root_build_dir),
"-B",
rebase_path(cyw30739_sdk_btp_file, root_build_dir),
"--ss-cgs",
rebase_path(ss_cgs, root_build_dir),
"--cgs-files",
rebase_path(cx_cgs, root_build_dir),
]
args += cgs_args
deps = [
":${invoker.target_name}_compress_cgs_data",
":${invoker.target_name}_gen_ss_cgs",
]
}
action("${target_name}_gen_xs_hex") {
script = "${build_root}/gn_run_binary.py"
outputs = [ xs_hex ]
sources = [ elf ]
args = [
"arm-none-eabi-objcopy",
"--only-section=.app_xip_area",
"--output-target=ihex",
rebase_path(elf, root_build_dir),
rebase_path(xs_hex, root_build_dir),
]
deps = [ ":${invoker.executable_target}" ]
}
action("${target_name}_compress_cgs_data") {
script = "${cyw30739_sdk_build_root}/compress_cgs_data.py"
outputs = [ cx_cgs ]
sources = [ cgs ]
args = [
"--output=" + rebase_path(cx_cgs, root_build_dir),
"--input=" + rebase_path(cgs, root_build_dir),
"--lzss_tool=" +
rebase_path(cyw30739_sdk_tools_dir + "/lzss/lzss", root_build_dir),
]
deps = [ ":${invoker.target_name}_gen_cgs" ]
}
action("${target_name}_gen_ss_cgs") {
hdf_in = "${cyw30739_sdk_baselib_dir}/internal/30739A0/configdef30739A0.hdf"
script_file = "${cyw30739_sdk_scripts_dir}/wiced-gen-ss-cgs.pl"
script = "${build_root}/gn_run_binary.py"
inputs = [ script_file ]
sources = [
hdf_in,
static_config,
]
outputs = [
hdf,
ss_cgs,
]
args = [
"perl",
"-I",
rebase_path(cyw30739_sdk_scripts_dir, root_build_dir),
rebase_path(script_file, root_build_dir),
"config=" + rebase_path(static_config, root_build_dir),
"hdf_in=" + rebase_path(hdf_in, root_build_dir),
"hdf_out=" + rebase_path(hdf, root_build_dir),
"cgs_out=" + rebase_path(ss_cgs, root_build_dir),
]
args += cgs_args
deps = [ ":${invoker.target_name}_static_config" ]
}
action("${target_name}_gen_cgs") {
script_file = "${cyw30739_sdk_scripts_dir}/wiced-gen-cgs.pl"
script = "${build_root}/gn_run_binary.py"
inputs = [ script_file ]
sources = [
"${cyw30739_sdk_patch_dir}/patch.cgs",
"${cyw30739_sdk_platform_dir}/platform.cgs",
"${cyw30739_sdk_platform_dir}/platform_xip.cgs",
cyw30739_sdk_btp_file,
elf,
hdf,
invoker.ldscript_file,
]
outputs = [ cgs ]
args = [
"perl",
"-I",
rebase_path(cyw30739_sdk_scripts_dir, root_build_dir),
rebase_path(script_file, root_build_dir),
"${cyw30739_sdk_crt_entry}.entry",
"out=" + rebase_path(cgs, root_build_dir),
]
foreach(source, sources) {
args += [ rebase_path(source, root_build_dir) ]
}
deps = [
":${invoker.executable_target}",
":${invoker.pre_build_target}",
":${invoker.target_name}_gen_ss_cgs",
]
}
action("${target_name}_disassemble") {
asm = "${output_base_path}.asm"
script = "${build_root}/gn_run_binary.py"
outputs = [ asm ]
sources = [ elf ]
args = [
"bash",
"--norc",
"--noprofile",
"-c",
"arm-none-eabi-objdump --disassemble " +
rebase_path(elf, root_build_dir) + " > " +
rebase_path(asm, root_build_dir),
]
deps = [ ":${invoker.executable_target}" ]
}
copy("${target_name}_static_config") {
sources = [ "static_config.txt" ]
outputs = [ static_config ]
}
copy("${target_name}_btp") {
sources = [ "${cyw30739_sdk_btp_file}" ]
outputs = [ "${output_base_path}.btp" ]
}
copy("${target_name}_hci_id") {
sources = [ "${cyw30739_sdk_platform_dir}/IDFILE.txt" ]
outputs = [ "${output_base_path}_hci_id.txt" ]
}
copy("${target_name}_minidriver") {
sources = [ "${cyw30739_sdk_platform_dir}/minidriver.hex" ]
outputs = [ "${root_out_dir}/{{source_file_part}}" ]
}
write_file("${root_out_dir}/chipload_flags.txt", "-NOHCIRESET")
}
template("cyw30739_sdk_ota_image") {
action(target_name) {
forward_variables_from(invoker, [ "deps" ])
script = "${cyw30739_sdk_build_root}/gen_ota_image.py"
binary = "${root_out_dir}/${invoker.output_base_name}.bin"
hex = "${root_out_dir}/${invoker.output_base_name}_download.hex"
outputs = [ binary ]
inputs = [ hex ]
args = [
"--binary=" + rebase_path(binary, root_build_dir),
"--hex=" + rebase_path(hex, root_build_dir),
"--lzss_tool=" +
rebase_path(cyw30739_sdk_tools_dir + "/lzss/lzss", root_build_dir),
"--active_xs_len=${btp.ConfigXS1Length}",
"--upgrade_xs_len=${btp.ConfigXS2Length}",
"--project_config=" +
rebase_path("//include/CHIPProjectConfig.h", root_build_dir),
"--ota_image_tool=" +
rebase_path("${chip_root}/src/app/ota_image_tool.py", root_build_dir),
]
}
}