mirror of
https://github.com/espressif/openthread.git
synced 2026-06-05 21:14:49 +00:00
8dadae2ea1
We just updated the version from 14 to 16. But very unfortunately clang-format-16 was just deprecated recently. So this time we update the version to the latest available one. There are newer releases than 19 (like 20) but as I tested, sudo apt-get install -y clang-format-19 can work while 20 doesn't work. misc-include-cleaner in clang-tidy-19 exerts a very strict check which requires to directly include all headers for every symbols in the source file. However in our current code we intentionally use some indirect include. So this commit disables misc-include-cleaner.
160 lines
6.6 KiB
Bash
Executable File
160 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2017, 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.
|
|
#
|
|
# Description:
|
|
# This file installs all needed dependencies and toolchains needed for
|
|
# example compilation and programming.
|
|
#
|
|
|
|
set -euxo pipefail
|
|
|
|
LLVM_MAJOR_VERSION="19"
|
|
|
|
install_packages_pretty_format()
|
|
{
|
|
echo 'Installing pretty tools useful for code contributions...'
|
|
|
|
# add clang-format and clang-tidy for pretty
|
|
sudo apt-get --no-install-recommends install -y clang-format-"${LLVM_MAJOR_VERSION}" clang-tidy-"${LLVM_MAJOR_VERSION}" || echo "WARNING: could not install clang-format-${LLVM_MAJOR_VERSION} and clang-tidy-${LLVM_MAJOR_VERSION}, which is useful if you plan to contribute C/C++ code to the OpenThread project."
|
|
|
|
# add yapf for pretty
|
|
python3 -m pip install yapf==0.31.0 || echo 'WARNING: could not install yapf, which is useful if you plan to contribute python code to the OpenThread project.'
|
|
|
|
# add mdv for local size report
|
|
python3 -m pip install mdv || echo 'WARNING: could not install mdv, which is required to post markdown size report for OpenThread.'
|
|
|
|
# add shfmt for shell pretty
|
|
command -v shfmt || sudo apt-get install shfmt || echo 'WARNING: could not install shfmt, which is useful if you plan to contribute shell scripts to the OpenThread project.'
|
|
|
|
sudo apt-get --no-install-recommends install -y iwyu || echo 'WARNING: iwyu, which is useful to ensure applying the IWYU rules.'
|
|
}
|
|
|
|
install_packages_apt()
|
|
{
|
|
echo 'Installing toolchain dependencies...'
|
|
|
|
# apt-get update and install dependencies
|
|
sudo apt-get update
|
|
sudo apt-get --no-install-recommends install -y g++ lsb-release cmake ninja-build shellcheck libgtest-dev libgmock-dev
|
|
|
|
echo 'Installing GNU Arm Embedded Toolchain...'
|
|
|
|
PLATFORM=$(lsb_release -is)
|
|
ARCH=$(arch)
|
|
|
|
if [ "$PLATFORM" = "Raspbian" ]; then
|
|
sudo apt-get --no-install-recommends install -y binutils-arm-none-eabi gcc-arm-none-eabi gdb-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
|
|
elif [ "$PLATFORM" = "Ubuntu" ]; then
|
|
sudo apt-get --no-install-recommends install -y bzip2 ca-certificates wget
|
|
(cd /tmp \
|
|
&& wget --tries 4 --no-check-certificate --quiet -c https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-"$ARCH"-linux.tar.bz2 \
|
|
&& sudo tar xjf gcc-arm-none-eabi-9-2020-q2-update-"$ARCH"-linux.tar.bz2 -C /opt \
|
|
&& rm gcc-arm-none-eabi-9-2020-q2-update-"$ARCH"-linux.tar.bz2 \
|
|
&& sudo ln -s -f /opt/gcc-arm-none-eabi-9-2020-q2-update/bin/* /usr/local/bin/.)
|
|
fi
|
|
|
|
if [ "$PLATFORM" != "Raspbian" ]; then
|
|
install_packages_pretty_format
|
|
fi
|
|
}
|
|
|
|
install_packages_opkg()
|
|
{
|
|
echo 'opkg not supported currently' && false
|
|
}
|
|
|
|
install_packages_rpm()
|
|
{
|
|
echo 'rpm not supported currently' && false
|
|
}
|
|
|
|
install_packages_brew()
|
|
{
|
|
echo 'Installing toolchain dependencies...'
|
|
|
|
# add build tools
|
|
brew install cmake ninja shfmt shellcheck
|
|
|
|
echo 'Installing GNU Arm Embedded Toolchain...'
|
|
|
|
# add ARM toolchain
|
|
brew tap ArmMbed/homebrew-formulae
|
|
brew install armmbed/formulae/arm-none-eabi-gcc
|
|
|
|
# check for gcc for simulation
|
|
if ! command -v gcc; then
|
|
echo 'warning: clang/gcc needed for simulation'
|
|
echo 'warning: please install Command Line Tools from https://developer.apple.com/download/more/'
|
|
fi
|
|
|
|
echo 'Installing pretty tools useful for code contributions...'
|
|
|
|
# add clang-format for pretty
|
|
CLANG_FORMAT_VERSION="clang-format version ${LLVM_MAJOR_VERSION}"
|
|
command -v clang-format-"${LLVM_MAJOR_VERSION}" || (command -v clang-format && (clang-format --version | grep -q "${CLANG_FORMAT_VERSION}")) || {
|
|
brew install llvm@"${LLVM_MAJOR_VERSION}"
|
|
sudo ln -s "$(brew --prefix llvm@${LLVM_MAJOR_VERSION})/bin/clang-format" /usr/local/bin/clang-format-"${LLVM_MAJOR_VERSION}"
|
|
sudo ln -s "$(brew --prefix llvm@${LLVM_MAJOR_VERSION})/bin/clang-tidy" /usr/local/bin/clang-tidy-"${LLVM_MAJOR_VERSION}"
|
|
sudo ln -s "$(brew --prefix llvm@${LLVM_MAJOR_VERSION})/bin/clang-apply-replacements" /usr/local/bin/clang-apply-replacements-"${LLVM_MAJOR_VERSION}"
|
|
sudo ln -s "$(brew --prefix llvm@${LLVM_MAJOR_VERSION})/bin/run-clang-tidy" /usr/local/bin/run-clang-tidy-"${LLVM_MAJOR_VERSION}"
|
|
} || echo "WARNING: could not install llvm@${LLVM_MAJOR_VERSION}, which is useful if you plan to contribute C/C++ code to the OpenThread project."
|
|
|
|
# add yapf for pretty
|
|
python3 -m pip install yapf || echo 'Failed to install python code formatter yapf. Install it manually if you need.'
|
|
|
|
brew install include-what-you-use || echo 'WARNING: iwyu, which is useful to ensure applying the IWYU rules.'
|
|
}
|
|
|
|
install_packages_source()
|
|
{
|
|
echo 'source not supported currently' && false
|
|
}
|
|
|
|
install_packages()
|
|
{
|
|
PM=source
|
|
if command -v apt-get; then
|
|
PM=apt
|
|
elif command -v rpm; then
|
|
PM=rpm
|
|
elif command -v opkg; then
|
|
PM=opkg
|
|
elif command -v brew; then
|
|
PM=brew
|
|
fi
|
|
install_packages_$PM
|
|
}
|
|
|
|
main()
|
|
{
|
|
install_packages
|
|
echo 'bootstrap completed successfully.'
|
|
}
|
|
|
|
main
|