Support for static linking RocksDb. #65
Workflow file for this run
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: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
# - os: linux | |
# cpu: amd64 | |
# - os: linux | |
# cpu: i386 | |
# - os: macos | |
# cpu: amd64 | |
- os: windows | |
cpu: amd64 | |
#- os: windows | |
#cpu: i386 | |
# branch: [version-1-6, version-2-0, devel] | |
branch: [version-1-6] | |
include: | |
- target: | |
os: linux | |
builder: ubuntu-20.04 | |
shell: bash | |
- target: | |
os: macos | |
builder: macos-11 | |
shell: bash | |
- target: | |
os: windows | |
builder: windows-2019 | |
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: Restore Nim DLLs dependencies (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-dlls-cache | |
uses: actions/cache@v4 | |
with: | |
path: external/dlls-${{ matrix.target.cpu }} | |
key: 'dlls-${{ matrix.target.cpu }}' | |
- name: Install DLL dependencies (Windows) | |
if: > | |
steps.windows-dlls-cache.outputs.cache-hit != 'true' && | |
runner.os == 'Windows' | |
run: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
ROCKSDBSUB=x64 | |
else | |
ROCKSDBSUB=x86 | |
fi | |
DLLPATH="external/dlls-${{ matrix.target.cpu }}" | |
mkdir external | |
curl -L "https://nim-lang.org/download/windeps.zip" -o external/windeps.zip | |
7z x -y external/windeps.zip -o"${DLLPATH}" | |
# ROCKSDB | |
curl -L "https://github.com/status-im/nimbus-deps/releases/download/nimbus-deps/nimbus-deps.zip" -o external/nimbus-deps.zip | |
7z x -y external/nimbus-deps.zip | |
cp -a "./${ROCKSDBSUB}/librocksdb.dll" "${DLLPATH}/librocksdb.dll" | |
- name: Install static dependencies (Windows) | |
if: > | |
runner.os == 'Windows' | |
run: | | |
/c/vcpkg/vcpkg --help | |
export VCPKG_LIBRARY_LINKAGE=static | |
export VCPKG_BUILD_TYPE=release | |
/c/vcpkg/vcpkg install rocksdb[core,lz4,zstd] | |
LIBS_DIR=build/lib/ | |
mkdir -p ${LIBS_DIR} | |
cp /c/vcpkg/packages/lz4_x64-windows/lib/lz4.lib ${LIBS_DIR} | |
cp /c/vcpkg/packages/zstd_x64-windows/lib/zstd.lib ${LIBS_DIR} | |
cp /c/vcpkg/packages/rocksdb_x64-windows/lib/rocksdb.lib ${LIBS_DIR} | |
- 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 | |
nimble test_static |