From 911010a9bf9ccdef992fef23934f364baebe2468 Mon Sep 17 00:00:00 2001 From: Jing Ma Date: Wed, 15 Apr 2020 09:14:36 +0800 Subject: [PATCH] [cmake] add support for kw41z (#4692) --- examples/platforms/kw41z/CMakeLists.txt | 83 +++++++++++++++++++ examples/platforms/kw41z/arm-none-eabi.cmake | 52 ++++++++++++ script/check-arm-build-cmake | 25 ++++++ third_party/CMakeLists.txt | 3 + third_party/nxp/CMakeLists.txt | 86 ++++++++++++++++++++ 5 files changed, 249 insertions(+) create mode 100644 examples/platforms/kw41z/CMakeLists.txt create mode 100644 examples/platforms/kw41z/arm-none-eabi.cmake create mode 100644 third_party/nxp/CMakeLists.txt diff --git a/examples/platforms/kw41z/CMakeLists.txt b/examples/platforms/kw41z/CMakeLists.txt new file mode 100644 index 000000000..578661e19 --- /dev/null +++ b/examples/platforms/kw41z/CMakeLists.txt @@ -0,0 +1,83 @@ +# +# Copyright (c) 2020, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +set(OT_PLATFORM_LIB "openthread-kw41z" PARENT_SCOPE) + +if(NOT OT_CONFIG) + set(OT_CONFIG "openthread-core-kw41z-config.h") + set(OT_CONFIG ${OT_CONFIG} PARENT_SCOPE) +endif() + +list(APPEND OT_PLATFORM_DEFINES + "OPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE=\"openthread-core-kw41z-config-check.h\"" +) +set(OT_PLATFORM_DEFINES ${OT_PLATFORM_DEFINES} PARENT_SCOPE) + +list(APPEND OT_PLATFORM_DEFINES "OPENTHREAD_PROJECT_CORE_CONFIG_FILE=\"${OT_CONFIG}\"") + +add_library(openthread-kw41z + alarm.c + diag.c + entropy.c + flash.c + logging.c + misc.c + radio.c + system.c + uart.c +) + +set_property(TARGET openthread-kw41z PROPERTY C_STANDARD 99) +target_link_libraries(openthread-kw41z PRIVATE nxp-kw41z-driver) +target_link_options(openthread-kw41z PRIVATE -T${PROJECT_SOURCE_DIR}/examples/platforms/kw41z/MKW41Z512xxx4.ld) +target_link_options(openthread-kw41z PRIVATE -Wl,-Map=$.map) + +target_compile_definitions(openthread-kw41z + PUBLIC + ${OT_PLATFORM_DEFINES} + PRIVATE + ${OT_PRIVATE_DEFINES} +) + +target_compile_options(openthread-kw41z + PRIVATE + ${OT_CFLAGS} + -Wno-unknown-pragmas + -Wno-sign-compare + -Wno-unused-function + -Wno-unused-parameter + -Wno-empty-body +) + +target_include_directories(openthread-kw41z + PRIVATE + ${OT_PUBLIC_INCLUDES} + ${OT_PRIVATE_INCLUDES} + ${PROJECT_SOURCE_DIR}/examples/platforms + ${PROJECT_SOURCE_DIR}/src/core +) diff --git a/examples/platforms/kw41z/arm-none-eabi.cmake b/examples/platforms/kw41z/arm-none-eabi.cmake new file mode 100644 index 000000000..f6e83f44b --- /dev/null +++ b/examples/platforms/kw41z/arm-none-eabi.cmake @@ -0,0 +1,52 @@ +# +# Copyright (c) 2020, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR ARM) + +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +set(CMAKE_CXX_COMPILER arm-none-eabi-g++) +set(CMAKE_ASM_COMPILER arm-none-eabi-as) +set(CMAKE_RANLIB arm-none-eabi-ranlib) + +set(COMMON_C_FLAGS "-mthumb -fdata-sections -ffunction-sections -mcpu=cortex-m0plus -mfloat-abi=soft") + +set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -std=gnu99") +set(CMAKE_CXX_FLAGS "${COMMON_C_FLAGS} -fno-exceptions -fno-rtti") +set(CMAKE_ASM_FLAGS "${COMMON_C_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${COMMON_C_FLAGS} -Wl,--gc-sections -specs=nano.specs -specs=nosys.specs") + +set(CMAKE_C_FLAGS_DEBUG "-Og -g") +set(CMAKE_CXX_FLAGS_DEBUG "-Og -g") +set(CMAKE_ASM_FLAGS_DEBUG "-g") +set(CMAKE_EXE_LINKER_FLAGS_DEBUG "") + +set(CMAKE_C_FLAGS_RELEASE "-Os") +set(CMAKE_CXX_FLAGS_RELEASE "-Os") +set(CMAKE_ASM_FLAGS_RELEASE "") +set(CMAKE_EXE_LINKER_FLAGS_RELEASE "") diff --git a/script/check-arm-build-cmake b/script/check-arm-build-cmake index c9beb2d9b..252fe6dcf 100755 --- a/script/check-arm-build-cmake +++ b/script/check-arm-build-cmake @@ -104,11 +104,36 @@ build_cc2652() cd .. } +build_kw41z() +{ + local options=("${OT_COMMON_OPTIONS[@]}") + + options+=( + "-DOT_PLATFORM=kw41z" + "-DCMAKE_TOOLCHAIN_FILE=examples/platforms/kw41z/arm-none-eabi.cmake" + "-DOT_COMMISSIONER=on" + "-DOT_DHCP6_CLIENT=on" + "-DOT_DHCP6_SERVER=on" + "-DOT_DNS_CLIENT=on" + "-DOT_JOINER=on" + "-DOT_SLAAC=on" + "-DCMAKE_BUILD_TYPE=Release" + ) + + reset_source + mkdir build + cd build + cmake -GNinja "${options[@]}" .. + ninja + cd .. +} + main() { build_cc1352 build_cc2538 build_cc2652 + build_kw41z } main "$@" diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 56bf9c7c9..b37f88b4f 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -29,3 +29,6 @@ if(OT_BUILTIN_MBEDTLS) add_subdirectory(mbedtls) endif() +if(OT_PLATFORM STREQUAL "kw41z") + add_subdirectory(nxp) +endif() diff --git a/third_party/nxp/CMakeLists.txt b/third_party/nxp/CMakeLists.txt new file mode 100644 index 000000000..d3cca3698 --- /dev/null +++ b/third_party/nxp/CMakeLists.txt @@ -0,0 +1,86 @@ +# +# Copyright (c) 2020, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +if(OT_PLATFORM STREQUAL "kw41z") + set_property(SOURCE ${PROJECT_SOURCE_DIR}/third_party/nxp/MKW41Z4/startup_MKW41Z4.S PROPERTY LANGUAGE C) + + add_library(nxp-kw41z-driver + MKW41Z4/clock_config.c + MKW41Z4/drivers/fsl_clock.c + MKW41Z4/drivers/fsl_flash.c + MKW41Z4/drivers/fsl_lpuart.c + MKW41Z4/drivers/fsl_gpio.c + MKW41Z4/drivers/fsl_pit.c + MKW41Z4/drivers/fsl_trng.c + MKW41Z4/startup_MKW41Z4.S + MKW41Z4/system_MKW41Z4.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_ant_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_ble_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_common_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_gfsk_bt_0p3_h_0p5_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_gfsk_bt_0p5_h_0p32_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_gfsk_bt_0p5_h_0p5_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_gfsk_bt_0p5_h_0p7_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_gfsk_bt_0p5_h_1p0_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_gfsk_bt_0p7_h_0p5_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_mode_datarate_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_msk_config.c + MKW41Z4/XCVR/cfgs_kw4x_3x_2x/fsl_xcvr_zgbe_config.c + MKW41Z4/XCVR/dbg_ram_capture.c + MKW41Z4/XCVR/fsl_xcvr.c + MKW41Z4/XCVR/fsl_xcvr_trim.c + MKW41Z4/XCVR/ifr_radio.c + ) + + target_compile_definitions(nxp-kw41z-driver + PUBLIC + ${OT_PLATFORM_DEFINES} + -DCPU_MKW41Z512VHT4 + PRIVATE + ${OT_PRIVATE_DEFINES} + ) + + target_compile_options(nxp-kw41z-driver + PRIVATE + ${OT_CFLAGS} + -Wno-unknown-pragmas + -Wno-sign-compare + -Wno-unused-function + -Wno-unused-parameter + -Wno-empty-body + ) + + target_include_directories(nxp-kw41z-driver + PUBLIC + CMSIS/Include + MKW41Z4 + MKW41Z4/drivers + MKW41Z4/XCVR + MKW41Z4/XCVR/cfgs_kw4x_3x_2x + ) +endif()