mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
186 lines
6.0 KiB
CMake
186 lines
6.0 KiB
CMake
|
#
|
||
|
# this function requires the following variables to be specified:
|
||
|
# ETH_VERSION
|
||
|
# PROJECT_NAME
|
||
|
# PROJECT_VERSION
|
||
|
# PROJECT_COPYRIGHT_YEAR
|
||
|
# PROJECT_VENDOR
|
||
|
# PROJECT_DOMAIN_SECOND
|
||
|
# PROJECT_DOMAIN_FIRST
|
||
|
# SRC_LIST
|
||
|
# HEADERS
|
||
|
#
|
||
|
# params:
|
||
|
# ICON
|
||
|
#
|
||
|
|
||
|
macro(eth_add_executable EXECUTABLE)
|
||
|
set (extra_macro_args ${ARGN})
|
||
|
set (options)
|
||
|
set (one_value_args ICON)
|
||
|
set (multi_value_args UI_RESOURCES WIN_RESOURCES)
|
||
|
cmake_parse_arguments (ETH_ADD_EXECUTABLE "${options}" "${one_value_args}" "${multi_value_args}" "${extra_macro_args}")
|
||
|
|
||
|
if (APPLE)
|
||
|
|
||
|
add_executable(${EXECUTABLE} MACOSX_BUNDLE ${SRC_LIST} ${HEADERS} ${ETH_ADD_EXECUTABLE_UI_RESOURCES})
|
||
|
set(PROJECT_VERSION "${ETH_VERSION}")
|
||
|
set(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME} ${PROJECT_VERSION}")
|
||
|
set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_NAME} ${PROJECT_VERSION}")
|
||
|
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_NAME} ${PROJECT_VERSION}")
|
||
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}")
|
||
|
set(MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT_YEAR} ${PROJECT_VENDOR}")
|
||
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_DOMAIN_SECOND}.${PROJECT_DOMAIN_FIRST}")
|
||
|
set(MACOSX_BUNDLE_BUNDLE_NAME ${EXECUTABLE})
|
||
|
set(MACOSX_BUNDLE_ICON_FILE ${ETH_ADD_EXECUTABLE_ICON})
|
||
|
set_target_properties(${EXECUTABLE} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/EthereumMacOSXBundleInfo.plist.in")
|
||
|
set_source_files_properties(${EXECUTABLE} PROPERTIES MACOSX_PACKAGE_LOCATION MacOS)
|
||
|
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${MACOSX_BUNDLE_ICON_FILE}.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
||
|
|
||
|
else ()
|
||
|
add_executable(${EXECUTABLE} ${ETH_ADD_EXECUTABLE_UI_RESOURCES} ${ETH_ADD_EXECUTABLE_WIN_RESOURCES} ${SRC_LIST} ${HEADERS})
|
||
|
endif()
|
||
|
|
||
|
endmacro()
|
||
|
|
||
|
macro(eth_simple_add_executable EXECUTABLE)
|
||
|
add_executable(${EXECUTABLE} ${SRC_LIST} ${HEADERS})
|
||
|
|
||
|
# Apple does not support statically linked binaries on OS X. That means
|
||
|
# that we can only statically link against our external libraries, but
|
||
|
# we cannot statically link against the C++ runtime libraries and other
|
||
|
# platform libraries (as is possible on Windows and Alpine Linux) to produce
|
||
|
# an entirely transportable binary.
|
||
|
#
|
||
|
# See https://developer.apple.com/library/mac/qa/qa1118/_index.html for more info.
|
||
|
#
|
||
|
# GLIBC also appears not to support static linkage too, which probably means that
|
||
|
# Debian and Ubuntu will only be able to do partially-statically linked
|
||
|
# executables too, just like OS X.
|
||
|
#
|
||
|
# For OS X, at the time of writing, we are left with the following dynamically
|
||
|
# linked dependencies, of which curl and libz might still be fixable:
|
||
|
#
|
||
|
# /usr/lib/libc++.1.dylib
|
||
|
# /usr/lib/libSystem.B.dylib
|
||
|
# /usr/lib/libcurl.4.dylib
|
||
|
# /usr/lib/libz.1.dylib
|
||
|
#
|
||
|
if (STATIC_LINKING AND NOT APPLE)
|
||
|
set(CMAKE_EXE_LINKER_FLAGS "-static ${CMAKE_EXE_LINKER_FLAGS}")
|
||
|
set_target_properties(${EXECUTABLE} PROPERTIES LINK_SEARCH_START_STATIC 1)
|
||
|
set_target_properties(${EXECUTABLE} PROPERTIES LINK_SEARCH_END_STATIC 1)
|
||
|
endif()
|
||
|
endmacro()
|
||
|
|
||
|
macro(eth_copy_dll EXECUTABLE DLL)
|
||
|
# dlls must be unsubstitud list variable (without ${}) in format
|
||
|
# optimized;path_to_dll.dll;debug;path_to_dlld.dll
|
||
|
if(DEFINED MSVC)
|
||
|
list(GET ${DLL} 1 DLL_RELEASE)
|
||
|
list(GET ${DLL} 3 DLL_DEBUG)
|
||
|
add_custom_command(TARGET ${EXECUTABLE}
|
||
|
PRE_BUILD
|
||
|
COMMAND ${CMAKE_COMMAND} ARGS
|
||
|
-DDLL_RELEASE="${DLL_RELEASE}"
|
||
|
-DDLL_DEBUG="${DLL_DEBUG}"
|
||
|
-DCONF="$<CONFIGURATION>"
|
||
|
-DDESTINATION="${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
|
||
|
-P "${ETH_SCRIPTS_DIR}/copydlls.cmake"
|
||
|
)
|
||
|
endif()
|
||
|
endmacro()
|
||
|
|
||
|
macro(eth_copy_dlls EXECUTABLE)
|
||
|
foreach(dll ${ARGN})
|
||
|
eth_copy_dll(${EXECUTABLE} ${dll})
|
||
|
endforeach(dll)
|
||
|
endmacro()
|
||
|
|
||
|
|
||
|
macro(eth_install_executable EXECUTABLE)
|
||
|
|
||
|
if (APPLE)
|
||
|
|
||
|
# TODO - Why is this different than the branch Linux below, which has the RUNTIME keyword too?
|
||
|
install(TARGETS ${EXECUTABLE} DESTINATION bin)
|
||
|
|
||
|
elseif (DEFINED MSVC)
|
||
|
|
||
|
set(COMPONENT ${EXECUTABLE})
|
||
|
|
||
|
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Debug/"
|
||
|
DESTINATION .
|
||
|
CONFIGURATIONS Debug
|
||
|
COMPONENT ${COMPONENT}
|
||
|
)
|
||
|
|
||
|
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Release/"
|
||
|
DESTINATION .
|
||
|
CONFIGURATIONS Release
|
||
|
COMPONENT ${COMPONENT}
|
||
|
)
|
||
|
|
||
|
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/"
|
||
|
DESTINATION .
|
||
|
CONFIGURATIONS RelWithDebInfo
|
||
|
COMPONENT ${COMPONENT}
|
||
|
)
|
||
|
|
||
|
else()
|
||
|
install( TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin)
|
||
|
endif ()
|
||
|
|
||
|
endmacro()
|
||
|
|
||
|
macro (eth_name KEY VALUE)
|
||
|
if (NOT (APPLE OR WIN32))
|
||
|
string(TOLOWER ${VALUE} LVALUE )
|
||
|
set(${KEY} ${LVALUE})
|
||
|
else()
|
||
|
set(${KEY} ${VALUE})
|
||
|
endif()
|
||
|
endmacro()
|
||
|
|
||
|
macro(jsonrpcstub_client_create SPEC CLIENTNAME CLIENTDIR CLIENTFILENAME)
|
||
|
if (ETH_JSON_RPC_STUB)
|
||
|
add_custom_target(${SPEC}stub)
|
||
|
add_custom_command(
|
||
|
TARGET ${SPEC}stub
|
||
|
POST_BUILD
|
||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${SPEC}"
|
||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||
|
COMMAND ${CMAKE_COMMAND} -DETH_SPEC_PATH="${CMAKE_CURRENT_SOURCE_DIR}/${SPEC}" -DETH_SOURCE_DIR="${CMAKE_SOURCE_DIR}" -DETH_CMAKE_DIR="${ETH_CMAKE_DIR}"
|
||
|
-DETH_CLIENT_DIR="${CLIENTDIR}"
|
||
|
-DETH_CLIENT_NAME=${CLIENTNAME}
|
||
|
-DETH_CLIENT_FILENAME=${CLIENTFILENAME}
|
||
|
-DETH_JSON_RPC_STUB="${ETH_JSON_RPC_STUB}"
|
||
|
-P "${ETH_SCRIPTS_DIR}/jsonrpcstub.cmake"
|
||
|
)
|
||
|
add_dependencies(${EXECUTABLE} ${SPEC}stub)
|
||
|
endif ()
|
||
|
endmacro()
|
||
|
|
||
|
macro(jsonrpcstub_create SPEC SERVERNAME SERVERDIR SERVERFILENAME CLIENTNAME CLIENTDIR CLIENTFILENAME)
|
||
|
if (ETH_JSON_RPC_STUB)
|
||
|
add_custom_target(${SPEC}stub)
|
||
|
add_custom_command(
|
||
|
TARGET ${SPEC}stub
|
||
|
POST_BUILD
|
||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${SPEC}"
|
||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||
|
COMMAND ${CMAKE_COMMAND} -DETH_SPEC_PATH="${CMAKE_CURRENT_SOURCE_DIR}/${SPEC}" -DETH_SOURCE_DIR="${CMAKE_SOURCE_DIR}" -DETH_CMAKE_DIR="${ETH_CMAKE_DIR}"
|
||
|
-DETH_CLIENT_DIR="${CLIENTDIR}"
|
||
|
-DETH_CLIENT_NAME=${CLIENTNAME}
|
||
|
-DETH_CLIENT_FILENAME=${CLIENTFILENAME}
|
||
|
-DETH_SERVER_DIR="${SERVERDIR}"
|
||
|
-DETH_SERVER_NAME=${SERVERNAME}
|
||
|
-DETH_SERVER_FILENAME=${SERVERFILENAME}
|
||
|
-DETH_JSON_RPC_STUB="${ETH_JSON_RPC_STUB}"
|
||
|
-P "${ETH_SCRIPTS_DIR}/jsonrpcstub.cmake"
|
||
|
)
|
||
|
add_dependencies(${EXECUTABLE} ${SPEC}stub)
|
||
|
endif ()
|
||
|
endmacro()
|
||
|
|