diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bad9951..42fb27a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,22 +14,27 @@ concurrency: cancel-in-progress: true env: - PREMAKE_VERSION: "5.0.0-beta2" + PREMAKE_VERSION: "5.0.0-beta6" jobs: - build-win: + build-windows: name: Build Windows runs-on: windows-latest strategy: fail-fast: false matrix: configuration: - - debug - release + compiler: + - msvc + - clang arch: + - x86 - x64 - arm64 include: + - arch: x86 + platform: Win32 - arch: x64 platform: x64 - arch: arm64 @@ -50,19 +55,24 @@ jobs: with: version: ${{ env.PREMAKE_VERSION }} - - name: Generate project files + - name: Generate project files (clang) + if: matrix.compiler == 'clang' + run: premake5 --cc=${{matrix.compiler}} vs2022 + + - name: Generate project files (msvc) + if: matrix.compiler == 'msvc' run: premake5 vs2022 - name: Set up problem matching uses: ammaraskar/msvc-problem-matcher@master - - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries + - name: Build ${{matrix.arch}} ${{matrix.configuration}} ${{matrix.compiler}} binaries run: msbuild /m /p:Configuration=${{matrix.configuration}} /p:Platform=${{matrix.platform}} build/alterware-master-tool.sln - - name: Upload ${{matrix.arch}} ${{matrix.configuration}} binaries + - name: Upload ${{matrix.arch}} ${{matrix.configuration}} ${{matrix.compiler}} binaries uses: actions/upload-artifact@main with: - name: windows-${{matrix.arch}}-${{matrix.configuration}} + name: windows-${{matrix.arch}}-${{matrix.configuration}}-${{matrix.compiler}} path: | build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master-tool.exe build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master-tool.pdb @@ -74,11 +84,9 @@ jobs: fail-fast: false matrix: configuration: - - debug - release arch: - - x64 - - arm64 + - amd64 steps: - name: Check out files uses: actions/checkout@main @@ -87,19 +95,13 @@ jobs: fetch-depth: 0 lfs: false - - name: Install dependencies (arm64) - if: matrix.arch == 'arm64' - run: | - sudo apt-get update - sudo apt-get -y install crossbuild-essential-arm64 - - name: Install Premake5 uses: diamante0018/setup-premake@master with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files - run: premake5 --cc=clang gmake2 + run: premake5 --cc=clang gmake - name: Set up problem matching uses: ammaraskar/gcc-problem-matcher@master @@ -119,6 +121,79 @@ jobs: path: | build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master-tool + prebuild-linux-arm64: + name: Prebuild Linux + runs-on: ubuntu-latest + steps: + - name: Check out files + uses: actions/checkout@main + with: + submodules: true + fetch-depth: 0 + lfs: false + + - name: Install Premake5 + uses: diamante0018/setup-premake@master + with: + version: ${{ env.PREMAKE_VERSION }} + + - name: Generate project files + run: premake5 --cc=clang gmake + + - name: Upload project files + uses: actions/upload-artifact@main + with: + name: linux-project-files + path: | + build/ + + build-linux-arm64: + name: Build Linux + runs-on: ${{ matrix.os }} + needs: prebuild-linux-arm64 + strategy: + fail-fast: false + matrix: + configuration: + - release + arch: + - arm64 + include: + - arch: arm64 + os: ubuntu-24.04-arm + steps: + - name: Check out files + uses: actions/checkout@main + with: + submodules: true + fetch-depth: 0 + lfs: false + + - name: Create the build directory + run: mkdir -p build + + - name: Download project files + uses: actions/download-artifact@main + with: + name: linux-project-files + path: build/ + + - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries + working-directory: ${{ github.workspace }} + run: | + pushd build + make config=${{matrix.configuration}}_${{matrix.arch}} -j$(nproc) + env: + CC: clang + CXX: clang++ + + - name: Upload ${{matrix.arch}} ${{matrix.configuration}} binaries + uses: actions/upload-artifact@main + with: + name: linux-${{matrix.arch}}-${{matrix.configuration}} + path: | + build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master-tool + build-mac: name: Build macOS runs-on: macos-latest @@ -126,10 +201,9 @@ jobs: fail-fast: false matrix: configuration: - - debug - release arch: - - x64 + - amd64 - arm64 steps: - name: Check out files @@ -145,7 +219,7 @@ jobs: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files - run: premake5 gmake2 + run: premake5 gmake - name: Set up problem matching uses: ammaraskar/gcc-problem-matcher@master diff --git a/deps/premake/libtomcrypt.lua b/deps/premake/libtomcrypt.lua index 06578cf..1ac47fe 100644 --- a/deps/premake/libtomcrypt.lua +++ b/deps/premake/libtomcrypt.lua @@ -58,7 +58,7 @@ function libtomcrypt.project() buildoptions "-mcpu=apple-m1" filter {} - filter { "system:macosx", "platforms:x64" } + filter { "system:macosx", "platforms:amd64" } buildoptions "-mcpu=x86-64" filter {} diff --git a/premake5.lua b/premake5.lua index 42a13e5..e8f9801 100644 --- a/premake5.lua +++ b/premake5.lua @@ -41,9 +41,11 @@ configurations {"debug", "release"} language "C++" cppdialect "C++14" -if os.istarget("darwin") then - platforms {"x64", "arm64"} -else +if os.istarget("linux") then + platforms {"x86", "amd64", "arm64"} +elseif os.istarget("macosx") then + platforms {"amd64", "arm64"} +else platforms {"x86", "x64", "arm64"} end @@ -55,6 +57,10 @@ filter "platforms:x64" architecture "x86_64" filter {} +filter "platforms:amd64" +architecture "x86_64" +filter {} + filter "platforms:arm64" architecture "ARM64" filter {} @@ -75,6 +81,7 @@ filter { "system:linux", "system:macosx" } filter {} if os.istarget("linux") then + -- this supports cross-compilation for arm64 filter { "toolset:clang*", "platforms:arm64" } buildoptions "--target=arm64-linux-gnu" linkoptions "--target=arm64-linux-gnu" @@ -86,7 +93,7 @@ if os.istarget("linux") then filter {} end -filter { "system:macosx", "platforms:x64" } +filter { "system:macosx", "platforms:amd64" } buildoptions "-arch x86_64" linkoptions "-arch x86_64" filter {} @@ -105,7 +112,7 @@ flags {"NoIncrementalLink", "NoMinimalRebuild", "MultiProcessorCompile"} filter "configurations:Release" optimize "Size" defines "NDEBUG" - flags "FatalCompileWarnings" + fatalwarnings {"All"} filter {} filter "configurations:Debug"