CI: Migrate ci tooling from testing repository to main os repo

This commit is contained in:
Brennan Ashton 2021-04-04 19:55:34 -07:00 committed by Xiang Xiao
parent 9097244cb8
commit 15b99d1f4b
27 changed files with 1037 additions and 18 deletions

View file

@ -0,0 +1,25 @@
# Licensed 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.
#
name: ci-container
inputs:
run: # id of input
description: 'Commands to run'
required: true
runs:
using: 'docker'
image: 'docker.pkg.github.com/apache/incubator-nuttx/apache-nuttx-ci-linux'
args:
- "/bin/bash"
- "-ce"
- ${{ inputs.run }}

View file

@ -32,7 +32,6 @@ jobs:
id: gittargets
shell: bash
run: |
TESTING_REF="master" # Always use master for testing
OS_REF=""
APPS_REF=""
@ -80,7 +79,6 @@ jobs:
echo ::set-output name=os_ref::$OS_REF
echo ::set-output name=apps_ref::$APPS_REF
echo ::set-output name=testing_ref::$TESTING_REF
- name: Checkout nuttx repo
uses: actions/checkout@v2
@ -100,14 +98,6 @@ jobs:
path: sources/apps
fetch-depth: 1
- name: Checkout testing repo
uses: actions/checkout@v2
with:
repository: apache/incubator-nuttx-testing
ref: ${{ steps.gittargets.outputs.testing_ref }}
path: sources/testing
fetch-depth: 1
- name: Tar sources
run: tar zcf sources.tar.gz sources
- name: Archive Source Bundle
@ -142,11 +132,11 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker Pull
run: docker pull docker.pkg.github.com/apache/incubator-nuttx-testing/nuttx-ci-linux
run: docker pull docker.pkg.github.com/apache/incubator-nuttx/apache-nuttx-ci-linux
- name: Export NuttX Repo SHA
run: echo "nuttx_sha=`git -C sources/nuttx rev-parse HEAD`" >> $GITHUB_ENV
- name: Run builds
uses: ./sources/testing/.github/actions/ci-container
uses: ./sources/nuttx/.github/actions/ci-container
env:
BLOBDIR: /tools/blobs
with:
@ -154,8 +144,8 @@ jobs:
echo "::add-matcher::sources/nuttx/.github/gcc.json"
export CCACHE_DIR=`pwd`/ccache
mkdir $CCACHE_DIR
cd sources/testing
export ARTIFACTDIR=`pwd`/../../buildartifacts
export ARTIFACTDIR=`pwd`/buildartifacts
cd sources/nuttx/tools/ci
./cibuild.sh -A -c testlist/${{matrix.boards}}.dat
ccache -s
- uses: actions/upload-artifact@v2
@ -185,7 +175,7 @@ jobs:
cache-name: ${{ runner.os }}-cache-tools
with:
path: prebuilt
key: ${{ runner.os }}-tools-${{ hashFiles('./sources/testing/cibuild.sh') }}
key: ${{ runner.os }}-tools-${{ hashFiles('./sources/nuttx/tools/ci/cibuild.sh') }}
- name: Export NuttX Repo SHA
run: echo "nuttx_sha=`git -C sources/nuttx rev-parse HEAD`" >> $GITHUB_ENV
@ -194,8 +184,8 @@ jobs:
echo "::add-matcher::sources/nuttx/.github/gcc.json"
export CCACHE_DIR=`pwd`/ccache
mkdir $CCACHE_DIR
cd sources/testing
export ARTIFACTDIR=`pwd`/../../buildartifacts
export ARTIFACTDIR=`pwd`/buildartifacts
cd sources/nuttx/tools/ci
./cibuild.sh -i -A -c testlist/${{matrix.boards}}.dat
ccache -s
- uses: actions/upload-artifact@v2

View file

@ -1,7 +1,7 @@
name: Cancelling Duplicates
on:
workflow_run:
workflows: ["Build", "Check", "Build Documentation", "Lint"]
workflows: ["Build", "Check", "Build Documentation", " Lint", "Docker-Linux"]
types: ['requested']
jobs:

57
.github/workflows/docker_linux.yml vendored Normal file
View file

@ -0,0 +1,57 @@
# Licensed 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.
#
name: Docker-Linux
on:
push:
# Publish `master` as Docker `latest` image.
branches:
- master
paths:
- 'tools/ci/docker/linux/**'
# Run builds for any PRs.
pull_request:
paths:
- 'tools/ci/docker/linux/**'
env:
IMAGE_NAME: nuttx-ci-linux
jobs:
# Push image to GitHub Packages.
push:
runs-on: ubuntu-latest
env:
DOCKER_BUILDKIT: 1
IMAGE_TAG: docker.pkg.github.com/${{ github.repository }}/nuttx-ci-linux
steps:
- uses: actions/checkout@v2
- name: Log into registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin
- name: Build Linux image
run: |
echo "Building Linux Image using cache from $IMAGE_TAG"
docker build \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--cache-from $IMAGE_TAG \
--tag $IMAGE_TAG \
-f ./tools/ci/docker/linux/Dockerfile ./tools/ci/docker/
- name: Push Linux image
if: (github.event_name == 'push') && (github.ref == 'refs/heads/master')
run: |
docker push $IMAGE_TAG

