From fe94986c359026244b96de15261f4d41b186606b Mon Sep 17 00:00:00 2001 From: Patrick Lodder Date: Tue, 24 Oct 2023 07:01:53 -0400 Subject: [PATCH] depends: reduce exported features for qt 5.7.1 Remove functionality of Qt that we do not need, resulting in a smaller dogecoin-qt binary and a reduced attack surface. - removes all image support except png (xpm is needed for qt binary build tools) - no longer use Qt's built-in libjpeg - disable all unused features Items that cannot be removed vs Bitcoin Core: For paper wallets: - printer dialogs and pdf - html rendering For BIP70 payment requests: - network configuration - openssl - socks5 support --- depends/packages/qt.mk | 44 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 6cf4e45a0..9bf21f886 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -33,8 +33,6 @@ $(package)_config_opts += -no-audio-backend $(package)_config_opts += -no-cups $(package)_config_opts += -no-egl $(package)_config_opts += -no-eglfs -$(package)_config_opts += -no-feature-style-windowsmobile -$(package)_config_opts += -no-feature-style-windowsce $(package)_config_opts += -no-freetype $(package)_config_opts += -no-gif $(package)_config_opts += -no-glib @@ -43,6 +41,7 @@ $(package)_config_opts += -no-icu $(package)_config_opts += -no-iconv $(package)_config_opts += -no-kms $(package)_config_opts += -no-linuxfb +$(package)_config_opts += -no-libjpeg $(package)_config_opts += -no-libudev $(package)_config_opts += -no-mitshm $(package)_config_opts += -no-mtdev @@ -71,7 +70,6 @@ $(package)_config_opts += -pch $(package)_config_opts += -pkg-config $(package)_config_opts += -prefix $(host_prefix) $(package)_config_opts += -qt-libpng -$(package)_config_opts += -qt-libjpeg $(package)_config_opts += -qt-pcre $(package)_config_opts += -qt-harfbuzz $(package)_config_opts += -system-zlib @@ -80,8 +78,38 @@ $(package)_config_opts += -static $(package)_config_opts += -silent $(package)_config_opts += -v +# disabled features to reduce binary size and attack surface +$(package)_config_opts += -no-feature-bearermanagement +$(package)_config_opts += -no-feature-colordialog +$(package)_config_opts += -no-feature-concurrent +$(package)_config_opts += -no-feature-fontcombobox +$(package)_config_opts += -no-feature-ftp +$(package)_config_opts += -no-feature-image_heuristic_mask +$(package)_config_opts += -no-feature-imageformat_bmp +$(package)_config_opts += -no-feature-imageformat_jpeg +$(package)_config_opts += -no-feature-imageformat_ppm +$(package)_config_opts += -no-feature-imageformat_xbm +$(package)_config_opts += -no-feature-keysequenceedit +$(package)_config_opts += -no-feature-lcdnumber +$(package)_config_opts += -no-feature-networkdiskcache +$(package)_config_opts += -no-feature-style-windowsmobile +$(package)_config_opts += -no-feature-style-windowsce +$(package)_config_opts += -no-feature-syntaxhighlighter +$(package)_config_opts += -no-feature-textodfwriter +$(package)_config_opts += -no-feature-udpsocket +$(package)_config_opts += -no-feature-undocommand +$(package)_config_opts += -no-feature-undogroup +$(package)_config_opts += -no-feature-undostack +$(package)_config_opts += -no-feature-undoview +$(package)_config_opts += -no-feature-xmlstreamwriter + +# session manager is intrinsically needed for Windows on 5.7.1 +# disable for macOs and linux only. +$(package)_config_opts_darwin = -no-feature-sessionmanager +$(package)_config_opts_linux = -no-feature-sessionmanager + ifneq ($(build_os),darwin) -$(package)_config_opts_darwin = -xplatform macx-clang-linux +$(package)_config_opts_darwin += -xplatform macx-clang-linux $(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK) $(package)_config_opts_darwin += -device-option MAC_SDK_VERSION=$(OSX_SDK_VERSION) $(package)_config_opts_darwin += -device-option CROSS_COMPILE="$(host)-" @@ -90,14 +118,18 @@ $(package)_config_opts_darwin += -device-option MAC_TARGET=$(host) $(package)_config_opts_darwin += -device-option MAC_LD64_VERSION=$(LD64_VERSION) endif -$(package)_config_opts_linux = -qt-xcb +$(package)_config_opts_linux += -qt-xcb $(package)_config_opts_linux += -system-freetype $(package)_config_opts_linux += -no-sm $(package)_config_opts_linux += -fontconfig $(package)_config_opts_linux += -no-opengl $(package)_config_opts_arm_linux = -platform linux-g++ -xplatform $(host) $(package)_config_opts_i686_linux = -xplatform linux-g++-32 -$(package)_config_opts_mingw32 = -no-opengl -xplatform win32-g++ -device-option CROSS_COMPILE="$(host)-" + +$(package)_config_opts_mingw32 = -no-opengl +$(package)_config_opts_mingw32 += -xplatform win32-g++ +$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-" + $(package)_build_env = QT_RCC_TEST=1 endef