summaryrefslogtreecommitdiff
path: root/gnu/packages/embedded.scm
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2025-03-03 14:10:52 +0100
committerRicardo Wurmus <rekado@elephly.net>2025-03-03 14:30:36 +0100
commitcccc6b8b19c3a25f6cacfe06098b068bf14af62b (patch)
tree961de3e5ad814d5bb80a2340ec400e22ff192833 /gnu/packages/embedded.scm
parent187b6c515d4ccc7f7b2f9a1cc5c4fede561f7bc8 (diff)
gnu: Add GCC arm-none-eabi toolchain 9-2020-q2-update.
* gnu/packages/embedded.scm: (make-gcc-arm-none-eabi-9-2020-q2-update, make-newlib-arm-none-eabi-9-2020-q2-update, make-newlib-nano-arm-none-eabi-9-2020-q2-update, make-arm-none-eabi-toolchain-9-2020-q2-update): New procedures. Change-Id: Iffb1554bbf38382dadaac7ad8059330f37a54a5c
Diffstat (limited to 'gnu/packages/embedded.scm')
-rw-r--r--gnu/packages/embedded.scm158
1 files changed, 157 insertions, 1 deletions
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 930857d0aa7..a118db3551b 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -1,5 +1,5 @@
1;;; GNU Guix --- Functional package management for GNU 1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016, 2017, 2018, 2019, 2023, 2024 Ricardo Wurmus <rekado@elephly.net> 2;;; Copyright © 2016, 2017, 2018, 2019, 2023, 2024, 2025 Ricardo Wurmus <rekado@elephly.net>
3;;; Copyright © 2016, 2017 Theodoros Foradis <theodoros@foradis.org> 3;;; Copyright © 2016, 2017 Theodoros Foradis <theodoros@foradis.org>
4;;; Copyright © 2016 David Craven <david@craven.ch> 4;;; Copyright © 2016 David Craven <david@craven.ch>
5;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il> 5;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
@@ -79,26 +79,31 @@
79 #:export (make-gcc-arm-none-eabi-4.9 79 #:export (make-gcc-arm-none-eabi-4.9
80 make-gcc-arm-none-eabi-6 80 make-gcc-arm-none-eabi-6
81 make-gcc-arm-none-eabi-7-2018-q2-update 81 make-gcc-arm-none-eabi-7-2018-q2-update
82 make-gcc-arm-none-eabi-9-2020-q2-update
82 make-gcc-arm-none-eabi-12.3.rel1 83 make-gcc-arm-none-eabi-12.3.rel1
83 84
84 make-gcc-vc4 85 make-gcc-vc4
85 86
86 make-newlib-arm-none-eabi 87 make-newlib-arm-none-eabi
87 make-newlib-arm-none-eabi-7-2018-q2-update 88 make-newlib-arm-none-eabi-7-2018-q2-update
89 make-newlib-arm-none-eabi-9-2020-q2-update
88 make-newlib-arm-none-eabi-12.3.rel1 90 make-newlib-arm-none-eabi-12.3.rel1
89 91
90 make-newlib-nano-arm-none-eabi 92 make-newlib-nano-arm-none-eabi
91 make-newlib-nano-arm-none-eabi-7-2018-q2-update 93 make-newlib-nano-arm-none-eabi-7-2018-q2-update
94 make-newlib-nano-arm-none-eabi-9-2020-q2-update
92 make-newlib-nano-arm-none-eabi-12.3.rel1 95 make-newlib-nano-arm-none-eabi-12.3.rel1
93 96
94 make-arm-none-eabi-toolchain-4.9 97 make-arm-none-eabi-toolchain-4.9
95 make-arm-none-eabi-toolchain-6 98 make-arm-none-eabi-toolchain-6
96 make-arm-none-eabi-toolchain-7-2018-q2-update 99 make-arm-none-eabi-toolchain-7-2018-q2-update
100 make-arm-none-eabi-toolchain-9-2020-q2-update
97 make-arm-none-eabi-toolchain-12.3.rel1 101 make-arm-none-eabi-toolchain-12.3.rel1
98 102
99 make-arm-none-eabi-nano-toolchain-4.9 103 make-arm-none-eabi-nano-toolchain-4.9
100 make-arm-none-eabi-nano-toolchain-6 104 make-arm-none-eabi-nano-toolchain-6
101 make-arm-none-eabi-nano-toolchain-7-2018-q2-update 105 make-arm-none-eabi-nano-toolchain-7-2018-q2-update
106 make-arm-none-eabi-nano-toolchain-9-2020-q2-update
102 make-arm-none-eabi-nano-toolchain-12.3.rel1 107 make-arm-none-eabi-nano-toolchain-12.3.rel1
103 108
104 make-gdb-arm-none-eabi 109 make-gdb-arm-none-eabi
@@ -475,6 +480,145 @@ embedded-7-branch/")
475 (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi)))) 480 (make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi))))
476 481
477 482
483;;; The following definitions are for the "9-2020-q2-update" variant of the
484;;; ARM cross toolchain as offered on https://developer.arm.com
485(define make-gcc-arm-none-eabi-9-2020-q2-update
486 (mlambda ()
487 (let ((xgcc (cross-gcc "arm-none-eabi"
488 #:xgcc gcc-9
489 #:xbinutils (cross-binutils "arm-none-eabi")))
490 (commit "13861a80750d118fbdca6006ab175903bacbb7ec")
491 (revision "1"))
492 (package (inherit xgcc)
493 (version (git-version "9-2020-q2-update" revision commit))
494 (source
495 (origin
496 (inherit (package-source xgcc))
497 (method git-fetch)
498 (uri (git-reference
499 (url "git://gcc.gnu.org/git/gcc.git")
500 (commit commit)))
501 (file-name (git-file-name "gcc-arm-embedded" version))
502 (sha256
503 (base32
504 "1cshb1wbynjac3icbf2na633k4d8r7nqn4nv0d65q6f78w295h97"))
505 (patches
506 (append
507 (origin-patches (package-source gcc-9))
508 (search-patches
509 "gcc-10-cross-environment-variables.patch")))))
510 (native-inputs
511 (modify-inputs (package-native-inputs xgcc)
512 (delete "isl")
513 (prepend flex isl-0.18)))
514 (arguments
515 (substitute-keyword-arguments (package-arguments xgcc)
516 ((#:phases phases)
517 #~(modify-phases #$phases
518 (add-after 'unpack 'expand-version-string
519 (lambda _
520 (make-file-writable "gcc/DEV-PHASE")
521 (with-output-to-file "gcc/DEV-PHASE"
522 (lambda ()
523 (display "9-2020-q2-update")))))
524 (add-after 'unpack 'fix-genmultilib
525 (lambda _
526 (substitute* "gcc/genmultilib"
527 (("#!/bin/sh")
528 (string-append "#!" (which "sh"))))))
529 (add-after 'set-paths 'augment-CPLUS_INCLUDE_PATH
530 (lambda* (#:key inputs #:allow-other-keys)
531 (let ((gcc (assoc-ref inputs "gcc")))
532 ;; Remove the default compiler from
533 ;; CPLUS_INCLUDE_PATH to prevent header conflict
534 ;; with the GCC from native-inputs.
535 (setenv "CPLUS_INCLUDE_PATH"
536 (string-join
537 (delete (string-append gcc "/include/c++")
538 (string-split
539 (getenv "CPLUS_INCLUDE_PATH")
540 #\:))
541 ":"))
542 (format #t
543 "environment variable `CPLUS_INCLUDE_PATH'\
544 changed to ~a~%"
545 (getenv "CPLUS_INCLUDE_PATH")))))))
546 ((#:configure-flags flags)
547 ;; The configure flags are largely identical to the flags
548 ;; used by the "GCC ARM embedded" project.
549 #~(append (list "--enable-multilib"
550 "--with-newlib"
551 "--with-multilib-list=rmprofile"
552 "--with-host-libstdcxx=-static-libgcc \
553-Wl,-Bstatic,-lstdc++,-Bdynamic -lm"
554 "--enable-plugins"
555 "--disable-decimal-float"
556 "--disable-libffi"
557 "--disable-libgomp"
558 "--disable-libmudflap"
559 "--disable-libquadmath"
560 "--disable-libssp"
561 "--disable-libstdcxx-pch"
562 "--disable-nls"
563 "--disable-shared"
564 "--disable-threads"
565 "--disable-tls")
566 (delete "--disable-multilib" #$flags)))))
567 (native-search-paths
568 (list (search-path-specification
569 (variable "CROSS_C_INCLUDE_PATH")
570 (files '("arm-none-eabi/include")))
571 (search-path-specification
572 (variable "CROSS_CPLUS_INCLUDE_PATH")
573 (files '("arm-none-eabi/include/c++"
574 "arm-none-eabi/include/c++/arm-none-eabi"
575 "arm-none-eabi/include")))
576 (search-path-specification
577 (variable "CROSS_LIBRARY_PATH")
578 (files '("arm-none-eabi/lib")))))))))
579
580(define make-base-newlib-arm-none-eabi-9-2020-q2-update
581 ;; This is the same commit as used for the 9-2020-q2-update release
582 ;; according to the release.txt.
583 (mlambda (base)
584 (let ((commit "6d79e0a58866548f435527798fbd4a6849d05bc7")
585 (revision "0"))
586 (package
587 (inherit base)
588 (version (git-version "3.3.0" revision commit))
589 (source
590 (origin
591 (method git-fetch)
592 (uri (git-reference
593 (url "http://sourceware.org/git/newlib-cygwin.git")
594 (commit commit)))
595 (file-name (git-file-name "newlib" version))
596 (sha256
597 (base32
598 "095j23mg928rmf4yqmj39wc0nsd207liqrdw4ygh58nygsm4gpmh"))))
599 (arguments
600 (substitute-keyword-arguments (package-arguments base)
601 ;; The configure flags are identical to the flags used by the "GCC
602 ;; ARM embedded" project.
603 ((#:configure-flags flags)
604 `(cons* "--enable-newlib-io-c99-formats"
605 "--enable-newlib-retargetable-locking"
606 "--with-headers=yes"
607 ,flags))))
608 (native-inputs
609 `(("xbinutils" ,(cross-binutils "arm-none-eabi"))
610 ("xgcc" ,(make-gcc-arm-none-eabi-9-2020-q2-update))
611 ("texinfo" ,texinfo)))))))
612
613(define make-newlib-arm-none-eabi-9-2020-q2-update
614 (mlambda ()
615 (make-base-newlib-arm-none-eabi-9-2020-q2-update (make-newlib-arm-none-eabi))))
616
617(define make-newlib-nano-arm-none-eabi-9-2020-q2-update
618 (mlambda ()
619 (make-base-newlib-arm-none-eabi-9-2020-q2-update (make-newlib-nano-arm-none-eabi))))
620
621
478;;; The following definitions are for the "12.3.rel1" variant of the 622;;; The following definitions are for the "12.3.rel1" variant of the
479;;; ARM cross toolchain as offered on https://developer.arm.com 623;;; ARM cross toolchain as offered on https://developer.arm.com
480(define-public make-gcc-arm-none-eabi-12.3.rel1 624(define-public make-gcc-arm-none-eabi-12.3.rel1
@@ -723,6 +867,18 @@ languages are C and C++.")
723 (make-gcc-arm-none-eabi-7-2018-q2-update) 867 (make-gcc-arm-none-eabi-7-2018-q2-update)
724 (make-newlib-nano-arm-none-eabi-7-2018-q2-update)))) 868 (make-newlib-nano-arm-none-eabi-7-2018-q2-update))))
725 869
870(define make-arm-none-eabi-toolchain-9-2020-q2-update
871 (mlambda ()
872 (make-arm-none-eabi-toolchain
873 (make-gcc-arm-none-eabi-9-2020-q2-update)
874 (make-newlib-arm-none-eabi-9-2020-q2-update))))
875
876(define make-arm-none-eabi-nano-toolchain-9-2020-q2-update
877 (mlambda ()
878 (make-arm-none-eabi-toolchain
879 (make-gcc-arm-none-eabi-9-2020-q2-update)
880 (make-newlib-nano-arm-none-eabi-9-2020-q2-update))))
881
726(define make-arm-none-eabi-toolchain-12.3.rel1 882(define make-arm-none-eabi-toolchain-12.3.rel1
727 (mlambda () 883 (mlambda ()
728 (make-arm-none-eabi-toolchain 884 (make-arm-none-eabi-toolchain