Prepare build system for Z3.

This commit is contained in:
chriseth 2017-07-13 21:04:19 +02:00
parent b3f8ed457a
commit c9cf24458b
4 changed files with 57 additions and 25 deletions

9
cmake/FindZ3.cmake Normal file
View File

@ -0,0 +1,9 @@
find_path(Z3_INCLUDE_DIR z3++.h)
find_library(Z3_LIBRARY NAMES z3 )
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Z3 DEFAULT_MSG Z3_LIBRARY Z3_INCLUDE_DIR)
if(Z3_FOUND)
set(Z3_LIBRARIES ${Z3_LIBRARY})
endif()

View File

@ -2,5 +2,19 @@
file(GLOB_RECURSE sources "*.cpp" "../libjulia/*.cpp") file(GLOB_RECURSE sources "*.cpp" "../libjulia/*.cpp")
file(GLOB_RECURSE headers "*.h" "../libjulia/*.h") file(GLOB_RECURSE headers "*.h" "../libjulia/*.h")
find_package(Z3 QUIET)
if (${Z3_FOUND})
include_directories(${Z3_INCLUDE_DIR})
add_definitions(-DHAVE_Z3)
message("Z3 SMT solver FOUND.")
else()
message("Z3 SMT solver NOT found.")
list(REMOVE_ITEM sources "${CMAKE_CURRENT_SOURCE_DIR}/formal/Z3Interface.cpp")
endif()
add_library(solidity ${sources} ${headers}) add_library(solidity ${sources} ${headers})
target_link_libraries(solidity PUBLIC evmasm devcore z3) target_link_libraries(solidity PUBLIC evmasm devcore)
if (${Z3_FOUND})
target_link_libraries(solidity PUBLIC ${Z3_LIBRARY})
endif()

View File

@ -76,6 +76,9 @@ bool SMTChecker::visit(FunctionDefinition const& _function)
void SMTChecker::endVisit(FunctionDefinition const&) void SMTChecker::endVisit(FunctionDefinition const&)
{ {
// TOOD we could check for "reachability", i.e. satisfiability here. // TOOD we could check for "reachability", i.e. satisfiability here.
// We only handle local variables, so we clear everything.
// If we add storage variables, those should be cleared differently.
m_currentSequenceCounter.clear();
m_interface.pop(); m_interface.pop();
m_currentFunction = nullptr; m_currentFunction = nullptr;
} }

View File

