| #!/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. |
| # |
| |
| # |
| # This script calls cmake and ninja to compile OpenThread for the given platform. |
| # |
| # Compile with default build options: |
| # |
| # script/cmake-build ${platform} |
| # |
| # Compile with the specified build option enabled: |
| # |
| # script/cmake-build ${platform} -D${option}=ON |
| # |
| # Compile with the specified build option disabled that already enabled by default: |
| # |
| # script/cmake-build ${platform} -D${option}=OFF |
| # |
| # Compile with the specified ninja build target: |
| # |
| # OT_CMAKE_NINJA_TARGET="ot-cli-ftd" script/cmake-build ${platform} |
| # |
| # Compile with the specified build directory: |
| # |
| # OT_CMAKE_BUILD_DIR="./build/temp" script/cmake-build ${platform} |
| # |
| # Examples: |
| # |
| # script/cmake-build simulation |
| # |
| # script/cmake-build simulation -DOT_FULL_LOGS=ON -DOT_CHANNEL_MANAGER=OFF |
| # |
| # OT_CMAKE_NINJA_TARGET="ot-cli-mtd" OT_CMAKE_BUILD_DIR="./build/temp" script/cmake-build simulation -DOT_FULL_LOGS=ON -DOT_CHANNEL_MANAGER=OFF |
| # |
| |
| set -euxo pipefail |
| |
| OT_CMAKE_NINJA_TARGET=${OT_CMAKE_NINJA_TARGET:-} |
| |
| OT_SRCDIR="$(cd "$(dirname "$0")"/.. && pwd)" |
| |
| readonly OT_SRCDIR |
| readonly OT_PLATFORMS=(cc2538 simulation posix) |
| readonly OT_POSIX_SIM_COMMON_OPTIONS=( |
| "-DOT_ANYCAST_LOCATOR=ON" |
| "-DOT_BORDER_AGENT=ON" |
| "-DOT_BORDER_ROUTER=ON" |
| "-DOT_COAP=ON" |
| "-DOT_COAP_BLOCK=ON" |
| "-DOT_COAP_OBSERVE=ON" |
| "-DOT_COAPS=ON" |
| "-DOT_COMMISSIONER=ON" |
| "-DOT_CHANNEL_MANAGER=ON" |
| "-DOT_CHANNEL_MONITOR=ON" |
| "-DOT_CHILD_SUPERVISION=ON" |
| "-DOT_DATASET_UPDATER=ON" |
| "-DOT_DHCP6_CLIENT=ON" |
| "-DOT_DHCP6_SERVER=ON" |
| "-DOT_DIAGNOSTIC=ON" |
| "-DOT_DNS_CLIENT=ON" |
| "-DOT_ECDSA=ON" |
| "-DOT_HISTORY_TRACKER=ON" |
| "-DOT_IP6_FRAGM=ON" |
| "-DOT_JAM_DETECTION=ON" |
| "-DOT_JOINER=ON" |
| "-DOT_LEGACY=ON" |
| "-DOT_MAC_FILTER=ON" |
| "-DOT_MTD_NETDIAG=ON" |
| "-DOT_NEIGHBOR_DISCOVERY_AGENT=ON" |
| "-DOT_NETDATA_PUBLISHER=ON" |
| "-DOT_PING_SENDER=ON" |
| "-DOT_REFERENCE_DEVICE=ON" |
| "-DOT_SERVICE=ON" |
| "-DOT_SNTP_CLIENT=ON" |
| "-DOT_SRP_CLIENT=ON" |
| "-DOT_COVERAGE=ON" |
| "-DOT_LOG_LEVEL_DYNAMIC=ON" |
| "-DOT_COMPILE_WARNING_AS_ERROR=ON" |
| "-DOT_RCP_RESTORATION_MAX_COUNT=2" |
| "-DOT_UPTIME=ON" |
| ) |
| |
| die() |
| { |
| echo " ** ERROR: Openthread CMake doesn't support platform \"$1\"" |
| exit 1 |
| } |
| |
| build() |
| { |
| local platform=$1 |
| local builddir="${OT_CMAKE_BUILD_DIR:-build/${platform}}" |
| shift |
| |
| mkdir -p "${builddir}" |
| cd "${builddir}" |
| |
| cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DOT_COMPILE_WARNING_AS_ERROR=ON "$@" "${OT_SRCDIR}" |
| |
| if [[ -n ${OT_CMAKE_NINJA_TARGET[*]} ]]; then |
| ninja "${OT_CMAKE_NINJA_TARGET[@]}" |
| else |
| ninja |
| fi |
| |
| cd "${OT_SRCDIR}" |
| } |
| |
| main() |
| { |
| if [[ $# == 0 ]]; then |
| echo "Please specify a platform: ${OT_PLATFORMS[*]}" |
| exit 1 |
| fi |
| |
| local platform="$1" |
| # Check if the platform supports cmake. |
| echo "${OT_PLATFORMS[@]}" | grep -wq "${platform}" || die "${platform}" |
| |
| shift |
| local local_options=() |
| local options=( |
| "-DOT_PLATFORM=${platform}" |
| "-DOT_SLAAC=ON" |
| ) |
| |
| case "${platform}" in |
| posix) |
| local_options+=( |
| "-DOT_LOG_OUTPUT=PLATFORM_DEFINED" |
| "-DOT_POSIX_MAX_POWER_TABLE=ON" |
| ) |
| options+=("${OT_POSIX_SIM_COMMON_OPTIONS[@]}" "${local_options[@]}") |
| ;; |
| simulation) |
| local_options=("-DOT_LINK_RAW=ON") |
| options+=("${OT_POSIX_SIM_COMMON_OPTIONS[@]}" "${local_options[@]}") |
| ;; |
| cc2538) |
| options+=("-DCMAKE_TOOLCHAIN_FILE=examples/platforms/${platform}/arm-none-eabi.cmake" "-DCMAKE_BUILD_TYPE=MinSizeRel") |
| ;; |
| *) |
| options+=("-DCMAKE_TOOLCHAIN_FILE=examples/platforms/${platform}/arm-none-eabi.cmake") |
| ;; |
| esac |
| |
| options+=("$@") |
| build "${platform}" "${options[@]}" |
| } |
| |
| main "$@" |