# vim:syntax=dockerfile #------------------------------------------------------------------------------ # Dockerfile for building and testing Solidity Compiler on CI # Target: Emscripten # URL: https://hub.docker.com/r/ethereum/solidity-buildpack-deps # # This file is part of solidity. # # solidity is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # solidity is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with solidity. If not, see # # (c) 2016-2019 solidity contributors. #------------------------------------------------------------------------------ # # The Emscripten SDK at https://github.com/emscripten-core/emsdk/ # contains a Makefile in the docker/ subdirectory that can be used to create the # required base image using: # # make version=2.0.33 build # # Note that emscripten is supposed to automatically install to $(em-config CACHE)/sysroot, but # apparently this currently breaks due to conflicting compatibility headers. # Using $(em-config CACHE)/sysroot/usr seems to work, though, and still has cmake find the # dependencies automatically. FROM emscripten/emsdk:2.0.33 AS base LABEL version="11" ADD emscripten.jam /usr/src RUN set -ex; \ cd /usr/src; \ git clone https://github.com/Z3Prover/z3.git -b z3-4.8.17 --depth 1 ; \ cd z3; \ mkdir build; \ cd build; \ emcmake cmake \ -DCMAKE_INSTALL_PREFIX=$(em-config CACHE)/sysroot/usr \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DZ3_BUILD_LIBZ3_SHARED=OFF \ -DZ3_ENABLE_EXAMPLE_TARGETS=OFF \ -DZ3_BUILD_TEST_EXECUTABLES=OFF \ -DZ3_BUILD_EXECUTABLE=OFF \ -DZ3_SINGLE_THREADED=ON \ -DCMAKE_CXX_FLAGS="-s DISABLE_EXCEPTION_CATCHING=0" \ ..; \ make ; make install; \ rm -r /usr/src/z3; \ cd /usr/src; \ wget -q 'https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.bz2' -O boost.tar.bz2; \ test "$(sha256sum boost.tar.bz2)" = "953db31e016db7bb207f11432bef7df100516eeb746843fa0486a222e3fd49cb boost.tar.bz2"; \ tar -xf boost.tar.bz2; \ rm boost.tar.bz2; \ cd boost_1_75_0; \ mv ../emscripten.jam .; \ ./bootstrap.sh; \ echo "using emscripten : : em++ ;" >> project-config.jam ; \ ./b2 toolset=emscripten link=static variant=release threading=single runtime-link=static \ --with-system --with-filesystem --with-test --with-program_options \ cxxflags="-s DISABLE_EXCEPTION_CATCHING=0 -Wno-unused-local-typedef -Wno-variadic-macros -Wno-c99-extensions -Wno-all" \ --prefix=$(em-config CACHE)/sysroot/usr install; \ rm -r /usr/src/boost_1_75_0