From d1cb45458d9d7d03509d6a3e06343e6f43be3490 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Thu, 7 Sep 2023 10:29:48 +0200 Subject: [PATCH] guix: pre time-machine bump changes (Linux) Based on Bitcoin PR #28324 --- contrib/depends/packages/tor_linux.mk | 3 +- contrib/guix/manifest.scm | 103 ++++++++++-------- .../guix/patches/glibc-2.27-no-librt.patch | 53 +++++++++ 3 files changed, 110 insertions(+), 49 deletions(-) create mode 100644 contrib/guix/patches/glibc-2.27-no-librt.patch diff --git a/contrib/depends/packages/tor_linux.mk b/contrib/depends/packages/tor_linux.mk index 2f746be8..25b5c59b 100644 --- a/contrib/depends/packages/tor_linux.mk +++ b/contrib/depends/packages/tor_linux.mk @@ -7,12 +7,13 @@ $(package)_dependencies=libevent openssl zlib define $(package)_set_vars $(package)_config_opts=--disable-asciidoc --disable-manpage --disable-html-manual --disable-system-torrc - $(package)_config_opts+=--disable-module-relay --disable-lzma --disable-zstd --enable-static-tor + $(package)_config_opts+=--disable-module-relay --disable-lzma --disable-zstd $(package)_config_opts+=--with-libevent-dir=$(host_prefix) --with-openssl-dir=$(host_prefix) $(package)_config_opts+=--with-zlib-dir=$(host_prefix) --disable-tool-name-check --enable-fatal-warnings $(package)_config_opts+=--prefix=$(host_prefix) $(package)_cflags+=-O2 $(package)_cxxflags+=-O2 + $(package)_ldflags+=$(guix_ldflags) endef define $(package)_config_cmds diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 2512887e..0f83cfd0 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -76,29 +76,8 @@ FILE-NAME found in ./patches relative to the current file." (substitute-keyword-arguments (package-arguments mingw-w64-x86_64-winpthreads) ((#:parallel-build? _ #f) #f))))) -(define (make-gcc-rpath-link xgcc) - "Given a XGCC package, return a modified package that replace each instance of --rpath in the default system spec that's inserted by Guix with -rpath-link" - (package - (inherit xgcc) - (arguments - (substitute-keyword-arguments (package-arguments xgcc) - ((#:phases phases) - `(modify-phases ,phases - (add-after 'pre-configure 'replace-rpath-with-rpath-link - (lambda _ - (substitute* (cons "gcc/config/rs6000/sysv4.h" - (find-files "gcc/config" - "^gnu-user.*\\.h$")) - (("-rpath=") "-rpath-link=")) - #t)))))))) - (define building-on (string-append "--build=" (list-ref (string-split (%current-system) #\-) 0) "-guix-linux-gnu")) -(define (explicit-cross-configure package) - (define building-on (string-append (list-ref (string-split (%current-system) #\-) 0) "-guix-linux-gnu")) - (package-with-extra-configure-variable package "--build" building-on)) - (define (make-cross-toolchain target base-gcc-for-libc base-kernel-headers @@ -108,9 +87,9 @@ FILE-NAME found in ./patches relative to the current file." (let* ((xbinutils (cross-binutils target)) ;; 1. Build a cross-compiling gcc without targeting any libc, derived ;; from BASE-GCC-FOR-LIBC - (xgcc-sans-libc (explicit-cross-configure (cross-gcc target + (xgcc-sans-libc (cross-gcc target #:xgcc base-gcc-for-libc - #:xbinutils xbinutils))) + #:xbinutils xbinutils)) ;; 2. Build cross-compiled kernel headers with XGCC-SANS-LIBC, derived ;; from BASE-KERNEL-HEADERS (xkernel (cross-kernel-headers target @@ -119,17 +98,17 @@ FILE-NAME found in ./patches relative to the current file." xbinutils)) ;; 3. Build a cross-compiled libc with XGCC-SANS-LIBC and XKERNEL, ;; derived from BASE-LIBC - (xlibc (explicit-cross-configure (cross-libc target + (xlibc (cross-libc target base-libc xgcc-sans-libc xbinutils - xkernel))) + xkernel)) ;; 4. Build a cross-compiling gcc targeting XLIBC, derived from ;; BASE-GCC - (xgcc (explicit-cross-configure (cross-gcc target + (xgcc (cross-gcc target #:xgcc base-gcc #:xbinutils xbinutils - #:libc xlibc)))) + #:libc xlibc))) ;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and ;; XGCC (package @@ -153,19 +132,12 @@ chain for " target " development.")) (define base-gcc gcc-10) (define base-linux-kernel-headers linux-libre-headers-5.15) -;; https://gcc.gnu.org/install/configure.html -(define (hardened-gcc gcc) - (package-with-extra-configure-variable ( - package-with-extra-configure-variable gcc - "--enable-default-ssp" "yes") - "--enable-default-pie" "yes")) - (define* (make-bitcoin-cross-toolchain target #:key - (base-gcc-for-libc base-gcc) + (base-gcc-for-libc linux-base-gcc) (base-kernel-headers base-linux-kernel-headers) - (base-libc (hardened-glibc (make-glibc-without-werror glibc-2.27))) - (base-gcc (make-gcc-rpath-link (hardened-gcc base-gcc)))) + (base-libc glibc-2.27) + (base-gcc linux-base-gcc)) "Convenience wrapper around MAKE-CROSS-TOOLCHAIN with default values desirable for building Feather Wallet release binaries." (make-cross-toolchain target @@ -212,16 +184,6 @@ chain for " target " development.")) (search-our-patches "nsis-gcc-10-memmove.patch" "nsis-disable-installer-reloc.patch"))) -(define (make-glibc-without-werror glibc) - (package-with-extra-configure-variable glibc "enable_werror" "no")) - -;; https://www.gnu.org/software/libc/manual/html_node/Configuring-and-compiling.html -(define (hardened-glibc glibc) - (package-with-extra-configure-variable ( - package-with-extra-configure-variable glibc - "--enable-stack-protector" "all") - "--enable-bind-now" "yes")) - (define-public mingw-w64-base-gcc (package (inherit base-gcc) @@ -233,6 +195,30 @@ chain for " target " development.")) (list "--enable-threads=posix", building-on))))))) +(define-public linux-base-gcc + (package + (inherit base-gcc) + (arguments + (substitute-keyword-arguments (package-arguments base-gcc) + ((#:configure-flags flags) + `(append ,flags + ;; https://gcc.gnu.org/install/configure.html + (list "--enable-initfini-array=yes", + "--enable-default-ssp=yes", + "--enable-default-pie=yes", + building-on))) + ((#:phases phases) + `(modify-phases ,phases + ;; Given a XGCC package, return a modified package that replace each instance of + ;; -rpath in the default system spec that's inserted by Guix with -rpath-link + (add-after 'pre-configure 'replace-rpath-with-rpath-link + (lambda _ + (substitute* (cons "gcc/config/rs6000/sysv4.h" + (find-files "gcc/config" + "^gnu-user.*\\.h$")) + (("-rpath=") "-rpath-link=")) + #t)))))))) + (define-public glibc-2.27 (package (inherit glibc-2.31) @@ -248,7 +234,28 @@ chain for " target " development.")) "0azpb9cvnbv25zg8019rqz48h8i2257ngyjg566dlnp74ivrs9vq")) (patches (search-our-patches "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch" "glibc-2.27-fcommon.patch" - "glibc-2.27-guix-prefix.patch")))))) + "glibc-2.27-no-librt.patch")))) + (arguments + (substitute-keyword-arguments (package-arguments glibc) + ((#:configure-flags flags) + `(append ,flags + ;; https://www.gnu.org/software/libc/manual/html_node/Configuring-and-compiling.html + (list "--enable-stack-protector=all", + "--enable-bind-now", + "--disable-werror", + building-on))) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'configure 'set-etc-rpc-installation-directory + (lambda* (#:key outputs #:allow-other-keys) + ;; Install the rpc data base file under `$out/etc/rpc'. + ;; Otherwise build will fail with "Permission denied." + (let ((out (assoc-ref outputs "out"))) + (substitute* "sunrpc/Makefile" + (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix) + (string-append out "/etc/rpc" suffix "\n")) + (("^install-others =.*$") + (string-append "install-others = " out "/etc/rpc\n")))))))))))) (define-public ldid (package diff --git a/contrib/guix/patches/glibc-2.27-no-librt.patch b/contrib/guix/patches/glibc-2.27-no-librt.patch new file mode 100644 index 00000000..4f2092ba --- /dev/null +++ b/contrib/guix/patches/glibc-2.27-no-librt.patch @@ -0,0 +1,53 @@ +This patch can be dropped when we are building with glibc 2.30+. + +commit 6e41ef56c9baab719a02f1377b1e7ce7bff61e73 +Author: Florian Weimer +Date: Fri Feb 8 10:21:56 2019 +0100 + + rt: Turn forwards from librt to libc into compat symbols [BZ #24194] + + As the result of commit 6e6249d0b461b952d0f544792372663feb6d792a + ("BZ#14743: Move clock_* symbols from librt to libc."), in glibc 2.17, + clock_gettime, clock_getres, clock_settime, clock_getcpuclockid, + clock_nanosleep were added to libc, and the file rt/clock-compat.c + was added with forwarders to the actual implementations in libc. + These forwarders were wrapped in + + #if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_17) + + so that they are not present for newer architectures (such as + powerpc64le) with a 2.17 or later ABI baseline. But the forwarders + were not marked as compatibility symbols. As a result, on older + architectures, historic configure checks such as + + AC_CHECK_LIB(rt, clock_gettime) + + still cause linking against librt, even though this is completely + unnecessary. It also creates a needless porting hazard because + architectures behave differently when it comes to symbol availability. + + Reviewed-by: Carlos O'Donell + +diff --git a/rt/clock-compat.c b/rt/clock-compat.c +index f816973c05..11e71aa890 100644 +--- a/rt/clock-compat.c ++++ b/rt/clock-compat.c +@@ -30,14 +30,16 @@ + #if HAVE_IFUNC + # undef INIT_ARCH + # define INIT_ARCH() +-# define COMPAT_REDIRECT(name, proto, arglist) libc_ifunc (name, &__##name) ++# define COMPAT_REDIRECT(name, proto, arglist) libc_ifunc (name, &__##name) \ ++ compat_symbol (librt, name, name, GLIBC_2_2); + #else + # define COMPAT_REDIRECT(name, proto, arglist) \ + int \ + name proto \ + { \ + return __##name arglist; \ +- } ++ } \ ++ compat_symbol (librt, name, name, GLIBC_2_2); + #endif + + COMPAT_REDIRECT (clock_getres, -- 2.52.0