~ruther/guix-local

4902c3ecc6b74493f0c4f29efdffc46b187f2b11 — Ludovic Courtès 11 years ago 9d30746
gnu: Add ath9k-htc-firmware.

* gnu/packages/firmware.scm: New file.
* gnu/packages/patches/ath9k-htc-firmware-objcopy.patch: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add 'firmware.scm'.
  (dist_patch_DATA): Add the patch.
M gnu-system.am => gnu-system.am +2 -0
@@ 81,6 81,7 @@ GNU_SYSTEM_MODULES =				\
  gnu/packages/enchant.scm			\
  gnu/packages/feh.scm                          \
  gnu/packages/file.scm				\
  gnu/packages/firmware.scm			\
  gnu/packages/fish.scm				\
  gnu/packages/flashing-tools.scm		\
  gnu/packages/flex.scm				\


@@ 307,6 308,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/abiword-wmf-version-lookup-fix.patch	\
  gnu/packages/patches/alsa-lib-mips-atomic-fix.patch		\
  gnu/packages/patches/apr-skip-getservbyname-test.patch	\
  gnu/packages/patches/ath9k-htc-firmware-objcopy.patch		\
  gnu/packages/patches/automake-skip-amhello-tests.patch	\
  gnu/packages/patches/avahi-localstatedir.patch		\
  gnu/packages/patches/avrdude-fix-libusb.patch			\

A gnu/packages/firmware.scm => gnu/packages/firmware.scm +83 -0
@@ 0,0 1,83 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages firmware)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix git-download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages cmake)
  #:use-module (gnu packages cross-base)
  #:use-module (gnu packages perl))

(define-public ath9k-htc-firmware
  (package
    (name "ath9k-htc-firmware")
    (version "1.3.2")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/qca/open-ath9k-htc-firmware.git")
                    (commit version)))
              (sha256
               (base32
                "0dgqfp4cbky79vzjrdy3j462l8figymzrk2v0jalmmz3lkxw88ww"))
              (patches (list (search-patch "ath9k-htc-firmware-objcopy.patch")))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-cons-before
                 'configure 'pre-configure
                 (lambda* (#:key inputs #:allow-other-keys)
                   (chdir "target_firmware")

                   ;; 'configure' is a simple script that runs 'cmake' with
                   ;; the right flags.
                   (substitute* "configure"
                     (("^TOOLCHAIN=.*$")
                      (string-append "TOOLCHAIN="
                                     (assoc-ref inputs "cross-gcc")
                                     "\n"))))
                 (alist-replace
                  'install
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let* ((out    (assoc-ref outputs "out"))
                           (fw-dir (string-append out "/lib/firmware")))
                      (mkdir-p fw-dir)
                      (for-each (lambda (file)
                                  (copy-file file
                                             (string-append fw-dir "/"
                                                            (basename file))))
                                (find-files "." "\\.fw$"))
                      #t))
                  %standard-phases))
       #:tests? #f))

    ;; The firmware is cross-compiled using a "bare bones" compiler (no libc.)
    ;; Use our own tool chain for that.
    (native-inputs `(("cross-gcc" ,xgcc-xtensa)
                     ("cross-binutils" ,(cross-binutils "xtensa-elf"))
                     ("cmake" ,cmake)
                     ("perl" ,perl)))
    (home-page "http://wireless.kernel.org/en/users/Drivers/ath9k_htc")
    (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
    (description
     "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
802.11n NICs (aka. Wi-Fi USB dongles.)  It is used by the ath9k driver of
Linux-libre.")
    (license (bsd-style "http://directory.fsf.org/wiki/License:ClearBSD"))))

A gnu/packages/patches/ath9k-htc-firmware-objcopy.patch => gnu/packages/patches/ath9k-htc-firmware-objcopy.patch +14 -0
@@ 0,0 1,14 @@
The firmware is cross-compiled, but the build system ends up using
'objcopy' instead of 'xtensa-elf-objcopy' by default.  Force it to
use the right one.

--- source/target_firmware/configure	2014-10-28 20:57:26.834436561 +0100
+++ source/target_firmware/configure	2014-10-28 20:57:29.666436530 +0100
@@ -11,6 +11,7 @@ mkdir -p build
 cat > "$TOOLCHAIN_FILE" <<EOF
 INCLUDE(CMakeForceCompiler)
 
+SET(CMAKE_OBJCOPY xtensa-elf-objcopy)
 SET(CMAKE_SYSTEM_PROCESSOR xtensa)
 SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/$TARGET)
 SET(CMAKE_STRIP :)