Use unity.a for building static RocksDb library. (#58) #160
This file contains 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: CI | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
lint: | |
name: "nph Lint" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 # In PR, has extra merge commit: ^1 = PR, ^2 = base | |
- name: Check nph formatting | |
# Pin nph to a specific version to avoid sudden style differences. | |
# Updating nph version should be accompanied with running the new | |
# version on the project directory. | |
run: | | |
VERSION="v0.5.1" | |
ARCHIVE="nph-linux_x64.tar.gz" | |
curl -L "https://github.com/arnetheduck/nph/releases/download/${VERSION}/${ARCHIVE}" -o ${ARCHIVE} | |
tar -xzf ${ARCHIVE} | |
./nph . | |
git diff --exit-code | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- os: linux | |
cpu: amd64 | |
- os: macos | |
cpu: amd64 | |
- os: windows | |
cpu: amd64 | |
branch: [version-1-6, version-2-0, devel] | |
include: | |
- target: | |
os: linux | |
builder: ubuntu-latest | |
shell: bash | |
- target: | |
os: macos | |
builder: macos-12 | |
shell: bash | |
- target: | |
os: windows | |
builder: windows-latest | |
shell: msys2 {0} | |
defaults: | |
run: | |
shell: ${{ matrix.shell }} | |
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }} (Nim ${{ matrix.branch }})' | |
runs-on: ${{ matrix.builder }} | |
#continue-on-error: ${{ matrix.branch == 'version-1-6' || matrix.branch == 'devel' }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install build dependencies (Linux i386) | |
if: runner.os == 'Linux' && matrix.target.cpu == 'i386' | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-fast update -qq | |
sudo DEBIAN_FRONTEND='noninteractive' apt-fast install \ | |
--no-install-recommends -yq gcc-multilib g++-multilib \ | |
libz-dev:i386 libbz2-dev:i386 libssl-dev:i386 liblz4-dev:i386 | |
mkdir -p external/bin | |
cat << EOF > external/bin/gcc | |
#!/bin/bash | |
exec $(which gcc) -m32 "\$@" | |
EOF | |
cat << EOF > external/bin/g++ | |
#!/bin/bash | |
exec $(which g++) -m32 "\$@" | |
EOF | |
chmod 755 external/bin/gcc external/bin/g++ | |
echo '${{ github.workspace }}/external/bin' >> $GITHUB_PATH | |
- name: Restore rocksdb from cache (Linux + macOS) | |
if: runner.os != 'Windows' | |
id: rocksdb-cache | |
uses: actions/cache@v4 | |
with: | |
path: rocks-db-cache-${{ matrix.target.cpu }} | |
key: 'rocksdb-v1-${{ matrix.target.os }}-${{ matrix.target.cpu }}' | |
- name: Build and install rocksdb (Linux i386 + macOS) | |
# no librocksdb-dev:i386 | |
if: (runner.os == 'Linux' && matrix.target.cpu == 'i386') || runner.os == 'Macos' | |
run: | | |
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_rocksdb.sh | |
bash build_rocksdb.sh rocks-db-cache-${{ matrix.target.cpu }} | |
- name: Install rocksdb (Linux amd64) | |
# mysterious illegal instruction error if we build our own librocksdb | |
if: runner.os == 'Linux' && matrix.target.cpu == 'amd64' | |
run: | | |
sudo apt-get -q update | |
sudo apt-get install -y librocksdb-dev | |
- name: MSYS2 (Windows i386) | |
if: runner.os == 'Windows' && matrix.target.cpu == 'i386' | |
uses: msys2/setup-msys2@v2 | |
with: | |
path-type: inherit | |
msystem: MINGW32 | |
install: >- | |
base-devel | |
git | |
mingw-w64-i686-toolchain | |
- name: MSYS2 (Windows amd64) | |
if: runner.os == 'Windows' && matrix.target.cpu == 'amd64' | |
uses: msys2/setup-msys2@v2 | |
with: | |
path-type: inherit | |
install: >- | |
base-devel | |
git | |
mingw-w64-x86_64-toolchain | |
- name: Install DLL dependencies (Windows) | |
if: > | |
runner.os == 'Windows' | |
run: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
ROCKSDBSUB=x64 | |
else | |
ROCKSDBSUB=x86 | |
fi | |
DLLPATH="external/dlls-${{ matrix.target.cpu }}" | |
mkdir -p ${DLLPATH} | |
# ROCKSDB | |
./scripts/build_dlls_windows.sh | |
cp ./build/librocksdb.dll "${DLLPATH}/librocksdb.dll" | |
- name: Path to cached dependencies (Windows) | |
if: > | |
runner.os == 'Windows' | |
run: | | |
echo '${{ github.workspace }}'"/external/dlls-${{ matrix.target.cpu }}" >> $GITHUB_PATH | |
- name: Derive environment variables | |
run: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
PLATFORM=x64 | |
else | |
PLATFORM=x86 | |
fi | |
echo "PLATFORM=$PLATFORM" >> $GITHUB_ENV | |
ncpu= | |
MAKE_CMD="make" | |
case '${{ runner.os }}' in | |
'Linux') | |
ncpu=$(nproc) | |
;; | |
'macOS') | |
ncpu=$(sysctl -n hw.ncpu) | |
;; | |
'Windows') | |
ncpu=$NUMBER_OF_PROCESSORS | |
MAKE_CMD="mingw32-make" | |
;; | |
esac | |
[[ -z "$ncpu" || $ncpu -le 0 ]] && ncpu=1 | |
echo "ncpu=$ncpu" >> $GITHUB_ENV | |
echo "MAKE_CMD=${MAKE_CMD}" >> $GITHUB_ENV | |
- name: Build Nim and Nimble | |
run: | | |
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_nim.sh | |
env MAKE="${MAKE_CMD} -j${ncpu}" ARCH_OVERRIDE=${PLATFORM} NIM_COMMIT=${{ matrix.branch }} \ | |
QUICK_AND_DIRTY_COMPILER=1 QUICK_AND_DIRTY_NIMBLE=1 CC=gcc \ | |
bash build_nim.sh nim csources dist/nimble NimBinaries | |
echo '${{ github.workspace }}/nim/bin' >> $GITHUB_PATH | |
- name: Run tests | |
run: | | |
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" | |
if [[ "${{ matrix.target.os }}" == "windows" ]]; then | |
# https://github.com/status-im/nimbus-eth2/issues/3121 | |
export NIMFLAGS="-d:nimRawSetjmp" | |
fi | |
nim --version | |
nimble --version | |
nimble install -y --depsOnly | |
nimble test | |
# static linking is not supported on windows | |
if [[ "${{ matrix.target.os }}" != "windows" ]]; then | |
nimble test_static | |
fi |