From 054af7553323fb11d3b0a4781e340b5763f6ee8a Mon Sep 17 00:00:00 2001 From: trifonovaa Date: Sun, 27 Oct 2024 15:55:47 +0700 Subject: [PATCH] android project attemtp --- .github/workflows/build.yml | 420 +++++++++++++++++++----------------- 1 file changed, 224 insertions(+), 196 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7e6ed3c3..8078344f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,7 @@ -name: Build Native +name: build-native on: workflow_dispatch: + inputs: {} # schedule: # - cron: '0 0 * * *' env: @@ -14,109 +15,140 @@ jobs: fail-fast: false matrix: platform: - - { name: win-x64, os: windows-latest, flags: -A x64 } - - { name: win-x86, os: windows-latest, flags: -A Win32 } - - { name: win-arm64, os: windows-latest, flags: -A ARM64 } - - { name: linux-x64, os: ubuntu-20.04, flags: -GNinja, target_apt_arch: ":amd64" } - - { name: linux-x86, os: ubuntu-20.04, flags: -GNinja -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32", target_apt_arch: ":i386" } - - { name: linux-arm64, os: ubuntu-20.04, flags: -GNinja, target_apt_arch: ":arm64", container: arm64v8/ubuntu, docker_platform: linux/arm64/v8 } - - { name: linux-arm, os: ubuntu-20.04, flags: -GNinja, target_apt_arch: ":armhf", container: arm32v7/ubuntu, docker_platform: linux/arm/v7 } - - { name: osx-x64, os: macos-latest, flags: -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 } - # NOTE: macOS 11.0 is the first released supported by Apple Silicon. - - { name: osx-arm64, os: macos-latest, flags: -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 } + - { name: win-x64, os: windows-latest, flags: -A x64 } + - { name: win-x86, os: windows-latest, flags: -A Win32 } + - { name: win-arm64, os: windows-latest, flags: -A ARM64 } + - { name: linux-x64, os: ubuntu-20.04, flags: -GNinja, target_apt_arch: ":amd64" } + - { name: linux-x86, os: ubuntu-20.04, flags: -GNinja, cmake_configure_env: CFLAGS=-m32 CXXFLAGS=-m32, target_apt_arch: ":i386" } + - { name: osx-x64, os: macos-latest, flags: -DCMAKE_OSX_ARCHITECTURES="x86_64" -DCMAKE_OSX_DEPLOYMENT_TARGET="10.14" } + # NOTE: macOS 11.0 is the first released supported by Apple Silicon. + - { name: osx-arm64, os: macos-latest, flags: -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_OSX_DEPLOYMENT_TARGET="11.0" } steps: - - uses: actions/checkout@v4 - with: - repository: 'libsdl-org/SDL' - ref: 'SDL2' - - - name: Set up QEMU - if: contains(matrix.platform.container, 'arm') - uses: docker/setup-qemu-action@v3 - - - name: Build (Linux ARM) - if: contains(matrix.platform.container, 'arm') - uses: addnab/docker-run-action@v3 - with: - image: ${{ matrix.platform.container }} - options: > - -v ${{ github.workspace }}:/workspace - -e NAME=${{ matrix.platform.name }} - -e TARGET_APT_ARCH=${{ matrix.platform.target_apt_arch }} - -e RUNNER_OS=${{ runner.os }} - -e FLAGS=${{ matrix.platform.flags }} - -e BUILD_TYPE=${{ env.BUILD_TYPE }} - --platform ${{ matrix.platform.docker_platform }} - run: | - cd /workspace - build.sh - - - name: Build - if: ${{ !contains(matrix.platform.container, 'arm') }} - shell: bash - env: - NAME: ${{ matrix.platform.name }} - TARGET_APT_ARCH: ${{ matrix.platform.target_apt_arch }} - RUNNER_OS: ${{ runner.os }} - FLAGS: ${{ matrix.platform.flags }} - run: build.sh - - - name: Get Actions user id - if: runner.os == 'Linux' - id: get_uid - run: echo "uid=$(id -u $USER)" >> $GITHUB_OUTPUT - - - name: Correct Ownership in GITHUB_WORKSPACE directory - if: runner.os == 'Linux' - uses: peter-murray/reset-workspace-ownership-action@v1 - with: - user_id: ${{ steps.get_uid.outputs.uid }} - - - name: Compress native directory - run: tar -cf native-${{ matrix.platform.name }}.tar native/${{ matrix.platform.name }} - - - name: Upload native artifact - uses: actions/upload-artifact@v4 - with: - name: native-${{ matrix.platform.name }} - path: native-${{ matrix.platform.name }}.tar - if-no-files-found: error + - name: Setup Linux dependencies + if: runner.os == 'Linux' + run: | + if [[ ${{ matrix.platform.target_apt_arch }} == :i386 ]]; then + sudo dpkg --add-architecture i386 + fi + + sudo apt-get update -y -qq + + if [[ ${{ matrix.platform.target_apt_arch }} == :i386 ]]; then + # Workaround GitHub's ubuntu-20.04 image issue + sudo apt-get install -y --allow-downgrades libpcre2-8-0=10.34-7 + fi + + sudo apt-get install -y \ + gcc-multilib \ + g++-multilib \ + cmake \ + ninja-build \ + wayland-scanner++ \ + wayland-protocols \ + pkg-config${{ matrix.platform.target_apt_arch }} \ + libasound2-dev${{ matrix.platform.target_apt_arch }} \ + libdbus-1-dev${{ matrix.platform.target_apt_arch }} \ + libegl1-mesa-dev${{ matrix.platform.target_apt_arch }} \ + libgl1-mesa-dev${{ matrix.platform.target_apt_arch }} \ + libgles2-mesa-dev${{ matrix.platform.target_apt_arch }} \ + libglu1-mesa-dev${{ matrix.platform.target_apt_arch }} \ + libibus-1.0-dev${{ matrix.platform.target_apt_arch }} \ + libpulse-dev${{ matrix.platform.target_apt_arch }} \ + libsdl2-2.0-0${{ matrix.platform.target_apt_arch }} \ + libsndio-dev${{ matrix.platform.target_apt_arch }} \ + libudev-dev${{ matrix.platform.target_apt_arch }} \ + libwayland-dev${{ matrix.platform.target_apt_arch }} \ + libx11-dev${{ matrix.platform.target_apt_arch }} \ + libxcursor-dev${{ matrix.platform.target_apt_arch }} \ + libxext-dev${{ matrix.platform.target_apt_arch }} \ + libxi-dev${{ matrix.platform.target_apt_arch }} \ + libxinerama-dev${{ matrix.platform.target_apt_arch }} \ + libxkbcommon-dev${{ matrix.platform.target_apt_arch }} \ + libxrandr-dev${{ matrix.platform.target_apt_arch }} \ + libxss-dev${{ matrix.platform.target_apt_arch }} \ + libxt-dev${{ matrix.platform.target_apt_arch }} \ + libxv-dev${{ matrix.platform.target_apt_arch }} \ + libxxf86vm-dev${{ matrix.platform.target_apt_arch }} \ + libdrm-dev${{ matrix.platform.target_apt_arch }} \ + libgbm-dev${{ matrix.platform.target_apt_arch }} \ + libpulse-dev${{ matrix.platform.target_apt_arch }} + - uses: actions/checkout@v4 + with: + repository: 'libsdl-org/SDL' + ref: 'SDL2' + - uses: actions/checkout@v4 + with: + path: 'NAudio-Sdl2-Library' + - name: Configure CMake + run: ${{ matrix.platform.cmake_configure_env }} cmake -B build ${{ matrix.platform.flags }} -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DSDL_SHARED_ENABLED_BY_DEFAULT=ON -DSDL_STATIC_ENABLED_BY_DEFAULT=ON + - name: Build + run: cmake --build build/ --config Release + - name: Install (Windows) + run: cmake --install build/ --prefix install_output --config Release + if: runner.os == 'Windows' + - name: Install + run: sudo cmake --install build/ --prefix install_output --config Release + if: runner.os != 'Windows' + - name: Prepare release directory (Windows) + run: mkdir -Force NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/${{ matrix.platform.name }} + if: runner.os == 'Windows' + - name: Prepare release directory + run: mkdir -p NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/${{ matrix.platform.name }} + if: runner.os != 'Windows' + - name: Prepare release (Windows) + run: cp install_output/bin/SDL2.dll NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/${{ matrix.platform.name }}/SDL2.dll + if: runner.os == 'Windows' + - name: Prepare release (Linux) + run: cp install_output/lib/libSDL2-2.0.so.0 NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/${{ matrix.platform.name }}/libSDL2.so + if: runner.os == 'Linux' + - name: Prepare release (macOS) + run: cp install_output/lib/libSDL2-2.0.dylib NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/${{ matrix.platform.name }}/libSDL2.dylib + if: runner.os == 'macOS' + - name: Create pull request + uses: peter-evans/create-pull-request@v6 + with: + commit-message: Update ${{ matrix.platform.name }} SDL binaries + title: Update ${{ matrix.platform.name }} SDL binaries + body: This PR has been auto-generated to update the ${{ matrix.platform.name }} SDL binaries. + branch: update-${{ matrix.platform.name }}-binaries + path: 'NAudio-Sdl2-Library' + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' build-ios: name: ios runs-on: macos-latest steps: - - uses: actions/checkout@v4 - with: - repository: 'libsdl-org/SDL' - ref: 'SDL2' - - - name: Build (iOS) - run: xcodebuild -project Xcode/SDL/SDL.xcodeproj -target SDL2.xcframework -configuration Release - - - name: Prepare release directory (iOS) - run: mkdir -p native/ios - - - name: Prepare release (iOS) - run: | - mkdir -p native/ios/SDL2.xcframework/ios-arm64/SDL2.framework; - mkdir -p native/ios/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework; - cp Xcode/SDL/build/SDL2.xcframework/Info.plist native/ios/SDL2.xcframework/Info.plist; - cp Xcode/SDL/build/SDL2.xcframework/ios-arm64/SDL2.framework/SDL2 native/ios/SDL2.xcframework/ios-arm64/SDL2.framework/SDL2; - cp Xcode/SDL/build/SDL2.xcframework/ios-arm64/SDL2.framework/Info.plist native/ios/SDL2.xcframework/ios-arm64/SDL2.framework/Info.plist; - cp Xcode/SDL/build/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/SDL2 native/ios/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/SDL2; - cp Xcode/SDL/build/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/Info.plist native/ios/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/Info.plist; - - - name: Compress native directory - run: tar -cf native-ios.tar native/ios - - - name: Upload native artifact - uses: actions/upload-artifact@v4 - with: - name: native-ios - path: native-ios.tar - if-no-files-found: error - + - uses: actions/checkout@v4 + with: + repository: 'libsdl-org/SDL' + ref: 'SDL2' + - uses: actions/checkout@v4 + with: + path: 'NAudio-Sdl2-Library' + - name: Build (iOS) + run: xcodebuild -project Xcode/SDL/SDL.xcodeproj -scheme xcFramework-iOS -configuration Release + - name: Prepare release directory (iOS) + run: mkdir -p NAudio-Sdl2-Library/NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios + - name: Prepare release (iOS) + run: | + mkdir -p NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/ios-arm64/SDL2.framework; + mkdir -p NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework; + cp Xcode/SDL/Products/SDL2.xcframework/Info.plist NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/Info.plist; + cp Xcode/SDL/Products/SDL2.xcframework/ios-arm64/SDL2.framework/SDL2 NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/ios-arm64/SDL2.framework/SDL2; + cp Xcode/SDL/Products/SDL2.xcframework/ios-arm64/SDL2.framework/Info.plist NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/ios-arm64/SDL2.framework/Info.plist; + cp Xcode/SDL/Products/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/SDL2 NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/SDL2; + cp Xcode/SDL/Products/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/Info.plist NAudio-Sdl2-Library/NAudio.Sdl2.Library/native/ios/SDL2.xcframework/ios-arm64_x86_64-simulator/SDL2.framework/Info.plist; + - name: Create pull request + uses: peter-evans/create-pull-request@v6 + with: + commit-message: Update iOS SDL binaries + title: Update iOS SDL binaries + body: This PR has been auto-genereated to update the iOS SDL binaries + branch: update-ios-binaries + path: 'NAudio-Sdl2-Library' + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' build-android: name: android runs-on: ubuntu-20.04 @@ -124,101 +156,97 @@ jobs: NDK_VER: 23.1.7779620 PLATFORM_VER: android-34 steps: - - uses: actions/checkout@v4 - with: - repository: 'libsdl-org/SDL' - ref: 'SDL2' - - - name: Setup JDK - uses: actions/setup-java@v4 - with: - distribution: microsoft - java-version: | - 11 - 17 - - - name: Install Android SDK Manager - uses: android-actions/setup-android@v3 - with: - packages: '' - - - name: Install Android SDK - run: | - sdkmanager --install "platform-tools" "platforms;$PLATFORM_VER" - sdkmanager --install "ndk;$NDK_VER" --channel=3 - - - name: Build (Android) - run: | - export PATH=$ANDROID_HOME/ndk/$NDK_VER:$PATH - export OUTPUT=$PWD/native/android - rm -rf $OUTPUT && mkdir -p $OUTPUT - - # Build SDL2 - sed -i 's/abi=.*/abi="armeabi-v7a arm64-v8a x86 x86_64"/g' build-scripts/androidbuildlibs.sh - build-scripts/androidbuildlibs.sh NDK_LIBS_OUT="$OUTPUT" - - - name: Build SDL2 Android Java - run: | - export JAVA_HOME=$JAVA_HOME_11_X64 - export PATH=$JAVA_HOME_11_X64/bin:$PATH - export OUTPUT=$PWD/NAudio.Sdl2.Library.Android/Jars/ - rm -rf $OUTPUT && mkdir -p $OUTPUT - - # Build SDL2 Android Java part - cd SDL/android-project/app/src/main/java - javac -cp $ANDROID_HOME/platforms/$PLATFORM_VER/android.jar -encoding utf8 org/libsdl/app/*.java - jar cvf $OUTPUT/SDL2AndroidBridge.jar org/libsdl/app/*.class - - - name: Compress native directory - run: tar -cf native-android.tar native/android - - - name: Upload native artifact - uses: actions/upload-artifact@v4 - with: - name: native-android - path: native-android.tar - if-no-files-found: error - - - name: Upload JAR artifact - uses: actions/upload-artifact@v4 - with: - name: android-jar - path: NAudio.Sdl2.Library.Android/Jars/SDL2AndroidBridge.jar - if-no-files-found: error - - make-pr: - name: Submit pull request - runs-on: ubuntu-latest - needs: [ build, build-ios, build-android ] - steps: - - uses: actions/checkout@v4 - - - name: Download native artifacts - uses: actions/download-artifact@v4 - with: - pattern: native-* - merge-multiple: true - - - name: Decompress native artifacts - run: | - for file in native-*.tar - do - tar -xf "$file" - done - rm native-*.tar - - - name: Download JAR artifact - uses: actions/download-artifact@v4 - with: - name: android-jar - path: NAudio.Sdl2.Library.Android/Jars/ - - - name: Create pull request - uses: peter-evans/create-pull-request@v6 - with: - commit-message: Update native binaries - title: Update native binaries - body: This PR has been auto-generated to update the native SDL binaries - branch: update-native-binaries - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' \ No newline at end of file + - uses: actions/checkout@v4 + with: + repository: 'libsdl-org/SDL' + ref: 'SDL2' + - uses: actions/checkout@v4 + with: + path: 'NAudio-Sdl2-Library-Android' + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: microsoft + java-version: | + 11 + 17 + + - name: Install Android SDK Manager + uses: android-actions/setup-android@v3 + with: + packages: '' + + - name: Install Android SDK + run: | + sdkmanager --install "platform-tools" "platforms;$PLATFORM_VER" + sdkmanager --install "ndk;$NDK_VER" --channel=3 + + - name: Build (Android) + run: | + export PATH=$ANDROID_HOME/ndk/$NDK_VER:$PATH + export OUTPUT=$PWD/native/android + rm -rf $OUTPUT && mkdir -p $OUTPUT + + # Build SDL2 + sed -i 's/abi=.*/abi="armeabi-v7a arm64-v8a x86 x86_64"/g' build-scripts/androidbuildlibs.sh + build-scripts/androidbuildlibs.sh NDK_LIBS_OUT="$OUTPUT" + + - name: Build SDL2 Android Java + run: | + export JAVA_HOME=$JAVA_HOME_11_X64 + export PATH=$JAVA_HOME_11_X64/bin:$PATH + export OUTPUT=$PWD/NAudio.Sdl2.Library.Android/Jars/ + rm -rf $OUTPUT && mkdir -p $OUTPUT + + # Build SDL2 Android Java part + cd android-project/app/src/main/java + javac -cp $ANDROID_HOME/platforms/$PLATFORM_VER/android.jar -encoding utf8 org/libsdl/app/*.java + jar cvf $OUTPUT/SDL2AndroidBridge.jar org/libsdl/app/*.class + + - name: Compress native directory + run: tar -cf native-android.tar native/android + + - name: Upload native artifact + uses: actions/upload-artifact@v4 + with: + name: native-android + path: native-android.tar + if-no-files-found: error + + - name: Upload JAR artifact + uses: actions/upload-artifact@v4 + with: + name: android-jar + path: NAudio.Sdl2.Library.Android/Jars/SDL2AndroidBridge.jar + if-no-files-found: error + + - uses: actions/checkout@v4 + - name: Download native artifacts + uses: actions/download-artifact@v4 + with: + pattern: native-* + merge-multiple: true + + - name: Decompress native artifacts + run: | + for file in native-*.tar + do + tar -xf "$file" + done + rm native-*.tar + + - name: Download JAR artifact + uses: actions/download-artifact@v4 + with: + name: android-jar + path: NAudio.Sdl2.Library.Android/Jars/ + - name: Create pull request + uses: peter-evans/create-pull-request@v6 + with: + commit-message: Update android SDL binaries + title: Update android SDL binaries + body: This PR has been auto-genereated to update the android SDL binaries + branch: update-android-binaries + path: 'NAudio-Sdl2-Library-Android' + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' \ No newline at end of file