aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/cross-base.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-11-11 21:54:41 +0100
committerLudovic Courtès <ludo@gnu.org>2014-11-11 22:36:49 +0100
commit1306b0b003a557105d3b27e44052db217c7283d3 (patch)
tree37e1385ee79afd9495291a3898701fc57732f308 /gnu/packages/cross-base.scm
parent594340bc79586f6880231b52fc94d100309fec45 (diff)
downloadguix-1306b0b003a557105d3b27e44052db217c7283d3.tar
guix-1306b0b003a557105d3b27e44052db217c7283d3.tar.gz
gnu: cross-base: Apply Qualcomm's patches for Binutils and GCC.
This fixes compilation of the ath9k-htc firmware. Before that, loading it would result in "Target is unresponsive". The patches come from the ath9k-htc firmware source. * gnu/packages/patches/ath9k-htc-firmware-binutils.patch, gnu/packages/patches/ath9k-htc-firmware-gcc.patch: New files. * gnu-system.am (dist_patch_DATA): Add them. * gnu/packages/cross-base.scm (package-with-patch): New procedure. (cross-binutils): Check whether TARGET starts with "xtensa-", and call 'package-with-patch' when it does. (cross-gcc-patches): New procedure. (cross-gcc): Use it to add patches.
Diffstat (limited to 'gnu/packages/cross-base.scm')
-rw-r--r--gnu/packages/cross-base.scm26
1 files changed, 23 insertions, 3 deletions
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index a91952daca..a68711c91f 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -45,6 +45,12 @@
`(cons ,(string-append "--target=" target)
,flags))))))
+(define (package-with-patch original patch)
+ "Return package ORIGINAL with PATCH applied."
+ (package (inherit original)
+ (source (origin (inherit (package-source original))
+ (patches (list patch))))))
+
(define (cross-binutils target)
"Return a cross-Binutils for TARGET."
(let ((binutils (package (inherit binutils)
@@ -64,7 +70,14 @@
;; practice the RUNPATH of target libs only refers to
;; target libs, not native libs, so this is safe.
`(cons "--with-sysroot=/" ,flags)))))))
- (cross binutils target)))
+
+ ;; For Xtensa, apply Qualcomm's patch.
+ (cross (if (string-prefix? "xtensa-" target)
+ (package-with-patch binutils
+ (search-patch
+ "ath9k-htc-firmware-binutils.patch"))
+ binutils)
+ target)))
(define (cross-gcc-arguments target libc)
"Return build system arguments for a cross-gcc for TARGET, using LIBC (which
@@ -165,6 +178,13 @@ may be either a libc package or #f.)"
;; for instance.
#f))))
+(define (cross-gcc-patches target)
+ "Return GCC patches needed for TARGET."
+ (cond ((string-prefix? "xtensa-" target)
+ ;; Patch by Qualcomm needed to build the ath9k-htc firmware.
+ (list (search-patch "ath9k-htc-firmware-gcc.patch")))
+ (else '())))
+
(define* (cross-gcc target
#:optional (xbinutils (cross-binutils target)) libc)
"Return a cross-compiler for TARGET, where TARGET is a GNU triplet. Use
@@ -176,8 +196,8 @@ GCC that does not target a libc; otherwise, target that libc."
target))
(source (origin (inherit (package-source gcc-4.8))
(patches
- (list (search-patch
- "gcc-cross-environment-variables.patch")))))
+ (cons (search-patch "gcc-cross-environment-variables.patch")
+ (cross-gcc-patches target)))))
;; For simplicity, use a single output. Otherwise libgcc_s & co. are not
;; found by default, etc.