Skip to content

Development happens here #202

Development happens here

Development happens here #202

name: build-emscripten
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "*" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v14
with:
emscripten-version: latest
- name: Set EMINSTALL
run: |
EMINSTALL=$(em-config CACHE)/sysroot
echo "EMINSTALL=$EMINSTALL" >> $GITHUB_ENV
- name: Install build dependencies
run: sudo apt-get update && sudo apt-get install -yq wget ccache
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: emscripten
max-size: 500M
- name: Build GMP for wasm
run: |
wget https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz
tar xf gmp-6.3.0.tar.xz
cd gmp-6.3.0
emconfigure ./configure --disable-assembly --host wasm32 --enable-cxx --prefix=$EMINSTALL CFLAGS="-fPIC" CXXFLAGS="-fPIC"
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ..
- name: Build MPFR for wasm
run: |
wget https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.1.tar.xz
tar xf mpfr-4.2.1.tar.xz
cd mpfr-4.2.1
emconfigure ./configure --host wasm32 --with-gmp=$EMINSTALL --prefix=$EMINSTALL CFLAGS="-fPIC" CXXFLAGS="-fPIC"
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ..
- name: Build FLINT for wasm
run: |
wget https://github.com/flintlib/flint/releases/download/v3.4.0/flint-3.4.0.tar.gz
tar xzf flint-3.4.0.tar.gz
cd flint-3.4.0
sed -i 's/#if (defined(__unix__) && !defined(__CYGWIN__)) || defined(__APPLE__)/#if (defined(__unix__) \&\& !defined(__CYGWIN__) \&\& !defined(__EMSCRIPTEN__)) || defined(__APPLE__)/' src/profiler.h
emconfigure ./configure \
--disable-assembly \
--with-mpfr=$EMINSTALL \
--with-gmp=$EMINSTALL \
--prefix=$EMINSTALL \
--host wasm32 \
CFLAGS="-fPIC" CXXFLAGS="-fPIC"
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ..
- name: Checkout Cadical
uses: actions/checkout@v4
with:
repository: meelgroup/cadical
ref: master
path: cadical
- name: Build Cadical for wasm
run: |
cd cadical
mkdir build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout Cadiback
uses: actions/checkout@v4
with:
repository: meelgroup/cadiback
ref: main
path: cadiback
- name: Build Cadiback for wasm
run: |
cd cadiback
mkdir build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
-Dcadical_DIR=$GITHUB_WORKSPACE/cadical/build \
..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout CryptoMiniSat
uses: actions/checkout@v4
with:
repository: msoos/cryptominisat
ref: master
path: cryptominisat
submodules: 'true'
- name: Build CryptoMiniSat for wasm
run: |
cd cryptominisat
mkdir build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_TESTING=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
-Dcadical_DIR=$GITHUB_WORKSPACE/cadical/build \
-Dcadiback_DIR=$GITHUB_WORKSPACE/cadiback/build \
..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout treedecomp
uses: actions/checkout@v4
with:
repository: meelgroup/treedecomp
ref: main
path: treedecomp
- name: Build treedecomp for wasm
run: |
cd treedecomp
mkdir build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout SBVA
uses: actions/checkout@v4
with:
repository: meelgroup/SBVA
ref: master
path: sbva
- name: Build SBVA
run: |
cd sbva
mkdir build
cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_TESTING=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
-S ..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout arjun
uses: actions/checkout@v4
with:
repository: meelgroup/arjun
ref: master
path: arjun
- name: Build arjun for wasm
run: |
cd arjun
mkdir build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_TESTING=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
-Dcadical_DIR=$GITHUB_WORKSPACE/cadical/build \
-Dcadiback_DIR=$GITHUB_WORKSPACE/cadiback/build \
-Dcryptominisat5_DIR=$GITHUB_WORKSPACE/cryptominisat/build \
-Dsbva_DIR=$GITHUB_WORKSPACE/sbva/build \
-Dtreedecomp_DIR=$GITHUB_WORKSPACE/treedecomp/build \
-S ..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout approxmc
uses: actions/checkout@v4
with:
repository: meelgroup/approxmc
ref: master
path: approxmc
submodules: 'true'
- name: Build approxmc for wasm
run: |
cd approxmc
mkdir build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_TESTING=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$EMINSTALL \
-Dcryptominisat5_DIR=$GITHUB_WORKSPACE/cryptominisat/build \
-Dcadical_DIR=$GITHUB_WORKSPACE/cadical/build \
-Dcadiback_DIR=$GITHUB_WORKSPACE/cadiback/build \
-Darjun_DIR=$GITHUB_WORKSPACE/arjun/build \
-S ..
emmake make -j$(nproc)
emmake make install
cp $EMINSTALL/lib/lib*.a $EMINSTALL/lib/wasm32-emscripten/ 2>/dev/null || true
cd ../..
- name: Checkout ganak
uses: actions/checkout@v4
with:
path: project
submodules: 'true'
- name: Build ganak for wasm
run: |
cd project
mkdir -p build && cd build
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_TESTING=OFF \
-DNOZLIB=ON \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-Dcryptominisat5_DIR=$GITHUB_WORKSPACE/cryptominisat/build \
-Dcadical_DIR=$GITHUB_WORKSPACE/cadical/build \
-Dcadiback_DIR=$GITHUB_WORKSPACE/cadiback/build \
-Dtreedecomp_DIR=$GITHUB_WORKSPACE/treedecomp/build \
-Darjun_DIR=$GITHUB_WORKSPACE/arjun/build \
-Dapproxmc_DIR=$GITHUB_WORKSPACE/approxmc/build \
..
emmake make -j$(nproc)
cd ../..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: ganak-approxmc-arjun-cryptominisat-wasm-js.zip
path: |
project/build/ganak.js
project/build/ganak.wasm
approxmc/build/approxmc.js
approxmc/build/approxmc.wasm
arjun/build/arjun.js
arjun/build/arjun.wasm
cryptominisat/build/cryptominisat5.js
cryptominisat/build/cryptominisat5.wasm