2020-01-27 21:53:00 +01:00
# if(POLICY CMP0043)
# cmake_policy(SET CMP0043 OLD)
# endif()
2018-12-27 18:50:45 +03:00
2020-08-04 19:45:41 +03:00
##### Precompiled Headers ######
2018-12-27 18:50:45 +03:00
# define USE_PCH to YES for using precomiled headers
2020-08-04 19:45:41 +03:00
# Windows: using custom-made shared PCH -- this is unusual case for MSVC... so mystery, such hack, many wow. See also: https://stackoverflow.com/questions/645747/sharing-precompiled-headers-between-projects-in-visual-studio/4170902#4170902
# Linux: using CMake-enabled shared PCH (which appeared in CMake 3.16)
MACRO(INIT_SHARED_PCH)
IF(USE_PCH)
MESSAGE( STATUS " ...... enabling precompiled headers, making new library: pch" )
add_library(pch ${PCH})
set(PCH_LIB_NAME pch)
IF(MSVC)
set_property(SOURCE "pch/stdafx.cpp" APPEND_STRING PROPERTY COMPILE_FLAGS " /Fo$(OutDir) /Z7 /Fd$(OutDir)vc$(PlatformToolsetVersion).pdb /Ycstdafx.h /Fp$(TargetDir)pch.pch")
2020-08-07 17:33:38 +03:00
ELSEIF(APPLE OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
2020-09-21 14:40:17 +03:00
cmake_minimum_required(VERSION 3.16)
2020-08-04 19:45:41 +03:00
target_precompile_headers(pch PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pch/stdafx.h")
ENDIF()
ENDIF(USE_PCH)
2018-12-27 18:50:45 +03:00
ENDMACRO(INIT_SHARED_PCH)
2020-08-04 19:45:41 +03:00
MACRO(ENABLE_SHARED_PCH target sources_var)
IF(USE_PCH)
IF(MSVC)
MESSAGE( STATUS " ...... enabling precompiled headers for: " ${sources_var} )
SET(precompiled_binary "$(TargetDir)pch.pch")
SET(precompiled_header "${CMAKE_CURRENT_SOURCE_DIR}/pch/stdafx.h")
SET(sources ${${sources_var}})
foreach(src ${sources})
if(NOT ${src} MATCHES "\\.rc$") # skip *.rc files
SET_SOURCE_FILES_PROPERTIES(${src}
PROPERTIES COMPILE_FLAGS "/Z7 /Fd$(OutDir)vc$(PlatformToolsetVersion).pdb /Yu\"${precompiled_header}\" /FI\"${precompiled_header}\" /Fp\"${precompiled_binary}\""
OBJECT_DEPENDS "${precompiled_binary}")
endif()
endforeach()
2020-08-07 17:33:38 +03:00
ELSEIF(APPLE OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
2020-08-04 19:45:41 +03:00
MESSAGE( STATUS " ...... enabling precompiled headers for: " ${target} )
target_precompile_headers(${target} REUSE_FROM pch)
ENDIF()
ENDIF(USE_PCH)
2018-12-27 18:50:45 +03:00
ENDMACRO(ENABLE_SHARED_PCH)
MACRO(ENABLE_SHARED_PCH_EXECUTABLE target)
2020-08-04 19:45:41 +03:00
IF(USE_PCH)
IF(MSVC)
SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS "$(OutDir)stdafx.obj")
ENDIF()
ENDIF(USE_PCH)
2018-12-27 18:50:45 +03:00
ENDMACRO(ENABLE_SHARED_PCH_EXECUTABLE)
2020-08-04 19:45:41 +03:00
##### End of Precompiled Headers macros ######
2018-12-27 18:50:45 +03:00
file(GLOB_RECURSE PCH pch/*)
file(GLOB_RECURSE COMMON common/*)
2021-03-11 06:48:43 +03:00
file(GLOB_RECURSE CRYPTO crypto/*)
2018-12-27 18:50:45 +03:00
file(GLOB_RECURSE CURRENCY_CORE currency_core/*)
file(GLOB_RECURSE CURRENCY_PROTOCOL currency_protocol/*)
file(GLOB_RECURSE DAEMON daemon/*)
file(GLOB_RECURSE P2P p2p/*)
file(GLOB_RECURSE RPC rpc/*)
2019-03-29 05:43:23 +03:00
file(GLOB_RECURSE STRATUM stratum/*)
2018-12-27 18:50:45 +03:00
file(GLOB_RECURSE SIMPLEWALLET simplewallet/*)
file(GLOB_RECURSE CONN_TOOL connectivity_tool/*)
file(GLOB_RECURSE WALLET wallet/*)
file(GLOB_RECURSE MINER miner/*)
if(BUILD_GUI)
if(MSVC)
file(GLOB_RECURSE QTDAEMON gui/qt-daemon/*.cpp gui/qt-daemon/*.h gui/qt-daemon/app.rc)
elseif(APPLE)
file(GLOB_RECURSE QTDAEMON gui/qt-daemon/*.cpp gui/qt-daemon/*.h gui/qt-daemon/*.mm)
else()
file(GLOB_RECURSE QTDAEMON gui/qt-daemon/*.cpp gui/qt-daemon/*.h)
endif()
2020-09-16 17:22:23 +03:00
list(FILTER QTDAEMON EXCLUDE REGEX "node_modules")
2018-12-27 18:50:45 +03:00
endif()
source_group(pch FILES ${PCH})
source_group(common FILES ${COMMON})
source_group(crypto FILES ${CRYPTO})
source_group(currency_core FILES ${CURRENCY_CORE})
source_group(currency_protocol FILES ${CURRENCY_PROTOCOL})
source_group(daemon FILES ${DAEMON})
source_group(p2p FILES ${P2P})
source_group(rpc FILES ${RPC})
2019-03-29 05:43:23 +03:00
source_group(stratum FILES ${STRATUM})
2018-12-27 18:50:45 +03:00
source_group(simplewallet FILES ${SIMPLEWALLET})
source_group(connectivity-tool FILES ${CONN_TOOL})
source_group(wallet FILES ${WALLET})
if(BUILD_GUI)
source_group(qtdaemon FILES ${QTDAEMON})
endif()
2020-08-04 19:45:41 +03:00
INIT_SHARED_PCH()
2018-12-27 18:50:45 +03:00
add_library(common ${COMMON})
add_dependencies(common version ${PCH_LIB_NAME})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(common COMMON)
2018-12-27 18:50:45 +03:00
2019-02-16 01:44:59 +00:00
if(NOT MSVC AND NOT APPLE AND NOT CLANG) # TODO(unassigned): do we really need the clang equivalent?
2018-12-27 18:50:45 +03:00
target_compile_options(common PRIVATE -fno-var-tracking-assignments)
endif()
2021-04-27 05:14:11 +03:00
# disable specific warning in order not to touch original code by D. J. Bernstein
if(MSVC)
set_source_files_properties("crypto/chacha8_stream.c" PROPERTIES COMPILE_FLAGS "/wd4018")
else()
set_source_files_properties("crypto/chacha8_stream.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-compare -Wno-strict-prototypes")
endif()
2018-12-27 18:50:45 +03:00
add_library(crypto ${CRYPTO})
add_library(currency_core ${CURRENCY_CORE})
2020-01-09 17:06:02 +01:00
add_dependencies(currency_core version ${PCH_LIB_NAME})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(currency_core CURRENCY_CORE)
2018-12-27 18:50:45 +03:00
2022-01-09 00:07:26 +01:00
add_library(wallet ${WALLET})
2020-02-20 02:54:45 +01:00
if(CMAKE_SYSTEM_NAME STREQUAL "Android" )
add_dependencies(wallet version ${PCH_LIB_NAME})
2020-06-02 21:48:47 +02:00
target_link_libraries(wallet currency_core crypto common zlibstatic ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} android log)
2020-02-20 02:54:45 +01:00
else()
add_dependencies(wallet version ${PCH_LIB_NAME})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(wallet WALLET)
2020-02-20 02:54:45 +01:00
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
2020-01-27 21:46:40 +01:00
install(TARGETS wallet currency_core crypto common DESTINATION lib)
2020-02-20 02:54:45 +01:00
message("Generating install for iOS")
return()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
2020-02-21 01:05:39 +01:00
install(TARGETS wallet currency_core crypto common zlibstatic DESTINATION "${CMAKE_ANDROID_ARCH_ABI}/lib")
2020-02-20 02:54:45 +01:00
message("Generating install for Android")
2020-01-09 02:25:46 +01:00
return()
endif()
2018-12-27 18:50:45 +03:00
add_library(rpc ${RPC})
add_dependencies(rpc version ${PCH_LIB_NAME})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(rpc RPC)
2018-12-27 18:50:45 +03:00
2019-03-29 05:43:23 +03:00
add_library(stratum ${STRATUM})
add_dependencies(stratum version ${PCH_LIB_NAME})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(stratum STRATUM)
2019-03-29 05:43:23 +03:00
2018-12-27 18:50:45 +03:00
2021-11-16 15:52:07 +01:00
target_link_libraries(currency_core lmdb mdbx)
2018-12-27 18:50:45 +03:00
add_executable(daemon ${DAEMON} ${P2P} ${CURRENCY_PROTOCOL})
add_dependencies(daemon version)
2020-02-20 02:54:45 +01:00
target_link_libraries(daemon rpc stratum currency_core crypto common libminiupnpc-static zlibstatic ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(daemon DAEMON)
2018-12-27 18:50:45 +03:00
ENABLE_SHARED_PCH_EXECUTABLE(daemon)
add_executable(connectivity_tool ${CONN_TOOL})
add_dependencies(connectivity_tool version)
2019-03-25 01:30:20 +01:00
target_link_libraries(connectivity_tool currency_core crypto common zlibstatic ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(connectivity_tool CONN_TOOL)
2018-12-27 18:50:45 +03:00
ENABLE_SHARED_PCH_EXECUTABLE(connectivity_tool)
add_executable(simplewallet ${SIMPLEWALLET})
2022-01-09 00:07:26 +01:00
add_dependencies(simplewallet version)
target_link_libraries(simplewallet wallet rpc currency_core crypto common zlibstatic ethash tor-connect ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(simplewallet SIMPLEWALLET)
2018-12-27 18:50:45 +03:00
ENABLE_SHARED_PCH_EXECUTABLE(simplewallet)
2019-03-29 05:43:23 +03:00
set_property(TARGET common crypto currency_core rpc stratum wallet PROPERTY FOLDER "libs")
2018-12-27 18:50:45 +03:00
set_property(TARGET daemon simplewallet connectivity_tool PROPERTY FOLDER "prog")
set_property(TARGET daemon PROPERTY OUTPUT_NAME "zanod")
if(BUILD_GUI)
if(APPLE)
FIND_LIBRARY(COCOA_LIBRARY Cocoa)
endif()
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
SET(MACOSX_BUNDLE_ICON_FILE app.icns)
add_executable(Zano WIN32 MACOSX_BUNDLE ${QTDAEMON} )
2020-08-04 19:45:41 +03:00
ENABLE_SHARED_PCH(Zano QTDAEMON)
2018-12-27 18:50:45 +03:00
ENABLE_SHARED_PCH_EXECUTABLE(Zano)
QT5_USE_MODULES(Zano WebEngineWidgets WebChannel)
find_package(Qt5PrintSupport REQUIRED)
2022-04-09 22:36:11 +02:00
target_link_libraries(Zano wallet rpc currency_core crypto common zlibstatic ethash tor-connect Qt5::WebEngineWidgets Qt5::PrintSupport ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
2022-01-05 20:13:30 +01:00
if (UNIX AND NOT APPLE)
target_link_libraries(Zano rt)
endif()
2018-12-27 18:50:45 +03:00
if(APPLE)
target_link_libraries(Zano ${COCOA_LIBRARY})
2021-06-29 18:16:11 +03:00
set_property(TARGET Zano PROPERTY XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES)
2018-12-27 18:50:45 +03:00
endif()
if(MSVC)
target_link_libraries(Zano shlwapi.lib)
endif()
set_property(TARGET Zano PROPERTY FOLDER "prog")
set_target_properties(Zano PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/gui/qt-daemon/Info.plist.in)
2021-03-22 22:03:03 +03:00
set(HTML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gui/qt-daemon/layout/html)
2019-03-14 23:27:56 +00:00
set_target_properties(Zano PROPERTIES VS_DEBUGGER_COMMAND_ARGUMENTS "--html-path=${HTML_DIR}")
2019-03-11 19:37:46 +01:00
2018-12-27 18:50:45 +03:00
set(CMAKE_AUTOMOC OFF)
2019-03-14 23:27:56 +00:00
# GUI convenience "bundle"
2019-03-15 23:00:24 +01:00
# set(GUI_DIR ${CMAKE_CURRENT_BINARY_DIR}/gui)
# set_target_properties(Zano PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${GUI_DIR})
# add_custom_command(TARGET Zano POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${HTML_DIR} ${GUI_DIR}/html)
2018-12-27 18:50:45 +03:00
endif()
if(APPLE)
set(SIMPLE_BUNDLE 1)
endif()
if(SIMPLE_BUNDLE)
set(INSTALL_DIR "${CMAKE_BINARY_DIR}/hp-${VERSION}")
install(TARGETS daemon simplewallet connectivity_tool
RUNTIME DESTINATION "${INSTALL_DIR}" COMPONENT Runtime
)
install(FILES ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} DESTINATION "${INSTALL_DIR}/lib")
if(APPLE)
set(FIXUP_COMMAND ${CMAKE_SOURCE_DIR}/utils/macosx_fixup.sh " " ${INSTALL_DIR})
install(CODE "execute_process(COMMAND ${FIXUP_COMMAND})")
endif()
endif()