Build emu (Linux) #1
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
name: Build emu (Linux) | |
on: | |
workflow_call: | |
# needed since it allows this to become a reusable workflow | |
workflow_dispatch: | |
# allows manual trigger | |
permissions: | |
contents: write | |
env: | |
PREMAKE_ACTION: gmake2 | |
DEPS_CACHE_KEY: emu-deps-linux | |
DEPS_CACHE_DIR: build/deps/linux | |
PACKAGE_BASE_DIR: "build/package/linux" | |
THIRD_PARTY_BASE_DIR: 'third-party' | |
jobs: | |
deps: | |
name: Restore or build deps | |
if: ${{ !cancelled() }} | |
uses: ./.github/workflows/emu-deps-linux.yml | |
builds-matrix-linux: | |
name: build | |
needs: [ deps ] | |
runs-on: ubuntu-24.04 | |
if: ${{ !cancelled() }} | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
prj: [ | |
# regular api | |
'api_regular', 'steamclient_regular', | |
# api + client (experimental) | |
'api_experimental', 'steamclient_experimental', | |
# tools | |
'tool_lobby_connect', 'tool_generate_interfaces', | |
] | |
arch: [ 'x64', 'x32', ] | |
cfg: [ 'debug', 'release', ] | |
steps: | |
### clone branch | |
- name: Checkout branch | |
uses: actions/checkout@v4 | |
### deps | |
- name: Restore deps | |
id: emu-deps-cache-step | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.DEPS_CACHE_KEY }}-${{ env.PREMAKE_ACTION }} | |
path: ${{ env.DEPS_CACHE_DIR }}/${{ env.PREMAKE_ACTION }} | |
## extra helpers/tools, these are not built inside the deps build dir | |
- name: Clone third-party build helpers (common/linux) | |
uses: actions/checkout@v4 | |
with: | |
ref: 'third-party/common/linux' | |
path: "${{env.THIRD_PARTY_BASE_DIR}}/common/linux" | |
- name: Clone third-party build helpers (build/linux) | |
uses: actions/checkout@v4 | |
with: | |
ref: 'third-party/build/linux' | |
path: "${{env.THIRD_PARTY_BASE_DIR}}/build/linux" | |
### fix folder permissions! not sure why this fails | |
# nested subdirs "build/linux/release" cause permission problems | |
- name: Give all permissions to repo folder | |
shell: bash | |
working-directory: ${{ github.workspace }} | |
run: sudo chmod -R 777 "${{ github.workspace }}" | |
### generate project files | |
- name: Generate project files | |
shell: bash | |
working-directory: ${{ github.workspace }} | |
run: | | |
sudo chmod 777 ./${{env.THIRD_PARTY_BASE_DIR}}/common/linux/premake/premake5 | |
./${{env.THIRD_PARTY_BASE_DIR}}/common/linux/premake/premake5 --file=premake5.lua --genproto --emubuild=${{ github.sha }} --os=linux gmake2 | |
## mandatory Linux packages | |
- name: Install required packages | |
shell: bash | |
run: | | |
sudo apt update -y | |
sudo apt install -y coreutils # echo, printf, etc... | |
sudo apt install -y build-essential | |
sudo apt install -y gcc-multilib # needed for 32-bit builds | |
sudo apt install -y g++-multilib | |
# sudo apt install -y clang | |
sudo apt install -y libglx-dev # needed for overlay build (header files such as GL/glx.h) | |
sudo apt install -y libgl-dev # needed for overlay build (header files such as GL/gl.h) | |
# sudo apt install -y binutils # (optional) contains the tool 'readelf' mainly, and other usefull binary stuff | |
### build target | |
- name: Build target | |
shell: bash | |
working-directory: ${{ github.workspace }}/build/project/gmake2/linux | |
run: | | |
echo "dry run..." | |
make -n -j 2 config=${{ matrix.cfg }}_${{ matrix.arch }} ${{ matrix.prj }} | |
echo "actual run..." | |
make -j 2 config=${{ matrix.cfg }}_${{ matrix.arch }} ${{ matrix.prj }} | |
### upload artifact/package to github Actions | |
- name: Upload target package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "emu-linux-${{ matrix.prj }}-${{ matrix.cfg }}-${{ matrix.arch }}-${{ github.sha }}" | |
path: "build/linux" | |
if-no-files-found: 'error' | |
compression-level: 9 | |
retention-days: 1 |