Use vartime impl to accelerate the BN254 EVM precompiles #1087
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: Constantine CI | |
on: [push, pull_request] | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
max-parallel: 20 | |
matrix: | |
nim_version: [version-1-6] # [version-1-4, devel] | |
target: | |
- os: linux | |
cpu: amd64 | |
TEST_LANG: c | |
BACKEND: NO_ASM | |
# 32-bit CI failing with https://github.com/mratsim/constantine/issues/244 | |
# "E: Unable to correct problems, you have held broken packages."" | |
# - os: linux | |
# cpu: i386 | |
# TEST_LANG: c | |
# BACKEND: NO_ASM | |
- os: linux | |
cpu: amd64 | |
TEST_LANG: c | |
BACKEND: ASM | |
- os: windows | |
cpu: amd64 | |
TEST_LANG: c | |
BACKEND: NO_ASM | |
- os: windows | |
cpu: amd64 | |
TEST_LANG: c | |
BACKEND: ASM | |
- os: macos | |
cpu: amd64 | |
TEST_LANG: c | |
BACKEND: NO_ASM | |
- os: macos | |
cpu: amd64 | |
TEST_LANG: c | |
BACKEND: ASM | |
include: | |
- target: | |
os: linux | |
builder: ubuntu-latest | |
- target: | |
os: macos | |
builder: macos-latest | |
- target: | |
os: windows | |
builder: windows-latest | |
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ matrix.target.TEST_LANG }}-${{ matrix.target.BACKEND }} (${{ matrix.nim_version }})' | |
runs-on: ${{ matrix.builder }} | |
steps: | |
- name: Get branch name | |
shell: bash | |
run: | | |
if [[ '${{ github.event_name }}' == 'pull_request' ]]; then | |
echo "##[set-output name=branch_name;]$(echo ${GITHUB_HEAD_REF})" | |
echo "Branch found (PR): ${GITHUB_HEAD_REF}" | |
else | |
echo "##[set-output name=branch_name;]$(echo ${GITHUB_REF#refs/heads/})" | |
echo "Branch found (not PR): ${GITHUB_REF#refs/heads/}" | |
fi | |
id: get_branch | |
- name: Cancel Previous Runs (except master) | |
if: > | |
steps.get_branch.outputs.branch_name != 'master' | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout constantine | |
uses: actions/checkout@v2 | |
with: | |
path: constantine | |
- name: Restore MinGW-W64 (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-mingw-cache | |
uses: actions/cache@v2 | |
with: | |
path: external/mingw-${{ matrix.target.cpu }} | |
key: 'mingw-${{ matrix.target.cpu }}' | |
- name: Restore Nim DLLs dependencies (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-dlls-cache | |
uses: actions/cache@v2 | |
with: | |
path: external/dlls-${{ matrix.target.cpu }} | |
key: 'dlls-${{ matrix.target.cpu }}' | |
- name: Install MinGW64 dependency (Windows) | |
if: > | |
steps.windows-mingw-cache.outputs.cache-hit != 'true' && | |
runner.os == 'Windows' | |
shell: bash | |
run: | | |
mkdir -p external | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
MINGW_URL="https://github.com/brechtsanders/winlibs_mingw/releases/download/11.1.0-12.0.0-9.0.0-r2/winlibs-x86_64-posix-seh-gcc-11.1.0-mingw-w64-9.0.0-r2.7z" | |
ARCH=64 | |
else | |
MINGW_URL="https://github.com/brechtsanders/winlibs_mingw/releases/download/11.1.0-12.0.0-9.0.0-r2/winlibs-i686-posix-dwarf-gcc-11.1.0-mingw-w64-9.0.0-r2.7z" | |
ARCH=32 | |
fi | |
curl -L "$MINGW_URL" -o "external/mingw-${{ matrix.target.cpu }}.7z" | |
7z x -y "external/mingw-${{ matrix.target.cpu }}.7z" -oexternal/ | |
mv external/mingw$ARCH external/mingw-${{ matrix.target.cpu }} | |
- name: Install DLLs dependencies (Windows) | |
if: > | |
steps.windows-dlls-cache.outputs.cache-hit != 'true' && | |
runner.os == 'Windows' | |
shell: bash | |
run: | | |
mkdir -p external | |
curl -L "https://nim-lang.org/download/windeps.zip" -o external/windeps.zip | |
7z x -y external/windeps.zip -oexternal/dlls-${{ matrix.target.cpu }} | |
- name: Path to cached dependencies (Windows) | |
if: > | |
runner.os == 'Windows' | |
shell: bash | |
run: | | |
echo '${{ github.workspace }}'"/external/mingw-${{ matrix.target.cpu }}/bin" >> $GITHUB_PATH | |
echo '${{ github.workspace }}'"/external/dlls-${{ matrix.target.cpu }}" >> $GITHUB_PATH | |
- name: Restore Nim from cache | |
if: matrix.nim_version != 'devel' | |
id: nim-compiler-cache | |
uses: actions/cache@v2 | |
with: | |
path: '${{ github.workspace }}/nim-${{ matrix.nim_version }}-${{ matrix.target.cpu }}' | |
key: 'nim-${{ matrix.target.cpu }}-${{ matrix.nim_version }}' | |
- name: Setup Nim | |
if: steps.nim-compiler-cache.outputs.cache-hit != 'true' | |
uses: alaviss/[email protected] | |
with: | |
path: 'nim-${{ matrix.nim_version }}-${{ matrix.target.cpu }}' | |
version: ${{ matrix.nim_version }} | |
architecture: ${{ matrix.target.cpu }} | |
add-to-path: false | |
- name: Path to cached Nim | |
shell: bash | |
run: | | |
echo '${{ github.workspace }}'"/nim-${{ matrix.nim_version }}-${{ matrix.target.cpu }}/bin" >> $GITHUB_PATH | |
echo '${{ github.workspace }}'"/.nimble/bin" >> $GITHUB_PATH | |
- name: Install test dependencies (Linux amd64) | |
if: runner.os == 'Linux' && matrix.target.cpu == 'amd64' | |
run: | | |
sudo DEBIAN_FRONTEND='noninteractive' apt-fast install \ | |
--no-install-recommends -yq \ | |
libgmp-dev | |
- name: Install test dependencies (Linux i386) | |
if: runner.os == 'Linux' && matrix.target.cpu == 'i386' | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-fast update -qq | |
# Try to fix "E: Unable to correct problems, you have held broken packages." | |
sudo apt-fast clean | |
sudo DEBIAN_FRONTEND='noninteractive' apt-fast install \ | |
--no-install-recommends -yq \ | |
gcc-multilib g++-multilib \ | |
libssl-dev:i386 libgmp-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,g++} | |
echo '${{ github.workspace }}/external/bin' >> $GITHUB_PATH | |
- name: Install test dependencies (macOS) | |
if: runner.os == 'macOS' | |
run: | | |
brew install gmp | |
mkdir -p external/bin | |
cat << EOF > external/bin/clang | |
#!/bin/bash | |
exec $(brew --prefix llvm@15)/bin/clang "\$@" | |
EOF | |
cat << EOF > external/bin/clang++ | |
#!/bin/bash | |
exec $(brew --prefix llvm@15)/bin/clang++ "\$@" | |
EOF | |
chmod 755 external/bin/{clang,clang++} | |
echo '${{ github.workspace }}/external/bin' >> $GITHUB_PATH | |
- name: Setup MSYS2 (Windows) | |
if: runner.os == 'Windows' | |
uses: msys2/setup-msys2@v2 | |
with: | |
path-type: inherit | |
update: false | |
install: base-devel git mingw-w64-x86_64-toolchain | |
- name: Install test dependencies (Windows) | |
if: runner.os == 'Windows' | |
shell: msys2 {0} | |
run: | | |
pacman -S --needed --noconfirm mingw-w64-x86_64-gmp | |
nimble refresh --verbose -y | |
nimble install --verbose -y gmp jsony asynctools | |
- name: Install test dependencies | |
if: runner.os != 'Windows' | |
shell: bash | |
run: | | |
nimble refresh --verbose -y | |
nimble install --verbose -y gmp jsony asynctools | |
- name: Print Nim & compiler versions | |
shell: bash | |
# gcc is an alias to Clang on MacOS | |
run: | | |
nim -v | |
gcc -v | |
- name: Run Constantine tests (UNIX with Assembly) | |
if: runner.os != 'Windows' && matrix.target.BACKEND == 'ASM' | |
shell: bash | |
run: | | |
cd constantine | |
nimble bindings --verbose | |
nimble test_bindings --verbose | |
nimble test_parallel --verbose | |
- name: Run Constantine tests (UNIX no Assembly) | |
if: runner.os != 'Windows' && matrix.target.BACKEND == 'NO_ASM' | |
shell: bash | |
run: | | |
cd constantine | |
CTT_ASM=0 nimble bindings --verbose | |
nimble test_bindings --verbose | |
CTT_ASM=0 nimble test_parallel --verbose | |
- name: Run Constantine tests (Windows with Assembly) | |
# So "test_bindings" uses C and can find GMP | |
# but nim-gmp cannot find GMP on Windows CI | |
if: runner.os == 'Windows' && matrix.target.BACKEND == 'ASM' | |
shell: msys2 {0} | |
run: | | |
cd constantine | |
nimble bindings --verbose | |
nimble test_bindings --verbose | |
nimble test_parallel_no_gmp --verbose | |
- name: Run Constantine tests (Windows no Assembly) | |
# So "test_bindings" uses C and can find GMP | |
# but nim-gmp cannot find GMP on Windows CI | |
if: runner.os == 'Windows' && matrix.target.BACKEND == 'NO_ASM' | |
shell: msys2 {0} | |
run: | | |
cd constantine | |
CTT_ASM=0 nimble bindings --verbose | |
nimble test_bindings --verbose | |
CTT_ASM=0 nimble test_parallel_no_gmp --verbose |