name: Build bindings for Linux on: workflow_dispatch: inputs: ref: description: 'commit/tag/branch reference' required: true type: string workflow_call: inputs: repository: description: 'sdk repository, defaults to current repository' required: false type: string ref: description: 'commit/tag/branch reference' required: true type: string use-dummy-binaries: description: 'If true, creates dummy binaries rather than real binaries' required: false type: boolean default: false uniffi-25: description: 'If true, builds additional bindings for Uniffi 0.25' required: false type: boolean default: false jobs: setup: name: Setup runs-on: ubuntu-latest steps: - id: set-matrix run: | if [ ${{ inputs.uniffi-25 }} == true ]; then echo "::set-output name=matrix::['', '-uniffi-25']" else echo "::set-output name=matrix::['']" fi outputs: uniffi-matrix: ${{ steps.set-matrix.outputs.matrix }} build: if: ${{ !inputs.use-dummy-binaries }} runs-on: ubuntu-20.04 name: build ${{ matrix.target }}${{ matrix.uniffi }} needs: setup strategy: matrix: uniffi: ${{ fromJson(needs.setup.outputs.uniffi-matrix) }} target: [ aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu, ] steps: - name: checkout uses: actions/checkout@v4 with: ref: ${{ inputs.ref }} repository: ${{ inputs.repository || github.repository }} - name: Install rust toolchain run: | rustup set auto-self-update disable rustup toolchain install stable --profile minimal rustup target add ${{ matrix.target }} - name: Install Protoc uses: arduino/setup-protoc@v3 with: version: "27.2" repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install gcc-aarch64-linux-gnu if: matrix.target == 'aarch64-unknown-linux-gnu' run: | sudo apt-get update -y sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - name: Install gcc-x86-64-linux-gnu if: matrix.target == 'x86_64-unknown-linux-gnu' run: | sudo apt-get update -y sudo apt-get install -y gcc-x86-64-linux-gnu g++-x86-64-linux-gnu - uses: Swatinem/rust-cache@v2 with: key: ${{ matrix.uniffi }} workspaces: lib - name: Build bindings if: matrix.uniffi != '-uniffi-25' working-directory: lib/bindings env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: /usr/bin/aarch64-linux-gnu-gcc CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: /usr/bin/x86_64-linux-gnu-gcc run: cargo build --release --target ${{ matrix.target }} - name: Build bindings Uniffi 0.25 if: matrix.uniffi == '-uniffi-25' working-directory: lib/bindings env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: /usr/bin/aarch64-linux-gnu-gcc CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: /usr/bin/x86_64-linux-gnu-gcc run: cargo build --no-default-features --features=uniffi-25 --release --target ${{ matrix.target }} - name: Archive release uses: actions/upload-artifact@v4 with: name: bindings-${{ matrix.target }}${{ matrix.uniffi }} path: lib/target/${{ matrix.target }}/release/libbreez_sdk_liquid_bindings.so build-dummies: if: ${{ inputs.use-dummy-binaries }} runs-on: ubuntu-latest name: build dummies ${{ matrix.target }}${{ matrix.uniffi }} needs: setup strategy: matrix: uniffi: ${{ fromJson(needs.setup.outputs.uniffi-matrix) }} target: [ aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu, ] steps: - name: Build dummy linux ${{ matrix.target }} run: | touch libbreez_sdk_liquid_bindings.so - name: Upload dummy linux ${{ matrix.target }} artifact uses: actions/upload-artifact@v4 with: name: bindings-${{ matrix.target }}${{ matrix.uniffi }} path: ./*