From 02dd9914234f56ee257564aa30e47bf07ba6d605 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Fri, 13 Jun 2025 19:39:08 -0400 Subject: [PATCH 01/10] Changes to depends to provide for completely static Gridcoin Linux build --- configure.ac | 263 +++++++++++++++++++----- depends/Makefile | 2 +- depends/hosts/linux.mk | 4 +- depends/packages/boost.mk | 3 +- depends/packages/curl.mk | 7 +- depends/packages/expat.mk | 3 +- depends/packages/fontconfig.mk | 4 +- depends/packages/freetype.mk | 2 +- depends/packages/harfbuzz.mk | 36 ++++ depends/packages/libICE.mk | 3 +- depends/packages/libSM.mk | 3 +- depends/packages/libXau.mk | 4 +- depends/packages/libevent.mk | 3 +- depends/packages/libpng.mk | 31 +++ depends/packages/libxcb.mk | 12 +- depends/packages/libxcb_util.mk | 3 +- depends/packages/libxcb_util_image.mk | 4 +- depends/packages/libxcb_util_keysyms.mk | 3 +- depends/packages/libxcb_util_render.mk | 3 +- depends/packages/libxcb_util_wm.mk | 3 +- depends/packages/libxkbcommon.mk | 8 +- depends/packages/packages.mk | 2 +- depends/packages/pcre2.mk | 31 +++ depends/packages/qt.mk | 15 +- depends/packages/util-macros.mk | 28 +++ depends/packages/xcb_proto.mk | 4 +- depends/packages/xkeyboard-config.mk | 30 +++ depends/packages/zlib.mk | 2 +- src/Makefile.am | 46 ++++- src/Makefile.qt.include | 30 ++- src/Makefile.qttest.include | 28 ++- src/Makefile.test.include | 32 ++- 32 files changed, 545 insertions(+), 107 deletions(-) create mode 100644 depends/packages/harfbuzz.mk create mode 100644 depends/packages/libpng.mk create mode 100644 depends/packages/pcre2.mk create mode 100644 depends/packages/util-macros.mk create mode 100644 depends/packages/xkeyboard-config.mk diff --git a/configure.ac b/configure.ac index 5e89d70187..465c98b3ce 100755 --- a/configure.ac +++ b/configure.ac @@ -14,6 +14,150 @@ AC_CONFIG_HEADERS([src/config/gridcoin-config.h]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([build-aux/m4]) +# This static build block must be right after AC_INIT to preempt all other library checks. +# --- Block for conditional static linking --- +AC_ARG_WITH([static-libs], + [AS_HELP_STRING([--with-static-libs], + [Link against static libraries built by the depends system. (Default: no)])], + [use_static_libs=$withval], + [use_static_libs=no]) + +if test "x$use_static_libs" = "xyes"; then + AC_MSG_CHECKING([for static linking via --with-static-libs]) + + if test "x$CONFIG_SITE" = "x"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([--with-static-libs requires the CONFIG_SITE environment variable to be set.]) + fi + AC_MSG_RESULT([yes]) + + depends_prefix=$(dirname "$CONFIG_SITE") + depends_prefix=$(dirname "$depends_prefix") + + CPPFLAGS="-I$depends_prefix/include -DQT_STATICPLUGIN -DQT_QPA_PLATFORM_XCB $CPPFLAGS" + LDFLAGS="-L$depends_prefix/lib $LDFLAGS -static-libstdc++" + + # --- Explicitly define ALL dependency variables --- + BOOST_LIBS="$depends_prefix/lib/libboost_filesystem-mt-x64.a $depends_prefix/lib/libboost_thread-mt-x64.a $depends_prefix/lib/libboost_iostreams-mt-x64.a $depends_prefix/lib/libboost_system-mt-x64.a $depends_prefix/lib/libboost_atomic-mt-x64.a $depends_prefix/lib/libboost_prg_exec_monitor-mt-x64.a $depends_prefix/lib/libboost_test_exec_monitor-mt-x64.a" + BOOST_UNIT_TEST_FRAMEWORK_LIB="$depends_prefix/lib/libboost_unit_test_framework-mt-x64.a" + SSL_LIBS="$depends_prefix/lib/libssl.a" + CRYPTO_LIBS="$depends_prefix/lib/libcrypto.a -ldl" + EVENT_LIBS="$depends_prefix/lib/libevent.a" + MINIUPNPC_LIBS="$depends_prefix/lib/libminiupnpc.a" + LIBZIP_LIBS="$depends_prefix/lib/libzip.a" + CURL_LIBS="$depends_prefix/lib/libcurl.a" + BDB_LIBS="$depends_prefix/lib/libdb_cxx.a" + ZLIB_LIBS="$depends_prefix/lib/libz.a" + QR_LIBS="$depends_prefix/lib/libqrencode.a" + EVENT_PTHREADS_LIBS="-lpthread" + + # --- Qt and its platform/plugin dependencies --- + FREETYPE_LIBS="$depends_prefix/lib/libfreetype.a" + FONTCONFIG_LIBS="$depends_prefix/lib/libfontconfig.a $depends_prefix/lib/libexpat.a" + XCB_LIBS="$depends_prefix/lib/libxcb.a $depends_prefix/lib/libXau.a" # Base XCB libs + XKBCOMMON_LIBS="$depends_prefix/lib/libxkbcommon.a" + QT_TEST_LIBS="$depends_prefix/lib/libQt5Test.a" + + # --- Statically define Qt and ALL its dependencies --- + # This section replicates the logic of BITCOIN_QT_CONFIGURE for a static build. + have_qt5=yes + bitcoin_enable_qt=yes + bitcoin_enable_qt_test=yes + bitcoin_enable_qt_dbus=yes + have_dbus=yes + have_qrencode=yes + use_qr=yes + MOC=$depends_prefix/native/bin/moc + RCC=$depends_prefix/native/bin/rcc + UIC=$depends_prefix/native/bin/uic + LRELEASE=$depends_prefix/native/bin/lrelease + QT_PIE_FLAGS="$PIE_FLAGS" + + QT_LIBS="\ + $depends_prefix/plugins/iconengines/libqsvgicon.a \ + $depends_prefix/plugins/imageformats/libqsvg.a \ + $depends_prefix/plugins/platforms/libqxcb.a \ + $depends_prefix/lib/libQt5XcbQpa.a \ + $depends_prefix/lib/libQt5AccessibilitySupport.a \ + $depends_prefix/lib/libQt5DeviceDiscoverySupport.a \ + $depends_prefix/lib/libQt5EdidSupport.a \ + $depends_prefix/lib/libQt5EventDispatcherSupport.a \ + $depends_prefix/lib/libQt5FbSupport.a \ + $depends_prefix/lib/libQt5FontDatabaseSupport.a \ + $depends_prefix/lib/libQt5InputSupport.a \ + $depends_prefix/lib/libQt5ServiceSupport.a \ + $depends_prefix/lib/libQt5ThemeSupport.a \ + $depends_prefix/lib/libQt5Svg.a \ + $depends_prefix/lib/libQt5Widgets.a \ + $depends_prefix/lib/libQt5Network.a \ + $depends_prefix/lib/libQt5DBus.a \ + $depends_prefix/lib/libQt5Gui.a \ + $depends_prefix/lib/libQt5Concurrent.a \ + $depends_prefix/lib/libQt5Core.a \ + $depends_prefix/lib/libQt5XkbCommonSupport.a \ + $depends_prefix/lib/libxkbcommon-x11.a \ + $XKBCOMMON_LIBS \ + $FONTCONFIG_LIBS $FREETYPE_LIBS \ + $depends_prefix/lib/libxcb-dbe.a \ + $depends_prefix/lib/libxcb-ewmh.a \ + $depends_prefix/lib/libxcb-icccm.a \ + $depends_prefix/lib/libxcb-image.a \ + $depends_prefix/lib/libxcb-keysyms.a \ + $depends_prefix/lib/libxcb-render-util.a \ + $depends_prefix/lib/libxcb-render.a \ + $depends_prefix/lib/libxcb-randr.a \ + $depends_prefix/lib/libxcb-shape.a \ + $depends_prefix/lib/libxcb-shm.a \ + $depends_prefix/lib/libxcb-sync.a \ + $depends_prefix/lib/libxcb-util.a \ + $depends_prefix/lib/libxcb-xfixes.a \ + $depends_prefix/lib/libxcb-xinerama.a \ + $depends_prefix/lib/libxcb-xkb.a \ + $depends_prefix/lib/libxcb-xinput.a \ + $XCB_LIBS \ + $depends_prefix/lib/libharfbuzz-subset.a \ + $depends_prefix/lib/libharfbuzz.a \ + $depends_prefix/lib/libpcre2-8.a \ + $depends_prefix/lib/libpcre2-16.a \ + $depends_prefix/lib/libpcre2-posix.a \ + $depends_prefix/lib/libpng16.a" + + # Put everything in QT_LIBS because the autotools makefiles are not properly using the other QT variables. + QT_LIBS="-L$depends_prefix/lib $QT_TEST_LIBS $QT_LIBS" + + # Define Qt INCLUDES and LIBS to ensure headers are found and libraries are linked. + QT_INCLUDES="-I$depends_prefix/include \ + -I$depends_prefix/include/QtCore \ + -I$depends_prefix/include/QtGui \ + -I$depends_prefix/include/QtWidgets \ + -I$depends_prefix/include/QtNetwork \ + -I$depends_prefix/include/QtConcurrent \ + -I$depends_prefix/include/QtAccessibilitySupport \ + -I$depends_prefix/include/QtDBus \ + -I$depends_prefix/include/QtDeviceDiscoverySupport \ + -I$depends_prefix/include/QtEdidSupport \ + -I$depends_prefix/include/QtEventDispatcherSupport \ + -I$depends_prefix/include/QtFbSupport \ + -I$depends_prefix/include/QtFontDatabaseSupport \ + -I$depends_prefix/include/qtharfbuzz \ + -I$depends_prefix/include/QtInputSupport \ + -I$depends_prefix/include/qtlibpng \ + -I$depends_prefix/include/QtPlatformHeaders \ + -I$depends_prefix/include/QtServiceSupport \ + -I$depends_prefix/include/QtSvg \ + -I$depends_prefix/include/QtThemeSupport \ + -I$depends_prefix/include/QtXkbCommonSupport" + + QT_TEST_INCLUDES="-I$depends_prefix/include/QtTest" + QT_DBUS_INCLUDES="-I$depends_prefix/include/QtDBus" + + # Prevent configure from trying to find them again + have_ssl=yes + have_event=yes + have_boost=yes +fi +# --- End of block --- + m4_ifndef([PKG_PROG_PKG_CONFIG], [m4_fatal([PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh])]) PKG_PROG_PKG_CONFIG if test "$PKG_CONFIG" = ""; then @@ -1029,11 +1173,13 @@ fi dnl Check for libminiupnpc (optional) if test "$use_upnp" != "no"; then + if test "x$use_static_libs" != "xyes"; then AC_CHECK_HEADERS( [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h], [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])], [have_miniupnpc=no] ) + fi dnl The minimum supported miniUPnPc API version is set to 10. This keeps compatibility dnl with Ubuntu 16.04 LTS and Debian 8 libminiupnpc-dev packages. if test "$have_miniupnpc" != "no"; then @@ -1056,11 +1202,12 @@ if test "$have_miniupnpc" != "no"; then fi fi +if test "x$use_static_libs" != "xyes"; then + BITCOIN_QT_INIT + dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus -BITCOIN_QT_INIT - -dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus -BITCOIN_QT_CONFIGURE([5.9.5]) + BITCOIN_QT_CONFIGURE([5.9.5]) +fi if test "$build_bitcoin_utils$build_gridcoinresearchd$bitcoin_enable_qt$use_tests$use_bench" = "nonononono"; then use_boost=no @@ -1069,34 +1216,35 @@ else fi if test "$use_boost" = "yes"; then - -dnl Minimum required Boost version -define(MINIMUM_REQUIRED_BOOST, 1.60.0) - -dnl Check for Boost libs -AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) -AX_BOOST_SYSTEM -AX_BOOST_FILESYSTEM -AX_BOOST_ZLIB -AX_BOOST_IOSTREAMS - -dnl Prevent use of std::unary_function, which was removed in C++17, -dnl and will generate warnings with newer compilers for Boost -dnl older than 1.80. -dnl See: https://github.com/boostorg/config/pull/430. -AX_CHECK_PREPROC_FLAG([-DBOOST_NO_CXX98_FUNCTION_BASE], [BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_CXX98_FUNCTION_BASE"], [], [$CXXFLAG_WERROR], - [AC_LANG_PROGRAM([[#include ]])]) - -dnl AX_BOOST_THREAD check also triggers the same issue, so it has to be checked after -dnl setting -DBOOST_NO_CXX98_FUNCTION_BASE. -AX_BOOST_THREAD - -dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic -dnl counter implementations. In 1.63 and later the std::atomic approach is default. -m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro -BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS" - -BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_IOSTREAMS_LIB $BOOST_THREAD_LIB $BOOST_ZLIB_LIB" + if test "x$use_static_libs" != "xyes"; then + dnl Minimum required Boost version + define(MINIMUM_REQUIRED_BOOST, 1.60.0) + + dnl Check for Boost libs + AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) + AX_BOOST_SYSTEM + AX_BOOST_FILESYSTEM + AX_BOOST_ZLIB + AX_BOOST_IOSTREAMS + + dnl Prevent use of std::unary_function, which was removed in C++17, + dnl and will generate warnings with newer compilers for Boost + dnl older than 1.80. + dnl See: https://github.com/boostorg/config/pull/430. + AX_CHECK_PREPROC_FLAG([-DBOOST_NO_CXX98_FUNCTION_BASE], [BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_CXX98_FUNCTION_BASE"], [], [$CXXFLAG_WERROR], + [AC_LANG_PROGRAM([[#include ]])]) + + dnl AX_BOOST_THREAD check also triggers the same issue, so it has to be checked after + dnl setting -DBOOST_NO_CXX98_FUNCTION_BASE. + AX_BOOST_THREAD + + dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic + dnl counter implementations. In 1.63 and later the std::atomic approach is default. + m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro + BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS" + + BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_IOSTREAMS_LIB $BOOST_THREAD_LIB $BOOST_ZLIB_LIB" + fi fi if test "$use_reduce_exports" = "yes"; then @@ -1112,28 +1260,30 @@ if test "$use_tests" = "yes"; then if test "$use_boost" = "yes"; then - - AX_BOOST_UNIT_TEST_FRAMEWORK - - dnl Determine if -DBOOST_TEST_DYN_LINK is needed - AC_MSG_CHECKING([for dynamic linked boost test]) - TEMP_LIBS="$LIBS" - LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB" - TEMP_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - AC_LINK_IFELSE([AC_LANG_SOURCE([ - #define BOOST_TEST_DYN_LINK - #define BOOST_TEST_MAIN - #include - - ])], - [AC_MSG_RESULT(yes)] - [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], - [AC_MSG_RESULT(no)]) - LIBS="$TEMP_LIBS" - CPPFLAGS="$TEMP_CPPFLAGS" - + if test "x$use_static_libs" != "xyes"; then + + AX_BOOST_UNIT_TEST_FRAMEWORK + + dnl Determine if -DBOOST_TEST_DYN_LINK is needed + AC_MSG_CHECKING([for dynamic linked boost test]) + TEMP_LIBS="$LIBS" + LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB" + TEMP_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #define BOOST_TEST_DYN_LINK + #define BOOST_TEST_MAIN + #include + + ])], + [AC_MSG_RESULT(yes)] + [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], + [AC_MSG_RESULT(no)]) + LIBS="$TEMP_LIBS" + CPPFLAGS="$TEMP_CPPFLAGS" + fi fi + fi PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)]) @@ -1389,6 +1539,13 @@ AC_SUBST(CRYPTO_LIBS) AC_SUBST(SSL_LIBS) AC_SUBST(CURL_LIBS) AC_SUBST(LIBZIP_LIBS) +AC_SUBST(ZLIB_LIBS) +AC_SUBST(QT_TEST_LIBS) +AC_SUBST(QT_LIBS) +AC_SUBST(QT_INCLUDES) +AC_SUBST(QT_TEST_INCLUDES) +AC_SUBST(QT_DBUS_INCLUDES) +AC_SUBST(QT_PIE_FLAGS) AC_SUBST(EVENT_LIBS) AC_SUBST(EVENT_PTHREADS_LIBS) AC_SUBST(ZMQ_LIBS) diff --git a/depends/Makefile b/depends/Makefile index 9eb7864d90..326004fe1d 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -159,7 +159,7 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_ -e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ -e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ -e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ - -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ + -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS)) -static-libstdc++|' \ -e 's|@no_qt@|$(NO_QT)|' \ -e 's|@no_wallet@|$(NO_WALLET)|' \ -e 's|@no_upnp@|$(NO_UPNP)|' \ diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index 5b3427f45d..37fcb5c7d5 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -1,10 +1,10 @@ linux_CFLAGS=-pipe -std=$(C_STANDARD) linux_CXXFLAGS=-pipe -std=$(CXX_STANDARD) -linux_release_CFLAGS=-O2 +linux_release_CFLAGS=-O2 -fPIC linux_release_CXXFLAGS=$(linux_release_CFLAGS) -linux_debug_CFLAGS=-O1 +linux_debug_CFLAGS=-O1 -fPIC linux_debug_CXXFLAGS=$(linux_debug_CFLAGS) linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index f7299a242d..95f4f68988 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -34,7 +34,8 @@ $(package)_cxxflags_android=-fPIC endef define $(package)_preprocess_cmds - echo "using $($(package)_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$($(package)_archiver_$(host_os))\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam + echo "using $($(package)_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$($(package)_archiver_$(host_os))\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam && \ + echo "using zlib : 1.2.13 : \"$(host_prefix)/lib\" \"$(host_prefix)/include\" ;" >> user-config.jam endef define $(package)_config_cmds diff --git a/depends/packages/curl.mk b/depends/packages/curl.mk index f492df5c03..5898e061ac 100644 --- a/depends/packages/curl.mk +++ b/depends/packages/curl.mk @@ -7,11 +7,14 @@ $(package)_sha256_hash=cdb38b72e36bc5d33d5b8810f8018ece1baa29a8f215b4495e495ded8 $(package)_dependencies=openssl define $(package)_set_vars - $(package)_config_opts=--disable-shared + $(package)_config_opts= --disable-shared $(package)_config_opts+= --enable-static + $(package)_config_opts+= --disable-ldap + $(package)_config_opts+= --disable-ldaps + $(package)_config_opts+= --without-zstd $(package)_config_opts+= --without-brotli $(package)_config_opts+= --libdir=$($($(package)_type)_prefix)/lib - $(package)_config_opts_release+=--disable-debug-mode + $(package)_config_opts_release+=--disable-debug $(package)_config_opts_linux+=--with-pic -with-openssl # Disable OpenSSL for Windows and use native SSL stack (SSPI/Schannel): $(package)_config_opts_mingw32+= --with-schannel diff --git a/depends/packages/expat.mk b/depends/packages/expat.mk index eca30acdd2..2233e10c0a 100644 --- a/depends/packages/expat.mk +++ b/depends/packages/expat.mk @@ -6,8 +6,9 @@ $(package)_file_name=$(package)-$($(package)_version).tar.xz $(package)_sha256_hash=f79b8f904b749e3e0d20afeadecf8249c55b2e32d4ebb089ae378df479dcaf25 define $(package)_set_vars - $(package)_config_opts=--disable-static --without-docbook --without-xmlwf + $(package)_config_opts=--disable-shared --enable-static --without-docbook --without-xmlwf $(package)_config_opts+=--libdir=$($($(package)_type)_prefix)/lib + $(package)_cflags+=-fPIC $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) $(package)_cflags_aarch64_linux = $(GCCFLAGS) $(package)_cxxflags_arm_linux = $(GCCFLAGS) diff --git a/depends/packages/fontconfig.mk b/depends/packages/fontconfig.mk index 444acfe36d..eed9cf4c63 100644 --- a/depends/packages/fontconfig.mk +++ b/depends/packages/fontconfig.mk @@ -7,9 +7,11 @@ $(package)_dependencies=freetype expat $(package)_patches=gperf_header_regen.patch define $(package)_set_vars - $(package)_config_opts=--disable-docs --disable-static --disable-libxml2 --disable-iconv + $(package)_config_opts=--disable-docs --disable-shared --enable-static --disable-libxml2 --disable-iconv $(package)_config_opts += --disable-dependency-tracking --enable-option-checking + $(package)_cflags+=-fPIC $(package)_cflags += -Wno-implicit-function-declaration + $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_preprocess_cmds diff --git a/depends/packages/freetype.mk b/depends/packages/freetype.mk index d3fda11a5d..e0169037a9 100644 --- a/depends/packages/freetype.mk +++ b/depends/packages/freetype.mk @@ -6,7 +6,7 @@ $(package)_file_name=$(package)-$($(package)_version).tar.xz $(package)_sha256_hash=8bee39bd3968c4804b70614a0a3ad597299ad0e824bc8aad5ce8aaf48067bde7 define $(package)_set_vars - $(package)_config_opts=--without-zlib --without-png --without-harfbuzz --without-bzip2 --disable-static --without-brotli + $(package)_config_opts=--without-zlib --without-png --without-harfbuzz --without-bzip2 --disable-shared --enable-static --without-brotli $(package)_config_opts+=--libdir=$($($(package)_type)_prefix)/lib $(package)_config_opts_linux=--with-pic $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) diff --git a/depends/packages/harfbuzz.mk b/depends/packages/harfbuzz.mk new file mode 100644 index 0000000000..004045fec3 --- /dev/null +++ b/depends/packages/harfbuzz.mk @@ -0,0 +1,36 @@ +package=harfbuzz +$(package)_version=11.2.1 +$(package)_download_path=https://github.com/harfbuzz/harfbuzz/releases/download/11.2.1 +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=093714c8548a285094685f0bdc999e202d666b59eeb3df2ff921ab68b8336a49 +$(package)_dependencies= + +define $(package)_set_vars +#$(package)_config_opts=-DENABLE_COMMONCRYPTO=OFF +#$(package)_config_opts+=-DENABLE_GNUTLS=OFF +#$(package)_config_opts+=-DENABLE_MBEDTLS=OFF +#$(package)_config_opts+=-DENABLE_OPENSSL=OFF +#$(package)_config_opts+=-DENABLE_WINDOWS_CRYPTO=OFF +#$(package)_config_opts+=-DENABLE_BZIP2=OFF +#$(package)_config_opts+=-DENABLE_LZMA=OFF +#$(package)_config_opts+=-DENABLE_ZSTD=OFF +#$(package)_config_opts+=-DENABLE_FDOPEN=OFF +#$(package)_config_opts+=-DBUILD_TOOLS=OFF +#$(package)_config_opts+=-DBUILD_REGRESS=OFF +#$(package)_config_opts+=-DBUILD_OSSFUZZ=OFF +#$(package)_config_opts+=-DBUILD_EXAMPLES=OFF +#$(package)_config_opts+=-DBUILD_DOC=OFF +$(package)_config_opts_mingw32+=-DCMAKE_SYSTEM_IGNORE_PATH=/usr/include +endef + +define $(package)_config_cmds + mkdir ./build && $($(package)_cmake) -S . -B ./build -DBUILD_SHARED_LIBS=OFF -DCMAKE_LIBRARY_PATH=$(host_prefix) +endef + +define $(package)_build_cmds + $(MAKE) -C ./build +endef + +define $(package)_stage_cmds + $(MAKE) -C ./build DESTDIR=$($(package)_staging_dir) install -j1 +endef diff --git a/depends/packages/libICE.mk b/depends/packages/libICE.mk index 0759b1084b..38771a4dcf 100644 --- a/depends/packages/libICE.mk +++ b/depends/packages/libICE.mk @@ -7,12 +7,13 @@ $(package)_sha256_hash=8f7032f2c1c64352b5423f6b48a8ebdc339cc63064af34d66a6c9aa79 $(package)_dependencies=xtrans xproto define $(package)_set_vars - $(package)_config_opts=--disable-static --disable-docs --disable-specs --without-xsltproc + $(package)_config_opts=--disable-shared --enable-static --disable-docs --disable-specs --without-xsltproc $(package)_config_opts_linux=--with-pic $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) $(package)_cflags_aarch64_linux = $(GCCFLAGS) $(package)_cxxflags_arm_linux = $(GCCFLAGS) $(package)_cflags_arm_linux = $(GCCFLAGS) + $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_config_cmds diff --git a/depends/packages/libSM.mk b/depends/packages/libSM.mk index 124aa94abc..da2dc760df 100644 --- a/depends/packages/libSM.mk +++ b/depends/packages/libSM.mk @@ -7,12 +7,13 @@ $(package)_sha256_hash=0baca8c9f5d934450a70896c4ad38d06475521255ca63b717a6510fdb $(package)_dependencies=xtrans xproto libICE define $(package)_set_vars - $(package)_config_opts=--without-libuuid --without-xsltproc --disable-docs --disable-static + $(package)_config_opts=--without-libuuid --without-xsltproc --disable-docs --disable-shared --enable-static $(package)_config_opts_linux=--with-pic $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) $(package)_cflags_aarch64_linux = $(GCCFLAGS) $(package)_cxxflags_arm_linux = $(GCCFLAGS) $(package)_cflags_arm_linux = $(GCCFLAGS) + $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_config_cmds diff --git a/depends/packages/libXau.mk b/depends/packages/libXau.mk index f8924b8189..ff4923158f 100644 --- a/depends/packages/libXau.mk +++ b/depends/packages/libXau.mk @@ -7,13 +7,13 @@ $(package)_sha256_hash=ccf8cbf0dbf676faa2ea0a6d64bcc3b6746064722b606c8c52917ed00 $(package)_dependencies=xproto define $(package)_set_vars - $(package)_config_opts=--disable-shared --disable-lint-library --without-lint - $(package)_config_opts+=--libdir=$($($(package)_type)_prefix)/lib + $(package)_config_opts=--disable-shared --enable-static --disable-lint-library --without-lint $(package)_config_opts_linux=--with-pic $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) $(package)_cflags_aarch64_linux = $(GCCFLAGS) $(package)_cxxflags_arm_linux = $(GCCFLAGS) $(package)_cflags_arm_linux = $(GCCFLAGS) + $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_config_cmds diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk index 335d309801..e4da8162a7 100644 --- a/depends/packages/libevent.mk +++ b/depends/packages/libevent.mk @@ -10,9 +10,10 @@ define $(package)_preprocess_cmds endef define $(package)_set_vars - $(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples + $(package)_config_opts=--disable-shared --enable-static --disable-openssl --disable-libevent-regress --disable-samples $(package)_config_opts_release=--disable-debug-mode $(package)_config_opts_linux=--with-pic + $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) $(package)_cflags_aarch64_linux = $(GCCFLAGS) $(package)_cxxflags_arm_linux = $(GCCFLAGS) diff --git a/depends/packages/libpng.mk b/depends/packages/libpng.mk new file mode 100644 index 0000000000..4b6525c945 --- /dev/null +++ b/depends/packages/libpng.mk @@ -0,0 +1,31 @@ +package=libpng +$(package)_version=1.6.48 +$(package)_download_path=https://download.sourceforge.net/libpng +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=46fd06ff37db1db64c0dc288d78a3f5efd23ad9ac41561193f983e20937ece03 +$(package)_dependencies= + +define $(package)_set_vars +$(package)_config_opts = --enable-option-checking --disable-dependency-tracking +$(package)_config_opts += --disable-shared --enable-static --disable-docs +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib +$(package)_cflags+=-fPIC +$(package)_cflags += -Wno-error=array-bounds +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef + diff --git a/depends/packages/libxcb.mk b/depends/packages/libxcb.mk index 8bb938e986..51b0e77360 100644 --- a/depends/packages/libxcb.mk +++ b/depends/packages/libxcb.mk @@ -1,13 +1,13 @@ package=libxcb GCCFLAGS?= -$(package)_version=1.14 +$(package)_version=1.17.0 $(package)_download_path=https://xcb.freedesktop.org/dist $(package)_file_name=$(package)-$($(package)_version).tar.xz -$(package)_sha256_hash=a55ed6db98d43469801262d81dc2572ed124edc3db31059d4e9916eb9f844c34 -$(package)_dependencies=xcb_proto libXau +$(package)_sha256_hash=599ebf9996710fea71622e6e184f3a8ad5b43d0e5fa8c4e407123c88a59a6d55 +$(package)_dependencies=xcb_proto libXau util-macros define $(package)_set_vars -$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen --without-launchd +$(package)_config_opts=--disable-shared --enable-static --disable-devel-docs --without-doxygen --without-launchd $(package)_config_opts += --disable-dependency-tracking --enable-option-checking # Disable unneeded extensions. # More info is available from: https://doc.qt.io/qt-5.15/linux-requirements.html @@ -15,8 +15,10 @@ $(package)_config_opts += --disable-composite --disable-damage --disable-dpms $(package)_config_opts += --disable-dri2 --disable-dri3 --disable-glx $(package)_config_opts += --disable-present --disable-record --disable-resource $(package)_config_opts += --disable-screensaver --disable-xevie --disable-xfree86-dri -$(package)_config_opts += --disable-xinput --disable-xprint --disable-selinux +$(package)_config_opts += --disable-xprint --disable-selinux $(package)_config_opts += --disable-xtest --disable-xv --disable-xvmc +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib +$(package)_cflags+=-fPIC endef define $(package)_preprocess_cmds diff --git a/depends/packages/libxcb_util.mk b/depends/packages/libxcb_util.mk index 6f1b9cd7c6..180d2177dd 100644 --- a/depends/packages/libxcb_util.mk +++ b/depends/packages/libxcb_util.mk @@ -6,9 +6,10 @@ $(package)_sha256_hash=46e49469cb3b594af1d33176cd7565def2be3fa8be4371d62271fabb5 $(package)_dependencies=libxcb define $(package)_set_vars -$(package)_config_opts = --disable-shared --disable-devel-docs --without-doxygen +$(package)_config_opts = --disable-shared --enable-static --disable-devel-docs --without-doxygen LIBS="-lXau" $(package)_config_opts += --disable-dependency-tracking --enable-option-checking $(package)_config_opts += --with-pic +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_preprocess_cmds diff --git a/depends/packages/libxcb_util_image.mk b/depends/packages/libxcb_util_image.mk index d12d67e8e8..cac6555780 100644 --- a/depends/packages/libxcb_util_image.mk +++ b/depends/packages/libxcb_util_image.mk @@ -6,8 +6,10 @@ $(package)_sha256_hash=2db96a37d78831d643538dd1b595d7d712e04bdccf8896a5e18ce0f39 $(package)_dependencies=libxcb libxcb_util define $(package)_set_vars -$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts=--enable-static --disable-shared --disable-devel-docs --without-doxygen LIBS="-lxcb-shm -lxcb-render -lxcb-shape -lXau" $(package)_config_opts+= --disable-dependency-tracking --enable-option-checking + +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_preprocess_cmds diff --git a/depends/packages/libxcb_util_keysyms.mk b/depends/packages/libxcb_util_keysyms.mk index d4f72dedbe..e10e52147a 100644 --- a/depends/packages/libxcb_util_keysyms.mk +++ b/depends/packages/libxcb_util_keysyms.mk @@ -6,8 +6,9 @@ $(package)_sha256_hash=0ef8490ff1dede52b7de533158547f8b454b241aa3e4dcca369507f66 $(package)_dependencies=libxcb xproto define $(package)_set_vars -$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts=--disable-shared --enable-static --disable-devel-docs --without-doxygen LIBS="-lXau" $(package)_config_opts += --disable-dependency-tracking --enable-option-checking +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_preprocess_cmds diff --git a/depends/packages/libxcb_util_render.mk b/depends/packages/libxcb_util_render.mk index 28f1fb073c..16397991ec 100644 --- a/depends/packages/libxcb_util_render.mk +++ b/depends/packages/libxcb_util_render.mk @@ -6,8 +6,9 @@ $(package)_sha256_hash=c6e97e48fb1286d6394dddb1c1732f00227c70bd1bedb7d1acabefdd3 $(package)_dependencies=libxcb define $(package)_set_vars -$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts=--disable-shared --enable-static --disable-devel-docs --without-doxygen LIBS="-lXau" $(package)_config_opts += --disable-dependency-tracking --enable-option-checking +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_preprocess_cmds diff --git a/depends/packages/libxcb_util_wm.mk b/depends/packages/libxcb_util_wm.mk index 3b905ba4ec..e0f08d05f3 100644 --- a/depends/packages/libxcb_util_wm.mk +++ b/depends/packages/libxcb_util_wm.mk @@ -6,8 +6,9 @@ $(package)_sha256_hash=28bf8179640eaa89276d2b0f1ce4285103d136be6c98262b6151aaee1 $(package)_dependencies=libxcb define $(package)_set_vars -$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts=--disable-shared --enable-static --disable-devel-docs --without-doxygen LIBS="-lXau" $(package)_config_opts += --disable-dependency-tracking --enable-option-checking +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib endef define $(package)_preprocess_cmds diff --git a/depends/packages/libxkbcommon.mk b/depends/packages/libxkbcommon.mk index 6893cbb0cc..4dd1eee4d1 100644 --- a/depends/packages/libxkbcommon.mk +++ b/depends/packages/libxkbcommon.mk @@ -3,12 +3,14 @@ $(package)_version=0.8.4 $(package)_download_path=https://xkbcommon.org/download/ $(package)_file_name=$(package)-$($(package)_version).tar.xz $(package)_sha256_hash=60ddcff932b7fd352752d51a5c4f04f3d0403230a584df9a2e0d5ed87c486c8b -$(package)_dependencies=libxcb +$(package)_dependencies=libxcb xkeyboard-config define $(package)_set_vars $(package)_config_opts = --enable-option-checking --disable-dependency-tracking -$(package)_config_opts += --disable-static --disable-docs -$(package)_config_opts+=--libdir=$($($(package)_type)_prefix)/lib +$(package)_config_opts += --disable-shared --enable-static --disable-docs +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib +$(package)_cflags+=-fPIC +$(package)_cflags += -Wno-error=array-bounds endef define $(package)_preprocess_cmds diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index fcebd68f39..b4e5b168fb 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -3,7 +3,7 @@ native_packages := native_ccache qt_packages = qrencode -qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm util-macros xkeyboard-config libevent libpng harfbuzz pcre2 qt_darwin_packages=qt qt_mingw32_packages=qt diff --git a/depends/packages/pcre2.mk b/depends/packages/pcre2.mk new file mode 100644 index 0000000000..4548e6e603 --- /dev/null +++ b/depends/packages/pcre2.mk @@ -0,0 +1,31 @@ +package=pcre2 +$(package)_version=10.45 +$(package)_download_path=https://github.com/PCRE2Project/pcre2/releases/download/$(package)-$($(package)_version) +$(package)_file_name=$(package)-$($(package)_version).tar.bz2 +$(package)_sha256_hash=21547f3516120c75597e5b30a992e27a592a31950b5140e7b8bfde3f192033c4 +$(package)_dependencies= + +define $(package)_set_vars +$(package)_config_opts = --enable-option-checking --disable-dependency-tracking +$(package)_config_opts += --disable-shared --enable-static --disable-docs --enable-pcre2-16 +$(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib +$(package)_cflags+=-fPIC +$(package)_cflags += -Wno-error=array-bounds +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef + diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index e94ef3ddf8..e899ef6f2e 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -4,7 +4,7 @@ $(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(pa $(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) $(package)_sha256_hash=0c42c799aa7c89e479a07c451bf5a301e291266ba789e81afc18f95049524edc -$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm xcb_proto xkeyboard-config libpng harfbuzz pcre2 $(package)_qt_libs=corelib network widgets gui plugins testlib concurrent $(package)_patches = fix_qt_pkgconfig.patch $(package)_patches += mac-qmake.conf @@ -91,6 +91,7 @@ $(package)_config_opts += -qt-harfbuzz $(package)_config_opts += -qt-zlib $(package)_config_opts += -static $(package)_config_opts += -v +$(package)_config_opts += 'QMAKE_LIBS_XCB=-lxcb -lXau' $(package)_config_opts += -no-feature-bearermanagement $(package)_config_opts += -no-feature-colordialog $(package)_config_opts += -no-feature-commandlineparser @@ -153,14 +154,16 @@ $(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS $(package)_config_opts_x86_64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64 endif -$(package)_config_opts_linux = -xcb +$(package)_config_opts_linux += -platform linux-g++ -xplatform linux-g++-64 'QMAKE_LFLAGS+=-pie -L$(host_prefix)/lib -lXau -lxkbcommon -lfontconfig -lfreetype -lexpat' +$(package)_config_opts_linux += 'QMAKE_CFLAGS+=-fPIE -fPIC' +$(package)_config_opts_linux += 'QMAKE_CXXFLAGS+=-fPIE -fPIC' $(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 +#$(package)_config_opts_linux += -dbus-runtime $(package)_config_opts_arm_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ $(package)_config_opts_i686_linux = -xplatform linux-g++-32 $(package)_config_opts_x86_64_linux = -xplatform linux-g++-64 @@ -289,8 +292,10 @@ endef define $(package)_config_cmds export PKG_CONFIG_SYSROOT_DIR=/ && \ - export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \ - export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \ + export PKG_CONFIG_LIBDIR="$(host_prefix)/lib/pkgconfig" && \ + export PKG_CONFIG_PATH="$(host_prefix)/share/pkgconfig:$(host_prefix)/lib/pkgconfig" && \ + export CPPFLAGS="-I$(host_prefix)/include" && \ + export LDFLAGS="-L$(host_prefix)/lib" && \ export QT_MAC_SDK_NO_VERSION_CHECK=1 && \ cd qtbase && \ ./configure -top-level $($(package)_config_opts) && \ diff --git a/depends/packages/util-macros.mk b/depends/packages/util-macros.mk new file mode 100644 index 0000000000..b267e33f35 --- /dev/null +++ b/depends/packages/util-macros.mk @@ -0,0 +1,28 @@ +package=util-macros +GCCFLAGS?= +$(package)_version=1.19.3 +$(package)_download_path=http://www.x.org/releases/individual/util/ +$(package)_file_name=$(package)-$($(package)_version).tar.bz2 +$(package)_sha256_hash=0f812e6e9d2786ba8f54b960ee563c0663ddbe2434bf24ff193f5feab1f31971 +$(package)_dependencies= + +define $(package)_set_vars +$(package)_config_opts=--disable-shared --enable-static --disable-devel-docs --without-doxygen --without-launchd +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +#define $(package)_postprocess_cmds +# rm -rf share lib/*.la +#endef diff --git a/depends/packages/xcb_proto.mk b/depends/packages/xcb_proto.mk index ed0aa30f1a..6c9ab8bb6c 100644 --- a/depends/packages/xcb_proto.mk +++ b/depends/packages/xcb_proto.mk @@ -1,9 +1,9 @@ package=xcb_proto GCCFLAGS?= -$(package)_version=1.14.1 +$(package)_version=1.17.0 $(package)_download_path=https://xorg.freedesktop.org/archive/individual/proto $(package)_file_name=xcb-proto-$($(package)_version).tar.xz -$(package)_sha256_hash=f04add9a972ac334ea11d9d7eb4fc7f8883835da3e4859c9afa971efdf57fcc3 +$(package)_sha256_hash=2c1bacd2110f4799f74de6ebb714b94cf6f80fb112316b1219480fd22562148c define $(package)_set_vars $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib diff --git a/depends/packages/xkeyboard-config.mk b/depends/packages/xkeyboard-config.mk new file mode 100644 index 0000000000..a19e3c03aa --- /dev/null +++ b/depends/packages/xkeyboard-config.mk @@ -0,0 +1,30 @@ +package=xkeyboard-config +GCCFLAGS?= +$(package)_version=2.34 +$(package)_download_path=http://www.x.org/releases/individual/data/xkeyboard-config +$(package)_file_name=$(package)-$($(package)_version).tar.bz2 +$(package)_sha256_hash=b321d27686ee7e6610ffe7b56e28d5bbf60625a1f595124cd320c0caa717b8ce + +define $(package)_set_vars + $(package)_config_opts +=--libdir=$($($(package)_type)_prefix)/lib --disable-runtime-deps + $(package)_cxxflags_aarch64_linux = $(GCCFLAGS) + $(package)_cflags_aarch64_linux = $(GCCFLAGS) + $(package)_cxxflags_arm_linux = $(GCCFLAGS) + $(package)_cflags_arm_linux = $(GCCFLAGS) +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf lib/python*/site-packages/xcbgen/__pycache__ +endef diff --git a/depends/packages/zlib.mk b/depends/packages/zlib.mk index 1bfcd7fbdf..74c66c4a2d 100644 --- a/depends/packages/zlib.mk +++ b/depends/packages/zlib.mk @@ -16,7 +16,7 @@ endef # CFLAGS, RANLIB, AR, and ARFLAGS from the environment rather than from # command-line arguments. define $(package)_config_cmds - env $($(package)_config_opts) ./configure --static --prefix=$(host_prefix) + env $($(package)_config_opts) ./configure --static --prefix=$(host_prefix) --libdir=$($($(package)_type)_prefix)/lib endef define $(package)_build_cmds diff --git a/src/Makefile.am b/src/Makefile.am index ad67958e78..2e99d415f9 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -430,15 +430,35 @@ gridcoinresearchd_CPPFLAGS = $(AM_CPPFLAGS) $(GRIDCOIN_INCLUDES) gridcoinresearchd_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) gridcoinresearchd_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +# +# LINKING +# +# The order of libraries is critical. Higher-level libraries that depend on +# others must come first. Lower-level dependencies are last. +# gridcoinresearchd_LDADD = \ - $(LIBGRIDCOIN_UTIL) \ - $(LIBGRIDCOIN_CRYPTO) \ - $(LIBUNIVALUE) \ - $(LIBLEVELDB) \ - $(LIBLEVELDB_SSE42) \ - $(LIBMEMENV) \ - $(LIBSECP256K1) - + $(LIBGRIDCOIN_SERVER) \ + $(LIBGRIDCOIN_COMMON) \ + $(LIBGRIDCOIN_UTIL) \ + $(LIBGRIDCOIN_CONSENSUS) \ + $(LIBGRIDCOIN_CRYPTO) \ + $(LIBUNIVALUE) \ + $(LIBLEVELDB) \ + $(LIBLEVELDB_SSE42) \ + $(LIBMEMENV) \ + $(LIBSECP256K1) + +# External dependencies are added next. The order is critical. +gridcoinresearchd_LDADD += \ + $(MINIUPNPC_LIBS) \ + $(CURL_LIBS) \ + $(BOOST_LIBS) \ + $(LIBZIP_LIBS) \ + $(ZLIB_LIBS) \ + $(EVENT_LIBS) \ + $(SSL_LIBS) + +# Wallet-specific database library if ENABLE_WALLET if EMBEDDED_BDB gridcoinresearchd_LDADD += $(LIBDB) @@ -447,7 +467,15 @@ gridcoinresearchd_LDADD += $(BDB_LIBS) endif endif -gridcoinresearchd_LDADD += $(CURL_LIBS) $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(LIBZIP_LIBS) +# These are the lowest-level dependencies and must come after the libraries that use them. +gridcoinresearchd_LDADD += \ + $(CRYPTO_LIBS) \ + $(ZLIB_LIBS) + +# Finally, add required system libraries. +gridcoinresearchd_LDADD += \ + $(EVENT_PTHREADS_LIBS) \ + $(LIBS) if TARGET_WINDOWS gridcoinresearchd_SOURCES += gridcoinresearchd-res.rc diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 81af7f7303..f4e291e9e8 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -668,15 +668,39 @@ qt_gridcoinresearch_SOURCES = qt/bitcoin.cpp if TARGET_DARWIN qt_gridcoinresearch_SOURCES += $(GRIDCOIN_MM) endif + qt_gridcoinresearch_LDADD = qt/libgridcoinqt.a + if TARGET_WINDOWS qt_gridcoinresearch_SOURCES += $(GRIDCOIN_QT_RC) else qt_gridcoinresearch_LDADD += $(LIBGRIDCOIN_UTIL) endif -qt_gridcoinresearch_LDADD += $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBGRIDCOIN_CRYPTO) $(LIBMEMENV) \ - $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS)\ - $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) $(LIBSECP256K1) + +qt_gridcoinresearch_LDADD += \ + $(LIBUNIVALUE) \ + $(LIBLEVELDB) \ + $(LIBLEVELDB_SSE42) \ + $(LIBGRIDCOIN_CRYPTO) \ + $(LIBMEMENV) \ + $(BOOST_LIBS) \ + $(QR_LIBS) \ + $(QT_LIBS) \ + $(QT_DBUS_LIBS) \ + $(QXCB_LIBS) \ + $(QSVG_LIBS) \ + $(QSVGICON_LIBS) \ + $(PROTOBUF_LIBS) \ + $(MINIUPNPC_LIBS)\ + $(EVENT_PTHREADS_LIBS) \ + $(EVENT_LIBS) \ + $(CURL_LIBS) \ + $(SSL_LIBS) \ + $(CRYPTO_LIBS) \ + $(LIBZIP_LIBS) \ + $(ZLIB_LIBS) \ + $(LIBSECP256K1) + qt_gridcoinresearch_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) qt_gridcoinresearch_LIBTOOLFLAGS = $(AM_LIBTOOLFLAGS) --tag CXX diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include index 117467c004..99da73b94b 100755 --- a/src/Makefile.qttest.include +++ b/src/Makefile.qttest.include @@ -22,10 +22,30 @@ qt_test_test_gridcoin_qt_SOURCES = \ nodist_qt_test_test_gridcoin_qt_SOURCES = $(TEST_QT_MOC_CPP) qt_test_test_gridcoin_qt_LDADD = $(LIBGRIDCOINQT) -qt_test_test_gridcoin_qt_LDADD += $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBGRIDCOIN_CRYPTO) \ - $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \ - $(QR_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) \ - $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) +qt_test_test_gridcoin_qt_LDADD += \ + $(LIBGRIDCOIN_UTIL) \ + $(LIBUNIVALUE) \ + $(LIBLEVELDB) \ + $(LIBGRIDCOIN_CRYPTO) \ + $(LIBLEVELDB_SSE42) \ + $(LIBMEMENV) \ + $(BOOST_LIBS) \ + $(QT_DBUS_LIBS) \ + $(QT_TEST_LIBS) \ + $(QT_LIBS) \ + $(QR_LIBS) \ + $(QXCB_LIBS) \ + $(QSVG_LIBS) \ + $(QSVGICON_LIBS) \ + $(MINIUPNPC_LIBS) \ + $(EVENT_PTHREADS_LIBS) \ + $(EVENT_LIBS) \ + $(CURL_LIBS) \ + $(SSL_LIBS) \ + $(CRYPTO_LIBS) \ + $(LIBZIP_LIBS) \ + $(ZLIB_LIBS) + qt_test_test_gridcoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) qt_test_test_gridcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS) diff --git a/src/Makefile.test.include b/src/Makefile.test.include index b6a8524f23..4c050327c6 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -84,12 +84,28 @@ GRIDCOIN_TESTS =\ test_test_gridcoin_SOURCES = $(GRIDCOIN_TESTS) $(JSON_TEST_FILES) $(BINARY_TEST_FILES) $(TEXT_TEST_FILES) test_test_gridcoin_CPPFLAGS = $(AM_CPPFLAGS) $(GRIDCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) $(EVENT_CFLAGS) -test_test_gridcoin_LDADD = $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(LIBSECP256K1) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) +#test_test_gridcoin_LDADD = $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(LIBSECP256K1) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) test_test_gridcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -test_test_gridcoin_LDADD += $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBGRIDCOIN_CRYPTO) +#test_test_gridcoin_LDADD += $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBGRIDCOIN_CRYPTO) test_test_gridcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static +# +# LINKING +# +test_test_gridcoin_LDADD = \ + $(LIBGRIDCOIN_SERVER) \ + $(LIBGRIDCOIN_COMMON) \ + $(LIBGRIDCOIN_UTIL) \ + $(LIBGRIDCOIN_CONSENSUS) \ + $(LIBGRIDCOIN_CRYPTO) \ + $(LIBUNIVALUE) \ + $(LIBLEVELDB) \ + $(LIBLEVELDB_SSE42) \ + $(LIBMEMENV) \ + $(LIBSECP256K1) \ + $(BOOST_UNIT_TEST_FRAMEWORK_LIB) + if ENABLE_WALLET if EMBEDDED_BDB test_test_gridcoin_LDADD += $(LIBDB) @@ -98,6 +114,18 @@ test_test_gridcoin_LDADD += $(BDB_LIBS) endif endif +test_test_gridcoin_LDADD += \ + $(MINIUPNPC_LIBS) \ + $(CURL_LIBS) \ + $(BOOST_LIBS) \ + $(LIBZIP_LIBS) \ + $(EVENT_LIBS) \ + $(SSL_LIBS) \ + $(CRYPTO_LIBS) \ + $(ZLIB_LIBS) \ + $(EVENT_PTHREADS_LIBS) \ + $(LIBS) + nodist_test_test_gridcoin_SOURCES = $(GENERATED_TEST_FILES) $(GRIDCOIN_TESTS): $(GENERATED_TEST_FILES) From d48f0dcfea91ec99e503a3b5d81a6f94f7a433d9 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Wed, 18 Jun 2025 17:36:51 -0400 Subject: [PATCH 02/10] Changes to library link order (WIP) --- src/Makefile.am | 1 - src/Makefile.qt.include | 8 ++++---- src/Makefile.qttest.include | 3 ++- src/Makefile.test.include | 7 ++----- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 2e99d415f9..3f13015899 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -454,7 +454,6 @@ gridcoinresearchd_LDADD += \ $(CURL_LIBS) \ $(BOOST_LIBS) \ $(LIBZIP_LIBS) \ - $(ZLIB_LIBS) \ $(EVENT_LIBS) \ $(SSL_LIBS) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index f4e291e9e8..3ae45b2d23 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -683,7 +683,6 @@ qt_gridcoinresearch_LDADD += \ $(LIBLEVELDB_SSE42) \ $(LIBGRIDCOIN_CRYPTO) \ $(LIBMEMENV) \ - $(BOOST_LIBS) \ $(QR_LIBS) \ $(QT_LIBS) \ $(QT_DBUS_LIBS) \ @@ -691,15 +690,16 @@ qt_gridcoinresearch_LDADD += \ $(QSVG_LIBS) \ $(QSVGICON_LIBS) \ $(PROTOBUF_LIBS) \ - $(MINIUPNPC_LIBS)\ + $(MINIUPNPC_LIBS) \ $(EVENT_PTHREADS_LIBS) \ $(EVENT_LIBS) \ $(CURL_LIBS) \ $(SSL_LIBS) \ $(CRYPTO_LIBS) \ + $(LIBSECP256K1) \ + $(BOOST_LIBS) \ $(LIBZIP_LIBS) \ - $(ZLIB_LIBS) \ - $(LIBSECP256K1) + $(ZLIB_LIBS) qt_gridcoinresearch_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) qt_gridcoinresearch_LIBTOOLFLAGS = $(AM_LIBTOOLFLAGS) --tag CXX diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include index 99da73b94b..d0f1fee7ac 100755 --- a/src/Makefile.qttest.include +++ b/src/Makefile.qttest.include @@ -29,7 +29,6 @@ qt_test_test_gridcoin_qt_LDADD += \ $(LIBGRIDCOIN_CRYPTO) \ $(LIBLEVELDB_SSE42) \ $(LIBMEMENV) \ - $(BOOST_LIBS) \ $(QT_DBUS_LIBS) \ $(QT_TEST_LIBS) \ $(QT_LIBS) \ @@ -43,6 +42,8 @@ qt_test_test_gridcoin_qt_LDADD += \ $(CURL_LIBS) \ $(SSL_LIBS) \ $(CRYPTO_LIBS) \ + $(LIBSECP256K1) \ + $(BOOST_LIBS) \ $(LIBZIP_LIBS) \ $(ZLIB_LIBS) diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 4c050327c6..33a19e36b8 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -84,10 +84,7 @@ GRIDCOIN_TESTS =\ test_test_gridcoin_SOURCES = $(GRIDCOIN_TESTS) $(JSON_TEST_FILES) $(BINARY_TEST_FILES) $(TEXT_TEST_FILES) test_test_gridcoin_CPPFLAGS = $(AM_CPPFLAGS) $(GRIDCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) $(EVENT_CFLAGS) -#test_test_gridcoin_LDADD = $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(LIBSECP256K1) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) test_test_gridcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) - -#test_test_gridcoin_LDADD += $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBGRIDCOIN_CRYPTO) test_test_gridcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static # @@ -117,11 +114,11 @@ endif test_test_gridcoin_LDADD += \ $(MINIUPNPC_LIBS) \ $(CURL_LIBS) \ - $(BOOST_LIBS) \ - $(LIBZIP_LIBS) \ $(EVENT_LIBS) \ $(SSL_LIBS) \ $(CRYPTO_LIBS) \ + $(BOOST_LIBS) \ + $(LIBZIP_LIBS) \ $(ZLIB_LIBS) \ $(EVENT_PTHREADS_LIBS) \ $(LIBS) From 555bb6fa8ec538aefe35f065c6b914c50ce3ab82 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Sun, 29 Jun 2025 19:39:10 -0400 Subject: [PATCH 03/10] Add PKG_CONFIG_PATH for depends builds in CI --- ci/test/06_script_a.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index 1c752fb518..ad543441d2 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -20,6 +20,11 @@ END_FOLD DOCKER_EXEC mkdir -p "${BASE_BUILD_DIR}" export P_CI_DIR="${BASE_BUILD_DIR}" +if [ -z "$NO_DEPENDS" ]; then # Only if depends are being used + DOCKER_EXEC export PKG_CONFIG_PATH="${DEPENDS_DIR}/${HOST}/lib/pkgconfig:${PKG_CONFIG_PATH}" + DOCKER_EXEC echo "PKG_CONFIG_PATH set to: ${PKG_CONFIG_PATH}" # For debugging +fi + BEGIN_FOLD configure DOCKER_EXEC "${BASE_ROOT_DIR}/configure" --cache-file=config.cache $GRIDCOIN_CONFIG_ALL $GRIDCOIN_CONFIG || ( (DOCKER_EXEC cat config.log) && false) END_FOLD From be97e181c01d85a8e5c619706a31a2a8d80f7222 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Sun, 29 Jun 2025 21:56:14 -0400 Subject: [PATCH 04/10] Add PKG_CONFIG_PATH for depends builds in CI - try 2 --- ci/test/06_script_a.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index ad543441d2..507e278969 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -20,9 +20,17 @@ END_FOLD DOCKER_EXEC mkdir -p "${BASE_BUILD_DIR}" export P_CI_DIR="${BASE_BUILD_DIR}" -if [ -z "$NO_DEPENDS" ]; then # Only if depends are being used - DOCKER_EXEC export PKG_CONFIG_PATH="${DEPENDS_DIR}/${HOST}/lib/pkgconfig:${PKG_CONFIG_PATH}" - DOCKER_EXEC echo "PKG_CONFIG_PATH set to: ${PKG_CONFIG_PATH}" # For debugging +# We need to run these commands in a single DOCKER_EXEC call +# to ensure PKG_CONFIG_PATH is set for the configure command. +if [ -z "$NO_DEPENDS" ]; then + DOCKER_EXEC bash -c " + export PKG_CONFIG_PATH=\"${DEPENDS_DIR}/${HOST}/lib/pkgconfig:\$PKG_CONFIG_PATH\" + echo \"PKG_CONFIG_PATH set to: \$PKG_CONFIG_PATH\" + \"${BASE_ROOT_DIR}/configure\" --cache-file=config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) + " +else + # If no depends, run configure directly without setting PKG_CONFIG_PATH + DOCKER_EXEC "${BASE_ROOT_DIR}/configure" --cache-file=config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) fi BEGIN_FOLD configure From 057fe33af92dfab97f9fac2e48d26c5e3dfb6587 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Sun, 29 Jun 2025 22:06:20 -0400 Subject: [PATCH 05/10] Add PKG_CONFIG_PATH for depends builds in CI - try 3 --- ci/test/06_script_a.sh | 67 +++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index 507e278969..877a0bec7c 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -6,9 +6,16 @@ export LC_ALL=C.UTF-8 +# Define common configuration flags for Autotools. +# These set the installation prefixes for binaries and libraries to the depends output directory. GRIDCOIN_CONFIG_ALL="--disable-dependency-tracking --prefix=$DEPENDS_DIR/$HOST --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib" + +# Zero out ccache statistics and set its maximum size for the current build. DOCKER_EXEC "ccache --zero-stats --max-size=$CCACHE_SIZE" +# --- Autogen Step --- +# Run the autogen.sh script to generate configure and other build system files. +# This step is conditional on whether CONFIG_SHELL is defined. BEGIN_FOLD autogen if [ -n "$CONFIG_SHELL" ]; then DOCKER_EXEC "$CONFIG_SHELL" -c "./autogen.sh" @@ -17,43 +24,81 @@ else fi END_FOLD +# Create the base build directory if it doesn't exist. DOCKER_EXEC mkdir -p "${BASE_BUILD_DIR}" +# Set the current CI directory context. export P_CI_DIR="${BASE_BUILD_DIR}" -# We need to run these commands in a single DOCKER_EXEC call -# to ensure PKG_CONFIG_PATH is set for the configure command. +# --- First Configure Pass (in BASE_ROOT_DIR) --- +# This block handles the initial configure script execution. +# It ensures PKG_CONFIG_PATH is correctly set for depends-based builds +# and clears the config.cache to prevent "environment changed" errors. + +# Clear the config.cache before running configure to ensure a clean state. +# This prevents errors if environment variables like PKG_CONFIG_PATH change between runs. +DOCKER_EXEC rm -f config.cache + if [ -z "$NO_DEPENDS" ]; then + # If NO_DEPENDS is NOT set (meaning depends are used, e.g., cross-compilation), + # we export PKG_CONFIG_PATH within the same DOCKER_EXEC subshell as configure. DOCKER_EXEC bash -c " export PKG_CONFIG_PATH=\"${DEPENDS_DIR}/${HOST}/lib/pkgconfig:\$PKG_CONFIG_PATH\" - echo \"PKG_CONFIG_PATH set to: \$PKG_CONFIG_PATH\" + echo \"PKG_CONFIG_PATH set for first configure: \$PKG_CONFIG_PATH\" \"${BASE_ROOT_DIR}/configure\" --cache-file=config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) " else - # If no depends, run configure directly without setting PKG_CONFIG_PATH + # If NO_DEPENDS IS set (meaning system libs are used, e.g., native builds), + # run configure directly without modifying PKG_CONFIG_PATH. DOCKER_EXEC "${BASE_ROOT_DIR}/configure" --cache-file=config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) fi -BEGIN_FOLD configure -DOCKER_EXEC "${BASE_ROOT_DIR}/configure" --cache-file=config.cache $GRIDCOIN_CONFIG_ALL $GRIDCOIN_CONFIG || ( (DOCKER_EXEC cat config.log) && false) -END_FOLD - +# --- Make Distdir Step --- +# Create a distribution tarball of the source code. BEGIN_FOLD distdir DOCKER_EXEC make distdir VERSION=$HOST END_FOLD +# Update the current CI directory context to the newly created distdir. export P_CI_DIR="${BASE_BUILD_DIR}/gridcoin-$HOST" -BEGIN_FOLD configure -DOCKER_EXEC ./configure --cache-file=../config.cache $GRIDCOIN_CONFIG_ALL $GRIDCOIN_CONFIG || ( (DOCKER_EXEC cat config.log) && false) -END_FOLD +# --- Second Configure Pass (in distdir) --- +# This block handles the configure script execution within the distribution directory. +# It also ensures PKG_CONFIG_PATH is correctly set and clears config.cache. + +# Push the current directory onto the stack, then change to the build directory (distdir). +# This is crucial for running the second configure within the correct context. +DOCKER_EXEC pushd "${BASE_BUILD_DIR}/gridcoin-${HOST}" >/dev/null + +# Clear the config.cache within the distdir before its configure run. +DOCKER_EXEC rm -f config.cache + +if [ -z "$NO_DEPENDS" ]; then + # If NO_DEPENDS is NOT set, set PKG_CONFIG_PATH within the same DOCKER_EXEC subshell. + DOCKER_EXEC bash -c " + export PKG_CONFIG_PATH=\"${DEPENDS_DIR}/${HOST}/lib/pkgconfig:\$PKG_CONFIG_PATH\" + echo \"PKG_CONFIG_PATH set for second configure: \$PKG_CONFIG_PATH\" + ./configure --cache-file=../config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) + " +else + # If NO_DEPENDS IS set, run configure directly. + DOCKER_EXEC ./configure --cache-file=../config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) +fi +# Pop back to the previous directory (BASE_BUILD_DIR). +DOCKER_EXEC popd >/dev/null +# --- Error Trace Trap (for Sanitizer Output) --- +# Set up a trap to output sanitizer logs if the build fails. set -o errtrace trap 'DOCKER_EXEC "cat ${BASE_SCRATCH_DIR}/sanitizer-output/* 2> /dev/null"' ERR +# --- Build Step --- +# Compile the project using make. If it fails, rerun with verbose output for debugging. BEGIN_FOLD build DOCKER_EXEC make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && DOCKER_EXEC make $GOAL V=1 ; false ) END_FOLD +# --- Cache Statistics --- +# Display ccache statistics and disk usage of depends and previous releases directories. BEGIN_FOLD cache_stats DOCKER_EXEC "ccache --version | head -n 1 && ccache --show-stats" DOCKER_EXEC du -sh "${DEPENDS_DIR}"/*/ From 0f3f0b6468136351212088a27ea30bd38e2ce1c0 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Sun, 29 Jun 2025 22:13:51 -0400 Subject: [PATCH 06/10] Add PKG_CONFIG_PATH for depends builds in CI - try 4 --- ci/test/06_script_a.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index 877a0bec7c..41e3ffb43c 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -63,28 +63,28 @@ export P_CI_DIR="${BASE_BUILD_DIR}/gridcoin-$HOST" # --- Second Configure Pass (in distdir) --- # This block handles the configure script execution within the distribution directory. -# It also ensures PKG_CONFIG_PATH is correctly set and clears config.cache. - -# Push the current directory onto the stack, then change to the build directory (distdir). -# This is crucial for running the second configure within the correct context. -DOCKER_EXEC pushd "${BASE_BUILD_DIR}/gridcoin-${HOST}" >/dev/null - -# Clear the config.cache within the distdir before its configure run. -DOCKER_EXEC rm -f config.cache +# It also ensures PKG_CONFIG_PATH is correctly set and clears config.cache, +# all within a single DOCKER_EXEC invocation. +# Perform the operations in the distdir within a single DOCKER_EXEC call. if [ -z "$NO_DEPENDS" ]; then - # If NO_DEPENDS is NOT set, set PKG_CONFIG_PATH within the same DOCKER_EXEC subshell. DOCKER_EXEC bash -c " - export PKG_CONFIG_PATH=\"${DEPENDS_DIR}/${HOST}/lib/pkgconfig:\$PKG_CONFIG_PATH\" - echo \"PKG_CONFIG_PATH set for second configure: \$PKG_CONFIG_PATH\" - ./configure --cache-file=../config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) + pushd \"${BASE_BUILD_DIR}/gridcoin-${HOST}\" >/dev/null && \ + rm -f config.cache && \ + export PKG_CONFIG_PATH=\"${DEPENDS_DIR}/${HOST}/lib/pkgconfig:\$PKG_CONFIG_PATH\" && \ + echo \"PKG_CONFIG_PATH set for second configure: \$PKG_CONFIG_PATH\" && \ + ./configure --cache-file=../config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) && \ + popd >/dev/null " else - # If NO_DEPENDS IS set, run configure directly. - DOCKER_EXEC ./configure --cache-file=../config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) + DOCKER_EXEC bash -c " + pushd \"${BASE_BUILD_DIR}/gridcoin-${HOST}\" >/dev/null && \ + rm -f config.cache && \ + ./configure --cache-file=../config.cache ${GRIDCOIN_CONFIG_ALL} ${GRIDCOIN_CONFIG} || ( (cat config.log) && false) && \ + popd >/dev/null + " fi -# Pop back to the previous directory (BASE_BUILD_DIR). -DOCKER_EXEC popd >/dev/null + # --- Error Trace Trap (for Sanitizer Output) --- # Set up a trap to output sanitizer logs if the build fails. From 309dfe383773ec2ddd9e63350b78de6c00e0388e Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Mon, 30 Jun 2025 01:13:29 -0400 Subject: [PATCH 07/10] Fix linker order for depends builds in 06_script_a.sh This addresses a linker order causing macos depends builds to fail. --- ci/test/06_script_a.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index 41e3ffb43c..a13ca684eb 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -85,7 +85,6 @@ else " fi - # --- Error Trace Trap (for Sanitizer Output) --- # Set up a trap to output sanitizer logs if the build fails. set -o errtrace @@ -93,9 +92,24 @@ trap 'DOCKER_EXEC "cat ${BASE_SCRATCH_DIR}/sanitizer-output/* 2> /dev/null"' ERR # --- Build Step --- # Compile the project using make. If it fails, rerun with verbose output for debugging. -BEGIN_FOLD build -DOCKER_EXEC make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && DOCKER_EXEC make $GOAL V=1 ; false ) -END_FOLD +# This ensures that zlib is linked after Boost libraries that depend on it. +# This appends -lz to the LDFLAGS just before the main build. +# This should happen within the DOCKER_EXEC context for the build. +if [ -z "$NO_DEPENDS" ]; then + # For depends builds, prepend depends-built zlib path and library. + DOCKER_EXEC bash -c " + export LDFLAGS=\"\$LDFLAGS -L${DEPENDS_DIR}/${HOST}/lib -lz\" + echo \"Adjusted LDFLAGS for build: \$LDFLAGS\" + make \$MAKEJOBS \$GOAL || ( echo \"Build failure. Verbose build follows.\" && make \$GOAL V=1 ; false ) + " +else + # For non-depends builds, use system zlib + DOCKER_EXEC bash -c " + export LDFLAGS=\"\$LDFLAGS -lz\" + echo \"Adjusted LDFLAGS for build: \$LDFLAGS\" + make \$MAKEJOBS \$GOAL || ( echo \"Build failure. Verbose build follows.\" && make \$GOAL V=1 ; false ) + " +fi # --- Cache Statistics --- # Display ccache statistics and disk usage of depends and previous releases directories. From 6d95bc70a7351e02f43d10421ebddcbde5b42573 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Mon, 30 Jun 2025 01:29:15 -0400 Subject: [PATCH 08/10] Fixup wrap-qemu.sh --- ci/test/wrap-qemu.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ci/test/wrap-qemu.sh b/ci/test/wrap-qemu.sh index 4eee932cc7..985c2d7c90 100755 --- a/ci/test/wrap-qemu.sh +++ b/ci/test/wrap-qemu.sh @@ -6,13 +6,22 @@ export LC_ALL=C.UTF-8 -for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/univalue/{no_nul,test_json,unitester,object}}; do +# Loop through a list of binaries (by name) that need to be wrapped with QEMU. +# This allows binaries compiled for a different architecture (e.g., ARM) to run +# on the x86_64 CI host via QEMU emulation. +# Added 'src/test/test_gridcoin' to wrap the main unit test executable. +for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/univalue/{no_nul,test_json,unitester,object},src/test/test_gridcoin}; do + # Use 'find' to locate the actual executable file(s) corresponding to the binary name. # shellcheck disable=SC2044 for b in $(find "${BASE_ROOT_DIR}" -executable -type f -name $(basename $b_name)); do echo "Wrap $b ..." + # Rename the original binary by appending '_orig'. mv "$b" "${b}_orig" + # Create a new wrapper script with the original binary's name. echo '#!/usr/bin/env bash' > "$b" + # The wrapper script executes QEMU with the original binary and passes all arguments. echo "$QEMU_USER_CMD \"${b}_orig\" \"\$@\"" >> "$b" + # Make the wrapper script executable. chmod +x "$b" done done From f92044516f1529b2cc7838dfde4dcd2d30f7710e Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Mon, 30 Jun 2025 02:27:07 -0400 Subject: [PATCH 09/10] Adjust 06_script_a.sh --- ci/test/06_script_a.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index a13ca684eb..51ee78be63 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -92,24 +92,33 @@ trap 'DOCKER_EXEC "cat ${BASE_SCRATCH_DIR}/sanitizer-output/* 2> /dev/null"' ERR # --- Build Step --- # Compile the project using make. If it fails, rerun with verbose output for debugging. +# --- Adjust LDFLAGS and CPPFLAGS for linking and compilation issues --- # This ensures that zlib is linked after Boost libraries that depend on it. -# This appends -lz to the LDFLAGS just before the main build. +# This also suppresses 'sprintf' deprecation warnings from Boost headers. # This should happen within the DOCKER_EXEC context for the build. if [ -z "$NO_DEPENDS" ]; then - # For depends builds, prepend depends-built zlib path and library. + # For depends builds, prepend depends-built zlib path and library, + # and add warning suppression for Boost/system headers. DOCKER_EXEC bash -c " export LDFLAGS=\"\$LDFLAGS -L${DEPENDS_DIR}/${HOST}/lib -lz\" + # Suppress -Wdeprecated-declarations warnings, especially from Boost and system headers. + export CPPFLAGS=\"\$CPPFLAGS -Wno-deprecated-declarations\" echo \"Adjusted LDFLAGS for build: \$LDFLAGS\" + echo \"Adjusted CPPFLAGS for build: \$CPPFLAGS\" make \$MAKEJOBS \$GOAL || ( echo \"Build failure. Verbose build follows.\" && make \$GOAL V=1 ; false ) " else - # For non-depends builds, use system zlib + # For non-depends builds, use system zlib and add warning suppression. DOCKER_EXEC bash -c " export LDFLAGS=\"\$LDFLAGS -lz\" + # Suppress -Wdeprecated-declarations warnings, especially from Boost and system headers. + export CPPFLAGS=\"\$CPPFLAGS -Wno-deprecated-declarations\" echo \"Adjusted LDFLAGS for build: \$LDFLAGS\" + echo \"Adjusted CPPFLAGS for build: \$CPPFLAGS\" make \$MAKEJOBS \$GOAL || ( echo \"Build failure. Verbose build follows.\" && make \$GOAL V=1 ; false ) " fi +# --- END ADJUSTMENT --- # --- Cache Statistics --- # Display ccache statistics and disk usage of depends and previous releases directories. From c4239439e9581ecd9d3b767673f22cbfe71c8ddd Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Mon, 30 Jun 2025 18:23:41 -0400 Subject: [PATCH 10/10] Set arm64 macos deployment target to 10.14 explicitly --- ci/test/00_setup_env_mac_arm64_cross.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ci/test/00_setup_env_mac_arm64_cross.sh b/ci/test/00_setup_env_mac_arm64_cross.sh index 26616234e0..33bf5b80c8 100755 --- a/ci/test/00_setup_env_mac_arm64_cross.sh +++ b/ci/test/00_setup_env_mac_arm64_cross.sh @@ -16,3 +16,8 @@ export RUN_UNIT_TESTS=false export RUN_FUNCTIONAL_TESTS=false export GOAL="deploy" export GRIDCOIN_CONFIG="--with-gui --enable-reduce-exports" + +# Set the macOS deployment target for the depends build. +# This ensures that libraries compiled by 'depends' are compatible with the target macOS version. +# The value '10.14' matches the '-mmacos-version-min=10.14' used in CFLAGS/CXXFLAGS. +export DEP_OPTS="MACOSX_DEPLOYMENT_TARGET=10.14"