From 1a5749cbced7b6c11dff843c706be7d43e1bbddf Mon Sep 17 00:00:00 2001 From: Michal Rostecki Date: Fri, 27 Oct 2023 13:53:10 +0200 Subject: [PATCH] platform-tools-solana: Add action for building Solana Platform toolchain --- .github/workflows/platform-tools-solana.yml | 142 ++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 .github/workflows/platform-tools-solana.yml diff --git a/.github/workflows/platform-tools-solana.yml b/.github/workflows/platform-tools-solana.yml new file mode 100644 index 0000000..e6845a3 --- /dev/null +++ b/.github/workflows/platform-tools-solana.yml @@ -0,0 +1,142 @@ +name: Solana Platform tools + +on: + push: + tags: + - "platform-tools-solana*" + # todo remove + pull_request: + branches: + - main + +permissions: + contents: write + +env: + LLVM_VERSION: 17 + +jobs: + release: + name: release + strategy: + matrix: + include: + - target: aarch64-apple-darwin + os: macos-latest + - target: aarch64-unknown-linux-gnu + os: ubuntu-20.04 + - target: aarch64-unknown-linux-musl + os: ubuntu-latest + - target: x86_64-apple-darwin + os: macos-latest + - target: x86_64-unknown-linux-gnu + os: ubuntu-20.04 + - target: x86_64-unknown-linux-musl + os: ubuntu-latest + runs-on: ${{ matrix.os }} + outputs: + version: ${{ steps.extract_version.outputs.version }} + steps: + - name: Extract version from tag + id: extract_version + run: | + echo "version=$(echo ${GITHUB_REF#refs/tags/platform-tools-solana-})" >> $GITHUB_OUTPUT + + - name: Install dependencies + if: startsWith(matrix.os, 'ubuntu') + run: | + set -euxo pipefail + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc + echo -e deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-${{ env.LLVM_VERSION }} main | sudo tee /etc/apt/sources.list.d/llvm.list + sudo apt update + sudo apt -y install clang-${{ env.LLVM_VERSION }} cmake lld-${{ env.LLVM_VERSION }} ninja-build + echo /usr/lib/llvm-${{ env.LLVM_VERSION }}/bin >> $GITHUB_PATH + + - name: Checkout Rust code + uses: actions/checkout@v2 + with: + repository: solana-labs/rust + ref: solana-tools-${{ steps.extract_version.outputs.version }} + + - name: Build Rust + run: | + ./x.py build --stage 1 --target ${{ matrix.target }},sbf-solana-solana + + - name: Checkout Cargo code + uses: actions/checkout@v2 + with: + repository: solana-labs/caego + ref: solana-tools-${{ steps.extract_version.outputs.version }} + + - name: Build Cargo + env: + OPENSSL_STATIC: 1 + run: | + cargo build --release + + - name: Copy Rust build products + run: | + set -euxo pipefail + mkdir -p deploy/rust + cp version.md deploy/ + cp -R "rust/build/${HOST_TRIPLE}/stage1/bin" deploy/rust/ + cp -R "cargo/target/release/cargo${EXE_SUFFIX}" deploy/rust/bin/ + mkdir -p deploy/rust/lib/rustlib/ + cp -R "rust/build/${HOST_TRIPLE}/stage1/lib/rustlib/${HOST_TRIPLE}" deploy/rust/lib/rustlib/ + cp -R "rust/build/${HOST_TRIPLE}/stage1/lib/rustlib/sbf-solana-solana" deploy/rust/lib/rustlib/ + find . -maxdepth 6 -type f -path "./rust/build/${HOST_TRIPLE}/stage1/lib/*" -exec cp {} deploy/rust/lib \; + mkdir -p deploy/rust/lib/rustlib/src/rust + cp "rust/build/${HOST_TRIPLE}/stage1/lib/rustlib/src/rust/Cargo.lock" deploy/rust/lib/rustlib/src/rust + cp -R "rust/build/${HOST_TRIPLE}/stage1/lib/rustlib/src/rust/library" deploy/rust/lib/rustlib/src/rust + + - name: Copy LLVM build products + run: | + set -euxo pipefail + mkdir -p deploy/llvm/{bin,lib} + while IFS= read -r f + do + bin_file="rust/build/${HOST_TRIPLE}/llvm/build/bin/${f}${EXE_SUFFIX}" + if [[ -f "$bin_file" ]] ; then + cp -R "$bin_file" deploy/llvm/bin/ + fi + done < <(cat <