name: Build Eden Emulator on: push: branches: - dev workflow_dispatch: jobs: build-linux: name: Build Linux runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y \ autoconf cmake g++ gcc git glslang-tools \ libglu1-mesa-dev libhidapi-dev libpulse-dev \ libtool libudev-dev libxcb-icccm4 libxcb-image0 \ libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 \ libxcb-xkb1 libxext-dev libxkbcommon-x11-0 \ mesa-common-dev nasm ninja-build qt6-base-private-dev \ libmbedtls-dev catch2 libfmt-dev liblz4-dev \ nlohmann-json3-dev libzstd-dev libssl-dev \ libavfilter-dev libavcodec-dev libswscale-dev \ pkg-config zlib1g-dev libva-dev libvdpau-dev \ qt6-tools-dev libvulkan-dev spirv-tools spirv-headers \ libusb-1.0-0-dev libxbyak-dev libboost-dev \ libboost-fiber-dev libboost-context-dev libsdl2-dev \ libopus-dev vulkan-utility-libraries-dev - name: Configure CMake run: | cmake -S . -B build -G "Ninja" \ -DCMAKE_BUILD_TYPE=Release \ -DYUZU_TESTS=OFF \ -DENABLE_QT_TRANSLATION=OFF - name: Build Eden run: | cmake --build build --parallel $(nproc) - name: Package Artifacts run: | mkdir -p artifacts cp build/bin/eden artifacts/ || echo "eden not found" cp build/bin/eden-cmd artifacts/ || echo "eden-cmd not found" if [ -f artifacts/eden ]; then chmod +x artifacts/eden fi if [ -f artifacts/eden-cmd ]; then chmod +x artifacts/eden-cmd fi # Create version info echo "Eden Emulator - Linux Build" > artifacts/VERSION.txt echo "Build Date: $(date)" >> artifacts/VERSION.txt echo "Commit: $(git rev-parse --short HEAD)" >> artifacts/VERSION.txt - name: Create tarball run: | cd artifacts tar -czf ../eden-linux-x64.tar.gz . cd .. - name: Upload Linux Build uses: actions/upload-artifact@v4 with: name: eden-linux-x64 path: eden-linux-x64.tar.gz retention-days: 30 build-windows-mingw: name: Build Windows (MinGW Cross-Compile) runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Install MinGW and dependencies run: | sudo apt-get update sudo apt-get install -y \ mingw-w64 g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 \ cmake ninja-build git nasm autoconf libtool \ pkg-config python3 wget unzip - name: Set up MinGW toolchain run: | cat > mingw-toolchain.cmake << EOF set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_CROSSCOMPILING_EMULATOR wine64) EOF - name: Configure CMake for Windows run: | cmake -S . -B build-windows \ -DCMAKE_TOOLCHAIN_FILE=mingw-toolchain.cmake \ -G "Ninja" \ -DCMAKE_BUILD_TYPE=Release \ -DYUZU_TESTS=OFF \ -DENABLE_QT_TRANSLATION=OFF \ -DENABLE_QT=OFF \ -DYUZU_CMD=ON \ -DENABLE_SDL2=ON \ -DYUZU_USE_BUNDLED_SDL2=ON \ -DYUZU_USE_BUNDLED_FFMPEG=ON \ -DYUZU_USE_CPM=ON || echo "Configure failed, this is expected with limited MinGW support" - name: Build Eden for Windows run: | cmake --build build-windows --parallel $(nproc) || echo "Build may have issues with MinGW cross-compilation" continue-on-error: true - name: Package Windows Artifacts run: | mkdir -p artifacts-windows if [ -f build-windows/bin/eden.exe ]; then cp build-windows/bin/eden.exe artifacts-windows/ echo "eden.exe found and copied" fi if [ -f build-windows/bin/eden-cmd.exe ]; then cp build-windows/bin/eden-cmd.exe artifacts-windows/ echo "eden-cmd.exe found and copied" fi # Copy any DLLs find build-windows/bin -name "*.dll" -exec cp {} artifacts-windows/ \; 2>/dev/null || true # Create version info echo "Eden Emulator - Windows Build (MinGW)" > artifacts-windows/VERSION.txt echo "Build Date: $(date)" >> artifacts-windows/VERSION.txt echo "Commit: $(git rev-parse --short HEAD)" >> artifacts-windows/VERSION.txt echo "Note: Cross-compiled with MinGW on Linux" >> artifacts-windows/VERSION.txt # Check if we have any executables if [ -f artifacts-windows/eden.exe ] || [ -f artifacts-windows/eden-cmd.exe ]; then echo "Windows build successful" cd artifacts-windows zip -r ../eden-windows-x64-mingw.zip . cd .. else echo "No Windows executables produced - MinGW cross-compilation may not be fully supported" echo "This is expected - Eden emulator is complex and may require native Windows build" > artifacts-windows/BUILD_FAILED.txt cd artifacts-windows zip -r ../eden-windows-x64-mingw.zip . cd .. fi continue-on-error: true - name: Upload Windows Build if: always() uses: actions/upload-artifact@v4 with: name: eden-windows-x64-mingw path: eden-windows-x64-mingw.zip retention-days: 30