2
tools/ci/README.md Normal file
View file

@ -0,0 +1,2 @@
# CI Tools
These are tools and data used for the CI system. Some of what is here may also be useful for local testing.

442
tools/ci/cibuild.sh Executable file
View file

@ -0,0 +1,442 @@
#!/usr/bin/env bash
# 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.
# Prerequisites for macOS
# - Xcode (cc, etc)
# - homebrew
# - autoconf
# - wget
set -e
set -o xtrace
WD=$(cd $(dirname $0) && pwd)
WORKSPACE=$(cd $WD/../../../ && pwd -P)
nuttx=$WORKSPACE/nuttx
apps=$WORKSPACE/apps
tools=$WORKSPACE/tools
prebuilt=$WORKSPACE/prebuilt
os=$(uname -s)
EXTRA_PATH=
case $os in
Darwin)
install="python-tools u-boot-tools elf-toolchain gen-romfs kconfig-frontends arm-gcc-toolchain riscv-gcc-toolchain xtensa-esp32-gcc-toolchain avr-gcc-toolchain c-cache binutils"
mkdir -p ${prebuilt}/homebrew
export HOMEBREW_CACHE=${prebuilt}/homebrew
# https://github.com/actions/virtual-environments/issues/2322#issuecomment-749211076
rm -rf /usr/local/bin/2to3
# https://github.com/osx-cross/homebrew-avr/issues/205#issuecomment-760637996
brew update --quiet
;;
Linux)
install="python-tools gen-romfs gperf kconfig-frontends arm-gcc-toolchain mips-gcc-toolchain riscv-gcc-toolchain xtensa-esp32-gcc-toolchain rx-gcc-toolchain c-cache"
;;
esac
function add_path {
PATH=$1:$PATH
EXTRA_PATH=$1:$EXTRA_PATH
}
function python-tools {
# Python User Env
PIP_USER=yes
export PIP_USER
PYTHONUSERBASE=$prebuilt/pylocal
export PYTHONUSERBASE
add_path $PYTHONUSERBASE/bin
pip3 install pexpect
}
function u-boot-tools {
if ! type mkimage > /dev/null; then
case $os in
Darwin)
brew install u-boot-tools
;;
esac
fi
}
function elf-toolchain {
if ! type x86_64-elf-gcc > /dev/null; then
case $os in
Darwin)
brew install x86_64-elf-gcc
;;
esac
fi
x86_64-elf-gcc --version
}
function gen-romfs {
add_path $prebuilt/genromfs/usr/bin
if [ ! -f "$prebuilt/genromfs/usr/bin/genromfs" ]; then
if [ ! -d "$tools" ]; then
git clone https://bitbucket.org/nuttx/tools.git $tools
fi
mkdir -p $prebuilt; cd $tools
tar zxf genromfs-0.5.2.tar.gz -C $prebuilt
cd $prebuilt/genromfs-0.5.2
make install PREFIX=$prebuilt/genromfs
cd $prebuilt
rm -rf genromfs-0.5.2
fi
}
function gperf {
add_path $prebuilt/gperf/bin
if [ ! -f "$prebuilt/gperf/bin/gperf" ]; then
cd $prebuilt
wget --quiet http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz
tar zxf gperf-3.1.tar.gz
cd $prebuilt/gperf-3.1
./configure --prefix=$prebuilt/gperf; make; make install
cd $prebuilt
rm -rf gperf-3.1; rm gperf-3.1.tar.gz
fi
}
function kconfig-frontends {
add_path $prebuilt/kconfig-frontends/bin
if [ ! -f "$prebuilt/kconfig-frontends/bin/kconfig-conf" ]; then
cd $tools/kconfig-frontends
./configure --prefix=$prebuilt/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 $tools; git clean -xfd
fi
}
function bloaty {
add_path $prebuilt/bloaty/bin
if [ ! -f "$prebuilt/bloaty/bin/bloaty" ]; then
git clone --depth 1 --branch v1.1 https://github.com/google/bloaty bloaty-src
cd bloaty-src
mkdir -p $prebuilt/bloaty
cmake -DCMAKE_SYSTEM_PREFIX_PATH=$prebuilt/bloaty
make install -j 6
cd $prebuilt
rm -rf bloaty-src
fi
}
function arm-gcc-toolchain {
add_path $prebuilt/gcc-arm-none-eabi/bin
if [ ! -f "$prebuilt/gcc-arm-none-eabi/bin/arm-none-eabi-gcc" ]; then
local flavor
case $os in
Darwin)
flavor=mac
;;
Linux)
flavor=x86_64-linux
;;
esac
cd $prebuilt
wget --quiet https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-${flavor}.tar.bz2
tar jxf gcc-arm-none-eabi-9-2019-q4-major-${flavor}.tar.bz2
mv gcc-arm-none-eabi-9-2019-q4-major gcc-arm-none-eabi
rm gcc-arm-none-eabi-9-2019-q4-major-${flavor}.tar.bz2
fi
arm-none-eabi-gcc --version
}
function mips-gcc-toolchain {
add_path $prebuilt/pinguino-compilers/linux64/p32/bin
if [ ! -f "$prebuilt/pinguino-compilers/linux64/p32/bin/p32-gcc" ]; then
cd $prebuilt
git clone https://github.com/PinguinoIDE/pinguino-compilers
fi
p32-gcc --version
}
function riscv-gcc-toolchain {
add_path $prebuilt/riscv64-unknown-elf-gcc/bin
if [ ! -f "$prebuilt/riscv64-unknown-elf-gcc/bin/riscv64-unknown-elf-gcc" ]; then
local flavor
case $os in
Darwin)
flavor=x86_64-apple-darwin
;;
Linux)
flavor=x86_64-linux-ubuntu14
;;
esac
cd $prebuilt
wget --quiet https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-${flavor}.tar.gz
tar zxf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-${flavor}.tar.gz
mv riscv64-unknown-elf-gcc-8.3.0-2019.08.0-${flavor} riscv64-unknown-elf-gcc
rm riscv64-unknown-elf-gcc-8.3.0-2019.08.0-${flavor}.tar.gz
fi
riscv64-unknown-elf-gcc --version
}
function xtensa-esp32-gcc-toolchain {
add_path $prebuilt/xtensa-esp32-elf/bin
if [ ! -f "$prebuilt/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc" ]; then
cd $prebuilt
case $os in
Darwin)
wget --quiet https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-macos.tar.gz
tar xzf xtensa-esp32-elf-gcc8_2_0-esp-2019r2-macos.tar.gz
rm xtensa-esp32-elf-gcc8_2_0-esp-2019r2-macos.tar.gz
;;
Linux)
wget --quiet https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp32-2019r1-rc2-linux-amd64.tar.xz
xz -d xtensa-esp32-elf-gcc8_2_0-esp32-2019r1-rc2-linux-amd64.tar.xz
tar xf xtensa-esp32-elf-gcc8_2_0-esp32-2019r1-rc2-linux-amd64.tar
rm xtensa-esp32-elf-gcc8_2_0-esp32-2019r1-rc2-linux-amd64.tar
;;
esac
fi
xtensa-esp32-elf-gcc --version
pip3 install esptool
}
function avr-gcc-toolchain {
if ! type avr-gcc > /dev/null; then
case $os in
Darwin)
brew tap osx-cross/avr
brew install avr-gcc
;;
esac
fi
}
function rx-gcc-toolchain {
add_path $prebuilt/renesas-toolchain/rx-elf-gcc/bin
if [ ! -f "$prebuilt/renesas-toolchain/rx-elf-gcc/bin/rx-elf-gcc" ]; then
case $os in
Linux)
# Download toolchain source code
# RX toolchain is built from source code. Once prebuilt RX toolchain is made available, the below code snippet can be removed.
mkdir -p $prebuilt/renesas-tools/rx/source; cd $prebuilt/renesas-tools/rx/source
wget --quiet https://gcc-renesas.com/downloads/d.php?f=rx/binutils/4.8.4.201803-gnurx/rx_binutils2.24_2018Q3.tar.gz \
-O rx_binutils2.24_2018Q3.tar.gz
tar zxf rx_binutils2.24_2018Q3.tar.gz
wget --quiet https://gcc-renesas.com/downloads/d.php?f=rx/gcc/4.8.4.201803-gnurx/rx_gcc_4.8.4_2018Q3.tar.gz \
-O rx_gcc_4.8.4_2018Q3.tar.gz
tar zxf rx_gcc_4.8.4_2018Q3.tar.gz
wget --quiet https://gcc-renesas.com/downloads/d.php?f=rx/newlib/4.8.4.201803-gnurx/rx_newlib2.2.0_2018Q3.tar.gz \
-O rx_newlib2.2.0_2018Q3.tar.gz
tar zxf rx_newlib2.2.0_2018Q3.tar.gz
# Install binutils
cd $prebuilt/renesas-tools/rx/source/binutils; chmod +x ./configure ./mkinstalldirs
mkdir -p $prebuilt/renesas-tools/rx/build/binutils; cd $prebuilt/renesas-tools/rx/build/binutils
$prebuilt/renesas-tools/rx/source/binutils/configure --target=rx-elf --prefix=$prebuilt/renesas-toolchain/rx-elf-gcc \
--disable-werror
make; make install
# Install gcc
cd $prebuilt/renesas-tools/rx/source/gcc
chmod +x ./contrib/download_prerequisites ./configure ./move-if-change ./libgcc/mkheader.sh
./contrib/download_prerequisites
sed -i '1s/^/@documentencoding ISO-8859-1\n/' ./gcc/doc/gcc.texi
sed -i 's/@tex/\n&/g' ./gcc/doc/gcc.texi && sed -i 's/@end tex/\n&/g' ./gcc/doc/gcc.texi
mkdir -p $prebuilt/renesas-tools/rx/build/gcc; cd $prebuilt/renesas-tools/rx/build/gcc
$prebuilt/renesas-tools/rx/source/gcc/configure --target=rx-elf --prefix=$prebuilt/renesas-toolchain/rx-elf-gcc \
--disable-shared --disable-multilib --disable-libssp --disable-libstdcxx-pch --disable-werror --enable-lto \
--enable-gold --with-pkgversion=GCC_Build_1.02 --with-newlib --enable-languages=c
make; make install
# Install newlib
cd $prebuilt/renesas-tools/rx/source/newlib; chmod +x ./configure
mkdir -p $prebuilt/renesas-tools/rx/build/newlib; cd $prebuilt/renesas-tools/rx/build/newlib
$prebuilt/renesas-tools/rx/source/newlib/configure --target=rx-elf --prefix=$prebuilt/renesas-toolchain/rx-elf-gcc
make; make install
rm -rf $prebuilt/renesas-tools/
;;
esac
fi
rx-elf-gcc --version
}
function c-cache {
add_path $prebuilt/ccache/bin
if ! type ccache > /dev/null; then
case $os in
Darwin)
brew install ccache
;;
Linux)
cd $prebuilt;
wget https://github.com/ccache/ccache/releases/download/v3.7.7/ccache-3.7.7.tar.gz
tar zxf ccache-3.7.7.tar.gz
cd ccache-3.7.7; ./configure --prefix=$prebuilt/ccache; make; make install
cd $prebuilt; rm -rf ccache-3.7.7; rm ccache-3.7.7.tar.gz
;;
esac
fi
ccache --version
mkdir -p $prebuilt/ccache/bin/
ln -sf `which ccache` $prebuilt/ccache/bin/x86_64-elf-gcc
ln -sf `which ccache` $prebuilt/ccache/bin/x86_64-elf-g++
ln -sf `which ccache` $prebuilt/ccache/bin/cc
ln -sf `which ccache` $prebuilt/ccache/bin/c++
ln -sf `which ccache` $prebuilt/ccache/bin/clang
ln -sf `which ccache` $prebuilt/ccache/bin/clang++
ln -sf `which ccache` $prebuilt/ccache/bin/gcc
ln -sf `which ccache` $prebuilt/ccache/bin/g++
ln -sf `which ccache` $prebuilt/ccache/bin/arm-none-eabi-gcc
ln -sf `which ccache` $prebuilt/ccache/bin/arm-none-eabi-g++
ln -sf `which ccache` $prebuilt/ccache/bin/p32-gcc
ln -sf `which ccache` $prebuilt/ccache/bin/riscv64-unknown-elf-gcc
ln -sf `which ccache` $prebuilt/ccache/bin/riscv64-unknown-elf-g++
ln -sf `which ccache` $prebuilt/ccache/bin/xtensa-esp32-elf-gcc
ln -sf `which ccache` $prebuilt/ccache/bin/avr-gcc
ln -sf `which ccache` $prebuilt/ccache/bin/avr-g++
}
function binutils {
mkdir -p $prebuilt/bintools/bin
add_path $prebuilt/bintools/bin
if ! type objcopy > /dev/null; then
case $os in
Darwin)
brew install binutils
# It is possible we cached prebuilt but did brew install so recreate
# simlink if it exists
rm -f $prebuilt/bintools/bin/objcopy
ln -s /usr/local/opt/binutils/bin/objcopy $prebuilt/bintools/bin/objcopy
;;
esac
fi
}
function usage {
echo ""
echo "USAGE: $0 [-i] [-s] [-c] [-*] <testlist>"
echo " $0 -h"
echo ""
echo "Where:"
echo " -i install tools"
echo " -s setup repos"
echo " -c enable ccache"
echo " -* support all options in testbuild.sh"
echo " -h will show this help test and terminate"
echo " <testlist> select testlist file"
echo ""
exit 1
}
function enable_ccache {
export USE_CCACHE=1;
ccache -z
ccache -M 5G;
ccache -s
}
function setup_repos {
pushd .
if [ -d "$nuttx" ]; then
cd $nuttx; git pull
else
git clone https://github.com/apache/incubator-nuttx.git $nuttx
cd $nuttx
fi
git log -1
if [ -d "$apps" ]; then
cd $apps; git pull
else
git clone https://github.com/apache/incubator-nuttx-apps.git $apps
cd $apps
fi
git log -1
popd
}
function install_tools {
pushd .
for func in $install; do
$func
done
popd
echo PATH=$EXTRA_PATH\$PATH > $prebuilt/env.sh
}
function run_builds {
local ncpus
case $os in
Darwin)
ncpus=$(sysctl -n hw.ncpu)
;;
Linux)
ncpus=`grep -c ^processor /proc/cpuinfo`
;;
esac
options+="-j $ncpus"
for build in $builds; do
$nuttx/tools/testbuild.sh $options -e "-Wno-cpp -Werror" $build
done
}
if [ -z "$1" ]; then
usage
fi
while [ ! -z "$1" ]; do
case "$1" in
-h )
usage
;;
-i )
install_tools
;;
-c )
enable_ccache
;;
-s )
setup_repos
;;
-* )
options+="$1 "
;;
* )
builds=$@
break
;;
esac
shift
done
run_builds

