[PATCH 0/3] Add Arduino basics.

  • Open
  • quality assurance status badge
Details
4 participants
  • Björn Höfling
  • Robby Zambito
  • Danny Milosavljevic
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Danny Milosavljevic
Severity
normal
D
D
Danny Milosavljevic wrote on 3 Oct 2018 21:42
(address . guix-patches@gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20181003194205.3627-1-dannym@scratchpost.org
Danny Milosavljevic (3):
gnu: Add arduino-hardware.
gnu: Add arduino-libraries.
gnu: Add arduino-makefile.

gnu/packages/arduino.scm | 207 +++++++++++++++++++++++++++++++++++++++
1 file changed, 207 insertions(+)
create mode 100644 gnu/packages/arduino.scm
D
D
Danny Milosavljevic wrote on 3 Oct 2018 21:44
[PATCH 1/3] gnu: Add arduino-hardware.
(address . 32923@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20181003194413.3696-1-dannym@scratchpost.org
* gnu/packages/arduino.scm (arduino-installer): New procedure.
(arduino-hardware): New variable.
---
gnu/packages/arduino.scm | 106 +++++++++++++++++++++++++++++++++++++++
1 file changed, 106 insertions(+)
create mode 100644 gnu/packages/arduino.scm

Toggle diff (112 lines)
diff --git a/gnu/packages/arduino.scm b/gnu/packages/arduino.scm
new file mode 100644
index 000000000..24f109ecd
--- /dev/null
+++ b/gnu/packages/arduino.scm
@@ -0,0 +1,106 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.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 arduino)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix utils)
+ #:use-module (guix download)
+ #:use-module (guix git-download)
+ #:use-module (guix packages)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system python)
+ #:use-module (guix build-system ant)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages avr)
+ #:use-module (gnu packages flashing-tools)
+ #:use-module (gnu packages java)
+ #:use-module (gnu packages python))
+
+(define (arduino-installer filename)
+ `(lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (out-share (string-append out "/share/arduino"))
+ (out-share-part (string-append out-share "/" ,filename)))
+ (mkdir-p out-share)
+ (copy-recursively ,filename out-share-part))))
+
+(define-public arduino-hardware
+ (package
+ (name "arduino-hardware")
+ (version "1.8.7")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/arduino/Arduino.git")
+ (commit version)))
+ (sha256
+ (base32
+ "0cp502jf3xsrisadkrmxzylds48x60vparxm5lfcrzw27hw0qxgq"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; Delete bundled jar archives.
+ (for-each delete-file (find-files "." "\\.jar$"))
+ #t))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; No tests exist
+ #:modules ((guix build utils) (ice-9 match)
+ (guix build gnu-build-system))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ (add-after 'unpack 'prepare-dependencies
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; This is intended to just prepare arduino inputs where its
+ ;; build system expects them.
+ (for-each (match-lambda
+ ((key . value)
+ (let* ((out-dir (assoc-ref outputs "out"))
+ (destination-dir
+ (string-append out-dir "/share/arduino")))
+ (if (string-prefix? "arduino-" key)
+ (let* ((basename
+ (string-drop key
+ (string-length "arduino-")))
+ (target-outdir (assoc-ref inputs key))
+ (target-dir
+ (string-append target-outdir
+ "/share/arduino"))
+ (target (string-append target-dir
+ "/" basename))
+ (destination
+ (string-append destination-dir "/"
+ basename)))
+ (mkdir-p destination-dir)
+ (symlink target destination)
+ #t)))))
+ inputs)
+ #t))
+ (add-before 'build 'chdir
+ (lambda _
+ (chdir "hardware")
+ #t))
+ (replace 'install ,(arduino-installer "hardware")))))
+ (home-page "https://www.arduino.cc/")
+ (synopsis "Arduino Hardware Spec Files")
+ (description "@code{arduino-hardware} contains Arduino Hardware Spec Files
+(boards.txt etc).")
+ ;; GPL covers the main body ("app", "core"). LGPL covers the remainder.
+ (license (list license:lgpl2.1+ license:gpl3+))))
D
D
Danny Milosavljevic wrote on 3 Oct 2018 21:44
[PATCH 2/3] gnu: Add arduino-libraries.
(address . 32923@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20181003194413.3696-2-dannym@scratchpost.org
* gnu/packages/arduino.scm (arduino-libraries): New variable.
---
gnu/packages/arduino.scm | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/arduino.scm b/gnu/packages/arduino.scm
index 24f109ecd..369ca68a7 100644
--- a/gnu/packages/arduino.scm
+++ b/gnu/packages/arduino.scm
@@ -104,3 +104,21 @@
(boards.txt etc).")
;; GPL covers the main body ("app", "core"). LGPL covers the remainder.
(license (list license:lgpl2.1+ license:gpl3+))))
+
+(define-public arduino-libraries
+ (package (inherit arduino-hardware)
+ (name "arduino-libraries")
+ (inputs
+ `(("arduino-hardware" ,arduino-hardware)))
+ (arguments
+ (substitute-keyword-arguments
+ (package-arguments arduino-hardware)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (replace 'chdir
+ (lambda _
+ (chdir "libraries")
+ #t))
+ (replace 'install ,(arduino-installer "libraries"))))))
+ ;; Note: Some parts are BSD and ASL-2.0 licensed.
+ (license (list license:lgpl2.1+ license:gpl3+))))
D
D
Danny Milosavljevic wrote on 3 Oct 2018 21:44
[PATCH 3/3] gnu: Add arduino-makefile.
(address . 32923@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20181003194413.3696-3-dannym@scratchpost.org
* gnu/packages/arduino.scm (arduino-makefile): Add variable.
---
gnu/packages/arduino.scm | 83 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 83 insertions(+)

Toggle diff (91 lines)
diff --git a/gnu/packages/arduino.scm b/gnu/packages/arduino.scm
index 369ca68a7..f976a197e 100644
--- a/gnu/packages/arduino.scm
+++ b/gnu/packages/arduino.scm
@@ -122,3 +122,86 @@
(replace 'install ,(arduino-installer "libraries"))))))
;; Note: Some parts are BSD and ASL-2.0 licensed.
(license (list license:lgpl2.1+ license:gpl3+))))
+
+(define-public arduino-makefile
+ (package
+ (name "arduino-makefile")
+ (version "1.6.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/sudar/Arduino-Makefile.git")
+ (commit version)))
+ (sha256
+ (base32
+ "0flpl97d2231gp51n3y4qvf3y1l8xzafi1sgpwc305vwc2h4dl2x"))
+ (file-name (string-append name "-" version ".tar.gz"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ; no tests exist
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((avr-gcc (assoc-ref inputs "avr-toolchain-5")))
+ (substitute* "bin/ard-reset-arduino"
+ (("#!/usr/bin/env python") "#!/usr/bin/python3"))
+ (substitute* "Arduino.mk"
+ (("# => ARDUINO_DIR.*")
+ (string-append "ARDUINO_DIR = "
+ (assoc-ref %build-inputs "arduino-libraries")
+ "/share/arduino\n"))
+ ; ; defaults to "hardware/tools/avr"
+ (("# => AVR_TOOLS_DIR.*")
+ (string-append "AVR_TOOLS_DIR = "
+ (assoc-ref %build-inputs "avrdude")
+ "\n"))
+ (("# => ARDMK_DIR.*")
+ (string-append "ARDMK_DIR = "
+ (assoc-ref %outputs "out")
+ "/share/arduino\n"))
+ (("CC_NAME[ ]*=.*")
+ (string-append "CC_NAME = " avr-gcc "/bin/avr-gcc\n"))
+ (("CXX_NAME[ ]*=.*")
+ (string-append "CXX_NAME = " avr-gcc "/bin/avr-g++\n"))
+ (("OBJCOPY_NAME[ ]*=.*")
+ (string-append "OBJCOPY_NAME = " avr-gcc "/bin/avr-objcopy\n"))
+ (("OBJDUMP_NAME[ ]*=.*")
+ (string-append "OBJDUMP_NAME = " avr-gcc "/bin/avr-objdump\n"))
+ (("AR_NAME[ ]*=.*")
+ (string-append "AR_NAME = " avr-gcc "/bin/avr-ar\n"))
+ (("SIZE_NAME[ ]*=.*")
+ (string-append "SIZE_NAME = " avr-gcc "/bin/avr-size\n"))
+ (("NM_NAME[ ]*=.*")
+ (string-append "NM_NAME = " avr-gcc "/bin/avr-nm\n"))))))
+ (delete 'build)
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (out-mk (string-append out "/share/arduino"))
+ (out-doc (string-append out "/share/doc"))
+ (out-bin (string-append out "/bin"))
+ (out-man (string-append out "/share/man/man1")))
+ (mkdir-p out-mk)
+ (for-each (lambda (name)
+ (copy-file name (string-append out-mk "/" name)))
+ '("Arduino.mk" "arduino-mk-vars.md" "chipKIT.mk" "Common.mk"))
+ (mkdir-p out-doc)
+ (copy-recursively "examples" out-doc)
+ (mkdir-p out-bin)
+ (copy-file "bin/ard-reset-arduino"
+ (string-append out-bin "/ard-reset-arduino"))
+ (mkdir-p out-man)
+ (copy-file "ard-reset-arduino.1"
+ (string-append out-man "/ard-reset-arduino.1"))))))))
+ (inputs
+ `(("python" ,python)
+ ("python-pyserial" ,python-pyserial)
+ ("arduino-libraries" ,arduino-libraries)
+ ("avrdude" ,avrdude)
+ ("avr-toolchain-5" ,avr-toolchain-5)))
+ (synopsis "Arduino Makefile Include Files")
+ (description "Allows you to build Arduino sketches using a very tiny Makefile")
+ (home-page "https://github.com/sudar/Arduino-Makefile")
+ (license license:lgpl2.1)))
B
B
Björn Höfling wrote on 9 Oct 2018 09:44
Re: [bug#32923] [PATCH 0/3] Add Arduino basics.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 32923@debbugs.gnu.org)
20181009094414.38cde83b@alma-ubu
On Wed, 3 Oct 2018 21:42:05 +0200
Danny Milosavljevic <dannym@scratchpost.org> wrote:

Toggle quote (12 lines)
> Danny Milosavljevic (3):
> gnu: Add arduino-hardware.
> gnu: Add arduino-libraries.
> gnu: Add arduino-makefile.
>
> gnu/packages/arduino.scm | 207
> +++++++++++++++++++++++++++++++++++++++ 1 file changed, 207
> insertions(+) create mode 100644 gnu/packages/arduino.scm
>
>
>

Hi Danny,

I haven't looked into the package definitions, just:

There is already a file avr.scm. Is there any reason you are not adding
to this file?

If you stick with the arduino.scm, you should add it to gnu/local.mk.

Björn
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlu8XE8ACgkQvyhstlk+X/0hZACeIL3r0P3MuuJEawSQNgvK/BjW
prQAniUn+K749tei4grKWJL1Wqxukv/2
=kg2/
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 9 Oct 2018 17:26
(name . Björn Höfling)(address . bjoern.hoefling@bjoernhoefling.de)(address . 32923@debbugs.gnu.org)
20181009172628.38d19f63@scratchpost.org
Hi Björn,

On Tue, 9 Oct 2018 09:44:14 +0200
Björn Höfling <bjoern.hoefling@bjoernhoefling.de> wrote:

Toggle quote (5 lines)
> I haven't looked into the package definitions, just:
>
> There is already a file avr.scm. Is there any reason you are not adding
> to this file?

Newer arduino versions support other platforms, not just avr. They are an
IDE and development environment, with only the "arduinocore-" packages
differing.

So in light of this I wouldn't put it into "avr.scm".

The newer arduino versions require batik, so packages for batik have to be
finished first.
That requires xalan, so that has to be finished first.
And that requires java-cup which cannot be bootstrapped without binaries.

So a newer arduino version is going to take a while.

Toggle quote (2 lines)
> If you stick with the arduino.scm, you should add it to gnu/local.mk.

Thanks!
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAlu8yKQACgkQ5xo1VCww
uqU1kQgAjlh9yVxI4YAWMLcFo+p66LOqKzHRqe/L2987Az27G8GQZmfsj77DTgwl
6RWLKYQGq33Bl+XH81M/pp6+++paKN51tUg0Mb4hpwIIDfOtNVtvTbl7mXNJ3NnS
OowC0vmBeSV0h5SZqzqBO1G/9rheZF+x6aKD9w2tRnS35Wwt1YoM2bQT+PHZJ2PJ
XwgpkmPeQKkaPAURifHzVg6Lzy/1Q8l65MUxEh+bpNpO68vqkIf6wP48FFnEMsUh
RzcSkK/wBMdZsjGhjKureTYigRFqBkA4ZFy03vfGnV+qVL4zH6zmXU6rLgZw41LE
PbmbjsR5cvGRWq+yqOy8QHF9GzxhfA==
=RcVd
-----END PGP SIGNATURE-----


B
B
Björn Höfling wrote on 9 Oct 2018 22:42
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 32923@debbugs.gnu.org)
20181009224247.1420d6e9@alma-ubu
On Tue, 9 Oct 2018 17:26:28 +0200
Danny Milosavljevic <dannym@scratchpost.org> wrote:

Toggle quote (16 lines)
> Hi Björn,
>
> On Tue, 9 Oct 2018 09:44:14 +0200
> Björn Höfling <bjoern.hoefling@bjoernhoefling.de> wrote:
>
> > I haven't looked into the package definitions, just:
> >
> > There is already a file avr.scm. Is there any reason you are not
> > adding to this file?
>
> Newer arduino versions support other platforms, not just avr. They
> are an IDE and development environment, with only the "arduinocore-"
> packages differing.
>
> So in light of this I wouldn't put it into "avr.scm".

OK. Thanks for clarification. I thought that "AVR" and "Arduino" are
somehow synonyms.


Toggle quote (6 lines)
> The newer arduino versions require batik, so packages for batik have
> to be finished first.
> That requires xalan, so that has to be finished first.
> And that requires java-cup which cannot be bootstrapped without
> binaries.

I see. CUP requires at least cup.jar and jflex.jar. jfex.jar uses
jflex.jar...

I took a quick look: Jflex 1.4.1's LexParse.java:


was generated by CUPS v0.10.k.

And if you download that:


the 0.10.k's parser.java was generated by CUP v0.10k...

And that doesn't look like it counts as source code:

/** Production table. */
protected static final short _production_table[][] =
unpackFromStrings(new String[] {
"\000\153\000\002\002\004\000\002\055\002\000\002\003" +
"\012\000\002\003\007\000\002\056\002\000\002\004\006" +
"\000\002\004\003\000\002\005\004\000\002\005\003\000" +
[..]

Is it that what you meant by bootstrapping from binaries?

It would be so simple, if one just wouldn't care ...

Björn
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlu9EsgACgkQvyhstlk+X/2dYgCgpecDRZeO+1l5RyGYN7YEbkUs
X8MAn1qQ61VFMS8siHl/DuSmh2OWdCPy
=SuGG
-----END PGP SIGNATURE-----


R
R
Robby Zambito wrote on 27 May 2023 23:52
RE: [PATCH 0/3] Add Arduino basics.
(address . 32923@debbugs.gnu.org)
87leh9phl8.fsf@robbyzambito.me
Hi,

Would it be possible to include some or all of this? I'm trying to work
on an Arduino project, and trying to run the Arduino IDE or CLI directly
from their packages is proving to be a bit of a pain on Guix.

Robby
M
M
Maxim Cournoyer wrote on 1 Sep 2023 20:46
Re: bug#32923: [PATCH 0/3] Add Arduino basics.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 32923@debbugs.gnu.org)
87o7il20kw.fsf_-_@gmail.com
Hi Danny,

Danny Milosavljevic <dannym@scratchpost.org> writes:

Toggle quote (7 lines)
> * gnu/packages/arduino.scm (arduino-installer): New procedure.
> (arduino-hardware): New variable.
> ---
> gnu/packages/arduino.scm | 106 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 106 insertions(+)
> create mode 100644 gnu/packages/arduino.scm

[...]

Toggle quote (55 lines)
> +(define-public arduino-hardware
> + (package
> + (name "arduino-hardware")
> + (version "1.8.7")
> + (source (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://github.com/arduino/Arduino.git")
> + (commit version)))
> + (sha256
> + (base32
> + "0cp502jf3xsrisadkrmxzylds48x60vparxm5lfcrzw27hw0qxgq"))
> + (modules '((guix build utils)))
> + (snippet
> + '(begin
> + ;; Delete bundled jar archives.
> + (for-each delete-file (find-files "." "\\.jar$"))
> + #t))))
> + (build-system gnu-build-system)
> + (arguments
> + `(#:tests? #f ; No tests exist
> + #:modules ((guix build utils) (ice-9 match)
> + (guix build gnu-build-system))
> + #:phases
> + (modify-phases %standard-phases
> + (delete 'configure)
> + (delete 'build)
> + (add-after 'unpack 'prepare-dependencies
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + ;; This is intended to just prepare arduino inputs where its
> + ;; build system expects them.
> + (for-each (match-lambda
> + ((key . value)
> + (let* ((out-dir (assoc-ref outputs "out"))
> + (destination-dir
> + (string-append out-dir "/share/arduino")))
> + (if (string-prefix? "arduino-" key)
> + (let* ((basename
> + (string-drop key
> + (string-length "arduino-")))
> + (target-outdir (assoc-ref inputs key))
> + (target-dir
> + (string-append target-outdir
> + "/share/arduino"))
> + (target (string-append target-dir
> + "/" basename))
> + (destination
> + (string-append destination-dir "/"
> + basename)))
> + (mkdir-p destination-dir)
> + (symlink target destination)
> + #t)))))
> + inputs)
> + #t))

The prepare-dependecies phase appears to expect "arduino-" prefixed
input labels, but there are no inputs specified, so it seems it'd be
useful? Am I missing something?

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 1 Sep 2023 21:02
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 32923@debbugs.gnu.org)
87fs3x1ztx.fsf_-_@gmail.com
Hi,

Danny Milosavljevic <dannym@scratchpost.org> writes:

Toggle quote (32 lines)
> * gnu/packages/arduino.scm (arduino-libraries): New variable.
> ---
> gnu/packages/arduino.scm | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/gnu/packages/arduino.scm b/gnu/packages/arduino.scm
> index 24f109ecd..369ca68a7 100644
> --- a/gnu/packages/arduino.scm
> +++ b/gnu/packages/arduino.scm
> @@ -104,3 +104,21 @@
> (boards.txt etc).")
> ;; GPL covers the main body ("app", "core"). LGPL covers the remainder.
> (license (list license:lgpl2.1+ license:gpl3+))))
> +
> +(define-public arduino-libraries
> + (package (inherit arduino-hardware)
> + (name "arduino-libraries")
> + (inputs
> + `(("arduino-hardware" ,arduino-hardware)))
> + (arguments
> + (substitute-keyword-arguments
> + (package-arguments arduino-hardware)
> + ((#:phases phases)
> + `(modify-phases ,phases
> + (replace 'chdir
> + (lambda _
> + (chdir "libraries")
> + #t))
> + (replace 'install ,(arduino-installer "libraries"))))))
> + ;; Note: Some parts are BSD and ASL-2.0 licensed.
> + (license (list license:lgpl2.1+ license:gpl3+))))

This produces:

Toggle snippet (11 lines)
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/arduino
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/arduino/hardware
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/arduino/libraries
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/arduino/libraries/.keep
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/doc
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/doc/arduino-libraries-1.8.7
/gnu/store/b3lahllwi6v5zblwjngkg4j1mq60q142-arduino-libraries-1.8.7/share/doc/arduino-libraries-1.8.7/license.txt

i.e., it doesn't actually ship anything other than a .keep empty file.

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 1 Sep 2023 21:02
control message for bug #32923
(address . control@debbugs.gnu.org)
87edjh1ztq.fsf@gmail.com
tags 32923 + moreinfo
quit
?