9192916a4e
This reverts commit a157436a57
.
378 lines
11 KiB
Bash
Executable File
378 lines
11 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
############################################################################
|
|
# tools/ci/platforms/darwin.sh
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership. The
|
|
# ASF licenses this file to you 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.
|
|
#
|
|
############################################################################
|
|
|
|
# Darwin
|
|
|
|
# Prerequisites for macOS
|
|
# - Xcode (cc, etc)
|
|
# - homebrew
|
|
# - autoconf
|
|
# - wget
|
|
|
|
set -e
|
|
set -o xtrace
|
|
|
|
add_path() {
|
|
PATH=$1:${PATH}
|
|
}
|
|
|
|
arm_gcc_toolchain() {
|
|
add_path "${NUTTXTOOLS}"/gcc-arm-none-eabi/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/gcc-arm-none-eabi/bin/arm-none-eabi-gcc" ]; then
|
|
local basefile
|
|
basefile=arm-gnu-toolchain-13.2.rel1-darwin-x86_64-arm-none-eabi
|
|
cd "${NUTTXTOOLS}"
|
|
wget --quiet https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/${basefile}.tar.xz
|
|
xz -d ${basefile}.tar.xz
|
|
tar xf ${basefile}.tar
|
|
mv ${basefile} gcc-arm-none-eabi
|
|
rm ${basefile}.tar
|
|
fi
|
|
|
|
command arm-none-eabi-gcc --version
|
|
}
|
|
|
|
arm64_gcc_toolchain() {
|
|
add_path "${NUTTXTOOLS}"/gcc-aarch64-none-elf/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/gcc-aarch64-none-elf/bin/aarch64-none-elf-gcc" ]; then
|
|
local basefile
|
|
basefile=arm-gnu-toolchain-13.2.Rel1-darwin-x86_64-aarch64-none-elf
|
|
cd "${NUTTXTOOLS}"
|
|
# Download the latest ARM64 GCC toolchain prebuilt by ARM
|
|
wget --quiet https://developer.arm.com/-/media/Files/downloads/gnu/13.2.Rel1/binrel/${basefile}.tar.xz
|
|
xz -d ${basefile}.tar.xz
|
|
tar xf ${basefile}.tar
|
|
mv ${basefile} gcc-aarch64-none-elf
|
|
rm ${basefile}.tar
|
|
fi
|
|
|
|
command aarch64-none-elf-gcc --version
|
|
}
|
|
|
|
avr_gcc_toolchain() {
|
|
if ! type avr-gcc > /dev/null 2>&1; then
|
|
brew tap osx-cross/avr
|
|
brew install avr-gcc
|
|
fi
|
|
|
|
command avr-gcc --version
|
|
}
|
|
|
|
binutils() {
|
|
mkdir -p "${NUTTXTOOLS}"/bintools/bin
|
|
add_path "${NUTTXTOOLS}"/bintools/bin
|
|
|
|
if ! type objcopy > /dev/null 2>&1; then
|
|
brew install binutils
|
|
# It is possible we cached prebuilt but did brew install so recreate
|
|
# symlink if it exists
|
|
rm -f "${NUTTXTOOLS}"/bintools/bin/objcopy
|
|
ln -s /usr/local/opt/binutils/bin/objcopy "${NUTTXTOOLS}"/bintools/bin/objcopy
|
|
fi
|
|
|
|
command objcopy --version
|
|
}
|
|
|
|
bloaty() {
|
|
add_path "${NUTTXTOOLS}"/bloaty/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/bloaty/bin/bloaty" ]; then
|
|
git clone --branch main https://github.com/google/bloaty "${NUTTXTOOLS}"/bloaty-src
|
|
cd "${NUTTXTOOLS}"/bloaty-src
|
|
# Due to issues with latest MacOS versions use pinned commit.
|
|
# https://github.com/google/bloaty/pull/326
|
|
git checkout 52948c107c8f81045e7f9223ec02706b19cfa882
|
|
mkdir -p "${NUTTXTOOLS}"/bloaty
|
|
cmake -B build/bloaty -D BLOATY_PREFER_SYSTEM_CAPSTONE=NO -D CMAKE_INSTALL_PREFIX="${NUTTXTOOLS}"/bloaty
|
|
cmake --build build/bloaty
|
|
cmake --build build/bloaty --target install
|
|
cd "${NUTTXTOOLS}"
|
|
rm -rf bloaty-src
|
|
ls -a "${NUTTXTOOLS}"/bloaty
|
|
fi
|
|
|
|
command bloaty --version
|
|
}
|
|
|
|
c_cache() {
|
|
add_path "${NUTTXTOOLS}"/ccache/bin
|
|
|
|
if ! type ccache > /dev/null 2>&1; then
|
|
brew install ccache
|
|
fi
|
|
setup_links
|
|
command ccache --version
|
|
}
|
|
|
|
elf_toolchain() {
|
|
if ! type x86_64-elf-gcc > /dev/null 2>&1; then
|
|
brew install x86_64-elf-gcc
|
|
fi
|
|
|
|
command x86_64-elf-gcc --version
|
|
}
|
|
|
|
gen_romfs() {
|
|
if ! type genromfs > /dev/null 2>&1; then
|
|
brew tap PX4/px4
|
|
brew install genromfs
|
|
fi
|
|
}
|
|
|
|
gperf() {
|
|
add_path "${NUTTXTOOLS}"/gperf/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/gperf/bin/gperf" ]; then
|
|
local basefile
|
|
basefile=gperf-3.1
|
|
|
|
cd "${NUTTXTOOLS}"
|
|
wget --quiet http://ftp.gnu.org/pub/gnu/gperf/${basefile}.tar.gz
|
|
tar zxf ${basefile}.tar.gz
|
|
cd "${NUTTXTOOLS}"/${basefile}
|
|
./configure --prefix="${NUTTXTOOLS}"/gperf; make; make install
|
|
cd "${NUTTXTOOLS}"
|
|
rm -rf ${basefile}; rm ${basefile}.tar.gz
|
|
fi
|
|
|
|
command gperf --version
|
|
}
|
|
|
|
kconfig_frontends() {
|
|
add_path "${NUTTXTOOLS}"/kconfig-frontends/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/kconfig-frontends/bin/kconfig-conf" ]; then
|
|
git clone https://bitbucket.org/nuttx/tools.git "${NUTTXTOOLS}"/nuttx-tools
|
|
cd "${NUTTXTOOLS}"/nuttx-tools/kconfig-frontends
|
|
./configure --prefix="${NUTTXTOOLS}"/kconfig-frontends \
|
|
--disable-kconfig --disable-nconf --disable-qconf \
|
|
--disable-gconf --disable-mconf --disable-static \
|
|
--disable-shared --disable-L10n
|
|
# Avoid "aclocal/automake missing" errors
|
|
touch aclocal.m4 Makefile.in
|
|
make install
|
|
cd "${NUTTXTOOLS}"
|
|
rm -rf nuttx-tools
|
|
fi
|
|
}
|
|
|
|
mips_gcc_toolchain() {
|
|
add_path "${NUTTXTOOLS}"/pinguino-compilers/macosx/p32/bin
|
|
|
|
if [ ! -d "${NUTTXTOOLS}/pinguino-compilers" ]; then
|
|
cd "${NUTTXTOOLS}"
|
|
git clone https://github.com/PinguinoIDE/pinguino-compilers
|
|
fi
|
|
|
|
command mips-elf-gcc --version
|
|
}
|
|
|
|
python_tools() {
|
|
# Python User Env
|
|
export PIP_USER=yes
|
|
export PYTHONUSERBASE=${NUTTXTOOLS}/pylocal
|
|
echo "export PIP_USER=yes" >> "${NUTTXTOOLS}"/env.sh
|
|
echo "export PYTHONUSERBASE=${NUTTXTOOLS}/pylocal" >> "${NUTTXTOOLS}"/env.sh
|
|
add_path "${PYTHONUSERBASE}"/bin
|
|
|
|
# workaround for Cython issue
|
|
# https://github.com/yaml/pyyaml/pull/702#issuecomment-1638930830
|
|
pip3 install "Cython<3.0"
|
|
git clone https://github.com/yaml/pyyaml.git && \
|
|
cd pyyaml && \
|
|
git checkout release/5.4.1 && \
|
|
sed -i.bak 's/Cython/Cython<3.0/g' pyproject.toml && \
|
|
python setup.py sdist && \
|
|
pip3 install --pre dist/PyYAML-5.4.1.tar.gz
|
|
cd ..
|
|
rm -rf pyyaml
|
|
|
|
pip3 install \
|
|
cmake-format \
|
|
cvt2utf \
|
|
cxxfilt \
|
|
esptool==4.8.dev4 \
|
|
imgtool==1.9.0 \
|
|
kconfiglib \
|
|
pexpect==4.8.0 \
|
|
pyelftools \
|
|
pyserial==3.5 \
|
|
pytest==6.2.5 \
|
|
pytest-json==0.4.0 \
|
|
pytest-ordering==0.6 \
|
|
pytest-repeat==0.9.1
|
|
}
|
|
|
|
riscv_gcc_toolchain() {
|
|
add_path "${NUTTXTOOLS}"/riscv-none-elf-gcc/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/riscv-none-elf-gcc/bin/riscv-none-elf-gcc" ]; then
|
|
local basefile
|
|
basefile=xpack-riscv-none-elf-gcc-13.2.0-2-darwin-x64
|
|
cd "${NUTTXTOOLS}"
|
|
# Download the latest RISCV GCC toolchain prebuilt by xPack
|
|
wget --quiet https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/${basefile}.tar.gz
|
|
tar zxf ${basefile}.tar.gz
|
|
mv xpack-riscv-none-elf-gcc-13.2.0-2 riscv-none-elf-gcc
|
|
rm ${basefile}.tar.gz
|
|
fi
|
|
command riscv-none-elf-gcc --version
|
|
}
|
|
|
|
rust() {
|
|
if ! type rustc > /dev/null 2>&1; then
|
|
brew install rust
|
|
fi
|
|
|
|
command rustc --version
|
|
}
|
|
|
|
dlang() {
|
|
if ! type ldc2 > /dev/null 2>&1; then
|
|
brew install ldc
|
|
fi
|
|
|
|
command ldc2 --version | head -n 5
|
|
}
|
|
|
|
zig() {
|
|
brew install zig
|
|
|
|
command zig cc --version
|
|
}
|
|
|
|
xtensa_esp32_gcc_toolchain() {
|
|
add_path "${NUTTXTOOLS}"/xtensa-esp32-elf/bin
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc" ]; then
|
|
local basefile
|
|
basefile=xtensa-esp32-elf-12.2.0_20230208-x86_64-apple-darwin
|
|
cd "${NUTTXTOOLS}"
|
|
wget --quiet https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/${basefile}.tar.xz
|
|
xz -d ${basefile}.tar.xz
|
|
tar xf ${basefile}.tar
|
|
rm ${basefile}.tar
|
|
fi
|
|
|
|
command xtensa-esp32-elf-gcc --version
|
|
}
|
|
|
|
u_boot_tools() {
|
|
if ! type mkimage > /dev/null 2>&1; then
|
|
brew install u-boot-tools
|
|
fi
|
|
}
|
|
|
|
util_linux() {
|
|
if ! type flock > /dev/null 2>&1; then
|
|
brew tap discoteq/discoteq
|
|
brew install flock
|
|
fi
|
|
|
|
command flock --version
|
|
}
|
|
|
|
wasi_sdk() {
|
|
add_path "${NUTTXTOOLS}"/wamrc
|
|
|
|
if [ ! -f "${NUTTXTOOLS}/wamrc/wasi-sdk/bin/clang" ]; then
|
|
local wasibasefile
|
|
local wasmbasefile
|
|
wasibasefile=wasi-sdk-19.0-macos
|
|
wasmbasefile=wamrc-1.1.2-x86_64-macos-latest
|
|
cd "${NUTTXTOOLS}"
|
|
mkdir -p wamrc
|
|
wget --quiet https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-19/${wasibasefile}.tar.gz
|
|
tar xzf ${wasibasefile}.tar.gz
|
|
mv wasi-sdk-19.0 wasi-sdk
|
|
rm ${wasibasefile}.tar.gz
|
|
cd wamrc
|
|
wget --quiet https://github.com/bytecodealliance/wasm-micro-runtime/releases/download/WAMR-1.1.2/${wasmbasefile}.tar.gz
|
|
tar xzf ${wasmbasefile}.tar.gz
|
|
rm ${wasmbasefile}.tar.gz
|
|
fi
|
|
|
|
export WASI_SDK_PATH="${NUTTXTOOLS}/wasi-sdk"
|
|
echo "export WASI_SDK_PATH=${NUTTXTOOLS}/wasi-sdk" >> "${NUTTXTOOLS}"/env.sh
|
|
|
|
command "${WASI_SDK_PATH}"/bin/clang --version
|
|
command wamrc --version
|
|
}
|
|
|
|
setup_links() {
|
|
# Configure ccache
|
|
mkdir -p "${NUTTXTOOLS}"/ccache/bin/
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/aarch64-none-elf-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/aarch64-none-elf-g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/arm-none-eabi-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/arm-none-eabi-g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/avr-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/avr-g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/cc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/c++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/clang
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/clang++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/p32-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/riscv64-unknown-elf-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/riscv64-unknown-elf-g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/sparc-gaisler-elf-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/sparc-gaisler-elf-g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/x86_64-elf-gcc
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/x86_64-elf-g++
|
|
ln -sf "$(which ccache)" "${NUTTXTOOLS}"/ccache/bin/xtensa-esp32-elf-gcc
|
|
}
|
|
|
|
install_build_tools() {
|
|
mkdir -p "${NUTTXTOOLS}"
|
|
echo "#!/usr/bin/env sh" > "${NUTTXTOOLS}"/env.sh
|
|
|
|
install="arm_gcc_toolchain arm64_gcc_toolchain avr_gcc_toolchain binutils bloaty elf_toolchain gen_romfs gperf kconfig_frontends mips_gcc_toolchain python_tools riscv_gcc_toolchain rust dlang zig xtensa_esp32_gcc_toolchain u_boot_tools util_linux wasi_sdk c_cache"
|
|
|
|
mkdir -p "${NUTTXTOOLS}"/homebrew
|
|
export HOMEBREW_CACHE=${NUTTXTOOLS}/homebrew
|
|
echo "export HOMEBREW_CACHE=${NUTTXTOOLS}/homebrew" >> "${NUTTXTOOLS}"/env.sh
|
|
# https://github.com/apache/arrow/issues/15025
|
|
rm -f /usr/local/bin/2to3* || :
|
|
rm -f /usr/local/bin/idle3* || :
|
|
rm -f /usr/local/bin/pydoc3* || :
|
|
rm -f /usr/local/bin/python3* || :
|
|
rm -f /usr/local/bin/python3-config || :
|
|
# same for openssl
|
|
rm -f /usr/local/bin/openssl || :
|
|
|
|
oldpath=$(cd . && pwd -P)
|
|
for func in ${install}; do
|
|
${func}
|
|
done
|
|
cd "${oldpath}"
|
|
|
|
echo "PATH=${PATH}" >> "${NUTTXTOOLS}"/env.sh
|
|
echo "export PATH" >> "${NUTTXTOOLS}"/env.sh
|
|
}
|
|
|
|
install_build_tools
|