From 8d6610f3d599ada412f540112fc9442c6399b72e Mon Sep 17 00:00:00 2001 From: Moandor Date: Fri, 1 May 2020 01:42:44 +0800 Subject: [PATCH] [continuous-integration] add POSIX SPI build (#4913) This adds a CI build for POSIX platform with SPI enabled. Also fixed a build error in `spi_interface.cpp`. --- .github/workflows/build.yml | 2 +- script/check-posix-build | 1 + script/check-posix-build-autotools | 6 ++- script/check-posix-build-cmake | 69 +++++++++++++++++++++++++++ src/posix/platform/CMakeLists.txt | 10 ++-- src/posix/platform/hdlc_interface.cpp | 8 ++-- src/posix/platform/spi_interface.cpp | 2 +- 7 files changed, 86 insertions(+), 12 deletions(-) create mode 100755 script/check-posix-build-cmake diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5805520be..9bf2fa65b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -154,7 +154,7 @@ jobs: - name: Bootstrap run: | sudo apt update - sudo apt --no-install-recommends install -y clang-${{ matrix.clang_ver }} clang++-${{ matrix.clang_ver }} g++-multilib + sudo apt --no-install-recommends install -y clang-${{ matrix.clang_ver }} clang++-${{ matrix.clang_ver }} g++-multilib ninja-build - name: Build run: | script/check-posix-build diff --git a/script/check-posix-build b/script/check-posix-build index 3e96afa94..5be4ed8fb 100755 --- a/script/check-posix-build +++ b/script/check-posix-build @@ -32,6 +32,7 @@ set -euxo pipefail main() { "$(dirname "$0")"/check-posix-build-autotools + "$(dirname "$0")"/check-posix-build-cmake } main "$@" diff --git a/script/check-posix-build-autotools b/script/check-posix-build-autotools index c32c86209..dbf17d7cb 100755 --- a/script/check-posix-build-autotools +++ b/script/check-posix-build-autotools @@ -41,8 +41,10 @@ build() reset_source make -f src/posix/Makefile-posix - reset_source - make -f src/posix/Makefile-posix RCP_SP=1 + if [[ $OSTYPE != "darwin"* ]] ; then + reset_source + make -f src/posix/Makefile-posix RCP_BUS=spi + fi } main() diff --git a/script/check-posix-build-cmake b/script/check-posix-build-cmake new file mode 100755 index 000000000..2e99267a7 --- /dev/null +++ b/script/check-posix-build-cmake @@ -0,0 +1,69 @@ +#!/bin/bash +# +# 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 -euxo pipefail + +readonly OT_BUILDDIR="$(pwd)/build" +readonly OT_SRCDIR="$(pwd)" + +reset_source() +{ + git checkout -- . + git clean -xfd +} + +build() +{ + local options=("$@") + + options+=( + "-DOT_COMPILE_WARNING_AS_ERROR=on" + "-DOT_PLATFORM=posix" + ) + + mkdir -p $OT_BUILDDIR + cd $OT_BUILDDIR + cmake -GNinja "${options[@]}" $OT_SRCDIR + ninja + + cd $OT_SRCDIR +} + +main() +{ + reset_source + build + + if [[ $OSTYPE != "darwin"* ]] ; then + reset_source + build -DOT_POSIX_CONFIG_RCP_BUS=SPI + fi +} + +main "$@" diff --git a/src/posix/platform/CMakeLists.txt b/src/posix/platform/CMakeLists.txt index 6af5f42f1..84ee193a6 100644 --- a/src/posix/platform/CMakeLists.txt +++ b/src/posix/platform/CMakeLists.txt @@ -38,15 +38,17 @@ if(OT_POSIX_VIRTUAL_TIME) list(APPEND OT_PRIVATE_DEFINES "OPENTHREAD_POSIX_VIRTUAL_TIME=1") endif() +set(OT_POSIX_CONFIG_RCP_BUS "" CACHE STRING "RCP bus type") +if(OT_POSIX_CONFIG_RCP_BUS) + list(APPEND OT_PLATFORM_DEFINES "OPENTHREAD_POSIX_CONFIG_RCP_BUS=OT_POSIX_RCP_BUS_${OT_POSIX_CONFIG_RCP_BUS}") +endif() + if(NOT OT_CONFIG) set(OT_CONFIG "openthread-core-posix-config.h") set(OT_CONFIG ${OT_CONFIG} PARENT_SCOPE) endif() -list(APPEND OT_PLATFORM_DEFINES - "OPENTHREAD_POSIX=1" - "OPENTHREAD_POSIX_CONFIG_RCP_BUS=OT_POSIX_RCP_BUS_UART" -) +list(APPEND OT_PLATFORM_DEFINES "OPENTHREAD_POSIX=1") set(OT_PLATFORM_DEFINES ${OT_PLATFORM_DEFINES} PARENT_SCOPE) diff --git a/src/posix/platform/hdlc_interface.cpp b/src/posix/platform/hdlc_interface.cpp index 8facabb5d..7aaa204af 100644 --- a/src/posix/platform/hdlc_interface.cpp +++ b/src/posix/platform/hdlc_interface.cpp @@ -421,10 +421,10 @@ int HdlcInterface::OpenFile(const char *aFile, const char *aConfig) { struct termios tios; - int speed = 115200; - int cstopb = 1; - char parity = 'N'; - char flow = 'N'; + unsigned int speed = 115200; + int cstopb = 1; + char parity = 'N'; + char flow = 'N'; VerifyOrExit((rval = tcgetattr(fd, &tios)) == 0, OT_NOOP); diff --git a/src/posix/platform/spi_interface.cpp b/src/posix/platform/spi_interface.cpp index c82724581..be2909fc1 100644 --- a/src/posix/platform/spi_interface.cpp +++ b/src/posix/platform/spi_interface.cpp @@ -401,7 +401,7 @@ otError SpiInterface::PushPullSpi(void) SuccessOrExit(error = mRxFrameBuffer.SetSkipLength(kSpiFrameHeaderSize)); // Check whether the remaining frame buffer has enough space to store the data to be received. - VerifyOrExit(mRxFrameBuffer.GetFrameMaxLength() >= spiTransferBytes + mSpiAlignAllowance); + VerifyOrExit(mRxFrameBuffer.GetFrameMaxLength() >= spiTransferBytes + mSpiAlignAllowance, OT_NOOP); // Point to the start of the reserved buffer. spiRxFrameBuffer = mRxFrameBuffer.GetFrame() - kSpiFrameHeaderSize;