diff --git a/.github/workflows/ox64-special.yml b/.github/workflows/ox64-special.yml new file mode 100644 index 0000000..4f666f1 --- /dev/null +++ b/.github/workflows/ox64-special.yml @@ -0,0 +1,200 @@ +## Special Build and Test: NuttX for Ox64 + +name: Special Test of NuttX for Ox64 + +permissions: + ## Allow publishing of GitHub Release + contents: write + +on: + + ## Run every day at 0:00 UTC + ## schedule: + ## - cron: '0 0 * * *' + + ## Run on every commit to this branch + push: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Install Build Tools + run: | + sudo apt -y update + sudo apt -y install \ + bison flex gettext texinfo libncurses5-dev libncursesw5-dev \ + gperf automake libtool pkg-config build-essential gperf genromfs \ + libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \ + libexpat-dev gcc-multilib g++-multilib u-boot-tools util-linux \ + kconfig-frontends \ + wget u-boot-tools + + - name: Install Toolchain + run: | + wget --no-check-certificate https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz + tar -xf riscv64-unknown-elf-toolchain*.tar.gz + + - name: Checkout Source Files + run: | + mkdir nuttx + cd nuttx + git clone https://github.com/apache/incubator-nuttx nuttx + git clone https://github.com/apache/incubator-nuttx-apps apps + + - name: Build + run: | + ## Add toolchain to PATH + export PATH=$PATH:$PWD/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin + cd nuttx/nuttx + + ## Dump the git hash + hash1=`git rev-parse HEAD` + pushd ../apps + hash2=`git rev-parse HEAD` + popd + echo NuttX Source: https://github.com/apache/nuttx/tree/$hash1 >nuttx.hash + echo NuttX Apps: https://github.com/apache/nuttx-apps/tree/$hash2 >>nuttx.hash + cat nuttx.hash + + ## Show the GCC version + riscv64-unknown-elf-gcc -v + + ## Configure the build + tools/configure.sh ox64:nsh + + ## Preserve the build config + cp .config nuttx.config + + ## Run the build + make + + ## Export the Binary Image to nuttx.bin + riscv64-unknown-elf-objcopy \ + -O binary \ + nuttx \ + nuttx.bin + + ## Build Apps Filesystem + make export + pushd ../apps + ./tools/mkimport.sh -z -x ../nuttx/nuttx-export-*.tar.gz + make import + popd + + ## Generate Initial RAM Disk + genromfs -f initrd -d ../apps/bin -V "NuttXBootVol" + + ## Prepare a Padding with 64 KB of zeroes + head -c 65536 /dev/zero >/tmp/nuttx.pad + + ## Append Padding and Initial RAM Disk to NuttX Kernel + cat nuttx.bin /tmp/nuttx.pad initrd \ + >Image + + ## Show the size + riscv64-unknown-elf-size nuttx + + ## Dump the disassembly to nuttx.S + riscv64-unknown-elf-objdump \ + --syms --source --reloc --demangle --line-numbers --wide \ + --debugging \ + nuttx \ + >nuttx.S \ + 2>&1 + + ## Dump the init disassembly to init.S + riscv64-unknown-elf-objdump \ + --syms --source --reloc --demangle --line-numbers --wide \ + --debugging \ + ../apps/bin/init \ + >init.S \ + 2>&1 + + ## Dump the hello disassembly to hello.S + riscv64-unknown-elf-objdump \ + --syms --source --reloc --demangle --line-numbers --wide \ + --debugging \ + ../apps/bin/hello \ + >hello.S \ + 2>&1 + + - name: Upload Build Outputs as Artifacts + uses: actions/upload-artifact@v3 + with: + name: nuttx.zip + path: | + nuttx/nuttx/nuttx* + nuttx/nuttx/initrd + nuttx/nuttx/init.S + nuttx/nuttx/hello.S + nuttx/nuttx/Image + nuttx/nuttx/System.map + + - name: Zip Build Outputs for GitHub Release + run: | + cd nuttx/nuttx + zip nuttx.zip nuttx* initrd init.S hello.S Image System.map + + - name: Get Current Date + id: date + run: echo "::set-output name=date::$(date +'%Y-%m-%d-%H-%M-%S')" + + - name: Publish the GitHub Release + uses: softprops/action-gh-release@v1 + with: + tag_name: special-ox64-${{ steps.date.outputs.date }} + draft: false + prerelease: false + generate_release_notes: false + files: | + nuttx/nuttx/nuttx.zip + nuttx/nuttx/nuttx + nuttx/nuttx/nuttx.S + nuttx/nuttx/nuttx.bin + nuttx/nuttx/nuttx.map + nuttx/nuttx/nuttx.hex + nuttx/nuttx/nuttx.config + nuttx/nuttx/nuttx.manifest + nuttx/nuttx/nuttx.hash + nuttx/nuttx/nuttx-export* + nuttx/nuttx/initrd + nuttx/nuttx/init.S + nuttx/nuttx/hello.S + nuttx/nuttx/Image + nuttx/nuttx/System.map + + - name: Install Emulator Build Tools + run: | + sudo apt -y update + sudo apt -y install \ + expect libcurl4-openssl-dev libssl-dev zlib1g-dev libsdl2-dev wget + + - name: Checkout Emulator Source Files + run: | + git clone https://github.com/lupyuen/ox64-tinyemu + + - name: Build Ox64 BL808 Emulator + run: | + cd ox64-tinyemu + make + cp temu .. + + - name: Download Test Script + run: | + cd nuttx/nuttx + cp ../../temu . + wget https://github.com/lupyuen/nuttx-ox64/raw/main/nuttx.cfg + wget https://github.com/lupyuen/nuttx-ox64/raw/main/nuttx.exp + chmod +x nuttx.exp + ls -l + cat nuttx.hash + + - name: Run Test + run: | + cd nuttx/nuttx + ./nuttx.exp