View file

@ -0,0 +1,279 @@
# 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.
FROM ubuntu:20.04 AS builder-base
# NOTE WE ARE NOT REMOVEING APT CACHE.
# This should only be used for temp build images that artifacts will be copied from
RUN apt-get update -qq && apt-get install -y -qq \
curl \
xz-utils
###############################################################################
# Base image that should be used to prepare tools from nuttx-tools
###############################################################################
FROM builder-base AS nuttx-tools
RUN apt-get update -qq && DEBIAN_FRONTEND="noninteractive" apt-get install -y -qq \
flex \
bison \
gperf \
libncurses5-dev \
make \
cmake \
g++ \
gawk \
git
RUN mkdir /tools
WORKDIR /tools
RUN mkdir -p /tools/nuttx-tools
RUN curl -s -L https://bitbucket.org/nuttx/tools/get/9ad3e1ee75c7.tar.gz \
| tar -C nuttx-tools --strip-components=1 -xz
RUN cd nuttx-tools/kconfig-frontends \
&& ./configure --enable-mconf --disable-gconf --disable-qconf --enable-static --prefix=/tools/kconfig-frontends \
&& make install
RUN cd nuttx-tools \
&& mkdir genromfs \
&& tar -C genromfs --strip-components=1 -xf genromfs-0.5.2.tar.gz \
&& cd genromfs \
&& make install PREFIX=/tools/genromfs
RUN mkdir bloaty -p \
&& git clone --depth 1 --branch v1.1 https://github.com/google/bloaty bloaty \
&& cd bloaty \
&& cmake -DCMAKE_SYSTEM_PREFIX_PATH=/tools/bloaty \
&& make install
CMD [ "/bin/bash" ]
###############################################################################
# Base image that should be used to prepare arch build images
###############################################################################
FROM builder-base AS nuttx-toolchain-base
RUN mkdir /tools
WORKDIR /tools
###############################################################################
# Build image for tool required by ARM builds
###############################################################################
FROM nuttx-toolchain-base AS nuttx-toolchain-arm
# Download the latest ARM GCC toolchain prebuilt by ARM
RUN mkdir gcc-arm-none-eabi && \
curl -s -L "https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=108bd959-44bd-4619-9c19-26187abf5225&la=en&hash=E788CE92E5DFD64B2A8C246BBA91A249CB8E2D2D" \
| tar -C gcc-arm-none-eabi --strip-components 1 -xj
###############################################################################
# Build image for tool required by Pinguino builds
###############################################################################
FROM nuttx-toolchain-base AS nuttx-toolchain-pinguino
# Download the pinguino compilers. Note this includes both 8bit and 32bit
# toolchains and builds for multiple host systems. Only copy what is needed.
RUN mkdir pinguino-compilers && \
curl -s -L "https://github.com/PinguinoIDE/pinguino-compilers/archive/62db5158d7f6d41c6fadb05de81cc31dd81a1958.tar.gz" \
| tar -C pinguino-compilers --strip-components=2 --wildcards -xz */linux64
###############################################################################
# Build image for tool required by RISCV builds
###############################################################################
FROM nuttx-toolchain-base AS nuttx-toolchain-riscv
# Download the latest RISCV GCC toolchain prebuilt by SiFive
RUN mkdir riscv64-unknown-elf-gcc && \
curl -s -L "https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz" \
| tar -C riscv64-unknown-elf-gcc --strip-components 1 -xz
###############################################################################
# Build image for tool required by ESP32 builds
###############################################################################
FROM nuttx-toolchain-base AS nuttx-toolchain-esp32
# Download the latest ESP32 GCC toolchain prebuilt by Espressif
RUN mkdir -p xtensa-esp32-elf-gcc && \
curl -s -L "https://github.com/espressif/crosstool-NG/releases/download/esp-2020r3/xtensa-esp32-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz" \
| tar -C xtensa-esp32-elf-gcc --strip-components 1 -xz
RUN echo "ESP Binaries: 2021/02/20"
RUN mkdir -p /tools/blobs && cd /tools/blobs \
&& curl -s -L "https://github.com/espressif/esp-nuttx-bootloader/releases/download/latest/bootloader-esp32.bin" -o bootloader-esp32.bin \
&& curl -s -L "https://github.com/espressif/esp-nuttx-bootloader/releases/download/latest/bootloader-esp32c3.bin" -o bootloader-esp32c3.bin \
&& curl -s -L "https://github.com/espressif/esp-nuttx-bootloader/releases/download/latest/partition-table-esp32.bin" -o partition-table-esp32.bin \
&& curl -s -L "https://github.com/espressif/esp-nuttx-bootloader/releases/download/latest/partition-table-esp32c3.bin" -o partition-table-esp32c3.bin
###############################################################################
# Build image for tool required by Renesas builds
###############################################################################
FROM nuttx-toolchain-base AS nuttx-toolchain-renesas
# Build Renesas RX GCC toolchain
RUN apt-get update -qq && DEBIAN_FRONTEND="noninteractive" apt-get install -y -qq \
flex \
bison \
texinfo \
libncurses5-dev \
m4 \
make \
gcc \
g++ \
wget
# Download toolchain source code
RUN mkdir -p /tools/renesas-tools/source/binutils && \
curl -s -L "https://gcc-renesas.com/downloads/d.php?f=rx/binutils/4.8.4.201803-gnurx/rx_binutils2.24_2018Q3.tar.gz" \
| tar -C renesas-tools/source/binutils --strip-components=1 -xz
RUN mkdir -p /tools/renesas-tools/source/gcc && \
curl -s -L "https://gcc-renesas.com/downloads/d.php?f=rx/gcc/4.8.4.201803-gnurx/rx_gcc_4.8.4_2018Q3.tar.gz" \
| tar -C renesas-tools/source/gcc --strip-components=1 -xz
RUN mkdir -p /tools/renesas-tools/source/newlib && \
curl -s -L "https://gcc-renesas.com/downloads/d.php?f=rx/newlib/4.8.4.201803-gnurx/rx_newlib2.2.0_2018Q3.tar.gz" \
| tar -C renesas-tools/source/newlib --strip-components=1 -xz
# Install binutils
RUN cd renesas-tools/source/binutils && \
chmod +x ./configure ./mkinstalldirs && \
mkdir -p /tools/renesas-tools/build/binutils && cd /tools/renesas-tools/build/binutils && \
/tools/renesas-tools/source/binutils/configure --target=rx-elf --prefix=/tools/renesas-toolchain/rx-elf-gcc --disable-werror &&\
make && make install
ENV PATH="/tools/renesas-toolchain/rx-elf-gcc/bin:$PATH"
# Install gcc
RUN cd renesas-tools/source/gcc && \
chmod +x ./contrib/download_prerequisites ./configure ./move-if-change ./libgcc/mkheader.sh && \
./contrib/download_prerequisites && \
sed -i '1s/^/@documentencoding ISO-8859-1\n/' ./gcc/doc/gcc.texi && \
sed -i 's/@tex/\n&/g' ./gcc/doc/gcc.texi && sed -i 's/@end tex/\n&/g' ./gcc/doc/gcc.texi && \
mkdir -p /tools/renesas-tools/build/gcc && cd /tools/renesas-tools/build/gcc && \
/tools/renesas-tools/source/gcc/configure --target=rx-elf --prefix=/tools/renesas-toolchain/rx-elf-gcc \
--disable-shared --disable-multilib --disable-libssp --disable-libstdcxx-pch --disable-werror --enable-lto \
--enable-gold --with-pkgversion=GCC_Build_1.02 --with-newlib --enable-languages=c && \
make && make install
ENV PATH="/tools/renesas-toolchain/rx-elf-gcc/bin:$PATH"
# Install newlib
RUN cd renesas-tools/source/newlib && \
chmod +x ./configure && \
mkdir -p /tools/renesas-tools/build/newlib && cd /tools/renesas-tools/build/newlib && \
/tools/renesas-tools/source/newlib/configure --target=rx-elf --prefix=/tools/renesas-toolchain/rx-elf-gcc && \
make && make install
RUN cd /tools/renesas-tools/build/gcc && \
make && make install
###############################################################################
# Final Docker image used for running CI system. This includes all toolchains
# supported by the CI system.
###############################################################################
FROM ubuntu:20.04
LABEL maintainer="dev@nuttx.apache.org"
RUN dpkg --add-architecture i386
# This is used for the final images so make sure to not store apt cache
# Note: xtensa-esp32-elf-gdb is linked to libpython2.7
RUN apt-get update -qq && DEBIAN_FRONTEND="noninteractive" apt-get install -y -qq --no-install-recommends \
-o APT::Immediate-Configure=0 \
avr-libc \
build-essential \
ccache \
curl \
gcc \
gcc-avr \
gcc-multilib \
gettext \
git \
lib32z1-dev \
libc6-dev-i386 \
libasound2-dev libasound2-dev:i386 \
libcurl4-openssl-dev \
libpulse-dev libpulse-dev:i386 \
libpython2.7 \
libx11-dev libx11-dev:i386 \
libxext-dev libxext-dev:i386 \
linux-libc-dev:i386 \
linux-headers-generic \
python3 \
python3-pip \
python-is-python3 \
u-boot-tools \
unzip \
wget \
xxd \
&& rm -rf /var/lib/apt/lists/*
# Configure out base setup for adding python packages
ENV PIP_DISABLE_PIP_VERSION_CHECK=true
# This disables the cache with value 0. We do not want caching as it
# increases the images size.
ENV PIP_NO_CACHE_DIR=0
# We are using the minimal python installation from the system so include
# setuptools and also wheel so we can use the binary releases of packages
# instead of requiring them to be compiled.
RUN pip3 install setuptools wheel
RUN mkdir /tools
WORKDIR /tools
# Pull in the tools we just built for nuttx
COPY --from=nuttx-tools /tools/genromfs/ /tools/genromfs/
ENV PATH="/tools/genromfs/usr/bin:$PATH"
COPY --from=nuttx-tools /tools/kconfig-frontends/ kconfig-frontends/
ENV PATH="/tools/kconfig-frontends/bin:$PATH"
COPY --from=nuttx-tools /tools/bloaty/ bloaty/
ENV PATH="/tools/bloaty/bin:$PATH"
# ARM toolchain
COPY --from=nuttx-toolchain-arm /tools/gcc-arm-none-eabi/ gcc-arm-none-eabi/
ENV PATH="/tools/gcc-arm-none-eabi/bin:$PATH"
# MIPS toolchain
COPY --from=nuttx-toolchain-pinguino /tools/pinguino-compilers/p32/ pinguino-compilers/p32/
ENV PATH="/tools/pinguino-compilers/p32/bin:$PATH"
# RISCV toolchain
COPY --from=nuttx-toolchain-riscv /tools/riscv64-unknown-elf-gcc/ riscv64-unknown-elf-gcc/
ENV PATH="/tools/riscv64-unknown-elf-gcc/bin:$PATH"
# ESP32 toolchain
COPY --from=nuttx-toolchain-esp32 /tools/xtensa-esp32-elf-gcc/ xtensa-esp32-elf-gcc/
ENV PATH="/tools/xtensa-esp32-elf-gcc/bin:$PATH"
RUN mkdir -p /tools/blobs/esp-bins
COPY --from=nuttx-toolchain-esp32 /tools/blobs/* /tools/blobs/esp-bins/
RUN pip3 install esptool
# Renesas toolchain
COPY --from=nuttx-toolchain-renesas /tools/renesas-toolchain/rx-elf-gcc/ renesas-toolchain/rx-elf-gcc/
ENV PATH="/tools/renesas-toolchain/rx-elf-gcc/bin:$PATH"
# Configure ccache
RUN mkdir -p /tools/ccache/bin && \
ln -sf `which ccache` /tools/ccache/bin/cc && \
ln -sf `which ccache` /tools/ccache/bin/c++ && \
ln -sf `which ccache` /tools/ccache/bin/clang && \
ln -sf `which ccache` /tools/ccache/bin/clang++ && \
ln -sf `which ccache` /tools/ccache/bin/gcc && \
ln -sf `which ccache` /tools/ccache/bin/g++ && \
ln -sf `which ccache` /tools/ccache/bin/arm-none-eabi-gcc && \
ln -sf `which ccache` /tools/ccache/bin/arm-none-eabi-g++ && \
ln -sf `which ccache` /tools/ccache/bin/p32-gcc && \
ln -sf `which ccache` /tools/ccache/bin/riscv64-unknown-elf-gcc && \
ln -sf `which ccache` /tools/ccache/bin/riscv64-unknown-elf-g++ && \
ln -sf `which ccache` /tools/ccache/bin/xtensa-esp32-elf-gcc && \
ln -sf `which ccache` /tools/ccache/bin/xtensa-esp32-elf-g++ && \
ln -sf `which ccache` /tools/ccache/bin/avr-gcc && \
ln -sf `which ccache` /tools/ccache/bin/avr-g++ && \
ln -sf `which ccache` /tools/ccache/bin/rx-elf-gcc
ENV PATH="/tools/ccache/bin:$PATH"
CMD [ "/bin/bash" ]

35
tools/ci/testlist/all.dat Normal file
View file

@ -0,0 +1,35 @@
/arm,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-eagle100:nxflat
-eagle100:thttpd
-imxrt1050-evk:libcxxtest
-imxrt1060-evk:libcxxtest
-launchxl-cc1310:nsh
-launchxl-tms57004:nsh
-lpcxpresso-lpc1768:thttpd
-moxa:nsh
-olimex-lpc1766stk:slip-httpd
-olimex-lpc1766stk:thttpd-nxflat
-shenzhou:thttpd
-stm32f4discovery:cxxtest
-stm32f4discovery:testlibcxx
-stm32f4discovery:winbuild
-tms570ls31x-usb-kit:nsh
-zkit-arm-1769:thttpd
/mips,CONFIG_MIPS32_TOOLCHAIN_PINGUINOL
/risc-v,CONFIG_RV32IM_TOOLCHAIN_GNU_RVGL
/sim
/x86
/x86_64
/xtensa
/renesas/rx65n/rx65n-grrose
-rx65n-grrose:ipv6
/renesas/rx65n/rx65n-rsk2mb
-rx65n-rsk2mb:ipv6

View file

@ -0,0 +1 @@
/arm/[a-h]*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,3 @@
/arm/[i-k]*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-imxrt1050-evk:libcxxtest
-imxrt1060-evk:libcxxtest

View file

@ -0,0 +1,5 @@
/arm/lpc17xx_40xx,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-lpcxpresso-lpc1768:thttpd
-olimex-lpc1766stk:slip-httpd
-olimex-lpc1766stk:thttpd-nxflat
-zkit-arm-1769:thttpd

View file

@ -0,0 +1,11 @@
/arm/lc823450,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/lpc214x,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/lpc2378,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/lpc31xx,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/lpc43xx,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/lpc54xx,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,6 @@
/arm/[m-r]*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-moxa:nsh
/arm/s32k1xx,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/sam34,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,7 @@
/arm/sama5,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/samd2l2,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/samd5e5,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/samv7,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,7 @@
/arm/stm32/[a-m]*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/nucleo-f1*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/nucleo-f2*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/nucleo-f30*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,9 @@
/arm/stm32/nucleo-f33*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/nucleo-f4*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/nucleo-g*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/nucleo-l*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/olimex-*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,14 @@
/arm/stm32/olimexino-stm32,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/omnibusf4,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/photon,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/shenzhou,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-shenzhou:thttpd
/arm/stm32/stm3210e-eval,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm3220g-eval,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm3240g-eval,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,15 @@
/arm/stm32/stm32_tiny,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32butterfly2,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32f103-minimum,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32f334-disco,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32f3discovery,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32f411-minimum,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32f411e-disco,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32f429i-disco,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,10 @@
/arm/stm32/stm32f4discovery,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-stm32f4discovery:cxxtest
-stm32f4discovery:testlibcxx
-stm32f4discovery:winbuild
/arm/stm32/stm32ldiscovery,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/stm32vldiscovery,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32/viewtool-stm32f107,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,3 @@
/arm/stm32f*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/stm32h*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL

View file

@ -0,0 +1,10 @@
/arm/stm32l*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/str71x,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
/arm/[t-z]*,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
-eagle100:nxflat
-eagle100:thttpd
-launchxl-cc1310:nsh
-launchxl-tms57004:nsh
-tms570ls31x-usb-kit:nsh

View file

@ -0,0 +1,38 @@
# Chose a minimalistic subset of board/configs due to macOS builds
# being extremely slow on GitHub
# AVR
#
# We do not have a toolchain for avr32 outside of Microchip login wall.
# The work was never upstreamed to GCC.
/avr/atmega/arduino-mega2560/configs/nsh
# MIPS
#
# PINGUINOL toolchain doesn't provide macOS binaries
# with the same name
#/mips/pic32mx/pic32mx-starterkit/configs/nsh,CONFIG_MIPS32_TOOLCHAIN_PINGUINOL
# RISC-V
/risc-v/bl602/bl602evb/configs/wifi,CONFIG_RV32IM_TOOLCHAIN_GNU_RVGL
/risc-v/esp32c3/esp32c3-devkit/configs/wapi,CONFIG_RV32IM_TOOLCHAIN_GNU_RVGL
# ARM
/arm/stm32/stm32f4discovery/configs/nsh,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL
# XTENSA
/xtensa/esp32/esp32-devkitc/configs/wapi
# x86_64-elf-gcc from homebrew doesn't seem to
# provide __udivdi3 etc for -m32, so we do not build
# x86
# x86_64
/x86_64/intel64/qemu-intel64/configs/nsh

View file

@ -0,0 +1,18 @@
# We do not have a toolchain for avr32 outside of Microchip login wall.
# The work was never upstreamed to GCC.
/avr
-avr32dev1:nsh
-avr32dev1:ostest
# PINGUINOL toolchain doesn't provide macOS binaries
# with the same name
/mips,CONFIG_MIPS32_TOOLCHAIN_PINGUINOL
/renesas/rx65n/rx65n-grrose
/renesas/rx65n/rx65n-rsk2mb
/x86
# x86_64-elf-gcc from homebrew doesn't seem to
# provide __udivdi3 etc for -m32
/x86_64

View file

@ -0,0 +1 @@
/risc-v,CONFIG_RV32IM_TOOLCHAIN_GNU_RVGL

View file

@ -0,0 +1,21 @@
/sim/*/*/*/[a-n]*
# macOS doesn't have ALSA
-Darwin,sim:alsa
-Darwin,sim:cxxtest
-Darwin,sim:libcxxtest
# Do not build Linux configs
-Darwin,sim:linuxi2c
# macOS doesn't support 32bit(CONFIG_SIM_M32=y) anymore
-Darwin,sim:loadable
-Darwin,sim:module32
# macOS doesn't have X11
-Darwin,sim:lvgl
-Darwin,sim:nsh2
-Darwin,sim:nx11
-Darwin,sim:nxlines
-Darwin,sim:nxwm

View file

@ -0,0 +1,9 @@
/sim/*/*/*/[o-z]*
# macOS doesn't support 32bit anymore(CONFIG_SIM_M32=y)
-Darwin,sim:rpproxy
-Darwin,sim:rpserver
-Darwin,sim:sotest32
# macOS doesn't have X11
-Darwin,sim:touchscreen

View file

@ -0,0 +1 @@
/xtensa