-
Notifications
You must be signed in to change notification settings - Fork 36.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
build: Switch to Qt 6 #30997
base: master
Are you sure you want to change the base?
build: Switch to Qt 6 #30997
Conversation
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. Code Coverage & BenchmarksFor details see: https://corecheck.dev/bitcoin/bitcoin/pulls/30997. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
8669ed0
to
b9c75dc
Compare
concept ack 🌞 |
4d4bbec
to
1b6e51f
Compare
9b3cb97
to
d2bc3fc
Compare
macOS Monterey 12 hardware support: https://support.apple.com/en-us/103260 Those differ by about a year. By time this is released, Monterey will work on ten year old machines. So I think it's fine to drop Big Sur (for Qt). Don't forget to update |
The bump for Ubuntu seems fine as well. There's already the requirement from #29987 for all binaries, so going one LTS further for the GUI seems fine. |
I don't think the gui requirements are documented anywhere, because for now they were always equal to the daemon requirements? Possibly just saying globally "qt6" is required implies the additional requirement on the OS? |
@maflcko I think it's just three places that need a change / consideration:
Loading a descriptor wallet with the GUI resulted in an error popup:
The log also says:
Using SQLite Version 3.43.2 and Qt 6.7.2 via Homebrew on Intel macOS 15.0 as well as 13.7. Seems odd the QT update would impact the wallet at all. Also happens when creating a fresh wallet in the GUI. |
Building depends fails for me, maybe something wrong with
|
What's your build platform and the value of the UPD. If you build on macOS, does the following diff help: --- a/depends/packages/qt.mk
+++ b/depends/packages/qt.mk
@@ -120,7 +120,7 @@ $(package)_config_opts_darwin += -no-feature-vulkan
$(package)_config_opts_linux = -xcb
$(package)_config_opts_linux += -no-xcb-xlib
$(package)_config_opts_linux += -no-feature-xlib
-$(package)_config_opts_linux += -no-feature-process
+$(package)_config_opts += -no-feature-process
$(package)_config_opts_linux += -system-freetype
$(package)_config_opts_linux += -fontconfig
$(package)_config_opts_linux += -no-opengl ? |
This is required to workaround the cache contaminated by unversioned files in the early versions of this branch. Can be dropped after cleaning the cache in the Cirrus CI infra. Suggested in bitcoin#30997 (comment)
ee1128e doc: update stack-clash-protection comment re mingw-w64 (fanquake) bf47448 test: drop check for Windows < 10 (fanquake) 35b898c release: target Windows 10 or later (fanquake) 398754e depends: target Windows 10 when building for mingw-w64 (fanquake) Pull request description: Follows up to #31048 (comment). We definitely cannot claim that Bitcoin Core is "supported and extensively tested on" on Windows 7. Note that #30997 is also increasing the minimum required Windows version (for the GUI) to 10. ACKs for top commit: hodlinator: cr-ACK ee1128e davidgumberg: ACK ee1128e achow101: ACK ee1128e hebasto: re-ACK ee1128e, only rebased, a commit message and a comment have been amended since my recent [review](#31172 (review)). TheCharlatan: ACK ee1128e Tree-SHA512: 245e0bac3d63414d919a1948661fef4ff79359faaacaf19d64abd91cc62e822797fb1cf3379e340bfdf9a85c0b88fd99a90eda450dd4218b6213ab78aefb1374
Tested 346218a on:
There's no mention of this in It also seems that regular Linux users need to install this in order to use the Guix release. That seems potentially problematic. For the non-depends build on Ubuntu there's a weird animation when you move between tabs, but that seems to be a wayland issue which happens in Qt5 as well (though it seems to be slightly worse). It doesn't impact the guix release builds. Guix hashes:
|
@@ -3,6 +3,7 @@ | |||
(gnu packages bison) | |||
((gnu packages certs) #:select (nss-certs)) | |||
((gnu packages cmake) #:select (cmake-minimal)) | |||
(gnu packages ninja) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
758c41a: is there anything other than QT in our guix build that will magically start using ninja once we add it here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess no. See #31171.
Rebased.
Amended. |
sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools | ||
sudo apt-get install qt6-base-dev qt6-tools-dev qt6-l10n-tools | ||
|
||
For Qt 6.5 and later, the `libxcb-cursor0` package must be installed at runtime. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure that the self-compilation documentation is the right place to put a note about a runtime requirement for the guix built release binaries.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you suggest?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are we not linking this library statically like the other xcb- libraries? they're trivial protocol shims
uhh, sorry, that was dumb, we actually require all of xcb at runtime:
0x0000000000000001 (NEEDED) Shared library: [libxcb-icccm.so.4]
0x0000000000000001 (NEEDED) Shared library: [libxcb-image.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-shm.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-keysyms.so.1]
0x0000000000000001 (NEEDED) Shared library: [libxcb-randr.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-render-util.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-render.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-shape.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-sync.so.1]
0x0000000000000001 (NEEDED) Shared library: [libxcb-xfixes.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-xinerama.so.0]
0x0000000000000001 (NEEDED) Shared library: [libxcb-xkb.so.1]
0x0000000000000001 (NEEDED) Shared library: [libxcb.so.1]
there's no reason to not require cursor as well, and no need to mention it specifically.
🐙 This pull request conflicts with the target branch and needs rebase. |
This change helps avoid patch duplication between a package and its native counterpart.
Unlike Qt 5, Qt 6 requires a separate native Qt build for cross-building. See: https://www.qt.io/blog/qt-6-build-system.
Static builds for Windows now require Qt 6.7 or newer. This holds automatically to cross-compiled builds.
1. Do not set `C{PLUS}_INCLUDE_PATH` variables for Darwin builds When cross-building for macOS, the `C{PLUS}_INCLUDE_PATH` environment variables modify the default include directories for both native GCC and cross Clang compilers, which is overkill and undesirable for the latter. This change avoids setting the `C{PLUS}_INCLUDE_PATH` environment variables and instead sets the required `-isystem` flags for the native compiler explicitly. 2. Add `ninja` package. 3. Adjust allowed symbol lists.
Rebased. |
The currently used Qt 5.15 is approaching EOL. The recent migration of the Bitcoin Core's build system to CMake makes it possible to switch to Qt 6.
This PR updates the OS runtime compatibility requirements for the Bitcoin Core GUI as follows:
1. Linux
Starting with Qt 6.5.0, the
libxcb-cursor0
package is required to be installed at runtime.2. Windows
Qt 6 requires Windows 10 (1809 or later) / Windows 11 (also see #31172). The new code expects Qt 6.7 or newer, which holds automatically for cross-compiled builds. A new style plugin causes minor visual glitches that will be fixed in follow-ups.
3. macOS
bitcoin-qt
now uses the Metal backend.IMPORTANT. Don't forget to install Ninja.
For historical context, please refer to:
UPD 2024-10-09. Qt 6.8 has been released, but it has some drawbacks for us. As a result, this PR will stick to Qt 6.7.