Merge pull request #8894 from ethereum/dockerUbuntuFocal

Update Dockerfiles and CI scripts to Ubuntu 20.04 and simplify them.
This commit is contained in:
Daniel Kirchner 2020-05-12 00:52:21 +02:00 committed by GitHub
commit b9c63e0032
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 121 additions and 207 deletions

View File

@ -7,15 +7,15 @@ The docker images are build locally on the developer machine:
```sh ```sh
cd .circleci/docker/ cd .circleci/docker/
docker build -t ethereum/solidity-buildpack-deps:ubuntu1904-<revision> -f Dockerfile.ubuntu1904 . docker build -t ethereum/solidity-buildpack-deps:ubuntu2004-<revision> -f Dockerfile.ubuntu2004 .
docker push ethereum/solidity-buildpack-deps:ubuntu1904-<revision> docker push ethereum/solidity-buildpack-deps:ubuntu2004-<revision>
``` ```
The current revisions per docker image are stored in [circle ci pipeline parameters](https://github.com/CircleCI-Public/api-preview-docs/blob/master/docs/pipeline-parameters.md#pipeline-parameters) called `<image-desc>-docker-image-rev` (e.g., `ubuntu-1904-docker-image-rev`). Please update the value assigned to the parameter(s) corresponding to the docker image(s) being updated at the time of the update. Please verify that the value assigned to the parameter matches the revision part of the docker image tag (`<revision>` in the docker build/push snippet shown above). Otherwise, the docker image used by circle ci and the one actually pushed to docker hub will differ. The current revisions per docker image are stored in [circle ci pipeline parameters](https://github.com/CircleCI-Public/api-preview-docs/blob/master/docs/pipeline-parameters.md#pipeline-parameters) called `<image-desc>-docker-image-rev` (e.g., `ubuntu-2004-docker-image-rev`). Please update the value assigned to the parameter(s) corresponding to the docker image(s) being updated at the time of the update. Please verify that the value assigned to the parameter matches the revision part of the docker image tag (`<revision>` in the docker build/push snippet shown above). Otherwise, the docker image used by circle ci and the one actually pushed to docker hub will differ.
Once the docker image has been built and pushed to Dockerhub, you can find it at: Once the docker image has been built and pushed to Dockerhub, you can find it at:
https://hub.docker.com/r/ethereum/solidity-buildpack-deps:ubuntu1904-<revision> https://hub.docker.com/r/ethereum/solidity-buildpack-deps:ubuntu2004-<revision>
where the image tag reflects the target OS and revision to build Solidity and run its tests on. where the image tag reflects the target OS and revision to build Solidity and run its tests on.
@ -24,7 +24,7 @@ where the image tag reflects the target OS and revision to build Solidity and ru
```sh ```sh
cd solidity cd solidity
# Mounts your local solidity directory in docker container for testing # Mounts your local solidity directory in docker container for testing
docker run -v `pwd`:/src/solidity -ti ethereum/solidity-buildpack-deps:ubuntu1904-<revision> /bin/bash docker run -v `pwd`:/src/solidity -ti ethereum/solidity-buildpack-deps:ubuntu2004-<revision> /bin/bash
cd /src/solidity cd /src/solidity
<commands_to_test_build_with_new_docker_image> <commands_to_test_build_with_new_docker_image>
``` ```

View File

@ -10,12 +10,12 @@ parameters:
ubuntu-1804-docker-image-rev: ubuntu-1804-docker-image-rev:
type: string type: string
default: "4" default: "4"
ubuntu-1904-docker-image-rev: ubuntu-2004-docker-image-rev:
type: string type: string
default: "4" default: "1"
ubuntu-1904-clang-docker-image-rev: ubuntu-2004-clang-docker-image-rev:
type: string type: string
default: "5" default: "1"
ubuntu-1604-clang-ossfuzz-docker-image-rev: ubuntu-1604-clang-ossfuzz-docker-image-rev:
type: string type: string
default: "2" default: "2"
@ -137,9 +137,9 @@ defaults:
- store_test_results: *store_test_results - store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results - store_artifacts: *artifacts_test_results
- test_ubuntu1904_clang: &test_ubuntu1904_clang - test_ubuntu2004_clang: &test_ubuntu2004_clang
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-clang-<< pipeline.parameters.ubuntu-1904-clang-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-clang-<< pipeline.parameters.ubuntu-2004-clang-docker-image-rev >>
steps: steps:
- checkout - checkout
- attach_workspace: - attach_workspace:
@ -148,9 +148,9 @@ defaults:
- store_test_results: *store_test_results - store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results - store_artifacts: *artifacts_test_results
- test_ubuntu1904: &test_ubuntu1904 - test_ubuntu2004: &test_ubuntu2004
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-<< pipeline.parameters.ubuntu-1904-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-<< pipeline.parameters.ubuntu-2004-docker-image-rev >>
steps: steps:
- checkout - checkout
- attach_workspace: - attach_workspace:
@ -160,7 +160,7 @@ defaults:
- store_artifacts: *artifacts_test_results - store_artifacts: *artifacts_test_results
- test_asan: &test_asan - test_asan: &test_asan
<<: *test_ubuntu1904 <<: *test_ubuntu2004
steps: steps:
- checkout - checkout
- attach_workspace: - attach_workspace:
@ -179,7 +179,7 @@ defaults:
tags: tags:
only: /.*/ only: /.*/
- workflow_ubuntu1904: &workflow_ubuntu1904 - workflow_ubuntu2004: &workflow_ubuntu2004
<<: *workflow_trigger_on_tags <<: *workflow_trigger_on_tags
requires: requires:
- b_ubu - b_ubu
@ -189,17 +189,17 @@ defaults:
requires: requires:
- b_ubu_ossfuzz - b_ubu_ossfuzz
- workflow_ubuntu1904_clang: &workflow_ubuntu1904_clang - workflow_ubuntu2004_clang: &workflow_ubuntu2004_clang
<<: *workflow_trigger_on_tags <<: *workflow_trigger_on_tags
requires: requires:
- b_ubu_clang - b_ubu_clang
- workflow_ubuntu1904_release: &workflow_ubuntu1904_release - workflow_ubuntu2004_release: &workflow_ubuntu2004_release
<<: *workflow_trigger_on_tags <<: *workflow_trigger_on_tags
requires: requires:
- b_ubu_release - b_ubu_release
- workflow_ubuntu1904_codecov: &workflow_ubuntu1904_codecov - workflow_ubuntu2004_codecov: &workflow_ubuntu2004_codecov
<<: *workflow_trigger_on_tags <<: *workflow_trigger_on_tags
requires: requires:
- b_ubu_codecov - b_ubu_codecov
@ -209,7 +209,7 @@ defaults:
requires: requires:
- b_osx - b_osx
- workflow_ubuntu1904_asan: &workflow_ubuntu1904_asan - workflow_ubuntu2004_asan: &workflow_ubuntu2004_asan
<<: *workflow_trigger_on_tags <<: *workflow_trigger_on_tags
requires: requires:
- b_ubu_asan - b_ubu_asan
@ -359,16 +359,16 @@ jobs:
chk_docs_pragma_min_version: chk_docs_pragma_min_version:
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-<< pipeline.parameters.ubuntu-1904-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-<< pipeline.parameters.ubuntu-2004-docker-image-rev >>
environment: environment:
TERM: xterm TERM: xterm
steps: steps:
- checkout - checkout
- run: *run_docs_pragma_min_version - run: *run_docs_pragma_min_version
b_ubu_clang: &build_ubuntu1904_clang b_ubu_clang: &build_ubuntu2004_clang
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-clang-<< pipeline.parameters.ubuntu-1904-clang-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-clang-<< pipeline.parameters.ubuntu-2004-clang-docker-image-rev >>
environment: environment:
CC: clang CC: clang
CXX: clang++ CXX: clang++
@ -378,9 +378,9 @@ jobs:
- store_artifacts: *artifacts_solc - store_artifacts: *artifacts_solc
- persist_to_workspace: *artifacts_executables - persist_to_workspace: *artifacts_executables
b_ubu: &build_ubuntu1904 b_ubu: &build_ubuntu2004
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-<< pipeline.parameters.ubuntu-1904-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-<< pipeline.parameters.ubuntu-2004-docker-image-rev >>
steps: steps:
- checkout - checkout
- run: *run_build - run: *run_build
@ -388,8 +388,8 @@ jobs:
- store_artifacts: *artifacts_tools - store_artifacts: *artifacts_tools
- persist_to_workspace: *artifacts_executables - persist_to_workspace: *artifacts_executables
b_ubu_release: &build_ubuntu1904_release b_ubu_release: &build_ubuntu2004_release
<<: *build_ubuntu1904 <<: *build_ubuntu2004
environment: environment:
FORCE_RELEASE: ON FORCE_RELEASE: ON
@ -406,7 +406,7 @@ jobs:
- persist_to_workspace: *artifacts_executables - persist_to_workspace: *artifacts_executables
b_ubu_codecov: b_ubu_codecov:
<<: *build_ubuntu1904 <<: *build_ubuntu2004
environment: environment:
COVERAGE: ON COVERAGE: ON
CMAKE_BUILD_TYPE: Debug CMAKE_BUILD_TYPE: Debug
@ -416,7 +416,7 @@ jobs:
- persist_to_workspace: *artifacts_build_dir - persist_to_workspace: *artifacts_build_dir
t_ubu_codecov: t_ubu_codecov:
<<: *test_ubuntu1904 <<: *test_ubuntu2004
environment: environment:
EVM: constantinople EVM: constantinople
OPTIMIZE: 1 OPTIMIZE: 1
@ -439,7 +439,7 @@ jobs:
# Builds in C++20 mode and uses debug build in order to speed up. # Builds in C++20 mode and uses debug build in order to speed up.
# Do *NOT* store any artifacts or workspace as we don't run tests on this build. # Do *NOT* store any artifacts or workspace as we don't run tests on this build.
b_ubu_cxx20: b_ubu_cxx20:
<<: *build_ubuntu1904 <<: *build_ubuntu2004
environment: environment:
CMAKE_BUILD_TYPE: Debug CMAKE_BUILD_TYPE: Debug
CMAKE_OPTIONS: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/cxx20.cmake -DUSE_CVC4=OFF CMAKE_OPTIONS: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/cxx20.cmake -DUSE_CVC4=OFF
@ -591,7 +591,7 @@ jobs:
# x64 ASAN build, for testing for memory related bugs # x64 ASAN build, for testing for memory related bugs
b_ubu_asan: &b_ubu_asan b_ubu_asan: &b_ubu_asan
<<: *build_ubuntu1904 <<: *build_ubuntu2004
environment: environment:
CMAKE_OPTIONS: -DSANITIZE=address CMAKE_OPTIONS: -DSANITIZE=address
CMAKE_BUILD_TYPE: Release CMAKE_BUILD_TYPE: Release
@ -603,7 +603,7 @@ jobs:
b_docs: b_docs:
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-<< pipeline.parameters.ubuntu-1904-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-<< pipeline.parameters.ubuntu-2004-docker-image-rev >>
steps: steps:
- checkout - checkout
- run: *setup_prerelease_commit_hash - run: *setup_prerelease_commit_hash
@ -615,11 +615,11 @@ jobs:
destination: docs-html destination: docs-html
t_ubu_soltest: &t_ubu_soltest t_ubu_soltest: &t_ubu_soltest
<<: *test_ubuntu1904 <<: *test_ubuntu2004
t_ubu_soltest_enforce_yul: &t_ubu_soltest_enforce_yul t_ubu_soltest_enforce_yul: &t_ubu_soltest_enforce_yul
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-<< pipeline.parameters.ubuntu-1904-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-<< pipeline.parameters.ubuntu-2004-docker-image-rev >>
environment: environment:
EVM: constantinople EVM: constantinople
SOLTEST_FLAGS: --enforce-via-yul SOLTEST_FLAGS: --enforce-via-yul
@ -635,7 +635,7 @@ jobs:
t_ubu_clang_soltest: &t_ubu_clang_soltest t_ubu_clang_soltest: &t_ubu_clang_soltest
<<: *test_ubuntu1904_clang <<: *test_ubuntu2004_clang
environment: environment:
EVM: constantinople EVM: constantinople
OPTIMIZE: 0 OPTIMIZE: 0
@ -645,7 +645,7 @@ jobs:
t_ubu_cli: &t_ubu_cli t_ubu_cli: &t_ubu_cli
docker: docker:
- image: ethereum/solidity-buildpack-deps:ubuntu1904-<< pipeline.parameters.ubuntu-1904-docker-image-rev >> - image: ethereum/solidity-buildpack-deps:ubuntu2004-<< pipeline.parameters.ubuntu-2004-docker-image-rev >>
environment: environment:
TERM: xterm TERM: xterm
steps: steps:
@ -833,21 +833,21 @@ workflows:
# Ubuntu build and tests # Ubuntu build and tests
- b_ubu: *workflow_trigger_on_tags - b_ubu: *workflow_trigger_on_tags
- b_ubu18: *workflow_trigger_on_tags - b_ubu18: *workflow_trigger_on_tags
- t_ubu_cli: *workflow_ubuntu1904 - t_ubu_cli: *workflow_ubuntu2004
- t_ubu_soltest: *workflow_ubuntu1904 - t_ubu_soltest: *workflow_ubuntu2004
- t_ubu_soltest_enforce_yul: *workflow_ubuntu1904 - t_ubu_soltest_enforce_yul: *workflow_ubuntu2004
- b_ubu_clang: *workflow_trigger_on_tags - b_ubu_clang: *workflow_trigger_on_tags
- t_ubu_clang_soltest: *workflow_ubuntu1904_clang - t_ubu_clang_soltest: *workflow_ubuntu2004_clang
# Ubuntu fake release build and tests # Ubuntu fake release build and tests
- b_ubu_release: *workflow_trigger_on_tags - b_ubu_release: *workflow_trigger_on_tags
- t_ubu_release_cli: *workflow_ubuntu1904_release - t_ubu_release_cli: *workflow_ubuntu2004_release
- t_ubu_release_soltest: *workflow_ubuntu1904_release - t_ubu_release_soltest: *workflow_ubuntu2004_release
# ASan build and tests # ASan build and tests
- b_ubu_asan: *workflow_trigger_on_tags - b_ubu_asan: *workflow_trigger_on_tags
- t_ubu_asan_constantinople: *workflow_ubuntu1904_asan - t_ubu_asan_constantinople: *workflow_ubuntu2004_asan
- t_ubu_asan_cli: *workflow_ubuntu1904_asan - t_ubu_asan_cli: *workflow_ubuntu2004_asan
# Emscripten build and selected tests # Emscripten build and selected tests
- b_ems: *workflow_trigger_on_tags - b_ems: *workflow_trigger_on_tags
@ -874,4 +874,4 @@ workflows:
# Code Coverage enabled build and tests # Code Coverage enabled build and tests
- b_ubu_codecov: *workflow_trigger_on_tags - b_ubu_codecov: *workflow_trigger_on_tags
- t_ubu_codecov: *workflow_ubuntu1904_codecov - t_ubu_codecov: *workflow_ubuntu2004_codecov

View File

@ -1,113 +0,0 @@
# vim:syntax=dockerfile
#------------------------------------------------------------------------------
# Dockerfile for building and testing Solidity Compiler on CI
# Target: Ubuntu 19.04 (Disco Dingo) Clang variant
# 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 <http://www.gnu.org/licenses/>
#
# (c) 2016-2019 solidity contributors.
#------------------------------------------------------------------------------
FROM buildpack-deps:disco AS base
ARG DEBIAN_FRONTEND=noninteractive
RUN set -ex; \
dist=$(grep DISTRIB_CODENAME /etc/lsb-release | cut -d= -f2); \
echo "deb http://ppa.launchpad.net/ethereum/cpp-build-deps/ubuntu $dist main" >> /etc/apt/sources.list ; \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1c52189c923f6ca9 ; \
apt-get update; \
apt-get install -qqy --no-install-recommends \
build-essential \
software-properties-common \
cmake ninja-build \
clang++-8 llvm-8-dev \
libjsoncpp-dev \
libleveldb1d \
; \
apt-get install -qy python-pip python-sphinx; \
update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-8 1; \
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-8 1; \
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-8 1; \
pip install codecov; \
rm -rf /var/lib/apt/lists/*
FROM base AS libraries
ENV CC clang
ENV CXX clang++
# Boost
RUN git clone -b boost-1.69.0 https://github.com/boostorg/boost.git \
/usr/src/boost; \
cd /usr/src/boost; \
git submodule update --init --recursive; \
./bootstrap.sh --with-toolset=clang --prefix=/usr; \
./b2 toolset=clang headers; \
./b2 toolset=clang variant=release \
system filesystem unit_test_framework program_options \
install -j $(($(nproc)/2)); \
rm -rf /usr/src/boost
# Z3
RUN git clone --depth 1 -b z3-4.8.7 https://github.com/Z3Prover/z3.git \
/usr/src/z3; \
cd /usr/src/z3; \
python scripts/mk_make.py --prefix=/usr ; \
cd build; \
make -j; \
make install; \
rm -rf /usr/src/z3;
# OSSFUZZ: libprotobuf-mutator
RUN set -ex; \
git clone https://github.com/google/libprotobuf-mutator.git \
/usr/src/libprotobuf-mutator; \
cd /usr/src/libprotobuf-mutator; \
git checkout 3521f47a2828da9ace403e4ecc4aece1a84feb36; \
mkdir build; \
cd build; \
cmake .. -GNinja -DLIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF=ON \
-DLIB_PROTO_MUTATOR_TESTING=OFF -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="/usr"; \
ninja; \
cp -vpr external.protobuf/bin/* /usr/bin/; \
cp -vpr external.protobuf/include/* /usr/include/; \
cp -vpr external.protobuf/lib/* /usr/lib/; \
ninja install/strip; \
rm -rf /usr/src/libprotobuf-mutator
# EVMONE
RUN set -ex; \
cd /usr/src; \
git clone --branch="v0.4.0" --recurse-submodules https://github.com/ethereum/evmone.git; \
cd evmone; \
mkdir build; \
cd build; \
# isoltest links against the evmone shared library
cmake -G Ninja -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX="/usr" ..; \
ninja; \
ninja install/strip; \
# abiv2_proto_ossfuzz links against the evmone standalone static library
cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="/usr" ..; \
ninja; \
ninja install/strip; \
rm -rf /usr/src/evmone
FROM base
COPY --from=libraries /usr/lib /usr/lib
COPY --from=libraries /usr/bin /usr/bin
COPY --from=libraries /usr/include /usr/include

View File

@ -21,59 +21,26 @@
# #
# (c) 2016-2019 solidity contributors. # (c) 2016-2019 solidity contributors.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
FROM buildpack-deps:disco AS base FROM buildpack-deps:focal AS base
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
RUN set -ex; \ RUN set -ex; \
dist=$(grep DISTRIB_CODENAME /etc/lsb-release | cut -d= -f2); \
echo "deb http://ppa.launchpad.net/ethereum/cpp-build-deps/ubuntu $dist main" >> /etc/apt/sources.list ; \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1c52189c923f6ca9 ; \
apt-get update; \ apt-get update; \
apt-get install -qqy --no-install-recommends \ apt-get install -qqy --no-install-recommends \
build-essential \ build-essential \
software-properties-common \ software-properties-common \
cmake ninja-build clang++-8 libc++-8-dev libc++abi-8-dev \ cmake ninja-build \
libboost-filesystem-dev libboost-test-dev libboost-system-dev \ libboost-filesystem-dev libboost-test-dev libboost-system-dev \
libboost-program-options-dev \ libboost-program-options-dev \
libjsoncpp-dev \ libcvc4-dev z3 libz3-dev \
llvm-8-dev libcvc4-dev libz3-static-dev libleveldb1d \
; \ ; \
apt-get install -qy python-pip python-sphinx; \ apt-get install -qy python3-pip python3-sphinx; \
update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-8 1; \ pip3 install codecov; \
pip install codecov; \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
FROM base AS libraries FROM base AS libraries
# OSSFUZZ: libprotobuf-mutator
RUN set -ex; \
git clone https://github.com/google/libprotobuf-mutator.git \
/usr/src/libprotobuf-mutator; \
cd /usr/src/libprotobuf-mutator; \
git checkout d1fe8a7d8ae18f3d454f055eba5213c291986f21; \
mkdir build; \
cd build; \
cmake .. -GNinja -DLIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF=ON \
-DLIB_PROTO_MUTATOR_TESTING=OFF -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="/usr"; \
ninja; \
cp -vpr external.protobuf/bin/* /usr/bin/; \
cp -vpr external.protobuf/include/* /usr/include/; \
cp -vpr external.protobuf/lib/* /usr/lib/; \
ninja install/strip; \
rm -rf /usr/src/libprotobuf-mutator
# OSSFUZZ: libfuzzer
RUN set -ex; \
cd /var/tmp; \
svn co https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/fuzzer libfuzzer; \
mkdir -p build-libfuzzer; \
cd build-libfuzzer; \
clang++-8 -O1 -stdlib=libstdc++ -std=c++11 -O2 -fPIC -c ../libfuzzer/*.cpp -I../libfuzzer; \
ar r /usr/lib/libFuzzingEngine.a *.o; \
rm -rf /var/lib/libfuzzer
# EVMONE # EVMONE
RUN set -ex; \ RUN set -ex; \
cd /usr/src; \ cd /usr/src; \
@ -81,7 +48,6 @@ RUN set -ex; \
cd evmone; \ cd evmone; \
mkdir build; \ mkdir build; \
cd build; \ cd build; \
# isoltest links against the evmone shared library
cmake -G Ninja -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX="/usr" ..; \ cmake -G Ninja -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX="/usr" ..; \
ninja; \ ninja; \
ninja install/strip; \ ninja install/strip; \

View File

@ -0,0 +1,61 @@
# vim:syntax=dockerfile
#------------------------------------------------------------------------------
# Dockerfile for building and testing Solidity Compiler on CI
# Target: Ubuntu 19.04 (Disco Dingo) Clang variant
# 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 <http://www.gnu.org/licenses/>
#
# (c) 2016-2019 solidity contributors.
#------------------------------------------------------------------------------
FROM buildpack-deps:focal AS base
ARG DEBIAN_FRONTEND=noninteractive
RUN set -ex; \
apt-get update; \
apt-get install -qqy --no-install-recommends \
build-essential \
software-properties-common \
cmake ninja-build \
libboost-filesystem-dev libboost-test-dev libboost-system-dev \
libboost-program-options-dev \
clang llvm-dev \
z3 libz3-dev \
; \
rm -rf /var/lib/apt/lists/*
FROM base AS libraries
ENV CC clang
ENV CXX clang++
# EVMONE
RUN set -ex; \
cd /usr/src; \
git clone --branch="v0.4.0" --recurse-submodules https://github.com/ethereum/evmone.git; \
cd evmone; \
mkdir build; \
cd build; \
cmake -G Ninja -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX="/usr" ..; \
ninja; \
ninja install/strip; \
rm -rf /usr/src/evmone
FROM base
COPY --from=libraries /usr/lib /usr/lib
COPY --from=libraries /usr/bin /usr/bin
COPY --from=libraries /usr/include /usr/include

View File

@ -230,7 +230,7 @@ void ViewPureChecker::endVisit(InlineAssembly const& _inlineAssembly)
{ {
AssemblyViewPureChecker{ AssemblyViewPureChecker{
_inlineAssembly.dialect(), _inlineAssembly.dialect(),
[=](StateMutability _mutability, SourceLocation const& _location) { reportMutability(_mutability, _location); } [&](StateMutability _mutability, SourceLocation const& _location) { reportMutability(_mutability, _location); }
}(_inlineAssembly.operations()); }(_inlineAssembly.operations());
} }

View File

@ -527,7 +527,7 @@ bool AsmAnalyzer::warnOnInstructions(evmasm::Instruction _instr, SourceLocation
// Similarly we assume bitwise shifting and create2 go together. // Similarly we assume bitwise shifting and create2 go together.
yulAssert(m_evmVersion.hasBitwiseShifting() == m_evmVersion.hasCreate2(), ""); yulAssert(m_evmVersion.hasBitwiseShifting() == m_evmVersion.hasCreate2(), "");
auto errorForVM = [=](string const& vmKindMessage) { auto errorForVM = [&](string const& vmKindMessage) {
typeError( typeError(
_location, _location,
"The \"" + "The \"" +

View File

@ -85,11 +85,11 @@ void VariableReferenceCounter::operator()(Block const& _block)
void VariableReferenceCounter::increaseRefIfFound(YulString _variableName) void VariableReferenceCounter::increaseRefIfFound(YulString _variableName)
{ {
m_scope->lookup(_variableName, GenericVisitor{ m_scope->lookup(_variableName, GenericVisitor{
[=](Scope::Variable const& _var) [&](Scope::Variable const& _var)
{ {
++m_context.variableReferences[&_var]; ++m_context.variableReferences[&_var];
}, },
[=](Scope::Function const&) { } [](Scope::Function const&) { }
}); });
} }
@ -272,7 +272,7 @@ void CodeTransform::operator()(FunctionCall const& _call)
Scope::Function* function = nullptr; Scope::Function* function = nullptr;
yulAssert(m_scope->lookup(_call.functionName.name, GenericVisitor{ yulAssert(m_scope->lookup(_call.functionName.name, GenericVisitor{
[=](Scope::Variable&) { yulAssert(false, "Expected function name."); }, [](Scope::Variable&) { yulAssert(false, "Expected function name."); },
[&](Scope::Function& _function) { function = &_function; } [&](Scope::Function& _function) { function = &_function; }
}), "Function name not found."); }), "Function name not found.");
yulAssert(function, ""); yulAssert(function, "");
@ -296,7 +296,7 @@ void CodeTransform::operator()(Identifier const& _identifier)
// First search internals, then externals. // First search internals, then externals.
yulAssert(m_scope, ""); yulAssert(m_scope, "");
if (m_scope->lookup(_identifier.name, GenericVisitor{ if (m_scope->lookup(_identifier.name, GenericVisitor{
[=](Scope::Variable& _var) [&](Scope::Variable& _var)
{ {
// TODO: opportunity for optimization: Do not DUP if this is the last reference // TODO: opportunity for optimization: Do not DUP if this is the last reference
// to the top most element of the stack // to the top most element of the stack
@ -307,7 +307,7 @@ void CodeTransform::operator()(Identifier const& _identifier)
m_assembly.appendConstant(u256(0)); m_assembly.appendConstant(u256(0));
decreaseReference(_identifier.name, _var); decreaseReference(_identifier.name, _var);
}, },
[=](Scope::Function&) [](Scope::Function&)
{ {
yulAssert(false, "Function not removed during desugaring."); yulAssert(false, "Function not removed during desugaring.");
} }

View File

@ -1232,7 +1232,7 @@ Object EVMToEwasmTranslator::run(Object const& _object)
FunctionHoister::run(context, ast); FunctionHoister::run(context, ast);
FunctionGrouper::run(context, ast); FunctionGrouper::run(context, ast);
MainFunction{}(ast); MainFunction::run(context, ast);
ForLoopConditionIntoBody::run(context, ast); ForLoopConditionIntoBody::run(context, ast);
ExpressionSplitter::run(context, ast); ExpressionSplitter::run(context, ast);
WordSizeTransform::run(m_dialect, WasmDialect::instance(), ast, nameDispenser); WordSizeTransform::run(m_dialect, WasmDialect::instance(), ast, nameDispenser);

View File

@ -306,7 +306,7 @@ void RedundantAssignEliminator::finalize(YulString _variable, RedundantAssignEli
void AssignmentRemover::operator()(Block& _block) void AssignmentRemover::operator()(Block& _block)
{ {
boost::range::remove_erase_if(_block.statements, [=](Statement const& _statement) -> bool { boost::range::remove_erase_if(_block.statements, [&](Statement const& _statement) -> bool {
return holds_alternative<Assignment>(_statement) && m_toRemove.count(&std::get<Assignment>(_statement)); return holds_alternative<Assignment>(_statement) && m_toRemove.count(&std::get<Assignment>(_statement));
}); });

View File

@ -86,7 +86,7 @@ void UnusedPruner::operator()(Block& _block)
if (std::none_of( if (std::none_of(
varDecl.variables.begin(), varDecl.variables.begin(),
varDecl.variables.end(), varDecl.variables.end(),
[=](TypedName const& _typedName) { return used(_typedName.name); } [&](TypedName const& _typedName) { return used(_typedName.name); }
)) ))
{ {
if (!varDecl.value) if (!varDecl.value)

View File

@ -28,6 +28,6 @@
set -e set -e
cd docs cd docs
pip install -r requirements.txt pip3 install -r requirements.txt
sphinx-build -nW -b html -d _build/doctrees . _build/html sphinx-build -nW -b html -d _build/doctrees . _build/html
cd .. cd ..