guix: Use LTO to build releases#25391
Conversation
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. Code CoverageFor detailed information about the code coverage, see the test coverage report. 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. |
32d3049 to
c6b8b4d
Compare
|
Concept ACK. This would be great. |
545abfa to
076aa5e
Compare
See #25542. |
|
Tested 076aa5ee3e9d86cc5f0b4fdfe8926a7f6a7078a2 on Ubuntu 22.04: UPDATE: |
I'm not sure what's causing that (maybe a not-completely-clean build dir, and mix of compiled objects), but I don't have any issues with this branch, following the same steps, using Ubuntu 22.04 and |
… code on Linux 3442865 build: Use Link Time Optimization for Qt code on Linux (Hennadii Stepanov) ebce66e build: pass -fno-lto when building expat (fanquake) Pull request description: See: https://www.qt.io/blog/2019/01/02/qt-applications-lto `bitcon-qt` unstripped size: | host | master (31c6309) | this PR, depends built with `LTO=1` | |---|:-:|:-:| | x86_64-pc-linux-gnu | 42 MB | 35 MB | | arm-linux-gnueabihf | 31 MB | 26 MB | | aarch64-linux-gnu | 41 MB | 32 MB | | powerpc64-linux-gnu | 51 MB | 41 MB | | powerpc64le-linux-gnu | 48 MB | 39 MB | | riscv64-linux-gnu | 35 MB | 29 MB | Based on the first commit from bitcoin/bitcoin#25391. Using LTO for macOS and Windows hosts has some issues which could be addressed in follow ups. x86_64 build:  ACKs for top commit: fanquake: ACK 3442865 Tree-SHA512: 03eef2568358df9336e24d6c4e12f28b89d649076fb74e7e5303d61e52865c2360c5345a4fb2b1e4bdfdae194f273fc27a5f67e6cf797ed01a154f3da9117247
|
Rebased for #25542. All binaries for our Linux HOSTS now build. |
…th GCC) 658685a depends: default to using GCC tool wrappers (with GCC) (fanquake) 6fdc13c build: Fix autoconf variable names for tools found by `AC_PATH_TOOL` (Hennadii Stepanov) Pull request description: This improves support for LTO by using gcc wrappers for `ar`, `nm`, `ranlib`, that correctly setup plugin arguments for LTO, when using GCC. Other HOSTS are using clang. Portion of #25391. Guix Build (x86_64): ```bash ``` Guix Build (arm64): ```bash ``` ACKs for top commit: dongcarl: Code Review ACK 658685a hebasto: ACK 658685a jarolrod: ACK 658685a Tree-SHA512: 28d6127c118f74336c97e2523117f8a0d11b32cd565124cd4052baeb7cc53e71909d3037cb080d996ae4e3ce600326fced37ee36adcc53d839ba7dd7974ebcd2
|
I have no idea if this will help, but this should keep the dtor in a single compilation unit. diff -ruN qtbase-everywhere-src-5.15.2/src/widgets/accessible/simplewidgets.cpp qtbase-everywhere-src-5.15.2.new/src/widgets/accessible/simplewidgets.cpp
--- qtbase-everywhere-src-5.15.2/src/widgets/accessible/simplewidgets.cpp 2020-10-27 08:02:11.000000000 +0000
+++ qtbase-everywhere-src-5.15.2.new/src/widgets/accessible/simplewidgets.cpp 2023-09-20 13:58:14.878755026 +0000
@@ -678,6 +678,8 @@
\ingroup accessibility
*/
+QAccessibleLineEdit::~QAccessibleLineEdit(){};
+
/*!
Constructs a QAccessibleLineEdit object for \a w.
\a name is propagated to the QAccessibleWidget constructor.
diff -ruN qtbase-everywhere-src-5.15.2/src/widgets/accessible/simplewidgets_p.h qtbase-everywhere-src-5.15.2.new/src/widgets/accessible/simplewidgets_p.h
--- qtbase-everywhere-src-5.15.2/src/widgets/accessible/simplewidgets_p.h 2020-10-27 08:02:11.000000000 +0000
+++ qtbase-everywhere-src-5.15.2.new/src/widgets/accessible/simplewidgets_p.h 2023-09-20 13:52:10.467865415 +0000
@@ -154,7 +154,7 @@
{
public:
explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString());
-
+ ~QAccessibleLineEdit();
QString text(QAccessible::Text t) const override;
void setText(QAccessible::Text t, const QString &text) override;
QAccessible::State state() const override; |
Looks like it's good enough for working Windows builds. Turned the change into a depends patch, and dropped |
Guix builds (on x86_64)
|
|
Is this safe to do in light of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105469 ? |
|
Any idea where |
I can't remember exactly, but it looks like this is actually no-longer required. Did a new round of builds with this branch, and it dropped from the script. |
|
Related: |
Also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113359 (in combination with #29881) Would be nice to extend the motivation (pull request description) a bit about the benefits and risks. |
|
🐙 This pull request conflicts with the target branch and needs rebase. |
Thanks. Drafted for the moment, but going to come back here soon with much more information. |
```bash bitcoind: export of symbol in6addr_any not allowed! bitcoind: failed EXPORTED_SYMBOLS test/test_bitcoin: export of symbol in6addr_any not allowed! test/test_bitcoin: failed EXPORTED_SYMBOLS ``` Also new exports for bitcoin-qt.
|
Going to come back to this after static builds. |
Changes required to use LTO in Guix (release) builds.