You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.6 KiB
156 lines
5.6 KiB
5 years ago
|
(define-module (bitcoin)
|
||
|
#:use-module (gnu)
|
||
|
#:use-module (gnu packages)
|
||
|
#:use-module (gnu packages autotools)
|
||
|
#:use-module (gnu packages base)
|
||
|
#:use-module (gnu packages bash)
|
||
|
#:use-module (gnu packages check)
|
||
|
#:use-module (gnu packages commencement)
|
||
|
#:use-module (gnu packages compression)
|
||
|
#:use-module (gnu packages cross-base)
|
||
|
#:use-module (gnu packages file)
|
||
|
#:use-module (gnu packages gawk)
|
||
|
#:use-module (gnu packages gcc)
|
||
|
#:use-module (gnu packages linux)
|
||
|
#:use-module (gnu packages perl)
|
||
|
#:use-module (gnu packages pkg-config)
|
||
|
#:use-module (gnu packages python)
|
||
|
#:use-module (gnu packages shells)
|
||
|
#:use-module (guix build-system trivial)
|
||
|
#:use-module (guix gexp)
|
||
|
#:use-module (guix packages)
|
||
|
#:use-module (guix profiles)
|
||
|
#:use-module (guix utils))
|
||
|
|
||
|
(define (make-ssp-fixed-gcc xgcc)
|
||
|
"Given a XGCC package, return a modified package that uses the SSP function
|
||
|
from glibc instead of from libssp.so. Taken from:
|
||
|
http://www.linuxfromscratch.org/hlfs/view/development/chapter05/gcc-pass1.html"
|
||
|
(package
|
||
|
(inherit xgcc)
|
||
|
(arguments
|
||
|
(substitute-keyword-arguments (package-arguments xgcc)
|
||
|
((#:make-flags flags)
|
||
|
`(cons "gcc_cv_libc_provides_ssp=yes" ,flags))))))
|
||
|
|
||
|
(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 (make-cross-toolchain target
|
||
|
base-gcc-for-libc
|
||
|
base-kernel-headers
|
||
|
base-libc
|
||
|
base-gcc)
|
||
|
"Create a cross-compilation toolchain package for TARGET"
|
||
|
(let* ((xbinutils (cross-binutils target))
|
||
|
;; 1. Build a cross-compiling gcc without targeting any libc, derived
|
||
|
;; from BASE-GCC-FOR-LIBC
|
||
|
(xgcc-sans-libc (cross-gcc target
|
||
|
#:xgcc base-gcc-for-libc
|
||
|
#:xbinutils xbinutils))
|
||
|
;; 2. Build cross-compiled kernel headers with XGCC-SANS-LIBC, derived
|
||
|
;; from BASE-KERNEL-HEADERS
|
||
|
(xkernel (cross-kernel-headers target
|
||
|
base-kernel-headers
|
||
|
xgcc-sans-libc
|
||
|
xbinutils))
|
||
|
;; 3. Build a cross-compiled libc with XGCC-SANS-LIBC and XKERNEL,
|
||
|
;; derived from BASE-LIBC
|
||
|
(xlibc (cross-libc target
|
||
|
base-libc
|
||
|
xgcc-sans-libc
|
||
|
xbinutils
|
||
|
xkernel))
|
||
|
;; 4. Build a cross-compiling gcc targeting XLIBC, derived from
|
||
|
;; BASE-GCC
|
||
|
(xgcc (cross-gcc target
|
||
|
#:xgcc base-gcc
|
||
|
#:xbinutils xbinutils
|
||
|
#:libc xlibc)))
|
||
|
;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and
|
||
|
;; XGCC
|
||
|
(package
|
||
|
(name (string-append target "-toolchain"))
|
||
|
(version (package-version xgcc))
|
||
|
(source #f)
|
||
|
(build-system trivial-build-system)
|
||
|
(arguments '(#:builder (begin (mkdir %output) #t)))
|
||
|
(propagated-inputs
|
||
|
`(("binutils" ,xbinutils)
|
||
|
("libc" ,xlibc)
|
||
|
("libc:static" ,xlibc "static")
|
||
|
("gcc" ,xgcc)))
|
||
|
(synopsis (string-append "Complete GCC tool chain for " target))
|
||
|
(description (string-append "This package provides a complete GCC tool
|
||
|
chain for " target " development."))
|
||
|
(home-page (package-home-page xgcc))
|
||
|
(license (package-license xgcc)))))
|
||
|
|
||
|
(define* (make-bitcoin-cross-toolchain target
|
||
|
#:optional
|
||
|
(base-gcc-for-libc gcc-5)
|
||
|
(base-kernel-headers linux-libre-headers-4.19)
|
||
|
(base-libc glibc-2.27)
|
||
|
(base-gcc (make-gcc-rpath-link
|
||
|
(make-ssp-fixed-gcc gcc-9))))
|
||
|
"Convienience wrapper around MAKE-CROSS-TOOLCHAIN with default values
|
||
|
desirable for building Bitcoin Core release binaries."
|
||
|
(make-cross-toolchain target
|
||
|
base-gcc-for-libc
|
||
|
base-kernel-headers
|
||
|
base-libc
|
||
|
base-gcc))
|
||
|
|
||
|
(packages->manifest
|
||
|
(list ;; The Basics
|
||
|
bash
|
||
|
tcsh
|
||
|
which
|
||
|
coreutils
|
||
|
util-linux
|
||
|
;; File(system) inspection
|
||
|
file
|
||
|
grep
|
||
|
diffutils
|
||
|
findutils
|
||
|
;; File transformation
|
||
|
patch
|
||
|
gawk
|
||
|
sed
|
||
|
;; Compression and archiving
|
||
|
tar
|
||
|
bzip2
|
||
|
gzip
|
||
|
xz
|
||
|
zlib
|
||
|
;; Build tools
|
||
|
gnu-make
|
||
|
libtool
|
||
|
autoconf
|
||
|
automake
|
||
|
pkg-config
|
||
|
;; Scripting
|
||
|
perl
|
||
|
python
|
||
|
;; Toolchains
|
||
|
(make-gcc-toolchain gcc-9 glibc-2.27)
|
||
|
(make-bitcoin-cross-toolchain "riscv64-linux-gnu" gcc-8)
|
||
|
(make-bitcoin-cross-toolchain "x86_64-linux-gnu")
|
||
|
(make-bitcoin-cross-toolchain "i686-linux-gnu")
|
||
|
(make-bitcoin-cross-toolchain "aarch64-linux-gnu")
|
||
|
(make-bitcoin-cross-toolchain "arm-linux-gnueabihf" gcc-6)))
|