devolutions-crypto 0.9.2

An abstraction layer for the cryptography used by Devolutions
Documentation
name: Native Build Linux
description: This builds the linux native libraries
runs:
  using: composite
  steps:
    - name: Download Config
      uses: actions/download-artifact@v4
      with:
        name: config.txt
        path: ./wrappers/csharp

    - name:  Installing dependencies
      shell: bash
      run: |
        sudo apt-get update
        sudo apt-get install nuget gcc-multilib software-properties-common
        sudo apt-get install -y gcc-aarch64-linux-gnu

    - name: Install rust
      shell: bash
      run: |
        rustup update

        rustup target add x86_64-unknown-linux-gnu
        rustup target add i686-unknown-linux-gnu
        rustup target add aarch64-unknown-linux-gnu

        rustup target add aarch64-linux-android
        rustup target add armv7-linux-androideabi
        rustup target add i686-linux-android
        rustup target add x86_64-linux-android

    - name: Unit tests
      working-directory: ./
      shell: bash
      run: |
        ls
        cargo test

    - name: Building Linux
      working-directory: ./wrappers/csharp
      shell: bash
      run: |
        cargo build -p devolutions-crypto-ffi --release --target=i686-unknown-linux-gnu
        cargo build -p devolutions-crypto-ffi --release --target=x86_64-unknown-linux-gnu
        cargo build -p devolutions-crypto-ffi --release --target=aarch64-unknown-linux-gnu

    - name: Copy Linux Natives
      shell: bash
      run: |
        mkdir ./wrappers/csharp/linux

        cp ./target/i686-unknown-linux-gnu/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/linux/libDevolutionsCrypto-x86.so
        cp ./target/x86_64-unknown-linux-gnu/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/linux/libDevolutionsCrypto-x64.so
        cp ./target/aarch64-unknown-linux-gnu/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/linux/libDevolutionsCrypto-arm64.so

    - name: Configure Android NDK
      shell: bash
      run: |
        # Install NDK 27

        ANDROID_ROOT="/usr/local/lib/android"
        ANDROID_SDK_ROOT="${ANDROID_ROOT}/sdk"
        SDKMANAGER="${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager"
        echo "y" | $SDKMANAGER "ndk;27.2.12479018"

        export ANDROID_NDK=$ANDROID_SDK_ROOT/ndk-bundle

        echo "
        [target.aarch64-linux-android]
        ar = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar\"
        linker = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang\"
        [target.armv7-linux-androideabi]
        ar = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar\"
        linker = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang\"
        [target.i686-linux-android]
        ar = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar\"
        linker = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang\"
        [target.x86_64-linux-android]
        ar = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar\"
        linker = \"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang\"" >> ./.cargo/config.toml


    - name: Building Android
      working-directory: ./wrappers/csharp
      shell: bash
      run: |
        export ANDROID_ROOT="/usr/local/lib/android"
        export ANDROID_SDK_ROOT="${ANDROID_ROOT}/sdk"
        export ANDROID_NDK=$ANDROID_SDK_ROOT/ndk-bundle
        ln -sfn $ANDROID_SDK_ROOT/ndk/27.2.12479018 $ANDROID_NDK

        ls $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/
        cat ../../.cargo/config.toml
        
        # Set environment variables for blake3 custom build script
        export CC_aarch64_linux_android="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang"
        export AR_aarch64_linux_android="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
        export CC_armv7_linux_androideabi="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang"
        export AR_armv7_linux_androideabi="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
        export CC_i686_linux_android="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang"
        export AR_i686_linux_android="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
        export CC_x86_64_linux_android="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang"
        export AR_x86_64_linux_android="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"

        cargo build -p devolutions-crypto-ffi --release --target=aarch64-linux-android
        cargo build -p devolutions-crypto-ffi --release --target=armv7-linux-androideabi
        cargo build -p devolutions-crypto-ffi --release --target=i686-linux-android
        cargo build -p devolutions-crypto-ffi --release --target=x86_64-linux-android

    - name: Copy Android Natives
      shell: bash
      run: |
        mkdir ./wrappers/csharp/android
        mkdir ./wrappers/csharp/android/aarch64
        mkdir ./wrappers/csharp/android/armv7
        mkdir ./wrappers/csharp/android/i686
        mkdir ./wrappers/csharp/android/x86_64

        cp ./target/aarch64-linux-android/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/android/aarch64/libDevolutionsCrypto.so
        cp ./target/armv7-linux-androideabi/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/android/armv7/libDevolutionsCrypto.so
        cp ./target/i686-linux-android/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/android/i686/libDevolutionsCrypto.so
        cp ./target/x86_64-linux-android/release/libdevolutions_crypto_ffi.so ./wrappers/csharp/android/x86_64/libDevolutionsCrypto.so


    - uses: actions/upload-artifact@v4.3.6
      with:
        name: native-android-linux
        path: |
          wrappers/csharp/android/**
          wrappers/csharp/linux/**