mirror of
https://github.com/apache/nuttx.git
synced 2025-01-13 02:48:37 +08:00
[darwin] CI macos-14 : updated toolchains for macOS Apple Silicon
added shell script darwin_arm64.sh for macOS Apple Silicon updated toolchains for macOS on Apple Silicon - arm64 - aarch64 - xpack-riscv - xtensa-esp32
This commit is contained in:
parent
8a6e8320cf
commit
2464b3207d
3 changed files with 412 additions and 11 deletions
|
@ -31,6 +31,7 @@ nuttx=${CIWORKSPACE}/nuttx
|
|||
apps=${CIWORKSPACE}/apps
|
||||
|
||||
os=$(uname -s)
|
||||
osarch=$(uname -m)
|
||||
if [ -f /etc/os-release ]; then
|
||||
osname=$(grep "^ID=" /etc/os-release | cut -d'=' -f2 | tr -d '"')
|
||||
else
|
||||
|
@ -69,7 +70,11 @@ function install_tools {
|
|||
to_do "freebsd"
|
||||
;;
|
||||
Darwin)
|
||||
"${CIPLAT}"/darwin.sh
|
||||
if [ "X$osarch" == "Xx86_64" ]; then
|
||||
"${CIPLAT}"/darwin.sh
|
||||
else
|
||||
"${CIPLAT}"/darwin_arm64.sh
|
||||
fi
|
||||
;;
|
||||
Linux)
|
||||
"${CIPLAT}"/linux.sh
|
||||
|
|
|
@ -21,17 +21,17 @@
|
|||
#
|
||||
############################################################################
|
||||
|
||||
# Darwin
|
||||
# NuttX CI Job for macOS, runs on Apple Intel Mac
|
||||
|
||||
# Prerequisites for macOS
|
||||
# - Xcode (cc, etc)
|
||||
# - homebrew
|
||||
# - autoconf
|
||||
# - curl
|
||||
# - wget
|
||||
# - cmake
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
osarch=$(uname -m)
|
||||
|
||||
add_path() {
|
||||
PATH=$1:${PATH}
|
||||
|
@ -97,13 +97,8 @@ binutils() {
|
|||
mkdir -p "${NUTTXTOOLS}"/bintools/bin
|
||||
# It is possible we cached prebuilt but did brew install so recreate
|
||||
# symlink if it exists
|
||||
if [ "X$osarch" == "Xarm64" ]; then
|
||||
rm -f "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
ln -s /opt/homebrew/opt/binutils/bin/objcopy "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
else
|
||||
rm -f "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
ln -s /usr/local/opt/binutils/bin/objcopy "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
fi
|
||||
rm -f "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
ln -s /usr/local/opt/binutils/bin/objcopy "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
fi
|
||||
|
||||
command objcopy --version
|
||||
|
|
401
tools/ci/platforms/darwin_arm64.sh
Executable file
401
tools/ci/platforms/darwin_arm64.sh
Executable file
|
@ -0,0 +1,401 @@
|
|||
#!/usr/bin/env sh
|
||||
############################################################################
|
||||
# tools/ci/platforms/darwin_arm64.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.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
# NuttX CI Job for macOS, runs on Apple Silicon Mac
|
||||
|
||||
# Prerequisites for macOS
|
||||
# - Xcode (cc, etc)
|
||||
# - homebrew
|
||||
# - curl
|
||||
# - wget
|
||||
# - cmake
|
||||
|
||||
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-arm64-arm-none-eabi
|
||||
cd "${NUTTXTOOLS}"
|
||||
curl -O -L -s 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-arm64-aarch64-none-elf
|
||||
cd "${NUTTXTOOLS}"
|
||||
# Download the latest ARM64 GCC toolchain prebuilt by ARM
|
||||
curl -O -L -s 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
|
||||
}
|
||||
|
||||
autoconf_brew() {
|
||||
if ! type autoconf > /dev/null 2>&1; then
|
||||
brew install autoconf
|
||||
fi
|
||||
|
||||
command autoconf --version
|
||||
}
|
||||
|
||||
binutils() {
|
||||
add_path "${NUTTXTOOLS}"/bintools/bin
|
||||
|
||||
if ! type objcopy > /dev/null 2>&1; then
|
||||
brew install binutils
|
||||
mkdir -p "${NUTTXTOOLS}"/bintools/bin
|
||||
# It is possible we cached prebuilt but did brew install so recreate
|
||||
# symlink if it exists
|
||||
rm -f "${NUTTXTOOLS}"/bintools/bin/objcopy
|
||||
ln -s /opt/homebrew/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 -GNinja -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}"
|
||||
curl -O -L -s 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 --depth 1 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
|
||||
}
|
||||
|
||||
ninja_brew() {
|
||||
if ! type ninja > /dev/null 2>&1; then
|
||||
brew install ninja
|
||||
fi
|
||||
|
||||
command ninja --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
|
||||
|
||||
if [ "X$osarch" == "Xarm64" ]; then
|
||||
python3 -m venv --system-site-packages /opt/homebrew
|
||||
fi
|
||||
|
||||
# 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 \
|
||||
construct \
|
||||
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-arm64
|
||||
cd "${NUTTXTOOLS}"
|
||||
# Download the latest RISCV GCC toolchain prebuilt by xPack
|
||||
curl -O -L -s 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-aarch64-apple-darwin
|
||||
cd "${NUTTXTOOLS}"
|
||||
curl -O -L -s 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
|
||||
curl -O -L -s 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
|
||||
curl -O -L -s 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="ninja_brew autoconf_brew 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
|
Loading…
Reference in a new issue