mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 18:09:47 +01:00
430f319f73
I need to try and patch around Qts buildsystem to keep #21778 moving along (the issue being that even when you tell Qt to build using Clang on Linux, it still calls out to GCC, breaking our ability to have a macOS release build env that doesn't have a GCC toolchain installed, and thus no ld binary). Before trying to patch Qt any further, update to the latest LTS release, and update the current patch set.
290 lines
14 KiB
Makefile
290 lines
14 KiB
Makefile
package=qt
|
|
$(package)_version=5.15.13
|
|
$(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(package)_version)/submodules
|
|
$(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz
|
|
$(package)_file_name=qtbase-$($(package)_suffix)
|
|
$(package)_sha256_hash=4cca51dcc1f22ceeee6b3e33cd1c3a60b14e85e24644dca3af89a2c2989ab809
|
|
$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm
|
|
$(package)_qt_libs=corelib network widgets gui plugins testlib
|
|
$(package)_linguist_tools = lrelease lupdate lconvert
|
|
$(package)_patches = qt.pro
|
|
$(package)_patches += qttools_src.pro
|
|
$(package)_patches += mac-qmake.conf
|
|
$(package)_patches += fix_qt_pkgconfig.patch
|
|
$(package)_patches += no-xlib.patch
|
|
$(package)_patches += fix_android_jni_static.patch
|
|
$(package)_patches += dont_hardcode_pwd.patch
|
|
$(package)_patches += qtbase-moc-ignore-gcc-macro.patch
|
|
$(package)_patches += rcc_hardcode_timestamp.patch
|
|
$(package)_patches += duplicate_lcqpafonts.patch
|
|
$(package)_patches += guix_cross_lib_path.patch
|
|
$(package)_patches += fix-macos-linker.patch
|
|
$(package)_patches += memory_resource.patch
|
|
$(package)_patches += utc_from_string_no_optimize.patch
|
|
$(package)_patches += windows_lto.patch
|
|
|
|
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
|
|
$(package)_qttranslations_sha256_hash=24d4c58bc2a40c0f44f59ee64af4192c7d0038c1e45af61646cfc5b65058f271
|
|
|
|
$(package)_qttools_file_name=qttools-$($(package)_suffix)
|
|
$(package)_qttools_sha256_hash=57c9794c572c4e02871f2e7581525752b0cf85ea16cfab23a4ac9ba7b39a5d34
|
|
|
|
$(package)_extra_sources = $($(package)_qttranslations_file_name)
|
|
$(package)_extra_sources += $($(package)_qttools_file_name)
|
|
|
|
define $(package)_set_vars
|
|
$(package)_config_env = QT_MAC_SDK_NO_VERSION_CHECK=1
|
|
$(package)_config_opts_release = -release
|
|
$(package)_config_opts_release += -silent
|
|
$(package)_config_opts_debug = -debug
|
|
$(package)_config_opts_debug += -optimized-tools
|
|
$(package)_config_opts += -bindir $(build_prefix)/bin
|
|
$(package)_config_opts += -c++std c++2a
|
|
$(package)_config_opts += -confirm-license
|
|
$(package)_config_opts += -hostprefix $(build_prefix)
|
|
$(package)_config_opts += -no-compile-examples
|
|
$(package)_config_opts += -no-cups
|
|
$(package)_config_opts += -no-egl
|
|
$(package)_config_opts += -no-eglfs
|
|
$(package)_config_opts += -no-evdev
|
|
$(package)_config_opts += -no-gif
|
|
$(package)_config_opts += -no-glib
|
|
$(package)_config_opts += -no-icu
|
|
$(package)_config_opts += -no-ico
|
|
$(package)_config_opts += -no-iconv
|
|
$(package)_config_opts += -no-kms
|
|
$(package)_config_opts += -no-linuxfb
|
|
$(package)_config_opts += -no-libjpeg
|
|
$(package)_config_opts += -no-libproxy
|
|
$(package)_config_opts += -no-libudev
|
|
$(package)_config_opts += -no-mimetype-database
|
|
$(package)_config_opts += -no-mtdev
|
|
$(package)_config_opts += -no-openssl
|
|
$(package)_config_opts += -no-openvg
|
|
$(package)_config_opts += -no-reduce-relocations
|
|
$(package)_config_opts += -no-schannel
|
|
$(package)_config_opts += -no-sctp
|
|
$(package)_config_opts += -no-securetransport
|
|
$(package)_config_opts += -no-sql-db2
|
|
$(package)_config_opts += -no-sql-ibase
|
|
$(package)_config_opts += -no-sql-oci
|
|
$(package)_config_opts += -no-sql-tds
|
|
$(package)_config_opts += -no-sql-mysql
|
|
$(package)_config_opts += -no-sql-odbc
|
|
$(package)_config_opts += -no-sql-psql
|
|
$(package)_config_opts += -no-sql-sqlite
|
|
$(package)_config_opts += -no-sql-sqlite2
|
|
$(package)_config_opts += -no-system-proxies
|
|
$(package)_config_opts += -no-use-gold-linker
|
|
$(package)_config_opts += -no-zstd
|
|
$(package)_config_opts += -nomake examples
|
|
$(package)_config_opts += -nomake tests
|
|
$(package)_config_opts += -nomake tools
|
|
$(package)_config_opts += -opensource
|
|
$(package)_config_opts += -pkg-config
|
|
$(package)_config_opts += -prefix $(host_prefix)
|
|
$(package)_config_opts += -qt-libpng
|
|
$(package)_config_opts += -qt-pcre
|
|
$(package)_config_opts += -qt-harfbuzz
|
|
$(package)_config_opts += -qt-zlib
|
|
$(package)_config_opts += -static
|
|
$(package)_config_opts += -v
|
|
$(package)_config_opts += -no-feature-bearermanagement
|
|
$(package)_config_opts += -no-feature-colordialog
|
|
$(package)_config_opts += -no-feature-commandlineparser
|
|
$(package)_config_opts += -no-feature-concurrent
|
|
$(package)_config_opts += -no-feature-dial
|
|
$(package)_config_opts += -no-feature-fontcombobox
|
|
$(package)_config_opts += -no-feature-ftp
|
|
$(package)_config_opts += -no-feature-http
|
|
$(package)_config_opts += -no-feature-image_heuristic_mask
|
|
$(package)_config_opts += -no-feature-keysequenceedit
|
|
$(package)_config_opts += -no-feature-lcdnumber
|
|
$(package)_config_opts += -no-feature-networkdiskcache
|
|
$(package)_config_opts += -no-feature-networkproxy
|
|
$(package)_config_opts += -no-feature-pdf
|
|
$(package)_config_opts += -no-feature-printdialog
|
|
$(package)_config_opts += -no-feature-printer
|
|
$(package)_config_opts += -no-feature-printpreviewdialog
|
|
$(package)_config_opts += -no-feature-printpreviewwidget
|
|
$(package)_config_opts += -no-feature-sessionmanager
|
|
$(package)_config_opts += -no-feature-socks5
|
|
$(package)_config_opts += -no-feature-sql
|
|
$(package)_config_opts += -no-feature-sqlmodel
|
|
$(package)_config_opts += -no-feature-statemachine
|
|
$(package)_config_opts += -no-feature-syntaxhighlighter
|
|
$(package)_config_opts += -no-feature-textbrowser
|
|
$(package)_config_opts += -no-feature-textmarkdownwriter
|
|
$(package)_config_opts += -no-feature-textodfwriter
|
|
$(package)_config_opts += -no-feature-topleveldomain
|
|
$(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-vnc
|
|
$(package)_config_opts += -no-feature-wizard
|
|
$(package)_config_opts += -no-feature-xml
|
|
|
|
$(package)_config_opts_darwin = -no-dbus
|
|
$(package)_config_opts_darwin += -no-opengl
|
|
$(package)_config_opts_darwin += -pch
|
|
$(package)_config_opts_darwin += -no-feature-corewlan
|
|
$(package)_config_opts_darwin += -no-freetype
|
|
$(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION)
|
|
|
|
ifneq ($(build_os),darwin)
|
|
$(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)-"
|
|
$(package)_config_opts_darwin += -device-option MAC_TARGET=$(host)
|
|
$(package)_config_opts_darwin += -device-option XCODE_VERSION=$(XCODE_VERSION)
|
|
endif
|
|
|
|
ifneq ($(build_arch),$(host_arch))
|
|
$(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=arm64
|
|
$(package)_config_opts_x86_64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64
|
|
endif
|
|
|
|
$(package)_config_opts_linux = -xcb
|
|
$(package)_config_opts_linux += -no-xcb-xlib
|
|
$(package)_config_opts_linux += -no-feature-xlib
|
|
$(package)_config_opts_linux += -system-freetype
|
|
$(package)_config_opts_linux += -fontconfig
|
|
$(package)_config_opts_linux += -no-opengl
|
|
$(package)_config_opts_linux += -no-feature-vulkan
|
|
$(package)_config_opts_linux += -dbus-runtime
|
|
ifneq ($(LTO),)
|
|
$(package)_config_opts_linux += -ltcg
|
|
endif
|
|
|
|
ifneq (,$(findstring clang,$($(package)_cxx)))
|
|
ifneq (,$(findstring -stdlib=libc++,$($(package)_cxx)))
|
|
$(package)_config_opts_linux += -platform linux-clang-libc++ -xplatform linux-clang-libc++
|
|
else
|
|
$(package)_config_opts_linux += -platform linux-clang -xplatform linux-clang
|
|
endif
|
|
else
|
|
$(package)_config_opts_linux += -platform linux-g++ -xplatform bitcoin-linux-g++
|
|
endif
|
|
|
|
$(package)_config_opts_mingw32 = -no-opengl
|
|
$(package)_config_opts_mingw32 += -no-dbus
|
|
$(package)_config_opts_mingw32 += -no-freetype
|
|
$(package)_config_opts_mingw32 += -xplatform win32-g++
|
|
$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'"
|
|
$(package)_config_opts_mingw32 += "QMAKE_CXX = '$($(package)_cxx)'"
|
|
$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cxxflags) $($(package)_cppflags)'"
|
|
$(package)_config_opts_mingw32 += "QMAKE_LINK = '$($(package)_cxx)'"
|
|
$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'"
|
|
$(package)_config_opts_mingw32 += "QMAKE_LIB = '$($(package)_ar) rc'"
|
|
$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-"
|
|
$(package)_config_opts_mingw32 += -pch
|
|
ifneq ($(LTO),)
|
|
$(package)_config_opts_mingw32 += -ltcg
|
|
endif
|
|
|
|
$(package)_config_opts_android = -xplatform android-clang
|
|
$(package)_config_opts_android += -android-sdk $(ANDROID_SDK)
|
|
$(package)_config_opts_android += -android-ndk $(ANDROID_NDK)
|
|
$(package)_config_opts_android += -android-ndk-platform android-$(ANDROID_API_LEVEL)
|
|
$(package)_config_opts_android += -egl
|
|
$(package)_config_opts_android += -no-dbus
|
|
$(package)_config_opts_android += -opengl es2
|
|
$(package)_config_opts_android += -qt-freetype
|
|
$(package)_config_opts_android += -no-fontconfig
|
|
$(package)_config_opts_android += -L $(host_prefix)/lib
|
|
$(package)_config_opts_android += -I $(host_prefix)/include
|
|
$(package)_config_opts_android += -pch
|
|
$(package)_config_opts_android += -no-feature-vulkan
|
|
|
|
$(package)_config_opts_aarch64_android += -android-arch arm64-v8a
|
|
$(package)_config_opts_armv7a_android += -android-arch armeabi-v7a
|
|
$(package)_config_opts_x86_64_android += -android-arch x86_64
|
|
endef
|
|
|
|
define $(package)_fetch_cmds
|
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
|
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttranslations_file_name),$($(package)_qttranslations_file_name),$($(package)_qttranslations_sha256_hash)) && \
|
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash))
|
|
endef
|
|
|
|
define $(package)_extract_cmds
|
|
mkdir -p $($(package)_extract_dir) && \
|
|
echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
|
echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
|
echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
|
$(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
|
mkdir qtbase && \
|
|
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \
|
|
mkdir qttranslations && \
|
|
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \
|
|
mkdir qttools && \
|
|
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools
|
|
endef
|
|
|
|
# Preprocessing steps work as follows:
|
|
#
|
|
# 1. Apply our patches to the extracted source. See each patch for more info.
|
|
#
|
|
# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf.
|
|
#
|
|
# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named
|
|
# bitcoin-linux-g++, replace tool names with $($($(package)_type)_TOOL).
|
|
#
|
|
# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds.
|
|
#
|
|
# 5. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466.
|
|
define $(package)_preprocess_cmds
|
|
cp $($(package)_patch_dir)/qt.pro qt.pro && \
|
|
cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \
|
|
patch -p1 -i $($(package)_patch_dir)/fix-macos-linker.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/memory_resource.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/duplicate_lcqpafonts.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/utc_from_string_no_optimize.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \
|
|
patch -p1 -i $($(package)_patch_dir)/windows_lto.patch && \
|
|
mkdir -p qtbase/mkspecs/macx-clang-linux &&\
|
|
cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\
|
|
cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \
|
|
cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/bitcoin-linux-g++ && \
|
|
sed -i.old "s|arm-linux-gnueabi-gcc|$($($(package)_type)_CC)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \
|
|
sed -i.old "s|arm-linux-gnueabi-g++|$($($(package)_type)_CXX)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \
|
|
sed -i.old "s|arm-linux-gnueabi-ar|$($($(package)_type)_AR)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \
|
|
sed -i.old "s|arm-linux-gnueabi-objcopy|$($($(package)_type)_OBJCOPY)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \
|
|
sed -i.old "s|arm-linux-gnueabi-nm|$($($(package)_type)_NM)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \
|
|
sed -i.old "s|arm-linux-gnueabi-strip|$($($(package)_type)_STRIP)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \
|
|
echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
|
echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
|
echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
|
sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \
|
|
sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf
|
|
endef
|
|
|
|
define $(package)_config_cmds
|
|
cd qtbase && \
|
|
./configure -top-level $($(package)_config_opts)
|
|
endef
|
|
|
|
define $(package)_build_cmds
|
|
$(MAKE)
|
|
endef
|
|
|
|
define $(package)_stage_cmds
|
|
$(MAKE) -C qtbase/src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && \
|
|
$(MAKE) -C qttools/src/linguist INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_linguist_tools))) && \
|
|
$(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets
|
|
endef
|
|
|
|
define $(package)_postprocess_cmds
|
|
rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \
|
|
rm -f lib/lib*.la
|
|
endef
|