From 837ef4dde6b8cceb747c07dcfc5842c8feb8379d Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Sat, 20 Jan 2024 22:55:42 +0000 Subject: [PATCH] CI (#81) --- .github/workflows/apt-deps.txt | 1 + .github/workflows/main.yml | 331 +++++++++++++++++++++++++-------- CMakeLists.txt | 22 +-- README.md | 9 + headers_updated_at.txt | 1 + mm/include/libc/alloca.h | 2 +- 6 files changed, 281 insertions(+), 85 deletions(-) create mode 100644 .github/workflows/apt-deps.txt create mode 100644 README.md create mode 100644 headers_updated_at.txt diff --git a/.github/workflows/apt-deps.txt b/.github/workflows/apt-deps.txt new file mode 100644 index 000000000..2a12d368c --- /dev/null +++ b/.github/workflows/apt-deps.txt @@ -0,0 +1 @@ +libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev ninja-build diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0a3fdf2f3..f40dd17a7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,86 +2,271 @@ name: generate-builds on: push: pull_request: - +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: - # build-windows: - # runs-on: self-hosted - # steps: - # - name: Install dependencies - # if: ${{ !vars.WINDOWS_RUNNER }} - # run: | - # choco install ninja - # Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue - # - uses: actions/checkout@v3 - # with: - # submodules: true - # # - name: ccache - # # uses: hendrikmuhs/ccache-action@v1.2 - # # with: - # # key: ${{ runner.os }}-ccache - # - name: vcpkg - # uses: johnwason/vcpkg-action@v5 - # with: - # pkgs: zlib bzip2 libpng sdl2 sdl2-net glew glfw3 - # token: ${{ github.token }} - # triplet: 'x64-windows-release' - # - name: Configure Developer Command Prompt - # uses: ilammy/msvc-dev-cmd@v1 - # - name: Build SoH - # env: - # VCPKG_ROOT: ${{github.workspace}}/vcpkg - # run: | - # set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" - # cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBUILD_REMOTE_CONTROL=1 - # cmake --build build-windows --config Release --target ExtractAssets --parallel 10 - # cmake --build build-windows --config Release --target ExtractAssetHeaders --parallel 10 - # cmake --build build-windows --config Release --parallel 10 - - # mkdir soh-windows - # mv ./x64/Release/soh.exe ./soh-windows/soh.exe - # mkdir soh-windows/debug - # mkdir soh-windows/mods - # New-Item soh-windows/mods/custom_otr_files_go_here.txt -type file - # mv ./x64/Release/soh.pdb ./soh-windows/debug/soh.pdb - # mv ./README.md ./soh-windows/readme.txt - # mv ./build-windows/gamecontrollerdb.txt ./soh-windows/gamecontrollerdb.txt - # mv ./x64/Release/assets ./soh-windows - # - name: Upload build - # uses: actions/upload-artifact@v3 - # with: - # name: soh-windows - # path: soh-windows - build-windows: - runs-on: self-hosted + generate-soh-otr-and-headers: + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 with: submodules: true - - name: Extract Assets + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2.11 + with: + key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-ccache-${{ github.ref }} + ${{ runner.os }}-ccache- + - name: Cache build folders + uses: actions/cache@v4 + with: + key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-build-${{ github.ref }} + ${{ runner.os }}-build- + path: | + build-cmake + SDL2-2.26.1 + - name: Install latest SDL + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + if [ ! -d "SDL2-2.26.1" ]; then + wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz + tar -xzf SDL2-2.26.1.tar.gz + fi + cd SDL2-2.26.1 + ./configure + make -j + sudo make install + sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ + - name: Download Rom + run: | + url="${{ secrets.BASEROM }}" + outputPath="${{ github.workspace }}/OTRExporter/baserom.z64" + wget "$url" -O "$outputPath" + - name: Generate soh.otr + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release + cmake --build build-cmake --config Release --target GenerateSohOtr -j + - uses: actions/upload-artifact@v4 + with: + name: soh.otr + path: soh.otr + retention-days: 1 + - name: Generate headers + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release + cmake --build build-cmake --config Release --target ExtractAssetHeaders -j + + find mm/assets/**/* -type f -exec touch -d "$(cat headers_updated_at.txt)" {} \; + - uses: actions/upload-artifact@v4 + with: + name: headers + path: mm/assets + retention-days: 1 + build-linux: + needs: generate-soh-otr-and-headers + strategy: + fail-fast: true + matrix: + include: + # - os: ubuntu-20.04 + # gcc: 10 + # archive-suffix: compatibility + - os: ubuntu-22.04 + gcc: 12 + archive-suffix: performance + runs-on: ${{ (matrix.os == 'ubuntu-20.04' && ((vars.LINUX_COMPATIBILITY_RUNNER && fromJSON(vars.LINUX_COMPATIBILITY_RUNNER)) || matrix.os)) || (matrix.os == 'ubuntu-22.04' && ((vars.LINUX_PERFORMANCE_RUNNER && fromJSON(vars.LINUX_PERFORMANCE_RUNNER)) || matrix.os)) }} + steps: + - uses: actions/checkout@v3 + with: + submodules: true + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2.11 + with: + key: ${{ matrix.os }}-ccache-${{ github.ref }}-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-ccache-${{ github.ref }} + ${{ matrix.os }}-ccache- + - name: Cache build folders + uses: actions/cache@v4 + with: + key: ${{ matrix.os }}-build-${{ github.ref }}-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-build-${{ github.ref }} + ${{ matrix.os }}-build- + path: | + build-cmake + SDL2-2.26.1 + - name: Install latest SDL + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + if [ ! -d "SDL2-2.26.1" ]; then + wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz + tar -xzf SDL2-2.26.1.tar.gz + fi + cd SDL2-2.26.1 + ./configure + make -j + sudo make install + sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ + - name: Download soh.otr + uses: actions/download-artifact@v4 + with: + name: soh.otr + - name: Download Headers + uses: actions/download-artifact@v4 + with: + name: headers + path: mm/assets + - name: Build 2Ship + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release + cmake --build build-cmake --config Release -j + # Not building releases/artifacts for now + # (cd build-cmake && cpack -G External) + + # mv README.md readme.txt + # mv build-cmake/*.appimage 2ship.appimage + env: + CC: gcc-${{ matrix.gcc }} + CXX: g++-${{ matrix.gcc }} + # - name: Upload build + # uses: actions/upload-artifact@v3 + # with: + # name: 2ship-linux-${{ matrix.archive-suffix }} + # path: | + # # 2ship.appimage + # readme.txt + # build-windows: + # needs: generate-soh-otr-and-headers + # runs-on: windows-latest + # steps: + # - name: Install dependencies + # run: | + # choco install ninja + # - uses: actions/checkout@v3 + # with: + # submodules: true + # - name: ccache + # uses: hendrikmuhs/ccache-action@v1.2.11 + # with: + # key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} + # restore-keys: | + # ${{ runner.os }}-ccache-${{ github.ref }} + # ${{ runner.os }}-ccache- + # - name: Cache build folder + # uses: actions/cache@v4 + # with: + # key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }} + # restore-keys: | + # ${{ runner.os }}-build-${{ github.ref }} + # ${{ runner.os }}-build- + # path: | + # build-windows + # vcpkg + # - name: Configure Developer Command Prompt + # uses: ilammy/msvc-dev-cmd@v1 + # - name: Download soh.otr + # uses: actions/download-artifact@v4 + # with: + # name: soh.otr + # - name: Download Headers + # uses: actions/download-artifact@v4 + # with: + # name: headers + # path: mm/assets + # - name: Build 2Ship + # env: + # VCPKG_ROOT: ${{github.workspace}}/vcpkg + # run: | + # set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" + # cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + # cmake --build build-windows --config Release --parallel 10 + + # mkdir 2ship-windows + # mv ./x64/Release/mm.exe ./2ship-windows/2ship.exe + # mkdir 2ship-windows/debug + # mkdir 2ship-windows/mods + # New-Item 2ship-windows/mods/custom_otr_files_go_here.txt -type file + # # mv ./x64/Release/2ship.pdb ./2ship-windows/debug/2ship.pdb + # mv ./README.md ./2ship-windows/readme.txt + # mv ./build-windows/gamecontrollerdb.txt ./2ship-windows/gamecontrollerdb.txt + # mv ./x64/Release/assets ./2ship-windows + # mv ./soh.otr ./2ship-windows/soh.otr + # - name: Upload build + # uses: actions/upload-artifact@v4 + # with: + # name: 2ship-windows + # path: 2ship-windows + build-windows-self-hosted: + needs: generate-soh-otr-and-headers + runs-on: self-hosted + steps: + - name: Install dependencies + run: | + choco install ninja -y + choco install gzip -y + Add-Content $env:GITHUB_PATH $env:ChocolateyInstall + - uses: actions/checkout@v3 + with: + submodules: true + - name: Cache build folder + uses: actions/cache@v4 + with: + save-always: true + key: ${{ runner.os }}-self-build-${{ github.ref }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-self-build-${{ github.ref }} + ${{ runner.os }}-self-build- + path: | + build-windows + vcpkg + - name: Configure Developer Command Prompt + uses: ilammy/msvc-dev-cmd@v1 + - name: Download soh.otr + uses: actions/download-artifact@v4 + with: + name: soh.otr + - name: Download Headers + uses: actions/download-artifact@v4 + with: + name: headers + path: mm/assets + - name: Build 2Ship env: VCPKG_ROOT: ${{github.workspace}}/vcpkg run: | - choco install ninja set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" - C:\CMake\bin\cmake.exe -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBUILD_REMOTE_CONTROL=1 - C:\CMake\bin\cmake.exe --build build-windows --config Release --target ExtractAssets --parallel 10 - C:\CMake\bin\cmake.exe --build build-windows --config Release --target ExtractAssetHeaders --parallel 10 - C:\CMake\bin\cmake.exe --build build-windows --config Release --parallel 10 - - # - name: Build SoH - # env: - # VCPKG_ROOT: ${{github.workspace}}/vcpkg - # run: | - # set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" - # C:\CMake\bin\cmake.exe --build build-windows --config Release --parallel 10 - - # mkdir soh-windows - # mv ./x64/Release/soh.exe ./soh-windows/soh.exe - # mkdir soh-windows/debug - # mkdir soh-windows/mods - # New-Item soh-windows/mods/custom_otr_files_go_here.txt -type file - # mv ./x64/Release/soh.pdb ./soh-windows/debug/soh.pdb - # mv ./README.md ./soh-windows/readme.txt - # mv ./build-windows/gamecontrollerdb.txt ./soh-windows/gamecontrollerdb.txt - # mv ./x64/Release/assets ./soh-windows + cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release + cmake --build build-windows --config Release --parallel 10 + # Not building releases/artifacts for now + # mkdir 2ship-windows + # mv ./x64/Release/mm.exe ./2ship-windows/2ship.exe + # mkdir 2ship-windows/debug + # mkdir 2ship-windows/mods + # New-Item 2ship-windows/mods/custom_otr_files_go_here.txt -type file + # mv ./x64/Release/2ship.pdb ./2ship-windows/debug/2ship.pdb + # mv ./README.md ./2ship-windows/readme.txt + # mv ./build-windows/gamecontrollerdb.txt ./2ship-windows/gamecontrollerdb.txt + # mv ./x64/Release/assets ./2ship-windows + # mv ./soh.otr ./2ship-windows/soh.otr + # - name: Upload build + # uses: actions/upload-artifact@v4 + # with: + # name: 2ship-windows + # path: 2ship-windows diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ecbae90e..f89699c77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,17 +106,17 @@ set_property(TARGET mm PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES) set_property(TARGET mm PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.desktop") set_property(TARGET mm PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png") -#if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") -#install(PROGRAMS "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.sh" DESTINATION . COMPONENT appimage) -#install(FILES "${CMAKE_SOURCE_DIR}/soh.otr" DESTINATION . COMPONENT ship) -#install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor) -#install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT extractor) -#install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT extractor) -#install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT extractor) -#install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_MM.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor) -#install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_MM.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor) -#install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_MM.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor) -#endif() +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") +install(PROGRAMS "${CMAKE_BINARY_DIR}/linux/appimage/soh.sh" DESTINATION . COMPONENT appimage) +install(FILES "${CMAKE_SOURCE_DIR}/soh.otr" DESTINATION . COMPONENT ship) +install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor) +install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT extractor) +install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT extractor) +install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT extractor) +install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_MM.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor) +install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_MM.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor) +install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_MM.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor) +endif() if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") install(DIRECTORY "${CMAKE_SOURCE_DIR}/mm/assets/extractor/" DESTINATION ./assets/extractor COMPONENT 2s2h) diff --git a/README.md b/README.md new file mode 100644 index 000000000..73c1394ab --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# 2 Ship 2 Harkinian + +### Playtesting +If you want to playtest a continuous integration build, you can find them at the links below. Keep in mind that these are for playtesting only, and you will likely encounter bugs and possibly crashes. + +* [Windows](https://nightly.link/HarbourMasters/2ship2harkinian/workflows/generate-builds/develop/2ship-windows.zip) +* [macOS](https://nightly.link/HarbourMasters/2ship2harkinian/workflows/generate-builds/develop/2ship-mac.zip) +* [Linux (performance)](https://nightly.link/HarbourMasters/2ship2harkinian/workflows/generate-builds/develop/2ship-linux-performance.zip) _(requires `glibc 2.35` or newer, but will be more performant than the compatibility build.)_ +* [Linux (compatibility)](https://nightly.link/HarbourMasters/2ship2harkinian/workflows/generate-builds/develop/2ship-linux-compatibility.zip) _(compatible with most Linux distributions, but may not be as performant as the performance build.)_ \ No newline at end of file diff --git a/headers_updated_at.txt b/headers_updated_at.txt new file mode 100644 index 000000000..8f72c9ca5 --- /dev/null +++ b/headers_updated_at.txt @@ -0,0 +1 @@ +2024-01-18 10:07:18 \ No newline at end of file diff --git a/mm/include/libc/alloca.h b/mm/include/libc/alloca.h index fa49dd133..12bda3a55 100644 --- a/mm/include/libc/alloca.h +++ b/mm/include/libc/alloca.h @@ -1,7 +1,7 @@ #ifndef LIBC_ALLOCA_H #define LIBC_ALLOCA_H -void* alloca(u32); +// void* alloca(u32); #define alloca __builtin_alloca #endif