mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
commit
3b07c4d38e
@ -11,10 +11,14 @@ eth_policy()
|
||||
set(PROJECT_VERSION "0.4.16")
|
||||
project(solidity VERSION ${PROJECT_VERSION})
|
||||
|
||||
option(SOLC_LINK_STATIC "Link solc executable statically on supported platforms" OFF)
|
||||
|
||||
# Let's find our dependencies
|
||||
include(EthDependencies)
|
||||
include(deps/jsoncpp.cmake)
|
||||
|
||||
find_package(Threads)
|
||||
|
||||
# Figure out what compiler and system are we using
|
||||
include(EthCompilerSettings)
|
||||
|
||||
|
@ -63,13 +63,6 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MA
|
||||
# Applying -fpermissive to a C command-line (ie. secp256k1) gives a build error.
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
|
||||
|
||||
# Build everything as shared libraries (.so files)
|
||||
add_definitions(-DSHAREDLIB)
|
||||
|
||||
# If supported for the target machine, emit position-independent code, suitable for dynamic
|
||||
# linking and avoiding any limit on the size of the global offset table.
|
||||
add_compile_options(-fPIC)
|
||||
|
||||
# Configuration-specific compiler settings.
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DETH_DEBUG")
|
||||
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
|
||||
@ -198,7 +191,6 @@ elseif (DEFINED MSVC)
|
||||
add_compile_options(/wd4800) # disable forcing value to bool 'true' or 'false' (performance warning) (4800)
|
||||
add_compile_options(-D_WIN32_WINNT=0x0600) # declare Windows Vista API requirement
|
||||
add_compile_options(-DNOMINMAX) # undefine windows.h MAX && MIN macros cause it cause conflicts with std::min && std::max functions
|
||||
add_compile_options(-DMINIUPNP_STATICLIB) # define miniupnp static library
|
||||
|
||||
# Always use Release variant of C++ runtime.
|
||||
# We don't want to provide Debug variants of all dependencies. Some default
|
||||
@ -218,12 +210,6 @@ elseif (DEFINED MSVC)
|
||||
# stack size 16MB
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099,4075 /STACK:16777216")
|
||||
|
||||
# windows likes static
|
||||
if (NOT ETH_STATIC)
|
||||
message("Forcing static linkage for MSVC.")
|
||||
set(ETH_STATIC 1)
|
||||
endif ()
|
||||
|
||||
# If you don't have GCC, Clang or VC++ then you are on your own. Good luck!
|
||||
else ()
|
||||
message(WARNING "Your compiler is not tested, if you run into any issues, we'd welcome any patches.")
|
||||
@ -262,9 +248,3 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MA
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(ETH_STATIC)
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
else()
|
||||
set(BUILD_SHARED_LIBS ON)
|
||||
endif(ETH_STATIC)
|
||||
|
@ -43,62 +43,9 @@ find_program(CTEST_COMMAND ctest)
|
||||
|
||||
## use multithreaded boost libraries, with -mt suffix
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
option(Boost_USE_STATIC_LIBS "Link Boost statically" ON)
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
|
||||
# use static boost libraries *.lib
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
|
||||
elseif (APPLE)
|
||||
|
||||
# use static boost libraries *.a
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
|
||||
elseif (UNIX)
|
||||
# use dynamic boost libraries *.dll
|
||||
set(Boost_USE_STATIC_LIBS OFF)
|
||||
|
||||
endif()
|
||||
|
||||
set(STATIC_LINKING FALSE CACHE BOOL "Build static binaries")
|
||||
|
||||
if (STATIC_LINKING)
|
||||
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
set(Boost_USE_STATIC_RUNTIME ON)
|
||||
|
||||
set(OpenSSL_USE_STATIC_LIBS ON)
|
||||
|
||||
if (MSVC)
|
||||
# TODO - Why would we need .a on Windows? Maybe some Cygwin-ism.
|
||||
# When I work through Windows static linkage, I will remove this,
|
||||
# if that is possible.
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
elseif (APPLE)
|
||||
# At the time of writing, we are still only PARTIALLY statically linked
|
||||
# on OS X, with a mixture of statically linked external libraries where
|
||||
# those are available, and dynamically linked where that is the only
|
||||
# option we have. Ultimately, the aim would be for everything except
|
||||
# the runtime libraries to be statically linked.
|
||||
#
|
||||
# Still TODO:
|
||||
# - jsoncpp
|
||||
# - json-rpc-cpp
|
||||
# - leveldb (which pulls in snappy, for the dylib at ;east)
|
||||
# - miniupnp
|
||||
# - gmp
|
||||
#
|
||||
# Two further libraries (curl and zlib) ship as dylibs with the platform
|
||||
# but again we could build from source and statically link these too.
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a .dylib)
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
endif()
|
||||
|
||||
set(ETH_STATIC ON)
|
||||
endif()
|
||||
|
||||
find_package(Boost 1.54.0 QUIET REQUIRED COMPONENTS thread date_time system regex chrono filesystem unit_test_framework program_options random)
|
||||
find_package(Boost 1.54.0 QUIET REQUIRED COMPONENTS regex filesystem unit_test_framework program_options)
|
||||
|
||||
eth_show_dependency(Boost boost)
|
||||
|
||||
|
@ -230,6 +230,7 @@ Or, on Windows:
|
||||
Command-Line Build
|
||||
------------------
|
||||
|
||||
Solidity project uses CMake to configure the build.
|
||||
Building Solidity is quite similar on Linux, macOS and other Unices:
|
||||
|
||||
.. code:: bash
|
||||
@ -264,6 +265,11 @@ Alternatively, you can build for Windows on the command-line, like so:
|
||||
|
||||
cmake --build . --config RelWithDebInfo
|
||||
|
||||
CMake options
|
||||
=============
|
||||
|
||||
If you are interested what CMake options are available run ``cmake .. -LH``.
|
||||
|
||||
The version string in detail
|
||||
============================
|
||||
|
||||
|
@ -1,14 +1,8 @@
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB")
|
||||
file(GLOB sources "*.cpp")
|
||||
file(GLOB headers "*.h")
|
||||
|
||||
aux_source_directory(. SRC_LIST)
|
||||
|
||||
set(EXECUTABLE soldevcore)
|
||||
|
||||
file(GLOB HEADERS "*.h")
|
||||
|
||||
include_directories(..)
|
||||
add_library(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
|
||||
eth_use(${EXECUTABLE} REQUIRED Dev::base)
|
||||
|
||||
install( TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib )
|
||||
add_library(devcore ${sources} ${headers})
|
||||
target_link_libraries(devcore PRIVATE ${Boost_FILESYSTEM_LIBRARIES} ${Boost_REGEX_LIBRARIES} ${Boost_SYSTEM_LIBRARIES} Threads::Threads)
|
||||
target_include_directories(devcore SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
||||
target_include_directories(devcore PUBLIC "${CMAKE_SOURCE_DIR}")
|
||||
add_dependencies(devcore solidity_BuildInfo.h)
|
||||
|
@ -1,14 +1,5 @@
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB")
|
||||
file(GLOB sources "*.cpp")
|
||||
file(GLOB headers "*.h")
|
||||
|
||||
aux_source_directory(. SRC_LIST)
|
||||
|
||||
set(EXECUTABLE solevmasm)
|
||||
|
||||
file(GLOB HEADERS "*.h")
|
||||
|
||||
include_directories(BEFORE ..)
|
||||
add_library(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
eth_use(${EXECUTABLE} REQUIRED Dev::soldevcore)
|
||||
target_link_libraries(${EXECUTABLE} jsoncpp)
|
||||
|
||||
install( TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib )
|
||||
add_library(evmasm ${sources} ${headers})
|
||||
target_link_libraries(evmasm PUBLIC devcore jsoncpp)
|
||||
|
@ -1,18 +1,5 @@
|
||||
cmake_policy(SET CMP0015 NEW)
|
||||
set(CMAKE_AUTOMOC OFF)
|
||||
file(GLOB sources "*.cpp")
|
||||
file(GLOB headers "*.h")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB")
|
||||
|
||||
aux_source_directory(. SRC_LIST)
|
||||
|
||||
set(EXECUTABLE lll)
|
||||
|
||||
file(GLOB HEADERS "*.h")
|
||||
|
||||
include_directories(BEFORE ..)
|
||||
add_library(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
|
||||
eth_use(${EXECUTABLE} REQUIRED Solidity::solevmasm)
|
||||
#target_link_libraries(${EXECUTABLE} evmasm)
|
||||
|
||||
install( TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib )
|
||||
add_library(lll ${sources} ${headers})
|
||||
target_link_libraries(lll PUBLIC evmasm devcore)
|
||||
|
@ -1,23 +1,6 @@
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB")
|
||||
|
||||
aux_source_directory(analysis SRC_LIST)
|
||||
aux_source_directory(ast SRC_LIST)
|
||||
aux_source_directory(codegen SRC_LIST)
|
||||
aux_source_directory(formal SRC_LIST)
|
||||
aux_source_directory(interface SRC_LIST)
|
||||
aux_source_directory(parsing SRC_LIST)
|
||||
aux_source_directory(inlineasm SRC_LIST)
|
||||
# Until we have a clear separation, libjulia has to be included here
|
||||
aux_source_directory(../libjulia SRC_LIST)
|
||||
|
||||
set(EXECUTABLE solidity)
|
||||
|
||||
file(GLOB HEADERS "*/*.h" "../libjulia/backends/evm/*")
|
||||
|
||||
include_directories(BEFORE ..)
|
||||
add_library(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
|
||||
eth_use(${EXECUTABLE} REQUIRED Dev::soldevcore Solidity::solevmasm)
|
||||
|
||||
install( TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib )
|
||||
file(GLOB_RECURSE sources "*.cpp" "../libjulia/*.cpp")
|
||||
file(GLOB_RECURSE headers "*.h" "../libjulia/*.h")
|
||||
|
||||
add_library(solidity ${sources} ${headers})
|
||||
target_link_libraries(solidity PUBLIC evmasm devcore)
|
||||
|
@ -1,12 +1,3 @@
|
||||
aux_source_directory(. SRC_LIST)
|
||||
|
||||
set(EXECUTABLE lllc)
|
||||
|
||||
file(GLOB HEADERS "*.h")
|
||||
include_directories(BEFORE ..)
|
||||
eth_simple_add_executable(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
|
||||
eth_use(${EXECUTABLE} REQUIRED Solidity::lll Dev::buildinfo Solidity::solevmasm)
|
||||
|
||||
install( TARGETS ${EXECUTABLE} DESTINATION bin )
|
||||
add_executable(lllc main.cpp)
|
||||
target_link_libraries(lllc PRIVATE lll)
|
||||
|
||||
|
@ -9,7 +9,7 @@ COPY / $WORKDIR
|
||||
|
||||
#Install dependencies, eliminate annoying warnings, and build release, delete all remaining points and statically link.
|
||||
RUN ./scripts/install_deps.sh && sed -i -E -e 's/include <sys\/poll.h>/include <poll.h>/' /usr/include/boost/asio/detail/socket_types.hpp &&\
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=0 -DSTATIC_LINKING=1 &&\
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=0 -DSOLC_LINK_STATIC=1 &&\
|
||||
make solc && install -s solc/solc /usr/bin &&\
|
||||
cd / && rm -rf solidity &&\
|
||||
apk del sed build-base git make cmake gcc g++ musl-dev curl-dev boost-dev &&\
|
||||
|
@ -1,27 +1,31 @@
|
||||
aux_source_directory(. SRC_LIST)
|
||||
list(REMOVE_ITEM SRC_LIST "./jsonCompiler.cpp")
|
||||
set(
|
||||
sources
|
||||
CommandLineInterface.cpp CommandLineInterface.h
|
||||
main.cpp
|
||||
)
|
||||
|
||||
include_directories(BEFORE ..)
|
||||
add_executable(solc ${sources})
|
||||
target_link_libraries(solc PRIVATE solidity ${Boost_PROGRAM_OPTIONS_LIBRARIES})
|
||||
|
||||
set(EXECUTABLE solc)
|
||||
|
||||
file(GLOB HEADERS "*.h")
|
||||
eth_simple_add_executable(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
|
||||
eth_use(${EXECUTABLE} REQUIRED Solidity::solidity)
|
||||
target_link_libraries(${EXECUTABLE} ${Boost_PROGRAM_OPTIONS_LIBRARIES})
|
||||
|
||||
if (APPLE)
|
||||
install(TARGETS ${EXECUTABLE} DESTINATION bin)
|
||||
else()
|
||||
eth_install_executable(${EXECUTABLE})
|
||||
endif()
|
||||
include(GNUInstallDirs)
|
||||
install(TARGETS solc DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
|
||||
if (EMSCRIPTEN)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s EXPORTED_FUNCTIONS='[\"_compileJSON\",\"_license\",\"_version\",\"_compileJSONMulti\",\"_compileJSONCallback\",\"_compileStandard\"]' -s RESERVED_FUNCTION_POINTERS=20")
|
||||
add_executable(soljson jsonCompiler.cpp ${HEADERS})
|
||||
eth_use(soljson REQUIRED Solidity::solidity)
|
||||
add_executable(soljson jsonCompiler.cpp)
|
||||
else()
|
||||
add_library(soljson jsonCompiler.cpp ${HEADERS})
|
||||
target_link_libraries(soljson solidity)
|
||||
add_library(soljson jsonCompiler.cpp)
|
||||
endif()
|
||||
target_link_libraries(soljson PRIVATE solidity)
|
||||
|
||||
if(SOLC_LINK_STATIC AND UNIX AND NOT APPLE)
|
||||
# Produce solc as statically linked binary (includes C/C++ standard libraries)
|
||||
# This is not supported on macOS, see
|
||||
# https://developer.apple.com/library/content/qa/qa1118/_index.html.
|
||||
set_target_properties(
|
||||
solc PROPERTIES
|
||||
LINK_FLAGS -static
|
||||
LINK_SEARCH_START_STATIC ON
|
||||
LINK_SEARCH_END_STATIC ON
|
||||
)
|
||||
endif()
|
@ -1,26 +1,9 @@
|
||||
cmake_policy(SET CMP0015 NEW)
|
||||
file(GLOB_RECURSE sources "*.cpp")
|
||||
list(REMOVE_ITEM sources "${CMAKE_CURRENT_SOURCE_DIR}/fuzzer.cpp")
|
||||
file(GLOB_RECURSE headers "*.h")
|
||||
|
||||
aux_source_directory(. SRC_LIST)
|
||||
aux_source_directory(libdevcore SRC_LIST)
|
||||
aux_source_directory(libevmasm SRC_LIST)
|
||||
aux_source_directory(libsolidity SRC_LIST)
|
||||
aux_source_directory(libjulia SRC_LIST)
|
||||
aux_source_directory(contracts SRC_LIST)
|
||||
aux_source_directory(liblll SRC_LIST)
|
||||
aux_source_directory(libjulia SRC_LIST)
|
||||
|
||||
list(REMOVE_ITEM SRC_LIST "./fuzzer.cpp")
|
||||
|
||||
get_filename_component(TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE)
|
||||
|
||||
file(GLOB HEADERS "*.h" "*/*.h")
|
||||
set(EXECUTABLE soltest)
|
||||
eth_simple_add_executable(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||||
|
||||
eth_use(${EXECUTABLE} REQUIRED Solidity::solidity Solidity::lll)
|
||||
|
||||
include_directories(BEFORE ..)
|
||||
target_link_libraries(${EXECUTABLE} soljson ${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES})
|
||||
add_executable(soltest ${sources} ${headers})
|
||||
target_link_libraries(soltest PRIVATE soljson solidity lll evmasm devcore ${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES})
|
||||
|
||||
add_executable(solfuzzer fuzzer.cpp)
|
||||
target_link_libraries(solfuzzer soljson ${Boost_PROGRAM_OPTIONS_LIBRARIES})
|
||||
target_link_libraries(solfuzzer soljson evmasm ${Boost_PROGRAM_OPTIONS_LIBRARIES})
|
||||
|
Loading…
Reference in New Issue
Block a user