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