@ -115,7 +115,7 @@ case $(uname -s) in
echo "Installing solidity dependencies on FreeBSD." echo "Installing solidity dependencies on FreeBSD."
echo "ERROR - 'install_deps.sh' doesn't have FreeBSD support yet." echo "ERROR - 'install_deps.sh' doesn't have FreeBSD support yet."
echo "Please let us know if you see this error message, and we can work out what is missing." echo "Please let us know if you see this error message, and we can work out what is missing."
echo "Drop us a message at https://gitter.im/ethereum/solidity." echo "Drop us a message at https://gitter.im/ethereum/solidity-dev."
exit 1 exit 1
;; ;;
@ -167,6 +167,7 @@ case $(uname -s) in
Debian) Debian)
#Debian #Debian
install_z3=""
case $(lsb_release -cs) in case $(lsb_release -cs) in
wheezy) wheezy)
#wheezy #wheezy
@ -174,7 +175,7 @@ case $(uname -s) in
echo "ERROR - 'install_deps.sh' doesn't have Debian Wheezy support yet." echo "ERROR - 'install_deps.sh' doesn't have Debian Wheezy support yet."
echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions." echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions."
echo "If you would like to get 'install_deps.sh' working for Debian Wheezy, that would be fantastic." echo "If you would like to get 'install_deps.sh' working for Debian Wheezy, that would be fantastic."
echo "Drop us a message at https://gitter.im/ethereum/solidity." echo "Drop us a message at https://gitter.im/ethereum/solidity-dev."
echo "See also https://github.com/ethereum/webthree-umbrella/issues/495 where we are working through Alpine support." echo "See also https://github.com/ethereum/webthree-umbrella/issues/495 where we are working through Alpine support."
exit 1 exit 1
;; ;;
@ -185,20 +186,19 @@ case $(uname -s) in
stretch) stretch)
#stretch #stretch
echo "Installing solidity dependencies on Debian Stretch (9.x)." echo "Installing solidity dependencies on Debian Stretch (9.x)."
echo "ERROR - 'install_deps.sh' doesn't have Debian Stretch support yet." install_z3="libz3-dev"
echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions." ;;
echo "If you would like to get 'install_deps.sh' working for Debian Stretch, that would be fantastic." buster)
echo "Drop us a message at https://gitter.im/ethereum/solidity." #buster
exit 1 echo "Installing solidity dependencies on Debian Buster (10.x)."
install_z3="libz3-dev"
;; ;;
*) *)
#other Debian #other Debian
echo "Installing solidity dependencies on unknown Debian version." echo "Installing solidity dependencies on unknown Debian version."
echo "ERROR - Debian Jessie is the only Debian version which solidity has been tested on." echo "ERROR - This might not work, but we are trying anyway."
echo "If you are using a different release and would like to get 'install_deps.sh'" echo "Drop us a message at https://gitter.im/ethereum/solidity-dev"
echo "working for that release that would be fantastic." install_z3="libz3-dev"
echo "Drop us a message at https://gitter.im/ethereum/solidity."
exit 1
;; ;;
esac esac
@ -211,7 +211,9 @@ case $(uname -s) in
gcc \ gcc \
git \ git \
libboost-all-dev \ libboost-all-dev \
unzip unzip \
"$install_z3"
;; ;;
@ -267,6 +269,7 @@ case $(uname -s) in
Ubuntu) Ubuntu)
#Ubuntu #Ubuntu
install_z3=""
case $(lsb_release -cs) in case $(lsb_release -cs) in
trusty) trusty)
#trusty #trusty
@ -287,22 +290,25 @@ case $(uname -s) in
xenial) xenial)
#xenial #xenial
echo "Installing solidity dependencies on Ubuntu Xenial Xerus (16.04)." echo "Installing solidity dependencies on Ubuntu Xenial Xerus (16.04)."
install_z3="libz3-dev"
;; ;;
yakkety) yakkety)
#yakkety #yakkety
echo "Installing solidity dependencies on Ubuntu Yakkety Yak (16.10)." echo "Installing solidity dependencies on Ubuntu Yakkety Yak (16.10)."
echo "" install_z3="libz3-dev"
echo "NOTE - You are in unknown territory with this preview OS." ;;
echo "We will need to update the Ethereum PPAs, work through build and runtime breaks, etc." zesty)
echo "See https://github.com/ethereum/webthree-umbrella/issues/624." #zesty
echo "If you would like to partner with us to work through these, that" echo "Installing solidity dependencies on Ubuntu Zesty (17.04)."
echo "would be fantastic. Please just comment on that issue. Thanks!" install_z3="libz3-dev"
;; ;;
*) *)
#other Ubuntu #other Ubuntu
echo "ERROR - Unknown or unsupported Ubuntu version (" $(lsb_release -cs) ")" echo "ERROR - Unknown or unsupported Ubuntu version (" $(lsb_release -cs) ")"
echo "We only support Trusty, Utopic, Vivid, Wily and Xenial, with work-in-progress on Yakkety." echo "ERROR - This might not work, but we are trying anyway."
exit 1 echo "Please drop us a message at https://gitter.im/ethereum/solidity-dev."
echo "We only support Trusty, Utopic, Vivid, Wily, Xenial and Yakkety."
install_z3="libz3-dev"
;; ;;
esac esac
@ -311,7 +317,7 @@ case $(uname -s) in
build-essential \ build-essential \
cmake \ cmake \
git \ git \
libboost-all-dev libboost-all-dev "$install_z3"
if [ "$CI" = true ]; then if [ "$CI" = true ]; then
# Install 'eth', for use in the Solidity Tests-over-IPC. # Install 'eth', for use in the Solidity Tests-over-IPC.
# We will not use this 'eth', but its dependencies # We will not use this 'eth', but its dependencies
@ -375,7 +381,7 @@ case $(uname -s) in
echo "ERROR - Unsupported or unidentified Linux distro." echo "ERROR - Unsupported or unidentified Linux distro."
echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions." echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions."
echo "If you would like to get your distro working, that would be fantastic." echo "If you would like to get your distro working, that would be fantastic."
echo "Drop us a message at https://gitter.im/ethereum/solidity." echo "Drop us a message at https://gitter.im/ethereum/solidity-dev."
exit 1 exit 1
;; ;;
esac esac
@ -392,6 +398,6 @@ case $(uname -s) in
echo "ERROR - Unsupported or unidentified operating system." echo "ERROR - Unsupported or unidentified operating system."
echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions." echo "See http://solidity.readthedocs.io/en/latest/installing-solidity.html for manual instructions."
echo "If you would like to get your operating system working, that would be fantastic." echo "If you would like to get your operating system working, that would be fantastic."
echo "Drop us a message at https://gitter.im/ethereum/solidity." echo "Drop us a message at https://gitter.im/ethereum/solidity-dev."
;; ;;
esac esac