2019-09-29 15:29:22 +00:00
cmake_minimum_required ( VERSION 3.10 )
2018-05-09 00:01:27 +00:00
project ( monero-gui )
2019-09-29 15:29:22 +00:00
message ( STATUS "Initiating compile using CMake ${CMAKE_VERSION}" )
2018-05-09 00:01:27 +00:00
set ( LINUX ON )
2019-09-29 15:29:22 +00:00
set ( DEBUG ON )
2018-05-09 00:01:27 +00:00
set ( CMAKE_BUILD_TYPE Release )
2019-09-29 15:29:22 +00:00
set ( VERSION_MAJOR "14" )
set ( VERSION_MINOR "0" )
set ( VERSION_REVISION "3" )
set ( VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}" )
2018-05-09 00:01:27 +00:00
# libwallet requires a static build, so we only allow static compilation
set ( STATIC ON )
option ( USE_DEVICE_TREZOR ON )
option ( ENABLE_PASS_STRENGTH_METER "Disable zxcvbn" OFF )
option ( WITH_SCANNER "Enable webcam QR scanner" OFF )
option ( DEV_MODE "Checkout latest monero master on build" OFF )
2019-09-29 15:29:22 +00:00
list ( INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake" )
set ( CMAKE_AUTOMOC ON )
set ( CMAKE_AUTORCC ON )
set ( CMAKE_AUTOUIC ON )
if ( DEBUG )
set ( CMAKE_VERBOSE_MAKEFILE ON )
endif ( )
2018-05-09 00:01:27 +00:00
set ( BUILD_GUI_DEPS ON )
set ( ARCH "x86-64" )
set ( BUILD_64 ON )
set ( INSTALL_VENDORED_LIBUNBOUND=ON )
find_package ( Git )
if ( GIT_FOUND )
if ( NOT DEV_MODE )
find_package ( Git )
function ( check_submodule relative_path )
execute_process ( COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } / ${ relative_path } OUTPUT_VARIABLE localHead )
execute_process ( COMMAND git rev-parse "HEAD:${relative_path}" WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } OUTPUT_VARIABLE checkedHead )
string ( COMPARE EQUAL "${localHead}" "${checkedHead}" upToDate )
if ( upToDate )
message ( STATUS "Submodule '${relative_path}' is up-to-date" )
else ( )
message ( FATAL_ERROR "Submodule '${relative_path}' is not using the checked head. Please update all submodules with\ngit submodule update --init --force\nor run cmake with -DMANUAL_SUBMODULES=1,\n or if you want to build from latest master run cmake with -DEV_MODE,\n or run make devmode" )
endif ( )
endfunction ( )
message ( STATUS "Checking submodules" )
check_submodule ( monero )
else ( )
execute_process ( COMMAND cd monero && git checkout origin/master )
endif ( )
endif ( )
add_subdirectory ( monero )
set_property ( TARGET wallet_merged PROPERTY FOLDER "monero" )
2019-09-29 15:29:22 +00:00
if ( STATIC )
message ( STATUS "Initiating static build" )
set ( Boost_USE_STATIC_LIBS ON )
2018-05-09 00:01:27 +00:00
set ( CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
2019-09-29 15:29:22 +00:00
endif ( )
# Include password strength library
2018-05-09 00:01:27 +00:00
if ( ENABLE_PASS_STRENGTH_METER )
find_library ( ZXCVBN_LIBRARY zxcvbn )
message ( STATUS "Found zxcvbn library: ${ZXCVBN_LIBRARY}" )
else ( )
add_definitions ( -DDISABLE_PASS_STRENGTH_METER )
endif ( )
2019-09-29 15:29:22 +00:00
include ( CheckTrezor ) # Trezor support check
include ( CMakePackageConfigHelpers )
2018-05-09 00:01:27 +00:00
# force version update
function ( monero_gui_add_library_with_deps )
cmake_parse_arguments ( MONERO_ADD_LIBRARY "" "NAME" "DEPENDS;SOURCES" ${ ARGN } )
source_group ( "${MONERO_ADD_LIBRARY_NAME}" FILES ${ MONERO_ADD_LIBRARY_SOURCES } )
# Define a ("virtual") object library and an actual library that links those
# objects together. The virtual libraries can be arbitrarily combined to link
# any subset of objects into one library archive. This is used for releasing
# libwallet, which combines multiple components.
set ( objlib obj_ ${ MONERO_ADD_LIBRARY_NAME } )
add_library ( ${ objlib } OBJECT ${ MONERO_ADD_LIBRARY_SOURCES } )
add_library ( "${MONERO_ADD_LIBRARY_NAME}" $< TARGET_OBJECTS:${objlib} > )
if ( MONERO_ADD_LIBRARY_DEPENDS )
add_dependencies ( ${ objlib } ${ MONERO_ADD_LIBRARY_DEPENDS } )
endif ( )
set_property ( TARGET "${MONERO_ADD_LIBRARY_NAME}" PROPERTY FOLDER "libs" )
target_compile_definitions ( ${ objlib }
P R I V A T E $ < T A R G E T _ P R O P E R T Y : $ { M O N E R O _ A D D _ L I B R A R Y _ N A M E } , I N T E R F A C E _ C O M P I L E _ D E F I N I T I O N S > )
endfunction ( )
function ( monero_gui_add_library name )
monero_gui_add_library_with_deps ( NAME "${name}" SOURCES ${ ARGN } )
endfunction ( )
include_directories ( ${ EASYLOGGING_INCLUDE } )
link_directories ( ${ EASYLOGGING_LIBRARY_DIRS } )
include ( VersionGui )
monero_gui_add_library ( gui_version SOURCES version.js DEPENDS genversiongui )
2019-09-29 15:29:22 +00:00
find_package ( Qt5Core REQUIRED )
find_package ( Qt5Quick REQUIRED )
find_package ( Qt5Widgets REQUIRED )
find_package ( Qt5Gui REQUIRED )
find_package ( Qt5Network REQUIRED )
find_package ( Qt5Qml REQUIRED )
2018-05-09 00:01:27 +00:00
message ( STATUS "${CMAKE_MODULE_PATH}" )
2019-09-29 15:29:22 +00:00
find_package ( Qt5Multimedia REQUIRED )
find_package ( Qt5Xml REQUIRED )
find_package ( Qt5XmlPatterns REQUIRED )
find_package ( Qt5Svg REQUIRED )
2018-05-09 00:01:27 +00:00
find_package ( X11 REQUIRED )
2019-09-29 15:29:22 +00:00
# OpenSSL
find_package ( OpenSSL REQUIRED )
message ( STATUS "OpenSSL: Version ${OPENSSL_VERSION}" )
message ( STATUS "OpenSSL: include dir at ${OPENSSL_INCLUDE_DIR}" )
message ( STATUS "OpenSSL: libraries at ${OPENSSL_LIBRARIES} ${OPENSSL_SSL_LIBRARIES}" )
# Zbar (for QR scanner)
2018-05-09 00:01:27 +00:00
if ( WITH_SCANNER )
add_definitions ( -DWITH_SCANNER )
find_package ( ZBar0 )
message ( STATUS "libzbar: include dir at ${ZBAR_INCLUDE_DIR}" )
message ( STATUS "libzbar: libraries at ${ZBAR_LIBRARIES}" )
endif ( )
2019-09-29 15:29:22 +00:00
# Sodium
2018-05-09 00:01:27 +00:00
find_library ( SODIUM_LIBRARY sodium )
message ( STATUS "libsodium: libraries at ${SODIUM_LIBRARY}" )
2019-09-29 15:29:22 +00:00
# LibUSB
find_package ( LibUSB )
message ( STATUS "libusb: include dir at ${LibUSB_INCLUDE_DIRS}" )
message ( STATUS "libusb: libraries at ${LibUSB_LIBRARIES}" )
# HIDApi
find_package ( HIDAPI REQUIRED )
message ( STATUS "libhidapi: include dir at ${HIDAPI_INCLUDE_DIRS}" )
message ( STATUS "libhidapi: libraries at ${HIDAPI_LIBRARIES}" )
# Boost
2018-05-09 00:01:27 +00:00
if ( DEBUG )
set ( Boost_DEBUG ON )
endif ( )
2019-09-29 15:29:22 +00:00
find_package ( Boost 1.62 REQUIRED COMPONENTS
s y s t e m
f i l e s y s t e m
t h r e a d
d a t e _ t i m e
c h r o n o
r e g e x
s e r i a l i z a t i o n
p r o g r a m _ o p t i o n s
l o c a l e )
2018-05-09 00:01:27 +00:00
if ( LINUX )
find_package ( X11 REQUIRED )
message ( STATUS "X11_FOUND = ${X11_FOUND}" )
message ( STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}" )
message ( STATUS "X11_LIBRARIES = ${X11_LIBRARIES}" )
include_directories ( ${ X11_INCLUDE_DIR } )
link_directories ( ${ X11_LIBRARIES } )
if ( STATIC )
find_library ( XCB_LIBRARY xcb )
message ( STATUS "Found xcb library: ${XCB_LIBRARY}" )
endif ( )
endif ( )
2019-09-29 15:29:22 +00:00
message ( STATUS "Using Boost include dir at ${Boost_INCLUDE_DIRS}" )
message ( STATUS "Using Boost libraries at ${Boost_LIBRARIES}" )
2018-05-09 00:01:27 +00:00
add_subdirectory ( src )
# Required to make wallet_merged build before the gui
add_dependencies ( monero-gui wallet_merged )