Skip to content

Instantly share code, notes, and snippets.

@sanderfoobar
Created June 5, 2019 00:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sanderfoobar/07cfccf67cf0cb85ae91c9b0cd7e8f38 to your computer and use it in GitHub Desktop.
Save sanderfoobar/07cfccf67cf0cb85ae91c9b0cd7e8f38 to your computer and use it in GitHub Desktop.
CMake recipe monero GUI
cmake_minimum_required(VERSION 3.10)
project(monero-gui C CXX)
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
set(STATIC OFF)
set(DEBUG ON)
set(CMAKE_BUILD_TYPE Debug)
# GUI
set(VERSION_MAJOR "14")
set(VERSION_MINOR "0")
set(VERSION_REVISION "3")
set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
set(USE_DEVICE_TREZOR OFF)
option(USE_DEVICE_TREZOR "Disable zxcvbn" OFF)
option(DISABLE_PASS_STRENGTH_METER "Disable zxcvbn" ON)
#option(WITH_SCANNER "Enable webcam QR scanner" OFF)
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
set(CMAKE_CXX_FLAGS "-fPIC")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(DEBUG)
set(CMAKE_VERBOSE_MAKEFILE ON)
endif()
set(CMAKE_PREFIX_PATH $ENV{HOME}/Qt5.9/5.9.7/gcc_64)
if(STATIC)
message(STATUS "Initiating static build")
set(Boost_USE_STATIC_LIBS ON)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
endif()
# Compile source files (.h/.cpp)
file(GLOB SOURCE_FILES
"*.h"
"*.cpp"
"src/*.h"
"src/libwalletqt/WalletManager.cpp"
"src/libwalletqt/Wallet.cpp"
"src/libwalletqt/PendingTransaction.cpp"
"src/libwalletqt/TransactionHistory.cpp"
"src/libwalletqt/TransactionInfo.cpp"
"src/libwalletqt/QRCodeImageProvider.cpp" QR
"src/QR-Code-generator/BitBuffer.cpp"
"src/QR-Code-generator/QrCode.cpp"
"src/QR-Code-generator/QrSegment.cpp"
"src/libwalletqt/AddressBook.cpp"
"src/libwalletqt/Subaddress.cpp"
"src/libwalletqt/SubaddressAccount.cpp"
"src/libwalletqt/UnsignedTransaction.cpp"
"src/libwalletqt/WalletManager.h"
"src/libwalletqt/Wallet.h"
"src/libwalletqt/PendingTransaction.h"
"src/libwalletqt/TransactionHistory.h"
"src/libwalletqt/TransactionInfo.h"
"src/libwalletqt/QRCodeImageProvider.h"
"src/QR-Code-generator/BitBuffer.h"
"src/QR-Code-generator/QrCode.h"
"src/QR-Code-generator/QrSegment.h"
"src/libwalletqt/Transfer.h"
"src/libwalletqt/AddressBook.h"
"src/libwalletqt/Subaddress.h"
"src/libwalletqt/SubaddressAccount.h"
"src/libwalletqt/UnsignedTransaction.h"
"src/daemon/*.h"
"src/daemon/*.cpp"
"src/model/*.h"
"src/model/*.cpp"
# "src/QR-Code-generator/*.h"
# "src/QR-Code-generator/*.cpp"
# "src/QR-Code-scanner/*.h"
# "src/QR-Code-scanner/*.cpp"
"src/qt/*.h"
"src/qt/*.cpp"
)
# Include password strength library
add_definitions(-DDISABLE_PASS_STRENGTH_METER)
#if(DISABLE_PASS_STRENGTH_METER)
# add_definitions(-DDISABLE_PASS_STRENGTH_METER)
#else()
# message(STATUS "1111")
# list(APPEND SOURCE_FILES
# "src/zxcvbn-c/*.h"
# "src/zxcvbn-c/*.cpp"
# )
#endif()
include(CheckTrezor) # Trezor support check
include(CMakePackageConfigHelpers)
# QT5
#set(RESOURCES
# "resources/images.qrc"
# )
find_package(Qt5Core REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5Multimedia REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5XmlPatterns REQUIRED)
find_package(Qt5Svg REQUIRED)
set(RESOURCES qml.qrc)
qt5_add_resources(QML_QRC ${RESOURCES})
add_executable(monero-gui main.cpp
${SOURCE_FILES}
${QML_QRC}
)
target_include_directories(monero-gui PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
# OpenGL
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
target_include_directories(monero-gui PUBLIC ${OPENGL_INCLUDE_DIR})
message(STATUS "OpenGL: include dir at ${OPENGL_INCLUDE_DIR}")
message(STATUS "OpenGL: libraries at ${OPENGL_LIBRARIES}")
# OpenSSL
find_package(OpenSSL REQUIRED)
target_include_directories(monero-gui PUBLIC ${OPENSSL_INCLUDE_DIR})
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)
#find_package(ZBar0)
#target_include_directories(monero-gui PUBLIC ${ZBAR_INCLUDE_DIR})
#message(STATUS "libzbar: include dir at ${ZBAR_INCLUDE_DIR}")
#message(STATUS "libzbar: libraries at ${ZBAR_LIBRARIES}")
# Unwind
find_package(Libunwind)
target_include_directories(monero-gui PUBLIC ${LIBUNWIND_INCLUDE_DIR})
message(STATUS "libunwind: include dir at ${LIBUNWIND_INCLUDE_DIR}")
message(STATUS "libunwind: libraries at ${LIBUNWIND_LIBRARIES}")
# Sodium
if(STATIC)
set(sodium_USE_STATIC_LIBS ON)
endif()
find_package(Sodium REQUIRED)
target_include_directories(monero-gui PUBLIC ${sodium_INCLUDE_DIR})
message(STATUS "libsodium: include dir at ${sodium_INCLUDE_DIR}")
message(STATUS "libsodium: libraries at ${sodium_LIBRARY_DEBUG}")
if(sodium_VERSION)
message(STATUS "libsodium: Version ${sodium_VERSION}")
endif()
# LibUSB
find_package(LibUSB)
target_include_directories(monero-gui PUBLIC ${LibUSB_INCLUDE_DIRS})
message(STATUS "libusb: include dir at ${LibUSB_INCLUDE_DIRS}")
message(STATUS "libusb: libraries at ${LibUSB_LIBRARIES}")
# HIDApi
find_package(HIDAPI REQUIRED)
target_include_directories(monero-gui PUBLIC ${HIDAPI_INCLUDE_DIRS})
message(STATUS "libhidapi: include dir at ${HIDAPI_INCLUDE_DIRS}")
message(STATUS "libhidapi: libraries at ${HIDAPI_LIBRARIES}")
# Boost
#if(DEBUG)
# set(Boost_DEBUG ON)
#endif()
find_package(Boost 1.62 REQUIRED COMPONENTS
system
filesystem
thread
date_time
chrono
regex
serialization
program_options
locale)
target_include_directories(monero-gui PUBLIC ${Boost_INCLUDE_DIRS})
message(STATUS "Using Boost include dir at ${Boost_INCLUDE_DIRS}")
message(STATUS "Using Boost libraries at ${Boost_LIBRARIES}")
target_include_directories(monero-gui PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/monero/include
${CMAKE_CURRENT_SOURCE_DIR}/monero/src
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/daemon
${CMAKE_CURRENT_SOURCE_DIR}/src/libwalletqt
${CMAKE_CURRENT_SOURCE_DIR}/src/model
${CMAKE_CURRENT_SOURCE_DIR}/src/QR-Code-generator
#${CMAKE_CURRENT_SOURCE_DIR}/src/QR-Code-scanner
${CMAKE_CURRENT_SOURCE_DIR}/src/daemon/zxcvbn-c
"/usr/include/libusb-1.0/" # REMOVEME
)
target_compile_definitions(monero-gui
PUBLIC
${Qt5Widgets_DEFINITIONS}
${Qt5Qml_DEFINITIONS}
)
set(CMAKE_CXX_FLAGS "${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=c++0x")
target_link_libraries(monero-gui
${CMAKE_SOURCE_DIR}/monero/lib/libwallet_merged.a
#${ZBAR_LIBRARIES} QR
${CMAKE_SOURCE_DIR}/monero/lib/libunbound.a
${sodium_LIBRARY_RELEASE}
${CMAKE_SOURCE_DIR}/monero/lib/liblmdb.a
${CMAKE_SOURCE_DIR}/monero/lib/libepee.a
${CMAKE_SOURCE_DIR}/monero/lib/libepee_readline.a
${CMAKE_SOURCE_DIR}/monero/lib/libeasylogging.a
${CMAKE_DL_LIBS}
${Boost_LIBRARIES}
${OPENSSL_LIBRARIES}
${OPENSSL_SSL_LIBRARIES}
${LibUSB_LIBRARIES}
${HIDAPI_LIBRARIES}
pthread
Qt5::Core
Qt5::Quick
Qt5::Widgets
Qt5::Gui
Qt5::Network
Qt5::Qml
Qt5::Multimedia
Qt5::Xml
Qt5::XmlPatterns
Qt5::Svg
)
install(TARGETS monero-gui
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment