Migrate build system to cmake

The content in this commit is not split in order to preserve working
compilation. Once this is added to master, the old build script will no
longer work and all existing build toolings will require changes.

Monero's cmake directory's files need to be copied to this project's cmake
directory in order for the linking and function definitions to work correctly.

Monero-gui has its own version check and generate file in order to not
conflict with monero's destination version files.

Most of the source files that are currently in monero-gui's root
directory are now moved to subdirectories. This is done to preserve
compilation order properly and to give some content structure.

The original CMakeList file included all headers it found in
subdirectories. Make sure that they are set manually to evade linking
errors.

The current build script always checks out latest master of the monero
submodule. The submodule rules in the current CMakeLists.txt file do not
enforce. An override to compile master nevertheless can still be given
with `-D DEV_MODE`.

To enable the linux X11 xcb linking the libraries had to be hardcoded. There
does not seem to be good support for this in pkgconfig, or in
existing cmake checks.
This commit is contained in:
TheCharlatan
2018-05-09 02:01:27 +02:00
parent e04db9299d
commit 8dd2a20ff8
59 changed files with 3794 additions and 179 deletions

152
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1,152 @@
add_subdirectory(QR-Code-generator)
add_subdirectory(QR-Code-scanner)
add_subdirectory(daemon)
add_subdirectory(libwalletqt)
add_subdirectory(model)
add_subdirectory(zxcvbn-c)
qt5_add_resources(QML_QRC ../qml.qrc)
# Compile source files (.h/.cpp)
file(GLOB SOURCE_FILES
"*.h"
"*.cpp"
"main/*.h"
"main/*.cpp"
"libwalletqt/WalletManager.cpp"
"libwalletqt/Wallet.cpp"
"libwalletqt/PendingTransaction.cpp"
"libwalletqt/TransactionHistory.cpp"
"libwalletqt/TransactionInfo.cpp"
"libwalletqt/QRCodeImageProvider.cpp" QR
"QR-Code-generator/BitBuffer.cpp"
"QR-Code-generator/QrCode.cpp"
"QR-Code-generator/QrSegment.cpp"
"libwalletqt/AddressBook.cpp"
"libwalletqt/Subaddress.cpp"
"libwalletqt/SubaddressAccount.cpp"
"libwalletqt/UnsignedTransaction.cpp"
"libwalletqt/WalletManager.h"
"libwalletqt/Wallet.h"
"libwalletqt/PendingTransaction.h"
"libwalletqt/TransactionHistory.h"
"libwalletqt/TransactionInfo.h"
"libwalletqt/QRCodeImageProvider.h"
"QR-Code-generator/BitBuffer.h"
"QR-Code-generator/QrCode.h"
"QR-Code-generator/QrSegment.h"
"libwalletqt/Transfer.h"
"libwalletqt/AddressBook.h"
"libwalletqt/Subaddress.h"
"libwalletqt/SubaddressAccount.h"
"libwalletqt/UnsignedTransaction.h"
"daemon/*.h"
"daemon/*.cpp"
"model/*.h"
"model/*.cpp"
"qt/*.h"
"qt/*.cpp"
)
if(WITH_SCANNER)
file(GLOB QR_CODE_FILES
"QR-Code-generator/*.h"
"QR-Code-generator/*.cpp"
"QR-Code-scanner/*.h"
"QR-Code-scanner/*.cpp"
)
endif()
message(STATUS ${QML_QRC})
add_executable(monero-gui main/main.cpp
${SOURCE_FILES}
${QR_CODE_FILES}
${QML_QRC}
)
# OpenGL
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}")
target_include_directories(monero-gui PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
file(GLOB_RECURSE SRC_SOURCES *.cpp)
file(GLOB_RECURSE SRC_HEADERS *.h)
target_include_directories(monero-gui PUBLIC
${CMAKE_SOURCE_DIR}/monero/include
${CMAKE_SOURCE_DIR}/monero/src
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/daemon
${CMAKE_CURRENT_SOURCE_DIR}/libwalletqt
${CMAKE_CURRENT_SOURCE_DIR}/model
${CMAKE_CURRENT_SOURCE_DIR}/QR-Code-generator
${CMAKE_CURRENT_SOURCE_DIR}/QR-Code-scanner
${CMAKE_CURRENT_SOURCE_DIR}/daemon/zxcvbn-c
${LibUSB_INCLUDE_DIRS}
${HIDAPI_INCLUDE_DIRS}
${X11_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
${ZBAR_INCLUDE_DIR}
)
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")
if(X11_FOUND)
target_link_libraries(monero-gui ${X11_LIBRARIES} pthread dl Xt xcb X11)
endif()
if(DEVICE_TREZOR_READY)
target_link_libraries(monero-gui ${TREZOR_DEP_LIBS})
endif()
target_link_libraries(monero-gui
${ZXCVBN_LIBRARY}
${CMAKE_BINARY_DIR}/lib/libwallet_merged.a
${LMDB_LIBRARY}
${CMAKE_BINARY_DIR}/monero/contrib/epee/src/libepee.a
${CMAKE_BINARY_DIR}/monero/external/unbound/libunbound.a
${SODIUM_LIBRARY}
${CMAKE_BINARY_DIR}/monero/external/easylogging++/libeasylogging.a
${CMAKE_BINARY_DIR}/monero/src/blockchain_db/libblockchain_db.a
${CMAKE_BINARY_DIR}/monero/external/randomx/librandomx.a
${CMAKE_BINARY_DIR}/monero/src/hardforks/libhardforks.a
${Boost_LIBRARIES}
${OPENSSL_LIBRARIES}
${CMAKE_DL_LIBS}
${LibUSB_LIBRARIES}
${HIDAPI_LIBRARIES}
Qt5::Core
Qt5::Quick
Qt5::Widgets
Qt5::Gui
Qt5::Network
Qt5::Qml
Qt5::Multimedia
Qt5::Xml
Qt5::XmlPatterns
Qt5::Svg
)
if(WITH_SCANNER)
target_link_libraries(monero-gui
${ZBAR_LIBRARIES}
jpeg
v4l2
v4lconvert
rt
)
endif()
install(TARGETS monero-gui
DESTINATION ${CMAKE_INSTALL_PREFIX}
)