Opus Compile #37
This file contains hidden or 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: Opus Compile | |
| on: | |
| push: | |
| branches: [ "main" ] | |
| pull_request: | |
| branches: [ "main" ] | |
| workflow_dispatch: | |
| jobs: | |
| Android: | |
| runs-on: ubuntu-latest | |
| env: | |
| CHECK_ALIGNMENT: false | |
| strategy: | |
| matrix: | |
| arch: [x64, x86, arm64, arm32] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: nttld/setup-ndk@v1 | |
| id: setup-ndk | |
| with: | |
| ndk-version: r28c | |
| add-to-path: false | |
| env: | |
| ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
| # Not much I can do to reduce the bloat. | |
| - name: Setup Environment | |
| run: | | |
| if [[ "${{ matrix.arch }}" == "x64" ]]; then | |
| echo "ABI=x86_64" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "x86" ]]; then | |
| echo "ABI=x86" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "arm64" ]]; then | |
| echo "ABI=arm64-v8a" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "arm32" ]]; then | |
| echo "ABI=armeabi-v7a" >> $GITHUB_ENV | |
| fi | |
| - name: Create Build Directory | |
| run: mkdir build | |
| - name: Clone Repository | |
| run: git clone https://github.com/xiph/opus.git | |
| - name: Autogen | |
| run: ./opus/autogen.sh | |
| - name: Configure | |
| working-directory: ./build | |
| run: cmake ../opus -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake -DANDROID_ABI=${{ env.ABI }} -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_SHARED_LINKER_FLAGS='-Wl,-z,max-page-size=16384,-z,common-page-size=16384' -DCMAKE_EXE_LINKER_FLAGS='-Wl,-z,max-page-size=16384,-z,common-page-size=16384' | |
| - name: Build | |
| working-directory: ./build | |
| run: cmake --build . -j 2 --config Release --target package | |
| - name: Check Alignment | |
| if: ${{ env.CHECK_ALIGNMENT == 'true' }} | |
| working-directory: ./build | |
| run: sudo apt install llvm && llvm-objdump -p libopus.so | grep LOAD | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-${{ matrix.arch }}-libopus.so | |
| path: ./build/libopus.so | |
| Linux: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| arch: [x64, x86, arm64, arm32] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Not much I can do to reduce the bloat. | |
| - name: Setup Environment | |
| run: | | |
| if [[ "${{ matrix.arch }}" == "x64" ]]; then | |
| echo "C_FLAGS=-m64" >> $GITHUB_ENV | |
| echo "CXX_FLAGS=-m64" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "x86" ]]; then | |
| sudo apt-get update | |
| sudo apt-get install g++-multilib | |
| echo "C_FLAGS=-m32" >> $GITHUB_ENV | |
| echo "CXX_FLAGS=-m32" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "arm64" ]]; then | |
| sudo apt-get update | |
| sudo apt-get install g++-aarch64-linux-gnu | |
| echo "C_COMPILER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV | |
| echo "CXX_COMPILER=aarch64-linux-gnu-g++" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "arm32" ]]; then | |
| sudo apt-get update | |
| sudo apt-get install g++-arm-linux-gnueabi | |
| echo "C_COMPILER=arm-linux-gnueabi-gcc" >> $GITHUB_ENV | |
| echo "CXX_COMPILER=arm-linux-gnueabi-g++" >> $GITHUB_ENV | |
| fi | |
| - name: Create Build Directory | |
| run: mkdir build | |
| - name: Clone Repository | |
| run: git clone https://github.com/xiph/opus.git | |
| - name: Autogen | |
| run: ./opus/autogen.sh | |
| - name: Configure | |
| working-directory: ./build | |
| run: | | |
| if [[ "${{ matrix.arch }}" == "x64" || "${{ matrix.arch }}" == "x86" ]]; then | |
| cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DCMAKE_C_FLAGS=${{ env.C_FLAGS }} -DCMAKE_CXX_FLAGS=${{ env.CXX_FLAGS }} | |
| elif [[ "${{ matrix.arch }}" == "arm64" || "${{ matrix.arch }}" == "arm32" ]]; then | |
| cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DCMAKE_C_COMPILER=${{ env.C_COMPILER }} -DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | |
| fi | |
| - name: Build | |
| working-directory: ./build | |
| run: cmake --build . -j 2 --config Release --target package | |
| - name: Show Files | |
| working-directory: ./build | |
| run: dir | |
| - name: Rename file | |
| working-directory: ./build | |
| run: mv libopus.so.0.10.1 opus.so | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-${{ matrix.arch }}-opus.so | |
| path: ./build/opus.so | |
| Windows: | |
| runs-on: windows-latest | |
| strategy: | |
| matrix: | |
| arch: [x64, x86, arm64] # Disabled arm32 | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Not much I can do to reduce the bloat. | |
| - name: Setup Environment | |
| run: | | |
| if ( "${{ matrix.arch }}" -eq "x64" ) { | |
| echo "ARCH=x64" >> $env:GITHUB_ENV | |
| } elseif ( "${{ matrix.arch }}" -eq "x86" ) { | |
| echo "ARCH=Win32" >> $env:GITHUB_ENV | |
| } elseif ( "${{ matrix.arch }}" -eq "arm64" ) { | |
| echo "ARCH=ARM64" >> $env:GITHUB_ENV | |
| } elseif ( "${{ matrix.arch }}" -eq "arm32" ) { | |
| echo "ARCH=ARM" >> $env:GITHUB_ENV | |
| } | |
| - name: Create Build Directory | |
| run: mkdir build | |
| - name: Clone Repository | |
| run: git clone https://github.com/xiph/opus.git | |
| - name: Autogen | |
| run: ./opus/autogen.bat | |
| - name: Configure | |
| working-directory: ./build | |
| run: | | |
| if ( "${{ matrix.arch }}" -eq "arm32" ) { | |
| cmake ../opus -G "Visual Studio 17 2022" -A ARM,version=10.0.22621.0 -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=ON | |
| } | |
| else { | |
| cmake ../opus -G "Visual Studio 17 2022" -A ${{ env.ARCH }} -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=ON | |
| } | |
| - name: Build | |
| working-directory: ./build | |
| run: cmake --build . -j 2 --config Release --target package | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: win-${{ matrix.arch }}-opus.dll | |
| path: ./build/Release/opus.dll | |
| MacOS: | |
| runs-on: macos-latest | |
| strategy: | |
| matrix: | |
| arch: [x64, arm64] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Not much I can do to reduce the bloat. | |
| - name: Setup Environment | |
| run: | | |
| brew install autoconf automake libtool | |
| if [[ "${{ matrix.arch }}" == "x64" ]]; then | |
| echo "OSX_ARCH=x86_64" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.arch }}" == "arm64" ]]; then | |
| echo "OSX_ARCH=arm64" >> $GITHUB_ENV | |
| fi | |
| - name: Create Build Directory | |
| run: mkdir build | |
| - name: Clone Repository | |
| run: git clone https://github.com/xiph/opus.git | |
| - name: Autogen | |
| run: ./opus/autogen.sh | |
| - name: Configure | |
| working-directory: ./build | |
| run: cmake ../opus -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_OSX_ARCHITECTURES=${{ env.OSX_ARCH }} | |
| - name: Build | |
| working-directory: ./build | |
| run: cmake --build . | |
| - name: Rename file | |
| working-directory: ./build | |
| run: mv libopus.0.10.1.dylib opus.dylib | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-${{ matrix.arch }}-opus.dylib | |
| path: ./build/opus.dylib | |
| Wasm: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: mymindstorm/setup-emsdk@v14 | |
| - name: Create Build Dir | |
| run: mkdir build | |
| - name: Clone Repository | |
| run: git clone https://github.com/xiph/opus.git | |
| - name: Autogen | |
| run: ./opus/autogen.sh | |
| - name: Configure | |
| working-directory: ./build | |
| run: emcmake cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON | |
| - name: Build | |
| working-directory: ./build | |
| run: cmake --build . -j 2 --config Release --target package | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wasm-libopus.a | |
| path: ./build/libopus.a |