summaryrefslogtreecommitdiff
path: root/gnu/packages/embedded.scm
diff options
context:
space:
mode:
authorRicardo Wurmus <[email protected]>2025-03-03 14:10:52 +0100
committerRicardo Wurmus <[email protected]>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 930857d0aa..a118db3551 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2019, 2023, 2024 Ricardo Wurmus <[email protected]>
+;;; Copyright © 2016, 2017, 2018, 2019, 2023, 2024, 2025 Ricardo Wurmus <[email protected]>
;;; Copyright © 2016, 2017 Theodoros Foradis <[email protected]>
;;; Copyright © 2016 David Craven <[email protected]>
;;; Copyright © 2017, 2020 Efraim Flashner <[email protected]>
@@ -79,26 +79,31 @@
#:export (make-gcc-arm-none-eabi-4.9
make-gcc-arm-none-eabi-6
make-gcc-arm-none-eabi-7-2018-q2-update
+ make-gcc-arm-none-eabi-9-2020-q2-update
make-gcc-arm-none-eabi-12.3.rel1
make-gcc-vc4
make-newlib-arm-none-eabi
make-newlib-arm-none-eabi-7-2018-q2-update
+ make-newlib-arm-none-eabi-9-2020-q2-update
make-newlib-arm-none-eabi-12.3.rel1
make-newlib-nano-arm-none-eabi
make-newlib-nano-arm-none-eabi-7-2018-q2-update
+ make-newlib-nano-arm-none-eabi-9-2020-q2-update
make-newlib-nano-arm-none-eabi-12.3.rel1
make-arm-none-eabi-toolchain-4.9
make-arm-none-eabi-toolchain-6
make-arm-none-eabi-toolchain-7-2018-q2-update
+ make-arm-none-eabi-toolchain-9-2020-q2-update
make-arm-none-eabi-toolchain-12.3.rel1
make-arm-none-eabi-nano-toolchain-4.9
make-arm-none-eabi-nano-toolchain-6
make-arm-none-eabi-nano-toolchain-7-2018-q2-update
+ make-arm-none-eabi-nano-toolchain-9-2020-q2-update
make-arm-none-eabi-nano-toolchain-12.3.rel1
make-gdb-arm-none-eabi
@@ -475,6 +480,145 @@ embedded-7-branch/")
(make-base-newlib-arm-none-eabi-7-2018-q2-update (make-newlib-nano-arm-none-eabi))))
+;;; The following definitions are for the "9-2020-q2-update" variant of the
+;;; ARM cross toolchain as offered on https://developer.arm.com
+(define make-gcc-arm-none-eabi-9-2020-q2-update
+ (mlambda ()
+ (let ((xgcc (cross-gcc "arm-none-eabi"
+ #:xgcc gcc-9
+ #:xbinutils (cross-binutils "arm-none-eabi")))
+ (commit "13861a80750d118fbdca6006ab175903bacbb7ec")
+ (revision "1"))
+ (package (inherit xgcc)
+ (version (git-version "9-2020-q2-update" revision commit))
+ (source
+ (origin
+ (inherit (package-source xgcc))
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://gcc.gnu.org/git/gcc.git")
+ (commit commit)))
+ (file-name (git-file-name "gcc-arm-embedded" version))
+ (sha256
+ (base32
+ "1cshb1wbynjac3icbf2na633k4d8r7nqn4nv0d65q6f78w295h97"))
+ (patches
+ (append
+ (origin-patches (package-source gcc-9))
+ (search-patches
+ "gcc-10-cross-environment-variables.patch")))))
+ (native-inputs
+ (modify-inputs (package-native-inputs xgcc)
+ (delete "isl")
+ (prepend flex isl-0.18)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments xgcc)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'expand-version-string
+ (lambda _
+ (make-file-writable "gcc/DEV-PHASE")
+ (with-output-to-file "gcc/DEV-PHASE"
+ (lambda ()
+ (display "9-2020-q2-update")))))
+ (add-after 'unpack 'fix-genmultilib
+ (lambda _
+ (substitute* "gcc/genmultilib"
+ (("#!/bin/sh")
+ (string-append "#!" (which "sh"))))))
+ (add-after 'set-paths 'augment-CPLUS_INCLUDE_PATH
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gcc (assoc-ref inputs "gcc")))
+ ;; Remove the default compiler from
+ ;; CPLUS_INCLUDE_PATH to prevent header conflict
+ ;; with the GCC from native-inputs.
+ (setenv "CPLUS_INCLUDE_PATH"
+ (string-join
+ (delete (string-append gcc "/include/c++")
+ (string-split
+ (getenv "CPLUS_INCLUDE_PATH")
+ #\:))
+ ":"))
+ (format #t
+ "environment variable `CPLUS_INCLUDE_PATH'\
+ changed to ~a~%"
+ (getenv "CPLUS_INCLUDE_PATH")))))))
+ ((#:configure-flags flags)
+ ;; The configure flags are largely identical to the flags
+ ;; used by the "GCC ARM embedded" project.
+ #~(append (list "--enable-multilib"
+ "--with-newlib"
+ "--with-multilib-list=rmprofile"
+ "--with-host-libstdcxx=-static-libgcc \
+-Wl,-Bstatic,-lstdc++,-Bdynamic -lm"
+ "--enable-plugins"
+ "--disable-decimal-float"
+ "--disable-libffi"
+ "--disable-libgomp"
+ "--disable-libmudflap"
+ "--disable-libquadmath"
+ "--disable-libssp"
+ "--disable-libstdcxx-pch"
+ "--disable-nls"
+ "--disable-shared"
+ "--disable-threads"
+ "--disable-tls")
+ (delete "--disable-multilib" #$flags)))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "CROSS_C_INCLUDE_PATH")
+ (files '("arm-none-eabi/include")))
+ (search-path-specification
+ (variable "CROSS_CPLUS_INCLUDE_PATH")
+ (files '("arm-none-eabi/include/c++"
+ "arm-none-eabi/include/c++/arm-none-eabi"
+ "arm-none-eabi/include")))
+ (search-path-specification
+ (variable "CROSS_LIBRARY_PATH")
+ (files '("arm-none-eabi/lib")))))))))
+
+(define make-base-newlib-arm-none-eabi-9-2020-q2-update
+ ;; This is the same commit as used for the 9-2020-q2-update release
+ ;; according to the release.txt.
+ (mlambda (base)
+ (let ((commit "6d79e0a58866548f435527798fbd4a6849d05bc7")
+ (revision "0"))
+ (package
+ (inherit base)
+ (version (git-version "3.3.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "http://sourceware.org/git/newlib-cygwin.git")
+ (commit commit)))
+ (file-name (git-file-name "newlib" version))
+ (sha256
+ (base32
+ "095j23mg928rmf4yqmj39wc0nsd207liqrdw4ygh58nygsm4gpmh"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments base)
+ ;; The configure flags are identical to the flags used by the "GCC
+ ;; ARM embedded" project.
+ ((#:configure-flags flags)
+ `(cons* "--enable-newlib-io-c99-formats"
+ "--enable-newlib-retargetable-locking"
+ "--with-headers=yes"
+ ,flags))))
+ (native-inputs
+ `(("xbinutils" ,(cross-binutils "arm-none-eabi"))
+ ("xgcc" ,(make-gcc-arm-none-eabi-9-2020-q2-update))
+ ("texinfo" ,texinfo)))))))
+
+(define make-newlib-arm-none-eabi-9-2020-q2-update
+ (mlambda ()
+ (make-base-newlib-arm-none-eabi-9-2020-q2-update (make-newlib-arm-none-eabi))))
+
+(define make-newlib-nano-arm-none-eabi-9-2020-q2-update
+ (mlambda ()
+ (make-base-newlib-arm-none-eabi-9-2020-q2-update (make-newlib-nano-arm-none-eabi))))
+
+
;;; The following definitions are for the "12.3.rel1" variant of the
;;; ARM cross toolchain as offered on https://developer.arm.com
(define-public make-gcc-arm-none-eabi-12.3.rel1
@@ -723,6 +867,18 @@ languages are C and C++.")
(make-gcc-arm-none-eabi-7-2018-q2-update)
(make-newlib-nano-arm-none-eabi-7-2018-q2-update))))
+(define make-arm-none-eabi-toolchain-9-2020-q2-update
+ (mlambda ()
+ (make-arm-none-eabi-toolchain
+ (make-gcc-arm-none-eabi-9-2020-q2-update)
+ (make-newlib-arm-none-eabi-9-2020-q2-update))))
+
+(define make-arm-none-eabi-nano-toolchain-9-2020-q2-update
+ (mlambda ()
+ (make-arm-none-eabi-toolchain
+ (make-gcc-arm-none-eabi-9-2020-q2-update)
+ (make-newlib-nano-arm-none-eabi-9-2020-q2-update))))
+
(define make-arm-none-eabi-toolchain-12.3.rel1
(mlambda ()
(make-arm-none-eabi-toolchain