forked from ethereum/solidity
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make the Solidity repository standalone.
This commit is the culmination of several months of work to decouple Solidity from the webthree-umbrella so that it can be developed in parallel with cpp-ethereum (the Ethereum C++ runtime) and so that even for the Solidity unit-tests there is no hard-dependency onto the C++ runtime. The Tests-over-IPC refactoring was a major step in the same process which was already committed. This commit contains the following changes: - A subset of the CMake functionality in webthree-helpers was extracted and tailored for Solidity into ./cmake. Further cleanup is certainly possible. - A subset of the libdevcore functionality in libweb3core was extracted and tailored for Solidity into ./libdevcore. Further cleanup is certainly possible - The gas price constants in EVMSchedule were orphaned into libevmasm. - Some other refactorings and cleanups were made to sever unnecessary EVM dependencies in the Solidity unit-tests. - TravisCI and Appveyor support was added, covering builds and running of the unit-tests (Linux and macOS only for now) - A bug-fix was made to get the Tests-over-IPC running on macOS. - There are still reliability issues in the unit-tests, which need immediate attention. The Travis build has been flipped to run the unit-tests 5 times, to try to flush these out. - The Emscripten automation which was previously in webthree-umbrella was merged into the TravisCI automation here. - The development ZIP deployment step has been commented out, but we will want to read that ONLY for release branch. Further iteration on these changes will definitely be needed, but I feel these have got to sufficient maturity than holding them back further isn't winning us anything. It is go time :-)
- Loading branch information
1 parent
56727d6
commit 4ee2114
Showing
69 changed files
with
5,901 additions
and
199 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,3 +34,7 @@ docs/utils/__pycache__ | |
|
||
# vim stuff | ||
*.swp | ||
|
||
# IDE files | ||
.idea | ||
browse.VC.db |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[submodule "deps"] | ||
path = deps | ||
url = https://github.com/ethereum/cpp-dependencies |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,125 @@ | ||
#------------------------------------------------------------------------------ | ||
# TravisCI configuration file for solidity. | ||
# | ||
# The documentation for solidity is hosted at: | ||
# | ||
# http://solidity.readthedocs.org | ||
# | ||
# TODO - Merge with .travis.yml file which currently lives in the root of | ||
# webthree-umbrella, but actually contains the automation for the Solidity | ||
# Emscripten build, which will also need consolidating into here somehow. | ||
# | ||
# See https://github.com/ethereum/webthree-umbrella/blob/develop/.travis.yml | ||
# | ||
# ------------------------------------------------------------------------------ | ||
# This file is part of cpp-ethereum. | ||
# | ||
# cpp-ethereum 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. | ||
# | ||
# cpp-ethereum 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 cpp-ethereum. If not, see <http://www.gnu.org/licenses/> | ||
# | ||
# (c) 2016 cpp-ethereum contributors. | ||
#------------------------------------------------------------------------------ | ||
|
||
language: cpp | ||
cache: ccache | ||
branches: | ||
only: | ||
- develop | ||
- release | ||
- standalone | ||
except: | ||
- /develop-v[0-9]/ | ||
matrix: | ||
include: | ||
- os: linux | ||
dist: trusty | ||
sudo: required | ||
env: TRAVIS_BUILD_TYPE=Debug | ||
compiler: gcc | ||
services: | ||
- docker | ||
before_install: | ||
- docker pull trzeci/emscripten:sdk-tag-1.35.4-64bit | ||
env: | ||
- TRAVIS_BUILD_TYPE=RelWithDebInfo | ||
- ZIP_SUFFIX=ubuntu-trusty | ||
- os: osx | ||
osx_image: beta-xcode6.2 | ||
env: | ||
- TRAVIS_BUILD_TYPE=RelWithDebInfo | ||
- ZIP_SUFFIX=osx-mavericks | ||
- os: osx | ||
osx_image: xcode7.1 | ||
env: | ||
- TRAVIS_BUILD_TYPE=RelWithDebInfo | ||
- ZIP_SUFFIX=osx-yosemite | ||
- os: osx | ||
osx_image: xcode7.3 | ||
env: TRAVIS_BUILD_TYPE=Debug | ||
env: | ||
# The use of Debug config here ONLY for El Capitan is a workaround for "The Heisenbug" | ||
# See https://github.com/ethereum/webthree-umbrella/issues/565 | ||
- TRAVIS_BUILD_TYPE=Debug | ||
- ZIP_SUFFIX=osx-elcapitan | ||
git: | ||
depth: 2 | ||
before_install: ./install_dependencies.sh | ||
script: ./fetch_umbrella_build_and_test.sh | ||
install: | ||
- ./scripts/install_deps.sh | ||
before_script: | ||
- ./scripts/build_emscripten.sh | ||
- mkdir -p build | ||
&& cd build | ||
&& cmake .. -DCMAKE_BUILD_TYPE=$TRAVIS_BUILD_TYPE | ||
&& make -j2 | ||
&& cd .. | ||
&& ./scripts/release.sh $ZIP_SUFFIX | ||
script: | ||
# There are a variety of reliability issues with the Solidity unit-tests at the time of | ||
# writing, so we're actually running them 5 times in a row, to try to flush all of these | ||
# issues out as quickly as possible. See https://github.com/ethereum/solidity/issues/769 | ||
- cd $TRAVIS_BUILD_DIR && ./scripts/tests.sh | ||
- cd $TRAVIS_BUILD_DIR && ./scripts/tests.sh | ||
- cd $TRAVIS_BUILD_DIR && ./scripts/tests.sh | ||
- cd $TRAVIS_BUILD_DIR && ./scripts/tests.sh | ||
- cd $TRAVIS_BUILD_DIR && ./scripts/tests.sh | ||
after_success: | ||
- cd $TRAVIS_BUILD_DIR && ./scripts/docs.sh | ||
env: | ||
global: | ||
- ENCRYPTION_LABEL="296c219a3f41" | ||
|
||
# This is the deploy target for the native build (Linux and macOS) | ||
# which generates development ZIPs per commit. We are in agreement | ||
# that this is probably noisy overkill, so will want to renable this | ||
# functionality wrapped in some conditionals so that it only runs | ||
# when building the 'release' branch. | ||
# | ||
#deploy: | ||
# provider: releases | ||
# api_key: | ||
# secure: mGeDrlCbhPNQVqrk5wSqFZe/7C5HUIBWcZECJcFrEldN6ELj3a8mhDX9EWebidyFmZsf3ipKVMycJtXZHlH2kVZ0nZdRulq4bYhLiUFRaFQCHMW35dml5mxO/FPp+jhhZaylDUx+cI6AULbj8DvNFqSCfjx8qimRhJjRY4JHeG71N6g5+LU2/dA01D4Y97BUbQ5dYcmEyuEsriSpXOElIQIIv3+Q6MJNnLzxUA6EXsp4Qt3Qf3R1+EkI/RWOPbQsddpFNJBcBNOscCUFSZV3+ZK9E2RyHbPaL+Da4aJKVpgD7X1TFudq4PClMUTkg8CuJh/kvy9wkpaWyYHbLGQqu1vQ+NQ+vlTAKf8U+1xhC1IkX6nA+g4TlRksZRltRhpkBPnFoaQQGjD9eYyT1V/Htrn8Y/VGbYPBVa0GcEYXG5pDCBPz91RBpYwDcyUg9DEPNI6zYfQY8jA8xqtFwPX79Y22MDXIKhBskK00geuzh7Npy5Rnh4fLqVKMlffvYx3kwp444EFWtQ5jxbRCym2Th6EldkOM8Kble1JvixQtVb4s+DpTuwHCTrXZhwMuJpmwgRx52zyIsGrBPF3MOmdlwl+l0TD8UEJXt0JM1XSF1AROyYwXKDZQ9Qt4sd9ZKSWWaLJMEJf4kkZWYgTEI/FhOWlfshQCt8Z9S9r4fq2ywoo= | ||
# file: $TRAVIS_BUILD_DIR/solidity-develop-$ZIP_SUFFIX.zip | ||
# skip_cleanup: true | ||
# on: | ||
# repo: bobsummerwill/solidity | ||
# branch: standalone_changes | ||
|
||
# This is the deploy target for the Emscripten build, which publishes | ||
# generated JS for particular Solidity commits into | ||
# https://github.com/ethereum/solc-bin/tree/gh-pages/bin | ||
# Disabled, but can be renamed when we have the "standalone" changes | ||
# published back into the 'develop' branch. | ||
# | ||
#deploy: | ||
# provider: script | ||
# script: scripts/travis-emscripten/publish_binary.sh | ||
# skip_cleanup: true | ||
# on: | ||
# branch: develop |
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
#------------------------------------------------------------------------------ | ||
# Appveyor configuration file for solidity. | ||
# | ||
# The documentation for solidity is hosted at: | ||
# | ||
# http://solidity.readthedocs.org | ||
# | ||
# TODO - Tests currently disabled, because Tests-over-IPC code is using UNIX | ||
# sockets unconditionally at the time of writing. | ||
# | ||
# ------------------------------------------------------------------------------ | ||
# This file is part of cpp-ethereum. | ||
# | ||
# cpp-ethereum 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. | ||
# | ||
# cpp-ethereum 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 cpp-ethereum. If not, see <http://www.gnu.org/licenses/> | ||
# | ||
# (c) 2016 cpp-ethereum contributors. | ||
#------------------------------------------------------------------------------ | ||
|
||
version: 0.3.5.{build} | ||
skip_tags: true | ||
os: Visual Studio 2015 | ||
configuration: | ||
- RelWithDebInfo | ||
cache: build | ||
install: | ||
- git submodule update --init --recursive | ||
- scripts/install_deps.bat | ||
- set ETHEREUM_DEPS_PATH=%APPVEYOR_BUILD_FOLDER%\deps\install | ||
before_build: | ||
- if not exist build mkdir build | ||
- cd build | ||
- cmake -G "Visual Studio 14 2015 Win64" .. -DTESTS=Off | ||
build_script: | ||
- msbuild solidity.sln /p:Configuration=%CONFIGURATION% /m:%NUMBER_OF_PROCESSORS% /v:minimal | ||
- cd %APPVEYOR_BUILD_FOLDER% | ||
- scripts\release.bat %CONFIGURATION% | ||
|
||
#test_script: | ||
# - cd %APPVEYOR_BUILD_FOLDER%\build\test\%CONFIGURATION% | ||
# - copy "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT\msvc*.dll" . | ||
# - eth.exe --test -d %TMP%/test | ||
# - soltest.exe --ipc /tmp/test/geth.ipc | ||
# - pkill eth | ||
|
||
artifacts: | ||
- path: solidity-develop-windows.zip | ||
name: solidity-develop-windows-zip | ||
|
||
# This is the deploy target for Windows | ||
# which generates development ZIPs per commit. We are in agreement | ||
# that this is probably noisy overkill, so will want to renable this | ||
# functionality wrapped in some conditionals so that it only runs | ||
# when building the 'release' branch. | ||
# | ||
#deploy: | ||
# release: solidity-develop-v$(APPVEYOR_BUILD_VERSION) | ||
# tag: develop-v$(APPVEYOR_BUILD_VERSION) | ||
# description: 'Development build of solidity at commit $(APPVEYOR_REPO_COMMIT).\n\n$(APPVEYOR_REPO_COMMIT_MESSAGE)\n\nCommitted by $(APPVEYOR_REPO_COMMIT_AUTHOR), $(APPVEYOR_REPO_COMMIT_TIMESTAMP).' | ||
# prerelease: true | ||
# provider: GitHub | ||
# auth_token: | ||
# secure: yukM9mHUbzuZSS5WSBLKSW0yGJerJEqAXkFhDhSHBBcKJE7GAryjQsdO9Kxh3yRv | ||
# artifact: solidity-develop-windows-zip | ||
# on: | ||
# branch: standalone_changes |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
#.rst: | ||
# CMakeParseArguments | ||
# ------------------- | ||
# | ||
# | ||
# | ||
# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> | ||
# <multi_value_keywords> args...) | ||
# | ||
# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions | ||
# for parsing the arguments given to that macro or function. It | ||
# processes the arguments and defines a set of variables which hold the | ||
# values of the respective options. | ||
# | ||
# The <options> argument contains all options for the respective macro, | ||
# i.e. keywords which can be used when calling the macro without any | ||
# value following, like e.g. the OPTIONAL keyword of the install() | ||
# command. | ||
# | ||
# The <one_value_keywords> argument contains all keywords for this macro | ||
# which are followed by one value, like e.g. DESTINATION keyword of the | ||
# install() command. | ||
# | ||
# The <multi_value_keywords> argument contains all keywords for this | ||
# macro which can be followed by more than one value, like e.g. the | ||
# TARGETS or FILES keywords of the install() command. | ||
# | ||
# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the | ||
# keywords listed in <options>, <one_value_keywords> and | ||
# <multi_value_keywords> a variable composed of the given <prefix> | ||
# followed by "_" and the name of the respective keyword. These | ||
# variables will then hold the respective value from the argument list. | ||
# For the <options> keywords this will be TRUE or FALSE. | ||
# | ||
# All remaining arguments are collected in a variable | ||
# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see | ||
# whether your macro was called with unrecognized parameters. | ||
# | ||
# As an example here a my_install() macro, which takes similar arguments | ||
# as the real install() command: | ||
# | ||
# :: | ||
# | ||
# function(MY_INSTALL) | ||
# set(options OPTIONAL FAST) | ||
# set(oneValueArgs DESTINATION RENAME) | ||
# set(multiValueArgs TARGETS CONFIGURATIONS) | ||
# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" | ||
# "${multiValueArgs}" ${ARGN} ) | ||
# ... | ||
# | ||
# | ||
# | ||
# Assume my_install() has been called like this: | ||
# | ||
# :: | ||
# | ||
# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) | ||
# | ||
# | ||
# | ||
# After the cmake_parse_arguments() call the macro will have set the | ||
# following variables: | ||
# | ||
# :: | ||
# | ||
# MY_INSTALL_OPTIONAL = TRUE | ||
# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() | ||
# MY_INSTALL_DESTINATION = "bin" | ||
# MY_INSTALL_RENAME = "" (was not used) | ||
# MY_INSTALL_TARGETS = "foo;bar" | ||
# MY_INSTALL_CONFIGURATIONS = "" (was not used) | ||
# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" | ||
# | ||
# | ||
# | ||
# You can then continue and process these variables. | ||
# | ||
# Keywords terminate lists of values, e.g. if directly after a | ||
# one_value_keyword another recognized keyword follows, this is | ||
# interpreted as the beginning of the new option. E.g. | ||
# my_install(TARGETS foo DESTINATION OPTIONAL) would result in | ||
# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION | ||
# would be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. | ||
|
||
#============================================================================= | ||
# Copyright 2010 Alexander Neundorf <[email protected]> | ||
# | ||
# Distributed under the OSI-approved BSD License (the "License"); | ||
# see accompanying file Copyright.txt for details. | ||
# | ||
# This software is distributed WITHOUT ANY WARRANTY; without even the | ||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
# See the License for more information. | ||
#============================================================================= | ||
# (To distribute this file outside of CMake, substitute the full | ||
# License text for the above reference.) | ||
|
||
|
||
if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) | ||
return() | ||
endif() | ||
set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) | ||
|
||
|
||
function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) | ||
# first set all result variables to empty/FALSE | ||
foreach(arg_name ${_singleArgNames} ${_multiArgNames}) | ||
set(${prefix}_${arg_name}) | ||
endforeach() | ||
|
||
foreach(option ${_optionNames}) | ||
set(${prefix}_${option} FALSE) | ||
endforeach() | ||
|
||
set(${prefix}_UNPARSED_ARGUMENTS) | ||
|
||
set(insideValues FALSE) | ||
set(currentArgName) | ||
|
||
# now iterate over all arguments and fill the result variables | ||
foreach(currentArg ${ARGN}) | ||
list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword | ||
list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword | ||
list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword | ||
|
||
if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) | ||
if(insideValues) | ||
if("${insideValues}" STREQUAL "SINGLE") | ||
set(${prefix}_${currentArgName} ${currentArg}) | ||
set(insideValues FALSE) | ||
elseif("${insideValues}" STREQUAL "MULTI") | ||
list(APPEND ${prefix}_${currentArgName} ${currentArg}) | ||
endif() | ||
else() | ||
list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) | ||
endif() | ||
else() | ||
if(NOT ${optionIndex} EQUAL -1) | ||
set(${prefix}_${currentArg} TRUE) | ||
set(insideValues FALSE) | ||
elseif(NOT ${singleArgIndex} EQUAL -1) | ||
set(currentArgName ${currentArg}) | ||
set(${prefix}_${currentArgName}) | ||
set(insideValues "SINGLE") | ||
elseif(NOT ${multiArgIndex} EQUAL -1) | ||
set(currentArgName ${currentArg}) | ||
set(${prefix}_${currentArgName}) | ||
set(insideValues "MULTI") | ||
endif() | ||
endif() | ||
|
||
endforeach() | ||
|
||
# propagate the result variables to the caller: | ||
foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) | ||
set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) | ||
endforeach() | ||
set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) | ||
|
||
endfunction() |
Oops, something went wrong.