diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dbf13da..7025158 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ on: types: [opened, synchronize, reopened] env: - PREMAKE_VERSION: "5.0.0-beta2" + PREMAKE_VERSION: "5.0.0-beta6" concurrency: group: ${{ github.ref }} @@ -24,7 +24,6 @@ jobs: fail-fast: false matrix: configuration: - - debug - release arch: - x64 @@ -42,14 +41,14 @@ jobs: fetch-depth: 0 lfs: false - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@main - - name: Install Premake5 uses: diamante0018/setup-premake@master with: version: ${{ env.PREMAKE_VERSION }} + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@main + - name: Generate project files run: premake5 vs2022 @@ -57,7 +56,7 @@ jobs: uses: ammaraskar/msvc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries - run: msbuild /m /v:minimal /p:Configuration=${{matrix.configuration}} /p:Platform=${{matrix.platform}} build/aw-installer.sln + run: msbuild /m /p:Configuration=${{matrix.configuration}} /p:Platform=${{matrix.platform}} build/aw-installer.sln - name: Upload ${{matrix.arch}} ${{matrix.configuration}} binaries uses: actions/upload-artifact@main @@ -67,17 +66,9 @@ jobs: build/bin/${{matrix.arch}}/${{matrix.configuration}}/aw-installer.exe build/bin/${{matrix.arch}}/${{matrix.configuration}}/aw-installer.pdb - build-linux: - name: Build Linux - runs-on: ubuntu-22.04 - strategy: - fail-fast: false - matrix: - configuration: - - debug - - release - arch: - - x64 + prebuild-linux: + name: Prebuild Linux + runs-on: ubuntu-latest steps: - name: Check out files uses: actions/checkout@main @@ -86,24 +77,60 @@ jobs: fetch-depth: 0 lfs: false - - name: Install dependencies (x64) - if: matrix.arch == 'x64' - run: | - sudo apt-get update - sudo apt-get install libcurl4-gnutls-dev -y - - 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: Upload project files + uses: actions/upload-artifact@main + with: + name: linux-project-files + path: | + build/ + + build-linux-amd64: + name: Build Linux + runs-on: ubuntu-22.04 + needs: prebuild-linux + strategy: + fail-fast: false + matrix: + configuration: + - release + arch: + - amd64 + 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: Install dependencies (amd64) + if: matrix.arch == 'amd64' + run: | + sudo apt-get update + sudo apt-get install -y libcurl4-gnutls-dev - name: Set up problem matching uses: ammaraskar/gcc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries + working-directory: ${{ github.workspace }} run: | pushd build make config=${{matrix.configuration}}_${{matrix.arch}} -j$(nproc) @@ -118,6 +145,59 @@ jobs: path: | build/bin/${{matrix.arch}}/${{matrix.configuration}}/aw-installer + build-linux-arm64: + name: Build Linux + runs-on: ${{ matrix.os }} + needs: prebuild-linux + 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: Install dependencies (arm64) + if: matrix.arch == 'arm64' + run: | + sudo apt-get update + sudo apt-get install -y libcurl4-gnutls-dev + + - 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}}/aw-installer + build-macos: name: Build macOS runs-on: macos-latest @@ -125,9 +205,9 @@ jobs: fail-fast: false matrix: configuration: - - debug - release arch: + - amd64 - arm64 steps: - name: Check out files @@ -143,7 +223,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 @@ -162,7 +242,7 @@ jobs: deploy: name: Deploy artifacts - needs: [build-win, build-linux, build-macos] + needs: [build-win, build-linux-amd64, build-linux-arm64, build-macos] runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: @@ -173,7 +253,7 @@ jobs: - name: Download Release binaries uses: actions/download-artifact@main with: - name: linux-x64-release + name: linux-amd64-release - name: Install SSH key uses: shimataro/ssh-key-action@v2.7.0 diff --git a/premake5.lua b/premake5.lua index afce600..7c9452d 100644 --- a/premake5.lua +++ b/premake5.lua @@ -41,9 +41,11 @@ configurations {"debug", "release"} language "C++" cppdialect "C++20" -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 {} @@ -71,15 +77,23 @@ filter { "system:linux", "system:macosx" } filter {} if os.istarget("linux") then - filter { "toolset:clang*" } - buildoptions "-stdlib=libc++" - linkoptions "-stdlib=libc++" + -- this supports cross-compilation for arm64 + filter { "toolset:clang*", "platforms:arm64" } + buildoptions "--target=arm64-linux-gnu" + linkoptions "--target=arm64-linux-gnu" + filter {} + filter { "toolset:clang*" } -- always try to use lld. LD or Gold will not work linkoptions "-fuse-ld=lld" filter {} end +filter { "system:macosx", "platforms:amd64" } + buildoptions "-arch x86_64" + linkoptions "-arch x86_64" +filter {} + filter { "system:macosx", "platforms:arm64" } buildoptions "-arch arm64" linkoptions "-arch arm64" @@ -94,7 +108,7 @@ flags {"NoIncrementalLink", "NoMinimalRebuild", "MultiProcessorCompile", "No64Bi filter "configurations:release" optimize "Size" defines "NDEBUG" - flags "FatalCompileWarnings" + fatalwarnings {"All"} filter {} filter "configurations:debug" @@ -105,6 +119,7 @@ filter {} project "aw-installer" kind "ConsoleApp" language "C++" +cppdialect "C++20" pchheader "std_include.hpp" pchsource "src/std_include.cpp" @@ -133,6 +148,5 @@ filter {} dependencies.imports() - group "Dependencies" dependencies.projects()