diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 575e9b09..80d84948 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,168 +12,168 @@ on: env: VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg" - VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite' + VCPKG_BINARY_SOURCES: "clear;nuget,GitHub,readwrite" jobs: build-ubuntu: runs-on: ubuntu-22.04 steps: - - name: "Checkout repo" - uses: actions/checkout@v4 - with: - submodules: "recursive" - fetch-depth: 0 + - name: "Checkout repo" + uses: actions/checkout@v4 + with: + submodules: "recursive" + fetch-depth: 0 - - name: Setup release mode parameters - run: | - echo "BUILD_MODE=release" >> $GITHUB_ENV - echo "BUILD_FLAGS=" >> $GITHUB_ENV - echo "Build mode is release" + - name: Setup release mode parameters + run: | + echo "BUILD_MODE=release" >> $GITHUB_ENV + echo "BUILD_FLAGS=" >> $GITHUB_ENV + echo "Build mode is release" - - name: Setup build flags for version - if: ${{ inputs.next_version_major != '' }} - run: | - echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}" - echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" >> $GITHUB_ENV + - name: Setup build flags for version + if: ${{ inputs.next_version_major != '' }} + run: | + echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}" + echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" >> $GITHUB_ENV - - name: "Install system dependencies" - run: | - sudo apt update -qq - sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build libbluetooth-dev + - name: "Install system dependencies" + run: | + sudo apt update -qq + sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build libbluetooth-dev - - name: "Setup cmake" - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.29.0' + - name: "Setup cmake" + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: "3.29.0" - - name: "Bootstrap vcpkg" - run: | - bash ./dependencies/vcpkg/bootstrap-vcpkg.sh + - name: "Bootstrap vcpkg" + run: | + bash ./dependencies/vcpkg/bootstrap-vcpkg.sh - - name: 'Setup NuGet Credentials for vcpkg' - shell: 'bash' - run: | - mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ - sources add \ - -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ - -storepasswordincleartext \ - -name "GitHub" \ - -username "${{ github.repository_owner }}" \ - -password "${{ secrets.GITHUB_TOKEN }}" - mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ - setapikey "${{ secrets.GITHUB_TOKEN }}" \ - -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" - - - name: "cmake" - run: | - cmake -S . -B build ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-15 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-15 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja - - - name: "Build Cemu" - run: | - cmake --build build - - - name: Prepare artifact - run: mv bin/Cemu_release bin/Cemu - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: cemu-bin-linux-x64 - path: ./bin/Cemu + - name: "Setup NuGet Credentials for vcpkg" + shell: "bash" + run: | + mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ + sources add \ + -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ + -storepasswordincleartext \ + -name "GitHub" \ + -username "${{ github.repository_owner }}" \ + -password "${{ secrets.GITHUB_TOKEN }}" + mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ + setapikey "${{ secrets.GITHUB_TOKEN }}" \ + -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" + + - name: "cmake" + run: | + cmake -S . -B build ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-15 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-15 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja + + - name: "Build Cemu" + run: | + cmake --build build + + - name: Prepare artifact + run: mv bin/Cemu_release bin/Cemu + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: cemu-bin-linux-x64 + path: ./bin/Cemu build-appimage: runs-on: ubuntu-22.04 needs: build-ubuntu steps: - - name: Checkout Upstream Repo - uses: actions/checkout@v4 + - name: Checkout Upstream Repo + uses: actions/checkout@v4 - - uses: actions/download-artifact@v4 - with: - name: cemu-bin-linux-x64 - path: bin + - uses: actions/download-artifact@v4 + with: + name: cemu-bin-linux-x64 + path: bin - - name: "Install system dependencies" - run: | - sudo apt update -qq - sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev nasm ninja-build appstream libbluetooth-dev + - name: "Install system dependencies" + run: | + sudo apt update -qq + sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev nasm ninja-build appstream libbluetooth-dev - - name: "Build AppImage" - run: | - export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" - export DEPLOY_GTK_VERSION=3 - dist/linux/appimage.sh + - name: "Build AppImage" + run: | + export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" + export DEPLOY_GTK_VERSION=3 + dist/linux/appimage.sh - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: cemu-appimage-x64 - path: artifacts + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: cemu-appimage-x64 + path: artifacts build-windows: runs-on: windows-2022 steps: - - name: "Checkout repo" - uses: actions/checkout@v4 - with: - submodules: "recursive" + - name: "Checkout repo" + uses: actions/checkout@v4 + with: + submodules: "recursive" - - name: Setup release mode parameters - run: | - echo "BUILD_MODE=release" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "BUILD_FLAGS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "Build mode is release" + - name: Setup release mode parameters + run: | + echo "BUILD_MODE=release" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + echo "BUILD_FLAGS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + echo "Build mode is release" - - name: Setup build flags for version - if: ${{ inputs.next_version_major != '' }} - run: | - echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}" - echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + - name: Setup build flags for version + if: ${{ inputs.next_version_major != '' }} + run: | + echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}" + echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: "Setup cmake" - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.29.0' + - name: "Setup cmake" + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: "3.29.0" - - name: "Bootstrap vcpkg" - run: | - ./dependencies/vcpkg/bootstrap-vcpkg.bat - - - name: 'Setup NuGet Credentials for vcpkg' - shell: 'bash' - run: | - `./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` \ - sources add \ - -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ - -storepasswordincleartext \ - -name "GitHub" \ - -username "${{ github.repository_owner }}" \ - -password "${{ secrets.GITHUB_TOKEN }}" - `./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` \ - setapikey "${{ secrets.GITHUB_TOKEN }}" \ - -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" - - - name: "cmake" - run: | - mkdir -p build - cd build - echo "[INFO] BUILD_FLAGS: ${{ env.BUILD_FLAGS }}" - echo "[INFO] BUILD_MODE: ${{ env.BUILD_MODE }}" - cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DVCPKG_INSTALL_OPTIONS="--clean-after-build" - - - name: "Build Cemu" - run: | - cd build - cmake --build . --config ${{ env.BUILD_MODE }} + - name: "Bootstrap vcpkg" + run: | + ./dependencies/vcpkg/bootstrap-vcpkg.bat - - name: Prepare artifact - run: Rename-Item bin/Cemu_release.exe Cemu.exe - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: cemu-bin-windows-x64 - path: ./bin/Cemu.exe + - name: "Setup NuGet Credentials for vcpkg" + shell: "bash" + run: | + `./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` \ + sources add \ + -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ + -storepasswordincleartext \ + -name "GitHub" \ + -username "${{ github.repository_owner }}" \ + -password "${{ secrets.GITHUB_TOKEN }}" + `./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` \ + setapikey "${{ secrets.GITHUB_TOKEN }}" \ + -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" + + - name: "cmake" + run: | + mkdir -p build + cd build + echo "[INFO] BUILD_FLAGS: ${{ env.BUILD_FLAGS }}" + echo "[INFO] BUILD_MODE: ${{ env.BUILD_MODE }}" + cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DVCPKG_INSTALL_OPTIONS="--clean-after-build" + + - name: "Build Cemu" + run: | + cd build + cmake --build . --config ${{ env.BUILD_MODE }} + + - name: Prepare artifact + run: Rename-Item bin/Cemu_release.exe Cemu.exe + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: cemu-bin-windows-x64 + path: ./bin/Cemu.exe build-macos: runs-on: macos-14 @@ -181,124 +181,138 @@ jobs: matrix: arch: [x86_64, arm64] steps: - - name: "Checkout repo" - uses: actions/checkout@v4 - with: - submodules: "recursive" - - - name: Setup release mode parameters - run: | - echo "BUILD_MODE=release" >> $GITHUB_ENV - echo "BUILD_FLAGS=" >> $GITHUB_ENV - echo "Build mode is release" + - name: "Checkout repo" + uses: actions/checkout@v4 + with: + submodules: "recursive" - - name: Setup build flags for version - if: ${{ inputs.next_version_major != '' }} - run: | - echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}" - echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" >> $GITHUB_ENV - - - name: "Install system dependencies" - run: | - brew update - brew install ninja nasm automake libtool + - name: Setup release mode parameters + run: | + echo "BUILD_MODE=release" >> $GITHUB_ENV + echo "BUILD_FLAGS=" >> $GITHUB_ENV + echo "Build mode is release" - - name: "Install molten-vk" - run: | - curl -L -O https://github.com/KhronosGroup/MoltenVK/releases/download/v1.3.0/MoltenVK-macos.tar - tar xf MoltenVK-macos.tar - sudo mkdir -p /usr/local/lib - sudo cp MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib /usr/local/lib + - name: Setup build flags for version + if: ${{ inputs.next_version_major != '' }} + run: | + echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}" + echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" >> $GITHUB_ENV - - name: "Setup cmake" - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.29.0' + - name: "Install system dependencies" + run: | + brew update + brew install ninja nasm automake libtool - - name: "Bootstrap vcpkg" - run: | - bash ./dependencies/vcpkg/bootstrap-vcpkg.sh - - - name: 'Setup NuGet Credentials for vcpkg' - shell: 'bash' - run: | - mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ - sources add \ - -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ - -storepasswordincleartext \ - -name "GitHub" \ - -username "${{ github.repository_owner }}" \ - -password "${{ secrets.GITHUB_TOKEN }}" - mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ - setapikey "${{ secrets.GITHUB_TOKEN }}" \ - -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" - - - name: "cmake" - run: | - mkdir build - cd build - cmake .. ${{ env.BUILD_FLAGS }} \ - -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} \ - -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \ - -DMACOS_BUNDLE=ON \ - -G Ninja - - - name: "Build Cemu" - run: | - cmake --build build + - name: "Install molten-vk" + run: | + curl -L -O https://github.com/KhronosGroup/MoltenVK/releases/download/v1.3.0/MoltenVK-macos.tar + tar xf MoltenVK-macos.tar + sudo mkdir -p /usr/local/lib + sudo cp MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib /usr/local/lib - - name: Prepare artifact - run: | - mkdir bin/Cemu_app - mv bin/Cemu_release.app bin/Cemu_app/Cemu.app - mv bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu_release bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu - sed -i '' 's/Cemu_release/Cemu/g' bin/Cemu_app/Cemu.app/Contents/Info.plist - chmod a+x bin/Cemu_app/Cemu.app/Contents/MacOS/{Cemu,update.sh} - ln -s /Applications bin/Cemu_app/Applications - hdiutil create ./bin/tmp.dmg -ov -volname "Cemu" -fs HFS+ -srcfolder "./bin/Cemu_app" - hdiutil convert ./bin/tmp.dmg -format UDZO -o bin/Cemu.dmg - rm bin/tmp.dmg - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: cemu-bin-macos-${{ matrix.arch }} - path: ./bin/Cemu.dmg + - name: "Setup cmake" + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: "3.29.0" + + - name: "Bootstrap vcpkg" + run: | + bash ./dependencies/vcpkg/bootstrap-vcpkg.sh + + - name: "Setup NuGet Credentials for vcpkg" + shell: "bash" + run: | + mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ + sources add \ + -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ + -storepasswordincleartext \ + -name "GitHub" \ + -username "${{ github.repository_owner }}" \ + -password "${{ secrets.GITHUB_TOKEN }}" + mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ + setapikey "${{ secrets.GITHUB_TOKEN }}" \ + -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" + + - name: "cmake" + run: | + mkdir build + cd build + cmake .. ${{ env.BUILD_FLAGS }} \ + -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} \ + -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \ + -DMACOS_BUNDLE=ON \ + -G Ninja + + - name: "Build Cemu" + run: | + cmake --build build + + - name: Prepare artifact + run: | + mkdir bin/Cemu_app + mv bin/Cemu_release.app bin/Cemu_app/Cemu.app + mv bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu_release bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu + sed -i '' 's/Cemu_release/Cemu/g' bin/Cemu_app/Cemu.app/Contents/Info.plist + chmod a+x bin/Cemu_app/Cemu.app/Contents/MacOS/{Cemu,update.sh} + ln -s /Applications bin/Cemu_app/Applications + hdiutil create ./bin/tmp.dmg -ov -volname "Cemu" -fs HFS+ -srcfolder "./bin/Cemu_app" + hdiutil convert ./bin/tmp.dmg -format UDZO -o bin/Cemu.dmg + rm bin/tmp.dmg + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: cemu-bin-macos-${{ matrix.arch }} + path: ./bin/Cemu.dmg build-android: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - name: Checkout repo - uses: actions/checkout@v3 - with: - submodules: "recursive" - fetch-depth: 0 + - name: Checkout repo + uses: actions/checkout@v3 + with: + submodules: "recursive" + fetch-depth: 0 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: "17" - distribution: "temurin" + - name: Install system dependencies + run: | + sudo apt update -qq + sudo apt install -y gettext - - name: Build Cemu - env: - ANDROID_STORE_FILE_BASE64: ${{ secrets.ANDROID_STORE_FILE_BASE64 }} - ANDROID_KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} - ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} - EMULATOR_VERSION_MAJOR: ${{ inputs.next_version_major }} - EMULATOR_VERSION_MINOR: ${{ inputs.next_version_minor }} - run: | - cd ./src/android - if [[ -z "$ANDROID_STORE_FILE_BASE64" ]]; then - base64 --decode <<< "${ANDROID_STORE_FILE_BASE64}" > store.jks - export ANDROID_STORE_FILE=$(pwd)/store.jks - fi - ./gradlew assembleRelease + - name: Uncompile message catalogs + run: | + for mo_file in bin/resources/*/cemu.mo + do + echo $mo_file + language_code=$(basename $(dirname $mo_file)) + po_file=src/android/app/src/main/assets/translations/$language_code/cemu.po + mkdir -p $(dirname $po_file) + msgunfmt $mo_file -o $po_file || echo "Failed to uncompile message catalog from $mo_file" + done - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: cemu-bin-android - path: | - ./src/android/app/build/outputs/apk/*/*.apk + - name: Build Cemu + env: + ANDROID_STORE_FILE_BASE64: ${{ secrets.ANDROID_STORE_FILE_BASE64 }} + ANDROID_KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} + ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} + EMULATOR_VERSION_MAJOR: ${{ inputs.next_version_major }} + EMULATOR_VERSION_MINOR: ${{ inputs.next_version_minor }} + run: | + export JAVA_HOME=$JAVA_HOME_17_X64 + + cd ./src/android + + if [[ -n "$ANDROID_STORE_FILE_BASE64" ]]; then + base64 --decode <<< "${ANDROID_STORE_FILE_BASE64}" > store.jks + export ANDROID_STORE_FILE=$(pwd)/store.jks + fi + + ./gradlew assembleRelease + ./gradlew testRelease + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: cemu-bin-android + path: ./src/android/app/build/outputs/apk/*/*.apk diff --git a/.github/workflows/deploy_release_android.yml b/.github/workflows/deploy_release_android.yml index f37d3239..7812c334 100644 --- a/.github/workflows/deploy_release_android.yml +++ b/.github/workflows/deploy_release_android.yml @@ -19,6 +19,7 @@ jobs: deploy: name: Deploy experimental release runs-on: ubuntu-22.04 + steps: - name: Checkout repo uses: actions/checkout@v3 @@ -26,11 +27,21 @@ jobs: submodules: "recursive" fetch-depth: 0 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: "17" - distribution: "temurin" + - name: Install system dependencies + run: | + sudo apt update -qq + sudo apt install -y gettext + + - name: Uncompile message catalogs + run: | + for mo_file in bin/resources/*/cemu.mo + do + echo $mo_file + language_code=$(basename $(dirname $mo_file)) + po_file=src/android/app/src/main/assets/translations/$language_code/cemu.po + mkdir -p $(dirname $po_file) + msgunfmt $mo_file -o $po_file || echo "Failed to uncompile message catalog from $mo_file" + done - name: Build Cemu env: @@ -39,13 +50,17 @@ jobs: ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} EMULATOR_VERSION_MAJOR: ${{ inputs.version_major }} EMULATOR_VERSION_MINOR: ${{ inputs.version_minor }} - BUILD_TYPE: ${{ inputs.build_type }} run: | - cd ./src/android - base64 --decode <<< "${ANDROID_STORE_FILE_BASE64}" > store.jks - export ANDROID_KEYSTORE_FILE=$(pwd)/store.jks - ./gradlew assemble$BUILD_TYPE + export JAVA_HOME=$JAVA_HOME_17_X64 + cd ./src/android + + if [[ -n "$ANDROID_STORE_FILE_BASE64" ]]; then + base64 --decode <<< "${ANDROID_STORE_FILE_BASE64}" > store.jks + export ANDROID_STORE_FILE=$(pwd)/store.jks + fi + + ./gradlew assembleRelease - name: Set version dependent vars env: diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index d59ae272..41c09320 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -4,7 +4,6 @@ import java.security.MessageDigest import java.util.regex.Pattern import javax.xml.bind.DatatypeConverter - plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) @@ -75,7 +74,7 @@ android { signingConfigs { if (keystoreFilePath != null) { - create("releaseSigningConfig") { + create("release") { storeFile = file(keystoreFilePath) storePassword = System.getenv("ANDROID_KEY_STORE_PASSWORD") keyAlias = System.getenv("ANDROID_KEY_ALIAS") @@ -83,46 +82,37 @@ android { } } } - androidComponents { - beforeVariants { variantBuilder -> - if (variantBuilder.name == "release") { - variantBuilder.enable = false - } - } - } + buildTypes { debug { applicationIdSuffix = ".debug" } - create("github") { - if (keystoreFilePath != null) { - initWith(getByName("release")) - isMinifyEnabled = true - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - signingConfig = signingConfigs.getByName("releaseSigningConfig") + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + signingConfig = if (keystoreFilePath != null) { + signingConfigs.getByName("release") } else { - initWith(getByName("debug")) - externalNativeBuild { - cmake { - arguments.add("-DCMAKE_BUILD_TYPE=DEBUG") - } - } + signingConfigs.getByName("debug") } } } + compileOptions { sourceCompatibility(JavaVersion.VERSION_17) targetCompatibility(JavaVersion.VERSION_17) } + externalNativeBuild { cmake { version = "3.25.0+" path = file("../../../CMakeLists.txt") } } + defaultConfig { externalNativeBuild { cmake { @@ -152,12 +142,14 @@ android { } } } + buildFeatures { buildConfig = true dataBinding = true viewBinding = true compose = true } + kotlinOptions { jvmTarget = "17" } diff --git a/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/DPadInput.kt b/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/DPadInput.kt index 98abf615..4f3dae41 100644 --- a/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/DPadInput.kt +++ b/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/DPadInput.kt @@ -98,11 +98,16 @@ class DPadInput( } private fun getStateByPosition(x: Float, y: Float): Int { - val norm2 = (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY) + val dx = x - centerX + val dy = y - centerY + val norm2 = dx * dx + dy * dy + if (norm2 <= radius2 * 0.1f) { return NONE } - val angle = atan2((y - centerY).toDouble(), (x - centerX).toDouble()) + + val angle = atan2(dy, dx) + return when (angle) { in -0.875 * Math.PI..<-0.625 * Math.PI -> UP or LEFT in -0.625 * Math.PI..<-0.375 * Math.PI -> UP @@ -164,7 +169,9 @@ class DPadInput( } override fun isInside(x: Float, y: Float): Boolean { - return (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY) <= radius2 + val dx = x - centerX + val dy = y - centerY + return dx * dx + dy * dy <= radius2 } override fun drawInput(canvas: Canvas) { diff --git a/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/RoundButton.kt b/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/RoundButton.kt index 157e38e6..64d0c24f 100644 --- a/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/RoundButton.kt +++ b/src/android/app/src/main/java/info/cemu/cemu/emulation/inputoverlay/inputs/RoundButton.kt @@ -15,6 +15,7 @@ class RoundButton( private var centerX: Float = 0f private var centerY: Float = 0f private var radius: Float = 0f + private var radius2: Float = 0f init { configure() @@ -24,6 +25,7 @@ class RoundButton( centerX = rect.centerX().toFloat() centerY = rect.centerY().toFloat() radius = min(rect.width().toFloat(), rect.height().toFloat()) / 2f + radius2 = radius * radius innerDrawing.configure(rect, alpha) configureColors(alpha) } @@ -43,6 +45,8 @@ class RoundButton( } override fun isInside(x: Float, y: Float): Boolean { - return (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY) <= radius * radius + val dx = x - centerX + val dy = y - centerY + return dx * dx + dy * dy <= radius2 } }