guix: pre time-machine bump changes (Linux)

Based on Bitcoin PR #28324
This commit is contained in:
tobtoht 2023-09-07 10:29:48 +02:00
parent 0496f8b2cb
commit d1cb45458d
No known key found for this signature in database
GPG key ID: E45B10DD027D2472
3 changed files with 110 additions and 49 deletions

View file

@ -7,12 +7,13 @@ $(package)_dependencies=libevent openssl zlib
define $(package)_set_vars define $(package)_set_vars
$(package)_config_opts=--disable-asciidoc --disable-manpage --disable-html-manual --disable-system-torrc $(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-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+=--with-zlib-dir=$(host_prefix) --disable-tool-name-check --enable-fatal-warnings
$(package)_config_opts+=--prefix=$(host_prefix) $(package)_config_opts+=--prefix=$(host_prefix)
$(package)_cflags+=-O2 $(package)_cflags+=-O2
$(package)_cxxflags+=-O2 $(package)_cxxflags+=-O2
$(package)_ldflags+=$(guix_ldflags)
endef endef
define $(package)_config_cmds define $(package)_config_cmds

View file

@ -76,29 +76,8 @@ FILE-NAME found in ./patches relative to the current file."
(substitute-keyword-arguments (package-arguments mingw-w64-x86_64-winpthreads) (substitute-keyword-arguments (package-arguments mingw-w64-x86_64-winpthreads)
((#:parallel-build? _ #f) #f))))) ((#: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 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 (define (make-cross-toolchain target
base-gcc-for-libc base-gcc-for-libc
base-kernel-headers base-kernel-headers
@ -108,9 +87,9 @@ FILE-NAME found in ./patches relative to the current file."
(let* ((xbinutils (cross-binutils target)) (let* ((xbinutils (cross-binutils target))
;; 1. Build a cross-compiling gcc without targeting any libc, derived ;; 1. Build a cross-compiling gcc without targeting any libc, derived
;; from BASE-GCC-FOR-LIBC ;; 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 #:xgcc base-gcc-for-libc
#:xbinutils xbinutils))) #:xbinutils xbinutils))
;; 2. Build cross-compiled kernel headers with XGCC-SANS-LIBC, derived ;; 2. Build cross-compiled kernel headers with XGCC-SANS-LIBC, derived
;; from BASE-KERNEL-HEADERS ;; from BASE-KERNEL-HEADERS
(xkernel (cross-kernel-headers target (xkernel (cross-kernel-headers target
@ -119,17 +98,17 @@ FILE-NAME found in ./patches relative to the current file."
xbinutils)) xbinutils))
;; 3. Build a cross-compiled libc with XGCC-SANS-LIBC and XKERNEL, ;; 3. Build a cross-compiled libc with XGCC-SANS-LIBC and XKERNEL,
;; derived from BASE-LIBC ;; derived from BASE-LIBC
(xlibc (explicit-cross-configure (cross-libc target (xlibc (cross-libc target
base-libc base-libc
xgcc-sans-libc xgcc-sans-libc
xbinutils xbinutils
xkernel))) xkernel))
;; 4. Build a cross-compiling gcc targeting XLIBC, derived from ;; 4. Build a cross-compiling gcc targeting XLIBC, derived from
;; BASE-GCC ;; BASE-GCC
(xgcc (explicit-cross-configure (cross-gcc target (xgcc (cross-gcc target
#:xgcc base-gcc #:xgcc base-gcc
#:xbinutils xbinutils #:xbinutils xbinutils
#:libc xlibc)))) #:libc xlibc)))
;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and ;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and
;; XGCC ;; XGCC
(package (package
@ -153,19 +132,12 @@ chain for " target " development."))
(define base-gcc gcc-10) (define base-gcc gcc-10)
(define base-linux-kernel-headers linux-libre-headers-5.15) (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 (define* (make-bitcoin-cross-toolchain target
#:key #:key
(base-gcc-for-libc base-gcc) (base-gcc-for-libc linux-base-gcc)
(base-kernel-headers base-linux-kernel-headers) (base-kernel-headers base-linux-kernel-headers)
(base-libc (hardened-glibc (make-glibc-without-werror glibc-2.27))) (base-libc glibc-2.27)
(base-gcc (make-gcc-rpath-link (hardened-gcc base-gcc)))) (base-gcc linux-base-gcc))
"Convenience wrapper around MAKE-CROSS-TOOLCHAIN with default values "Convenience wrapper around MAKE-CROSS-TOOLCHAIN with default values
desirable for building Feather Wallet release binaries." desirable for building Feather Wallet release binaries."
(make-cross-toolchain target (make-cross-toolchain target
@ -212,16 +184,6 @@ chain for " target " development."))
(search-our-patches "nsis-gcc-10-memmove.patch" (search-our-patches "nsis-gcc-10-memmove.patch"
"nsis-disable-installer-reloc.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 (define-public mingw-w64-base-gcc
(package (package
(inherit base-gcc) (inherit base-gcc)
@ -233,6 +195,30 @@ chain for " target " development."))
(list "--enable-threads=posix", (list "--enable-threads=posix",
building-on))))))) 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 (define-public glibc-2.27
(package (package
(inherit glibc-2.31) (inherit glibc-2.31)
@ -248,7 +234,28 @@ chain for " target " development."))
"0azpb9cvnbv25zg8019rqz48h8i2257ngyjg566dlnp74ivrs9vq")) "0azpb9cvnbv25zg8019rqz48h8i2257ngyjg566dlnp74ivrs9vq"))
(patches (search-our-patches "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch" (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-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 (define-public ldid
(package (package

View file

@ -0,0 +1,53 @@
This patch can be dropped when we are building with glibc 2.30+.
commit 6e41ef56c9baab719a02f1377b1e7ce7bff61e73
Author: Florian Weimer <fweimer@redhat.com>
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 <carlos@redhat.com>
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,