1+ cmake_minimum_required (VERSION 3.22)
2+
3+ project (BitcoinCoreApp
4+ DESCRIPTION "Bitcoin GUI"
5+ HOMEPAGE_URL "https://bitcoincore.org/"
6+ LANGUAGES CXX
7+ )
8+
9+ # Language setup
10+ if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_HOST_APPLE )
11+ # We do not use the install_name_tool when cross-compiling for macOS.
12+ # So disable this tool check in further enable_language() commands.
13+ set (CMAKE_PLATFORM_HAS_INSTALLNAME FALSE )
14+ endif ()
15+
16+ set (CMAKE_CXX_STANDARD 20)
17+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
18+ set (CMAKE_CXX_EXTENSIONS OFF )
19+
20+ # Set top-level target output locations.
21+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /bin)
22+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib)
23+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib)
24+
25+ # Include Find*.cmake files
26+ list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR} /cmake/module)
27+
28+ # Qt dependencies QML
29+ set (qt_components Core Gui LinguistTools Widgets Qml Quick QuickControls2)
30+ find_package (Qt 6.2 MODULE REQUIRED
31+ COMPONENTS ${qt_components}
32+ )
33+ find_package (Libevent 2.1.8 MODULE REQUIRED)
34+
35+ # Do not build any executable targets from bitcoin submodule
36+ set (BUILD_BENCH OFF )
37+ set (BUILD_BITCOIN_BIN OFF )
38+ set (BUILD_CLI OFF )
39+ set (BUILD_DAEMON OFF )
40+ set (BUILD_FOR_FUZZING OFF )
41+ set (BUILD_FUZZ_BINARY OFF )
42+ set (BUILD_GUI_TESTS OFF )
43+ set (BUILD_KERNEL_LIB OFF )
44+ set (BUILD_SHARED_LIBS OFF )
45+ set (BUILD_TESTS OFF )
46+ set (BUILD_TX OFF )
47+ set (BUILD_UTIL OFF )
48+ set (BUILD_UTIL_CHAINSTATE OFF )
49+ set (BUILD_WALLET_TOOL OFF )
50+ # We need this libraries, can ignore the executable bitcoin-qt
51+ set (BUILD_GUI ON )
52+ set (ENABLE_WALLET ON )
53+
54+ # Bitcoin Core codebase
55+ # Builds libraries: univalue, core_interface, bitcoin_node, bitcoin_wallet
56+ add_subdirectory (bitcoin)
57+
58+ # Qt-specific commands
59+ set (CMAKE_AUTOMOC ON )
60+ set (CMAKE_AUTOMOC_MOC_OPTIONS "-p${CMAKE_CURRENT_SOURCE_DIR} " )
61+ set (CMAKE_AUTORCC ON )
62+ set (CMAKE_AUTOUIC ON )
63+ # but don't let Qt interfere with bitcoin core libraries
64+ set_target_properties (bitcoin_wallet PROPERTIES AUTOUIC OFF )
65+
66+ # Compile Qt+QML sources
67+ set (CMAKE_AUTOMOC_MOC_OPTIONS "-I${CMAKE_CURRENT_SOURCE_DIR} /qml" )
68+ file (GLOB_RECURSE QML_SOURCES "${CMAKE_CURRENT_SOURCE_DIR} /qml/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR} /qml/*.h" )
69+ list (FILTER QML_SOURCES EXCLUDE REGEX "androidnotifier\\ .(cpp|h)$" )
70+ set (QML_QRC "${CMAKE_CURRENT_SOURCE_DIR} /qml/bitcoin_qml.qrc" )
71+ qt6_add_resources(QML_QRC_CPP ${QML_QRC} )
72+ list (APPEND QML_SOURCES ${QML_QRC_CPP} )
73+ list (APPEND QML_SOURCES "${CMAKE_CURRENT_SOURCE_DIR} /bitcoin/src/init/bitcoin-qt.cpp" )
74+
75+ # Build QML library
76+ add_library (bitcoinqml STATIC ${QML_SOURCES} )
77+ # Prevent Qt macros like "signal" from polluting bitcoin core code
78+ target_compile_definitions (bitcoinqml
79+ PUBLIC
80+ QT_NO_KEYWORDS
81+ QT_USE_QSTRINGBUILDER
82+ )
83+ target_include_directories (bitcoinqml
84+ PRIVATE
85+ # to keep the convention of #include <qml/*.h>
86+ ${CMAKE_CURRENT_SOURCE_DIR}
87+
88+ # for interfaces consensus chainparams etc...
89+ ${CMAKE_CURRENT_SOURCE_DIR} /bitcoin/src
90+
91+ # for qt/guiutil.h qt/peertablemodel.h qt/rpcconsole.h etc...
92+ ${CMAKE_CURRENT_SOURCE_DIR} /bitcoin/src/qt
93+
94+ # for bitcoin-build-config.h
95+ ${CMAKE_CURRENT_BINARY_DIR} /bitcoin/src
96+ )
97+ target_link_libraries (bitcoinqml
98+ PUBLIC
99+ core_interface
100+ bitcoin_node
101+ univalue
102+ Qt6::Qml
103+ Qt6::Quick
104+ Qt6::QuickControls2
105+ Qt6::Widgets
106+ )
107+
108+ # Put it all together
109+ add_executable (bitcoin-core-app main.cpp)
110+ target_include_directories (bitcoin-core-app
111+ PRIVATE
112+ # to keep the convention of #include <qml/*.h>
113+ ${CMAKE_CURRENT_SOURCE_DIR}
114+
115+ # for interfaces compat util etc...
116+ ${CMAKE_CURRENT_SOURCE_DIR} /bitcoin/src
117+
118+ # for bitcoin-build-config.h
119+ ${CMAKE_CURRENT_BINARY_DIR} /bitcoin/src
120+ )
121+ target_link_libraries (bitcoin-core-app
122+ PRIVATE
123+ univalue
124+ core_interface
125+ bitcoin_node
126+ bitcoinqml
127+ bitcoinqt
128+ )
0 commit comments