name: Rust on: push: tags: - '*' env: CARGO_TERM_COLOR: always defaults: run: # necessary for windows shell: bash permissions: contents: write packages: write jobs: build: name: Build ${{ matrix.TARGET }} strategy: fail-fast: false matrix: include: - TARGET: x86_64-unknown-linux-musl OS: ubuntu-latest - TARGET: aarch64-unknown-linux-musl OS: ubuntu-latest - TARGET: armv7-unknown-linux-musleabihf OS: ubuntu-latest - TARGET: armv7-unknown-linux-musleabi OS: ubuntu-latest - TARGET: arm-unknown-linux-musleabihf OS: ubuntu-latest - TARGET: arm-unknown-linux-musleabi OS: ubuntu-latest - TARGET: x86_64-apple-darwin OS: macos-latest - TARGET: aarch64-apple-darwin OS: macos-latest - TARGET: i686-pc-windows-msvc OS: windows-latest - TARGET: x86_64-pc-windows-msvc OS: windows-latest - TARGET: aarch64-pc-windows-msvc OS: windows-latest - TARGET: mipsel-unknown-linux-musl OS: ubuntu-latest - TARGET: mips-unknown-linux-musl OS: ubuntu-latest - TARGET: x86_64-unknown-freebsd OS: ubuntu-latest ARTIFACT_NAME: freebsd-13.2-x86_64 BSD_VERSION: 13.2 runs-on: ${{ matrix.OS }} env: NAME: Vnt TARGET: ${{ matrix.TARGET }} OS: ${{ matrix.OS }} FEATURES: ${{ matrix.FEATURES }} steps: - uses: actions/checkout@v4 - name: Init submodules run: git submodule update --init --recursive --remote && git submodule status - name: Cargo cache uses: actions/cache@v4 with: path: | ~/.cargo/registry ./target key: build-cargo-registry-${{matrix.TARGET}} - name: Install Protobuf (MacOS) if: runner.os == 'macOS' run: brew install protobuf - name: Install Protobuf (Windows) if: runner.os == 'Windows' run: choco install protoc - name: Use strawberry perl if: startsWith(matrix.os, 'windows') run: echo OPENSSL_SRC_PERL=C:/Strawberry/perl/bin/perl >> $GITHUB_ENV - name: List run: find ./ - name: Build Vnt X86_64-FreeBSD uses: cross-platform-actions/action@v0.23.0 if: ${{ endsWith(matrix.TARGET, 'freebsd') }} env: TARGET: ${{ matrix.TARGET }} with: operating_system: freebsd environment_variables: TARGET architecture: x86-64 version: ${{ matrix.BSD_VERSION }} shell: bash memory: 5G cpu_count: 4 run: | uname -a echo $SHELL pwd ls -lah whoami env | sort sudo pkg install -y git protobuf llvm15 curl --proto 'https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env export CC=clang export CXX=clang++ export CARGO_TERM_COLOR=always cargo build --release --verbose --bin vnt2_web --features vnt-web --target $TARGET cargo build --release --verbose --bin vnt2_cli --features vnt-ipc --target $TARGET cargo build --release --verbose --bin vnt2_ctrl --features vnt-ipc --target $TARGET - name: Install and configure dependencies if: ${{ ! endsWith(matrix.TARGET, 'freebsd') }} run: | # dependencies are only needed on ubuntu as that's the only place where # we make cross-compilation if [[ $OS =~ ^ubuntu.*$ ]]; then sudo apt-get update && sudo apt-get install protobuf-compiler clang llvm libc6-dev-i386 crossbuild-essential-arm64 crossbuild-essential-armhf musl-tools libboost-all-dev libc6-dev -y # curl -s musl.cc | grep mipsel case $TARGET in mipsel-unknown-linux-musl) MUSL_URI=mipsel-linux-muslsf-cross URL=mipsel-linux-muslsf ;; aarch64-unknown-linux-musl) MUSL_URI=aarch64-linux-musl-cross ;; armv7-unknown-linux-musleabihf) MUSL_URI=armv7l-linux-musleabihf-cross ;; armv7-unknown-linux-musleabi) MUSL_URI=armv7m-linux-musleabi-cross ;; arm-unknown-linux-musleabihf) MUSL_URI=arm-linux-musleabihf-cross ;; arm-unknown-linux-musleabi) MUSL_URI=arm-linux-musleabi-cross ;; mips-unknown-linux-musl) MUSL_URI=mips-linux-muslsf-cross URL=mips-linux-muslsf ;; esac if [ -n "$MUSL_URI" ]; then mkdir -p ./musl_gcc wget -c https://github.com/rustp2p/musl-cross/releases/download/0.0.1/$MUSL_URI.tgz -P /opt/musl_gcc/ tar zxf /opt/musl_gcc/$MUSL_URI.tgz -C /opt/musl_gcc/ sudo ln -s /opt/musl_gcc/$MUSL_URI/bin/*gcc /usr/bin/ fi fi if [[ $TARGET =~ ^mips.*$ ]]; then cd /opt/musl_gcc/${URL}-cross/lib/gcc/${URL}/11.2.1 cp libgcc_eh.a libunwind.a rustup toolchain install nightly-x86_64-unknown-linux-gnu rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu RUST_LIB_SRC=$HOME/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/ if [[ -f $RUST_LIB_SRC/library/Cargo.lock && ! -f $RUST_LIB_SRC/Cargo.lock ]]; then cp -f $RUST_LIB_SRC/library/Cargo.lock $RUST_LIB_SRC/Cargo.lock fi fi rustup -V # some additional configuration for cross-compilation on linux cat >>~/.cargo/config.toml <