[PATCH] gnu: Add simavr

DoneSubmitted by Artyom V. Poptsov.
Details
3 participants
  • Ludovic Courtès
  • Maxime Devos
  • Artyom V. Poptsov
Owner
unassigned
Severity
normal
A
A
Artyom V. Poptsov wrote on 20 Mar 17:36 +0100
(address . guix-patches@gnu.org)
878rt4shrc.fsf@gmail.com
Hello,

this patch adds simavr [1] -- an AVR simulator.

Thanks,

- Artyom

References:
From 05b3a83a9f0f9b0e08d2675cb9b1a80c6b30114d Mon Sep 17 00:00:00 2001
From: "Artyom V. Poptsov" <poptsov.artyom@gmail.com>
Date: Sat, 19 Mar 2022 23:39:54 +0300
Subject: [PATCH] gnu: Add simavr

* gnu/packages/avr.scm (simavr): New variable.
---
gnu/packages/avr.scm | 74 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 73 insertions(+), 1 deletion(-)

Toggle diff (105 lines)
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index 3cc5a6964e..9836cc6305 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,7 @@
 (define-module (gnu packages avr)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
@@ -35,7 +37,17 @@
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages flashing-tools)
   #:use-module (gnu packages gcc)
-  #:use-module (gnu packages vim))
+  #:use-module (gnu packages vim)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages avr)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ruby))
 
 (define-public avr-binutils
   (package
@@ -181,3 +193,63 @@ inlining, and features an aggressive tree-shaker, eliminating unused top-level
 definitions.  Microscheme has a robust @dfn{Foreign Function Interface} (FFI)
 meaning that C code may be invoked directly from (ms) programs.")
     (license license:expat)))
