Merge pull request #86 from EngineersBox/_bu_init-rom-offset #133
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# PSn00bSDK GitHub Actions CI script | |
# (C) 2021-2023 spicyjpeg - MPL licensed | |
# The GCC toolchain is stored in the GitHub Actions cache after being built. To | |
# minimize build times, all the toolchain build steps are skipped if there is a | |
# cached copy of the toolchain that has not expired (even though the build-gcc | |
# job still has to run in order to check the cache's contents). The cache is | |
# shared between all actions in a repo. | |
name: Build PSn00bSDK | |
on: [ push, pull_request ] | |
env: | |
BINUTILS_VERSION: '2.41' | |
BINUTILS_OPTIONS: '--disable-docs --disable-nls --disable-werror --with-float=soft' | |
GCC_VERSION: '13.2.0' | |
GCC_OPTIONS: '--disable-docs --disable-nls --disable-werror --disable-libada --disable-libssp --disable-libquadmath --disable-threads --disable-libgomp --disable-libstdcxx-pch --disable-hosted-libstdcxx --enable-languages=c,c++ --without-isl --without-headers --with-float=soft --with-gnu-as --with-gnu-ld' | |
GCC_TARGET: 'mipsel-none-elf' | |
jobs: | |
# This is based on doc/toolchain.md, no surprises here other than the cache. | |
build-gcc: | |
name: Build GCC toolchain | |
runs-on: ubuntu-latest | |
steps: | |
- name: Initialize toolchain cache | |
id: _cache | |
uses: actions/[email protected] | |
with: | |
enableCrossOsArchive: true | |
key: gcc-${{ env.GCC_TARGET }}-${{ env.GCC_VERSION }} | |
path: gcc | |
- name: Install prerequisites | |
if: ${{ steps._cache.outputs.cache-hit != 'true' }} | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y --no-install-recommends make g++-mingw-w64-x86-64 | |
- name: Download and extract sources | |
if: ${{ steps._cache.outputs.cache-hit != 'true' }} | |
run: | | |
wget -q -O binutils.tar.xz https://ftpmirror.gnu.org/gnu/binutils/binutils-${{ env.BINUTILS_VERSION }}.tar.xz | |
wget -q -O gcc.tar.xz https://ftpmirror.gnu.org/gnu/gcc/gcc-${{ env.GCC_VERSION }}/gcc-${{ env.GCC_VERSION }}.tar.xz | |
tar xf binutils.tar.xz | |
tar xf gcc.tar.xz | |
cd gcc-${{ env.GCC_VERSION }} | |
contrib/download_prerequisites | |
- name: Build binutils for Linux | |
if: ${{ steps._cache.outputs.cache-hit != 'true' }} | |
run: | | |
mkdir binutils_linux | |
cd binutils_linux | |
../binutils-${{ env.BINUTILS_VERSION }}/configure --prefix=${{ github.workspace }}/gcc/linux --target=${{ env.GCC_TARGET }} ${{ env.BINUTILS_OPTIONS }} | |
make -j 2 | |
make install-strip | |
echo "${{ github.workspace }}/gcc/linux/bin" >>$GITHUB_PATH | |
- name: Build GCC for Linux | |
if: ${{ steps._cache.outputs.cache-hit != 'true' }} | |
run: | | |
mkdir gcc_linux | |
cd gcc_linux | |
../gcc-${{ env.GCC_VERSION }}/configure --prefix=${{ github.workspace }}/gcc/linux --target=${{ env.GCC_TARGET }} ${{ env.GCC_OPTIONS }} | |
make -j 2 | |
make install-strip | |
- name: Build binutils for Windows | |
if: ${{ steps._cache.outputs.cache-hit != 'true' }} | |
run: | | |
mkdir binutils_windows | |
cd binutils_windows | |
../binutils-${{ env.BINUTILS_VERSION }}/configure --prefix=${{ github.workspace }}/gcc/windows --build=x86_64-linux-gnu --host=x86_64-w64-mingw32 --target=${{ env.GCC_TARGET }} ${{ env.BINUTILS_OPTIONS }} | |
make -j 2 | |
make install-strip | |
- name: Build GCC for Windows | |
if: ${{ steps._cache.outputs.cache-hit != 'true' }} | |
run: | | |
mkdir gcc_windows | |
cd gcc_windows | |
../gcc-${{ env.GCC_VERSION }}/configure --prefix=${{ github.workspace }}/gcc/windows --build=x86_64-linux-gnu --host=x86_64-w64-mingw32 --target=${{ env.GCC_TARGET }} ${{ env.GCC_OPTIONS }} | |
make -j 2 | |
make install-strip | |
# No surprises here either. The GitHub Actions VMs even come with most of the | |
# dependencies required to build PSn00bSDK preinstalled. | |
build-sdk-windows: | |
name: Build PSn00bSDK on Windows | |
runs-on: windows-2022 | |
needs: build-gcc | |
steps: | |
- name: Add MSys2 to PATH | |
run: | | |
echo "C:\msys64\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
- name: Initialize toolchain cache | |
uses: actions/[email protected] | |
with: | |
enableCrossOsArchive: true | |
key: gcc-${{ env.GCC_TARGET }}-${{ env.GCC_VERSION }} | |
path: gcc | |
- name: Install prerequisites | |
run: | | |
pacman -S --noconfirm mingw-w64-x86_64-ninja | |
- name: Fetch repo contents | |
uses: actions/checkout@v4 | |
with: | |
path: sdk | |
submodules: recursive | |
- name: Build and package PSn00bSDK | |
run: | | |
cmake --preset ci -S sdk -G "Visual Studio 17 2022" -DPSN00BSDK_TC=${{ github.workspace }}\gcc\windows | |
cmake --build build | |
cmake --build build -t package | |
# The GitHub Actions UI doesn't allow downloading individual files from | |
# an artifact, so it's best to upload each package type as a separate | |
# artifact. | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: psn00bsdk-windows | |
path: build/packages/*.zip | |
build-sdk-linux: | |
name: Build PSn00bSDK on Linux | |
runs-on: ubuntu-latest | |
needs: build-gcc | |
steps: | |
- name: Initialize toolchain cache | |
uses: actions/[email protected] | |
with: | |
enableCrossOsArchive: true | |
key: gcc-${{ env.GCC_TARGET }}-${{ env.GCC_VERSION }} | |
path: gcc | |
- name: Install prerequisites | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y --no-install-recommends ninja-build | |
- name: Fetch repo contents | |
uses: actions/checkout@v4 | |
with: | |
path: sdk | |
submodules: recursive | |
- name: Build and package PSn00bSDK | |
run: | | |
cmake --preset ci -S sdk -G "Ninja" -DPSN00BSDK_TC=${{ github.workspace }}/gcc/linux | |
cmake --build build | |
cmake --build build -t package | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: psn00bsdk-linux | |
path: build/packages/*.zip | |
# This job takes care of creating a new release and upload the build | |
# artifacts if the last commit is associated to a tag. | |
create-release: | |
name: Create release | |
runs-on: ubuntu-latest | |
needs: [ build-sdk-windows, build-sdk-linux ] | |
steps: | |
- name: Initialize toolchain cache | |
if: ${{ github.ref_type == 'tag' }} | |
uses: actions/[email protected] | |
with: | |
enableCrossOsArchive: true | |
key: gcc-${{ env.GCC_TARGET }}-${{ env.GCC_VERSION }} | |
path: gcc | |
- name: Package GCC toolchains | |
if: ${{ github.ref_type == 'tag' }} | |
run: | | |
cd gcc/windows | |
zip -9 -q -r ../../gcc-${{ env.GCC_TARGET }}-${{ env.GCC_VERSION }}-windows.zip . | |
cd ../linux | |
zip -9 -q -r ../../gcc-${{ env.GCC_TARGET }}-${{ env.GCC_VERSION }}-linux.zip . | |
- name: Fetch repo contents | |
if: ${{ github.ref_type == 'tag' }} | |
uses: actions/checkout@v4 | |
with: | |
path: sdk | |
- name: Generate release notes | |
if: ${{ github.ref_type == 'tag' }} | |
run: | | |
python3 sdk/.github/scripts/generate_release_notes.py -v ${{ github.ref_name }} -o release.md sdk/CHANGELOG.md | |
- name: Fetch build artifacts | |
if: ${{ github.ref_type == 'tag' }} | |
uses: actions/download-artifact@v4 | |
with: | |
path: . | |
- name: Publish release | |
if: ${{ github.ref_type == 'tag' }} | |
uses: softprops/action-gh-release@v1 | |
with: | |
#fail_on_unmatched_files: true | |
body_path: release.md | |
files: | | |
*.zip | |
psn00bsdk-windows/* | |
psn00bsdk-linux/* |