gnu: ath9k-htc-firmware: Build with binutils@2.33.1.
[jackhill/guix/guix.git] / gnu / packages / firmware.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
4 ;;; Copyright © 2017 David Craven <david@craven.ch>
5 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
6 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
7 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
8 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
9 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
10 ;;;
11 ;;; This file is part of GNU Guix.
12 ;;;
13 ;;; GNU Guix is free software; you can redistribute it and/or modify it
14 ;;; under the terms of the GNU General Public License as published by
15 ;;; the Free Software Foundation; either version 3 of the License, or (at
16 ;;; your option) any later version.
17 ;;;
18 ;;; GNU Guix is distributed in the hope that it will be useful, but
19 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ;;; GNU General Public License for more details.
22 ;;;
23 ;;; You should have received a copy of the GNU General Public License
24 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
26 (define-module (gnu packages firmware)
27 #:use-module ((guix licenses) #:prefix license:)
28 #:use-module (guix packages)
29 #:use-module (guix download)
30 #:use-module (guix utils)
31 #:use-module (guix git-download)
32 #:use-module (guix build-system gnu)
33 #:use-module (gnu packages)
34 #:use-module (gnu packages admin)
35 #:use-module (gnu packages assembly)
36 #:use-module (gnu packages base)
37 #:use-module (gnu packages bison)
38 #:use-module (gnu packages cmake)
39 #:use-module (gnu packages cross-base)
40 #:use-module (gnu packages flex)
41 #:use-module (gnu packages gcc)
42 #:use-module (gnu packages linux)
43 #:use-module (gnu packages perl)
44 #:use-module (gnu packages python))
45
46 (define-public ath9k-htc-firmware
47 (package
48 (name "ath9k-htc-firmware")
49 (version "1.4.0")
50 (source (origin
51 (method git-fetch)
52 (uri (git-reference
53 (url "https://github.com/qca/open-ath9k-htc-firmware.git")
54 (commit version)))
55 (sha256
56 (base32
57 "16jbj8avg5jkgvq5lxm0hdxxn4c3zn7fx8b4nxllvr024apk9w23"))
58 (file-name (string-append name "-" version "-checkout"))
59 (patches (search-patches "ath9k-htc-firmware-objcopy.patch"))))
60 (build-system gnu-build-system)
61 (arguments
62 '(#:phases
63 (modify-phases %standard-phases
64 (add-before 'configure 'pre-configure
65 (lambda* (#:key inputs native-inputs #:allow-other-keys)
66 (chdir "target_firmware")
67
68 ;; 'configure' is a simple script that runs 'cmake' with
69 ;; the right flags.
70 (substitute* "configure"
71 (("^TOOLCHAIN=.*$")
72 (string-append "TOOLCHAIN="
73 (assoc-ref (or native-inputs inputs) "cross-gcc")
74 "\n")))
75 #t))
76 (replace 'install
77 (lambda* (#:key outputs #:allow-other-keys)
78 (let* ((out (assoc-ref outputs "out"))
79 (fw-dir (string-append out "/lib/firmware")))
80 (for-each (lambda (file)
81 (install-file file fw-dir))
82 (find-files "." "\\.fw$"))
83 #t))))
84 #:tests? #f))
85
86 ;; The firmware is cross-compiled using a "bare bones" compiler (no libc.)
87 ;; Use our own tool chain for that.
88 (native-inputs `(("cross-gcc" ,(cross-gcc
89 "xtensa-elf"
90 #:xbinutils (cross-binutils "xtensa-elf"
91 binutils-2.33)))
92 ("cross-binutils" ,(cross-binutils "xtensa-elf" binutils-2.33))
93 ("cmake" ,cmake-minimal)
94 ("perl" ,perl)))
95 (home-page "http://wireless.kernel.org/en/users/Drivers/ath9k_htc")
96 (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
97 (description
98 "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
99 802.11n NICs (aka Wi-Fi USB dongles). It is used by the ath9k driver of
100 Linux-libre.")
101 (license (license:non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD"))))
102
103 (define-public b43-tools
104 (let ((commit "27892ef741e7f1d08cb939744f8b8f5dac7b04ae")
105 (revision "1"))
106 (package
107 (name "b43-tools")
108 (version (git-version "0.0.0" revision commit))
109 (source
110 (origin
111 (method git-fetch)
112 (uri (git-reference
113 (url "http://git.bues.ch/git/b43-tools.git")
114 (commit commit)))
115 (file-name (string-append name "-" version "-checkout"))
116 (sha256
117 (base32
118 "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
119 (build-system gnu-build-system)
120 (native-inputs
121 `(("flex" ,flex)
122 ("bison" ,bison)))
123 (arguments
124 `(#:modules ((srfi srfi-1)
125 (guix build gnu-build-system)
126 (guix build utils))
127 #:tests? #f ; no tests
128 #:phases
129 (let ((subdirs '("assembler" "disassembler")))
130 (modify-phases %standard-phases
131 (delete 'configure) ; no configure script
132 (add-before 'build 'patch-/bin/true
133 (lambda _
134 (substitute* (find-files "." "Makefile")
135 (("/bin/true") ":"))
136 #t))
137 (replace 'build
138 (lambda _
139 (for-each (lambda (dir)
140 (invoke "make" "-C" dir "CC=gcc"))
141 subdirs)
142 #t))
143 (replace 'install
144 (lambda* (#:key outputs #:allow-other-keys)
145 (let ((out (assoc-ref outputs "out")))
146 (mkdir-p (string-append out "/bin"))
147 (for-each (lambda (dir)
148 (invoke "make" "-C" dir
149 (string-append "PREFIX=" out)
150 "install"))
151 subdirs)
152 #t)))))))
153 (home-page
154 "https://bues.ch/cms/hacking/misc.html#linux_b43_driver_firmware_tools")
155 (synopsis "Collection of tools for the b43 wireless driver")
156 (description
157 "The b43 firmware tools is a collection of firmware extractor,
158 assembler, disassembler, and debugging tools for the Linux kernel b43 wireless
159 driver.")
160 (license license:gpl2))))
161
162 (define-public openfwwf-firmware
163 (package
164 (name "openfwwf-firmware")
165 (version "5.2")
166 (source
167 (origin
168 (method url-fetch)
169 (uri (string-append "http://netweb.ing.unibs.it/~openfwwf/firmware/"
170 "openfwwf-" version ".tar.gz"))
171 (sha256
172 (base32
173 "1p60gdi7w88s7qw82d3g9v7mk887mhvidf4l5q5hh09j10h37q4x"))))
174 (build-system gnu-build-system)
175 (native-inputs
176 `(("b43-tools" ,b43-tools)))
177 (arguments
178 `(#:make-flags (list (string-append "PREFIX="
179 (assoc-ref %outputs "out")
180 "/lib/firmware/b43-open"))
181 #:tests? #f ;no tests
182 #:phases (modify-phases %standard-phases
183 (delete 'configure))))
184 (home-page "http://netweb.ing.unibs.it/~openfwwf/")
185 (synopsis "Firmware for BCM43xx devices")
186 (description
187 "This is firmware from Open FirmWare for WiFi networks (OpenFWWF) for the
188 Broadcom/AirForce chipset BCM43xx with Wireless-Core Revision 5. It is used
189 by the b43-open driver of Linux-libre.")
190 (license license:gpl2)))
191
192 (define* (make-opensbi-package platform variant #:optional (arch "riscv64"))
193 (package
194 (name (string-replace-substring
195 (string-append "opensbi-" platform "-" variant)
196 "_" "-"))
197 (version "0.5")
198 (source
199 (origin
200 (method git-fetch)
201 (uri (git-reference
202 (url "https://github.com/riscv/opensbi.git")
203 (commit (string-append "v" version))))
204 (file-name (git-file-name name version))
205 (sha256
206 (base32 "0qc73xbiy79qqkwxmp4mg15q8n8k26njkyqb6n0jw5dyibd6hb85"))))
207 (build-system gnu-build-system)
208 (native-inputs
209 `(,@(if (and (not (string-prefix? "riscv64" (%current-system)))
210 (string-prefix? "riscv64" arch))
211 `(("cross-gcc" ,(cross-gcc "riscv64-linux-gnu" #:xgcc gcc-7))
212 ("cross-binutils" ,(cross-binutils "riscv64-linux-gnu")))
213 '())))
214 (arguments
215 `(#:tests? #f ; no check target
216 #:make-flags (list (string-append "PLATFORM=" ,platform "/" ,variant)
217 ,@(if (and (not (string-prefix? "riscv64"
218 (%current-system)))
219 (string-prefix? "riscv64" arch))
220 `("CROSS_COMPILE=riscv64-linux-gnu-")
221 '())
222 "FW_PAYLOAD=n"
223 "V=1")
224 #:phases
225 (modify-phases %standard-phases
226 (delete 'configure)
227 (replace 'install
228 (lambda* (#:key outputs #:allow-other-keys)
229 (let ((out (assoc-ref outputs "out"))
230 (bin (find-files "." ".*fw_.*.elf$")))
231 (for-each
232 (lambda (file)
233 (install-file file out))
234 bin))
235 #t)))))
236 (home-page "https://github.com/riscv/opensbi")
237 (synopsis "RISC-V Open Source Supervisor Binary Interface")
238 (description "A reference implementation of the RISC-V SBI specifications
239 for platform-specific firmwares executing in M-mode.")
240 (license (list license:bsd-2
241 ;; lib/utils/libfdt/* is dual licensed under bsd-2 and gpl2+.
242 license:gpl2+
243 ;; platform/ariane-fpga/* is gpl2.
244 license:gpl2))))
245
246 (define-public opensbi-qemu-virt
247 (make-opensbi-package "qemu" "virt"))
248
249 (define-public opensbi-qemu-sifive-u
250 (make-opensbi-package "qemu" "sifive_u"))
251
252 (define-public opensbi-sifive-fu540
253 (make-opensbi-package "sifive" "fu540"))
254
255 (define-public seabios
256 (package
257 (name "seabios")
258 (version "1.13.0")
259 (source
260 (origin
261 (method git-fetch)
262 (uri (git-reference
263 (url "https://review.coreboot.org/seabios.git")
264 (commit (string-append "rel-" version))))
265 (file-name (git-file-name name version))
266 (sha256
267 (base32 "1n1bd6msfs7xn8844sz2qnm7hb5x2qfl3zb06kp4bx9vdc3i6619"))))
268 (build-system gnu-build-system)
269 (native-inputs
270 `(("python" ,python-wrapper)))
271 (arguments
272 `(#:tests? #f ; no check target
273 #:phases
274 (modify-phases %standard-phases
275 (replace 'configure
276 (lambda _
277 (setenv "CC" "gcc")
278 #t))
279 (replace 'install
280 (lambda* (#:key outputs #:allow-other-keys)
281 (let* ((out (assoc-ref outputs "out"))
282 (fmw (string-append out "/share/firmware")))
283 (mkdir-p fmw)
284 (copy-file "out/bios.bin" (string-append fmw "/bios.bin"))
285 #t))))))
286 (home-page "https://www.seabios.org/SeaBIOS")
287 (synopsis "x86 BIOS implementation")
288 (description "SeaBIOS is an implementation of a 16bit x86 BIOS. SeaBIOS
289 can run in an emulator or it can run natively on X86 hardware with the use of
290 coreboot.")
291 ;; Dual licensed.
292 (license (list license:gpl3+ license:lgpl3+
293 ;; src/fw/acpi-dsdt.dsl is lgpl2
294 license:lgpl2.1
295 ;; src/fw/lzmadecode.c and src/fw/lzmadecode.h are lgpl3+ and
296 ;; cpl with a linking exception.
297 license:cpl1.0))))
298
299 ;; OVMF is part of the edk2 source tree.
300 (define edk2-commit "13a50a6fe1dcfa6600c38456ee24e0f9ecf51b5f")
301 (define edk2-version (git-version "20170116" "1" edk2-commit))
302 (define edk2-origin
303 (origin
304 (method git-fetch)
305 (uri (git-reference
306 (url "https://github.com/tianocore/edk2")
307 (commit edk2-commit)))
308 (file-name (git-file-name "edk2" edk2-version))
309 (sha256
310 (base32
311 "1gy2332kdqk8bjzpcsripx10896rbvgl0ic7r344kmpiwdgm948b"))))
312
313 (define-public ovmf
314 (package
315 (name "ovmf")
316 (version edk2-version)
317 (source edk2-origin)
318 (build-system gnu-build-system)
319 (native-inputs
320 `(("acpica" ,acpica)
321 ("gcc" ,gcc-5)
322 ("nasm" ,nasm)
323 ("python-2" ,python-2)
324 ("util-linux" ,util-linux "lib")))
325 (arguments
326 `(#:tests? #f ; No check target.
327 #:phases
328 (modify-phases %standard-phases
329 (replace 'configure
330 (lambda _
331 (let* ((cwd (getcwd))
332 (tools (string-append cwd "/BaseTools"))
333 (bin (string-append tools "/BinWrappers/PosixLike")))
334 (setenv "WORKSPACE" cwd)
335 (setenv "EDK_TOOLS_PATH" tools)
336 (setenv "PATH" (string-append (getenv "PATH") ":" bin))
337 ; FIXME: The below script errors out. When using 'invoke' instead
338 ; of 'system*' this causes the build to fail.
339 (system* "bash" "edksetup.sh")
340 (substitute* "Conf/target.txt"
341 (("^TARGET[ ]*=.*$") "TARGET = RELEASE\n")
342 (("^MAX_CONCURRENT_THREAD_NUMBER[ ]*=.*$")
343 (format #f "MAX_CONCURRENT_THREAD_NUMBER = ~a~%"
344 (number->string (parallel-job-count)))))
345 ;; Build build support.
346 (setenv "BUILD_CC" "gcc")
347 (invoke "make" "-C" tools)
348 #t)))
349 (replace 'build
350 (lambda _
351 (invoke "build" "-a" "IA32" "-t" "GCC49"
352 "-p" "OvmfPkg/OvmfPkgIa32.dsc")))
353 ,@(if (string=? "x86_64-linux" (%current-system))
354 '((add-after 'build 'build-x64
355 (lambda _
356 (invoke "build" "-a" "X64" "-t" "GCC49"
357 "-p" "OvmfPkg/OvmfPkgX64.dsc"))))
358 '())
359 (replace 'install
360 (lambda* (#:key outputs #:allow-other-keys)
361 (let* ((out (assoc-ref outputs "out"))
362 (fmw (string-append out "/share/firmware")))
363 (mkdir-p fmw)
364 (copy-file "Build/OvmfIa32/RELEASE_GCC49/FV/OVMF.fd"
365 (string-append fmw "/ovmf_ia32.bin"))
366 ,@(if (string=? "x86_64-linux" (%current-system))
367 '((copy-file "Build/OvmfX64/RELEASE_GCC49/FV/OVMF.fd"
368 (string-append fmw "/ovmf_x64.bin")))
369 '()))
370 #t)))))
371 (supported-systems '("x86_64-linux" "i686-linux"))
372 (home-page "https://www.tianocore.org")
373 (synopsis "UEFI firmware for QEMU")
374 (description "OVMF is an EDK II based project to enable UEFI support for
375 Virtual Machines. OVMF contains a sample UEFI firmware for QEMU and KVM.")
376 (license (list license:expat
377 license:bsd-2 license:bsd-3 license:bsd-4))))
378
379 (define-public ovmf-aarch64
380 (package
381 (inherit ovmf)
382 (name "ovmf-aarch64")
383 (native-inputs
384 `(,@(package-native-inputs ovmf)
385 ,@(if (not (string-prefix? "aarch64" (%current-system)))
386 `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu"))
387 ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu")))
388 '())))
389 (arguments
390 (substitute-keyword-arguments (package-arguments ovmf)
391 ((#:phases phases)
392 `(modify-phases ,phases
393 (add-before 'configure 'set-env
394 (lambda _
395 ,@(if (not (string-prefix? "aarch64" (%current-system)))
396 `((setenv "GCC49_AARCH64_PREFIX" "aarch64-linux-gnu-"))
397 '())
398 #t))
399 (replace 'build
400 (lambda _
401 (invoke "build" "-a" "AARCH64" "-t" "GCC49"
402 "-p" "ArmVirtPkg/ArmVirtQemu.dsc")))
403 (delete 'build-x64)
404 (replace 'install
405 (lambda* (#:key outputs #:allow-other-keys)
406 (let* ((out (assoc-ref outputs "out"))
407 (fmw (string-append out "/share/firmware")))
408 (mkdir-p fmw)
409 (copy-file "Build/ArmVirtQemu-AARCH64/RELEASE_GCC49/FV/QEMU_EFI.fd"
410 (string-append fmw "/ovmf_aarch64.bin"))
411 #t)))))))
412 (supported-systems %supported-systems)))
413
414 (define-public ovmf-arm
415 (package
416 (inherit ovmf)
417 (name "ovmf-arm")
418 (native-inputs
419 `(,@(package-native-inputs ovmf)
420 ,@(if (not (string-prefix? "armhf" (%current-system)))
421 `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf"))
422 ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
423 '())))
424 (arguments
425 (substitute-keyword-arguments (package-arguments ovmf)
426 ((#:phases phases)
427 `(modify-phases ,phases
428 (add-before 'configure 'set-env
429 (lambda _
430 ,@(if (not (string-prefix? "armhf" (%current-system)))
431 `((setenv "GCC49_ARM_PREFIX" "arm-linux-gnueabihf-"))
432 '())
433 #t))
434 (replace 'build
435 (lambda _
436 (invoke "build" "-a" "ARM" "-t" "GCC49"
437 "-p" "ArmVirtPkg/ArmVirtQemu.dsc")))
438 (delete 'build-x64)
439 (replace 'install
440 (lambda* (#:key outputs #:allow-other-keys)
441 (let* ((out (assoc-ref outputs "out"))
442 (fmw (string-append out "/share/firmware")))
443 (mkdir-p fmw)
444 (copy-file "Build/ArmVirtQemu-ARM/RELEASE_GCC49/FV/QEMU_EFI.fd"
445 (string-append fmw "/ovmf_arm.bin"))
446 #t)))))))
447 (supported-systems %supported-systems)))
448
449 (define* (make-arm-trusted-firmware platform #:optional (arch "aarch64"))
450 (package
451 (name (string-append "arm-trusted-firmware-" platform))
452 (version "2.2")
453 (source
454 (origin
455 (method git-fetch)
456 (uri (git-reference
457 ;; There are only GitHub generated release snapshots.
458 (url "https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/")
459 (commit (string-append "v" version))))
460 (file-name (git-file-name "arm-trusted-firmware" version))
461 (patches (search-patches
462 "arm-trusted-firmware-disable-hdcp.patch"))
463 (sha256
464 (base32
465 "03fjl5hy1bqlya6fg553bqz7jrvilzrzpbs87cv6jd04v8qrvry8"))))
466 (build-system gnu-build-system)
467 (arguments
468 `(#:phases
469 (modify-phases %standard-phases
470 (delete 'configure) ; no configure script
471 ;; Remove binary blobs which do not contain source or proper license.
472 (add-after 'unpack 'remove-binary-blobs
473 (lambda _
474 (for-each (lambda (file)
475 (delete-file file))
476 (find-files "." ".*\\.bin$"))))
477 (replace 'install
478 (lambda* (#:key outputs #:allow-other-keys)
479 (let ((out (assoc-ref outputs "out"))
480 (bin (find-files "." ".*\\.(bin|elf)$")))
481 (for-each
482 (lambda (file)
483 (install-file file out))
484 bin))
485 #t)))
486 #:make-flags (list (string-append "PLAT=" ,platform)
487 ,@(if (and (not (string-prefix? "aarch64"
488 (%current-system)))
489 (string-prefix? "aarch64" arch))
490 `("CROSS_COMPILE=aarch64-linux-gnu-")
491 '())
492 ,@(if (and (not (string-prefix? "armhf"
493 (%current-system)))
494 (string-prefix? "armhf" arch))
495 `("CROSS_COMPILE=arm-linux-gnueabihf-")
496 '())
497 "DEBUG=1")
498 #:tests? #f)) ; no tests
499 (native-inputs
500 `(,@(if (and (not (string-prefix? "aarch64" (%current-system)))
501 (string-prefix? "aarch64" arch))
502 ;; gcc-7 since it is used for u-boot, which needs gcc-7.
503 `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu" #:xgcc gcc-7))
504 ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu")))
505 '())
506 ,@(if (and (not (string-prefix? "armhf" (%current-system)))
507 (string-prefix? "armhf" arch))
508 ;; gcc-7 since it is used for u-boot, which needs gcc-7.
509 `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf" #:xgcc gcc-7))
510 ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
511 '())
512 ))
513 (home-page "https://www.trustedfirmware.org/")
514 (synopsis "Implementation of \"secure world software\"")
515 (description
516 "ARM Trusted Firmware provides a reference implementation of secure world
517 software for ARMv7A and ARMv8-A, including a Secure Monitor executing at
518 @dfn{Exception Level 3} (EL3). It implements various ARM interface standards,
519 such as:
520 @enumerate
521 @item The Power State Coordination Interface (PSCI)
522 @item Trusted Board Boot Requirements (TBBR, ARM DEN0006C-1)
523 @item SMC Calling Convention
524 @item System Control and Management Interface
525 @item Software Delegated Exception Interface (SDEI)
526 @end enumerate\n")
527 (license (list license:bsd-3
528 license:bsd-2)))) ; libfdt
529
530 (define-public arm-trusted-firmware-sun50i-a64
531 (let ((base (make-arm-trusted-firmware "sun50i_a64")))
532 (package
533 (inherit base)
534 (name "arm-trusted-firmware-sun50i-a64"))))
535
536 (define-public arm-trusted-firmware-rk3328
537 (make-arm-trusted-firmware "rk3328"))
538
539 (define-public arm-trusted-firmware-puma-rk3399
540 (let ((base (make-arm-trusted-firmware "rk3399"))
541 ;; Vendor's arm trusted firmware branch hasn't been upstreamed yet.
542 (commit "d71e6d83612df896774ec4c03d49500312d2c324")
543 (revision "1"))
544 (package
545 (inherit base)
546 (name "arm-trusted-firmware-puma-rk3399")
547 (version (git-version "1.3" revision commit))
548 (source
549 (origin
550 (method git-fetch)
551 (uri (git-reference
552 (url "https://git.theobroma-systems.com/arm-trusted-firmware.git")
553 (commit commit)))
554 (file-name (git-file-name name version))
555 (sha256
556 (base32
557 "0vqhwqqh8h9qlkpybg2v94911091c1418bc4pnzq5fd7zf0fjkf8")))))))
558
559 (define-public arm-trusted-firmware-rk3399
560 (let ((base (make-arm-trusted-firmware "rk3399")))
561 (package
562 (inherit base)
563 (name "arm-trusted-firmware-rk3399")
564 (native-inputs
565 `(("cross32-gcc" ,(cross-gcc "arm-none-eabi"))
566 ("cross32-binutils", (cross-binutils "arm-none-eabi"))
567 ,@(package-native-inputs base))))))
568
569 (define-public rk3399-cortex-m0
570 (package
571 (name "rk3399-cortex-m0")
572 (version "1")
573 (source
574 (origin
575 (method git-fetch)
576 (uri (git-reference
577 (url "https://git.theobroma-systems.com/rk3399-cortex-m0.git")
578 (commit (string-append "v" version))))
579 (file-name (git-file-name "rk3399-cortex-m0" version))
580 (sha256
581 (base32
582 "02wz1vkf4j3zc8rx289z76xhrf71jhb2p05lvmygky393a9gjh9w"))))
583 (home-page "https://git.theobroma-systems.com/rk3399-cortex-m0.git/about/")
584 (synopsis "PMU Cortex M0 firmware for RK3399 Q7 (Puma)")
585 (description
586 "Cortex-M0 firmware used with the RK3399 to implement
587 power-management functionality and helpers (e.g. DRAM frequency
588 switching support).\n")
589 (license license:bsd-3)
590 (build-system gnu-build-system)
591 (arguments
592 `(#:phases
593 (modify-phases %standard-phases
594 (delete 'configure)
595 (delete 'check)
596 (replace 'install
597 (lambda* (#:key outputs #:allow-other-keys)
598 (let ((out (assoc-ref outputs "out"))
599 (mzerofiles (find-files "." "rk3399m0.(elf|bin)$")))
600 (for-each
601 (lambda (file)
602 (install-file file out))
603 mzerofiles))
604 #t))
605 (add-before 'build 'setenv
606 (lambda* (#:key inputs #:allow-other-keys)
607 (setenv "CROSS_COMPILE" "arm-none-eabi-")
608 #t)))))
609 (native-inputs `(("cross-gcc" ,(cross-gcc "arm-none-eabi" #:xgcc gcc-7))
610 ("cross-binutils" ,(cross-binutils "arm-none-eabi"))))))