+
+(define-public simavr
+  (package
+    (name "simavr")
+    (version "1.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/buserror/simavr")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "0njz03lkw5374x1lxrq08irz4b86lzj2hibx46ssp7zv712pq55q"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f
+      #:modules '((guix build gnu-build-system)
+                  (guix build utils))
+      #:phases #~(modify-phases %standard-phases
+                   (delete 'configure)
+                   (replace 'check
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (when tests?
+                         (invoke "make"
+                                 "-C"
+                                 "tests"
+                                 (string-append "CC=" #$(cc-for-target))
+                                 "RELEASE=1"
+                                 "run_tests")))))
+      #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
+                           "RELEASE=1"
+                           (string-append "PREFIX=" #$output)
+                           (string-append "DESTDIR=" #$output))))
+    (propagated-inputs
+     (list avr-toolchain))
+    (native-inputs
+     (list autoconf
+           which
+           git
+           automake
+           pkg-config
+           ncurses
+           ruby))
+    (inputs
+     (list bash-minimal libelf freeglut))
+    (home-page "https://github.com/buserror/simavr")
+    (synopsis "Lean, mean and hackable AVR simulator for GNU/Linux and OSX")
+    (description
+     "simavr is a new AVR simulator for GNU/Linux, or any platform that uses
+@command{avr-gcc}.  It uses avr-gcc's own register definition to simplify
+creating new targets for supported AVR devices.  The core was made to be small
+and compact, and hackable so allow quick prototyping of an AVR project.  The
+AVR core is now stable for use with parts with <= 128KB flash, and with
+preliminary support for the bigger parts.  The simulator loads ELF files
+directly, and there is even a way to specify simulation parameterps directly
+in the emulated code using an @code{.elf} section.  You can also load
+multipart HEX files.")
+    (license license:gpl3)))
-- 
2.25.1
--
Artyom "avp" Poptsov <poptsov.artyom@gmail.com>
CADR Hackerspace co-founder: https://cadrspace.ru/
GPG: D0C2 EAC1 3310 822D 98DE B57C E9C5 A2D9 0898 A02F
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEE0MLqwTMQgi2Y3rV86cWi2QiYoC8FAmI3WBcACgkQ6cWi2QiY
oC9IdQf/Rj6GW8KH5P5yilWziCAF+ANSoOk0vu1Z4MSQ2j3fyUnejWcCtiQTxwfw
ORcGjGoHJQhVN+Y8pNHdrlXseDrqXQbC/GBv7UJnHiXutjUhiQc3TFNOx81d7oBt
evubrflVOGyW84sWSoNkLeR9D7/xpkZPBIgrS5kkxg16O1EViZOzs7fhVYTewh+z
Ft2ZfgJ58k6joWFLEgl0msFsC/HwE/PvY7D1NHPn53fqPb1lpo5aFkHqvpP2NpuJ
V516LewsQO2odEbccrVItrin+0s/tQBgEUL1eFKgND4f6LYKiPRSmnGIVyGkYOD4
w9JR7LtHKpHER9tuXRQ+EaKSGw+Frw==
=uFGG
-----END PGP SIGNATURE-----

M
M
Maxime Devos wrote on 20 Mar 18:30 +0100
b9331fb35aeeba4701c2b2ec247eb7b8ece7e328.camel@telenet.be
Artyom V. Poptsov schreef op zo 20-03-2022 om 19:36 [+0300]:
Toggle quote (5 lines)
> +  #:use-module (gnu packages autotools)
> +  #:use-module (gnu packages base)
> +  #:use-module (gnu packages bash)
> +  #:use-module (gnu packages avr)

Why is (gnu packages avr) importing (gnu packages avr)?

Toggle quote (7 lines)
> +  #:use-module (gnu packages elf)
> +  #:use-module (gnu packages gl)
> +  #:use-module (gnu packages pkg-config)
> +  #:use-module (gnu packages ncurses)
> +  #:use-module (gnu packages version-control)
> +  #:use-module (gnu packages ruby))

I think most users of avr-libc and avr-toolchain don't need simavr,
so WDYT of defining simavr in a separate module to avoid loading
the (gnu packages ruby) module (which has a large closure, including
much of haskell, java) unless actually necessary? Benefits are lower
memory usage and less startup time.

Long-term, separating modules (*) a bit more would help with avoiding
circular imports (and maybe eventually, making sure imports aren't
circular at compile-time), makings some ideas for making "guix pull"
faster more feasible
and effective. I don't think any conclusion was reached upon that
though ...

(*) Though in this case, there doesn't appear to be any circularity,
yet.

Greetings,
Maxime.
-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYjdkrhccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7sP/AP9MWKReBMtg6qj3EIyUwiDVnbrw
KNaTeLYwQprEsT5BbgEAy6luIlCCD0Dj4iCVBRr/y9vjuwKi9fDh+V2gz2Jdago=
=Z2L5
-----END PGP SIGNATURE-----


A
A
Artyom V. Poptsov wrote on 21 Mar 22:00 +0100
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 54482@debbugs.gnu.org)
874k3rrpfb.fsf@gmail.com
Hello Maxime,

thanks for the feedback!

Here's the updated version of the patch. I decided to move 'simavr'
package to a new 'avr-xyz' module.

- Artyom
From 2ea020a319f5c2fa27662a8e505a1d4b8e916ea9 Mon Sep 17 00:00:00 2001
From: "Artyom V. Poptsov" <poptsov.artyom@gmail.com>
Date: Sat, 19 Mar 2022 23:39:54 +0300
Subject: [PATCH] gnu: avr-xyz: Add simavr

* gnu/packages/avr-xyz.scm: New module.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add 'avr-xyz.scm'.
---
gnu/local.mk | 2 +
gnu/packages/avr-xyz.scm | 97 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 99 insertions(+)
create mode 100644 gnu/packages/avr-xyz.scm

Toggle diff (125 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 484757b207..edb8f6a576 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -49,6 +49,7 @@
 # Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 # Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 # Copyright © 2022 Remco van 't Veer <remco@remworks.net>
+# Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -119,6 +120,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/autotools.scm			\
   %D%/packages/avahi.scm			\
   %D%/packages/avr.scm				\
+  %D%/packages/avr-xyz.scm			\
   %D%/packages/axoloti.scm			\
   %D%/packages/backup.scm			\
   %D%/packages/base.scm				\
diff --git a/gnu/packages/avr-xyz.scm b/gnu/packages/avr-xyz.scm
new file mode 100644
index 0000000000..800f8af21e
--- /dev/null
+++ b/gnu/packages/avr-xyz.scm
@@ -0,0 +1,97 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
+;;;
+;;; 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 avr-xyz)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages avr)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ruby))
+
+(define-public simavr
+  (package
+    (name "simavr")
+    (version "1.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/buserror/simavr")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "0njz03lkw5374x1lxrq08irz4b86lzj2hibx46ssp7zv712pq55q"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f
+      #:modules '((guix build gnu-build-system)
+                  (guix build utils))
+      #:phases #~(modify-phases %standard-phases
+                   (delete 'configure)
+                   (replace 'check
+                     (lambda* (#:key tests? outputs #:allow-other-keys)
+                       (when tests?
+                         (invoke "make"
+                                 "-C"
+                                 "tests"
+                                 (string-append "CC=" #$(cc-for-target))
+                                 "RELEASE=1"
+                                 "run_tests")))))
+      #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
+                           "RELEASE=1"
+                           (string-append "PREFIX=" #$output)
+                           (string-append "DESTDIR=" #$output))))
+    (propagated-inputs
+     (list avr-toolchain))
+    (native-inputs
+     (list autoconf
+           which
+           git
+           automake
+           pkg-config
+           ncurses
+           ruby))
+    (inputs
+     (list bash-minimal libelf freeglut))
+    (home-page "https://github.com/buserror/simavr")
+    (synopsis "Lean, mean and hackable AVR simulator for GNU/Linux and OSX")
+    (description
+     "simavr is a new AVR simulator for GNU/Linux, or any platform that uses
+@command{avr-gcc}.  It uses avr-gcc's own register definition to simplify
+creating new targets for supported AVR devices.  The core was made to be small
+and compact, and hackable so allow quick prototyping of an AVR project.  The
+AVR core is now stable for use with parts with <= 128KB flash, and with
+preliminary support for the bigger parts.  The simulator loads ELF files
+directly, and there is even a way to specify simulation parameterps directly
+in the emulated code using an @code{.elf} section.  You can also load
+multipart HEX files.")
+    (license license:gpl3)))
-- 
2.25.1
--
Artyom "avp" Poptsov <poptsov.artyom@gmail.com>
CADR Hackerspace co-founder: https://cadrspace.ru/
GPG: D0C2 EAC1 3310 822D 98DE B57C E9C5 A2D9 0898 A02F
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEE0MLqwTMQgi2Y3rV86cWi2QiYoC8FAmI454gACgkQ6cWi2QiY
oC+8SQf/bw+cFZAniWpqsWTtKP39FTuMy7LBvpzHxuM4S8cktpaAAL8A+30pMkfI
qFhBGUrN173WL3vvQ4QrqUMjtgAw5WtGiPhMReprZxy0dUHnWazpIckVqJJGWnh3
oKfUZhrDnkvXxxsI/bHzmA1mIe9Z5LFyrhfpDCJCZMOMmVFhMo7+7LPl2JwlCp7x
zYBi6ye1jOdGFiOkVLiaN9AMSAU/2DUfJGH7m12YYEg0R7+XyxwntcNNT4DqnPlc
utlj9aO1JJEbUj12y935xFdms32y5r15Wwg2IBNr6MZ2Yl07z2PfpAlAjoNbG0dT
V6vba+MZZPjhvYNBVq2wqwDKrNsGbA==
=JTqx
-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 24 Mar 12:58 +0100
Re: bug#54482: [PATCH] gnu: Add simavr
(name . Artyom V. Poptsov)(address . poptsov.artyom@gmail.com)
87o81vblzi.fsf_-_@gnu.org
Hi Artyom,

"Artyom V. Poptsov" <poptsov.artyom@gmail.com> skribis:

Toggle quote (8 lines)
> From 2ea020a319f5c2fa27662a8e505a1d4b8e916ea9 Mon Sep 17 00:00:00 2001
> From: "Artyom V. Poptsov" <poptsov.artyom@gmail.com>
> Date: Sat, 19 Mar 2022 23:39:54 +0300
> Subject: [PATCH] gnu: avr-xyz: Add simavr
>
> * gnu/packages/avr-xyz.scm: New module.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add 'avr-xyz.scm'.

Applied with the cosmetic changes below.

Thank you and thanks Maxime!

Ludo’.
Toggle diff (16 lines)
diff --git a/gnu/packages/avr-xyz.scm b/gnu/packages/avr-xyz.scm
index 800f8af21e..a05157ede7 100644
--- a/gnu/packages/avr-xyz.scm
+++ b/gnu/packages/avr-xyz.scm
@@ -83,9 +83,9 @@ (define-public simavr
     (inputs
      (list bash-minimal libelf freeglut))
     (home-page "https://github.com/buserror/simavr")
-    (synopsis "Lean, mean and hackable AVR simulator for GNU/Linux and OSX")
+    (synopsis "Lean, mean and hackable simulator for AVR CPUs/MCUs")
     (description
-     "simavr is a new AVR simulator for GNU/Linux, or any platform that uses
+     "simavr is a new AVR simulator for GNU/Linux or any platform that uses
 @command{avr-gcc}.  It uses avr-gcc's own register definition to simplify
 creating new targets for supported AVR devices.  The core was made to be small
 and compact, and hackable so allow quick prototyping of an AVR project.  The
Closed
?
Your comment

This issue is archived.

To comment on this conversation send email to 54482@debbugs.gnu.org