projects/guix·blob java-team · refs

854 lines · 33.5 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016 Jan Nieuwenhuizen <[email protected]>
3;;; Copyright © 2013, 2015 Ludovic Courtès <[email protected]>
4;;; Copyright © 2013 Andreas Enge <[email protected]>
5;;; Copyright © 2016, 2020, 2021, 2025, 2026 Efraim Flashner <[email protected]>
6;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <[email protected]>
7;;; Copyright © 2019 Guy Fleury Iteriteka <[email protected]>
8;;; Copyright © 2019, 2022, 2024 Andy Tai <[email protected]>
9;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
10;;; Copyright © 2020 Christine Lemmer-Webber <[email protected]>
11;;; Copyright © 2020 B. Wilson <[email protected]>
12;;; Copyright © 2021, 2024 Maxim Cournoyer <[email protected]>
13;;; Copyright © 2021 Guillaume Le Vaillant <[email protected]>
14;;; Copyright © 2022 Felix Gruber <[email protected]>
15;;; Copyright © 2023 Simon South <[email protected]>
16;;; Copyright © 2023 B. Wilson <[email protected]>
17;;; Copyright © 2024 Zheng Junjie <[email protected]>
18;;; Copyright © 2024 Artyom V. Poptsov <[email protected]>
19;;;
20;;; This file is part of GNU Guix.
21;;;
22;;; GNU Guix is free software; you can redistribute it and/or modify it
23;;; under the terms of the GNU General Public License as published by
24;;; the Free Software Foundation; either version 3 of the License, or (at
25;;; your option) any later version.
26;;;
27;;; GNU Guix is distributed in the hope that it will be useful, but
28;;; WITHOUT ANY WARRANTY; without even the implied warranty of
29;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30;;; GNU General Public License for more details.
31;;;
32;;; You should have received a copy of the GNU General Public License
33;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
34
35(define-module (gnu packages assembly)
36 #:use-module (guix build-system meson)
37 #:use-module (guix build-system cmake)
38 #:use-module (guix build-system gnu)
39 #:use-module ((guix build utils) #:select (parallel-job-count))
40 #:use-module (guix download)
41 #:use-module (guix git-download)
42 #:use-module (guix svn-download)
43 #:use-module ((guix licenses) #:prefix license:)
44 #:use-module (guix packages)
45 #:use-module (guix gexp)
46 #:use-module (guix utils)
47 #:use-module (gnu packages)
48 #:use-module (gnu packages admin)
49 #:use-module (gnu packages autotools)
50 #:use-module (gnu packages base)
51 #:use-module (gnu packages bison)
52 #:use-module (gnu packages compression)
53 #:use-module (gnu packages compiler-tools)
54 #:use-module (gnu packages gettext)
55 #:use-module (gnu packages image)
56 #:use-module (gnu packages linux)
57 #:use-module (gnu packages man)
58 #:use-module (gnu packages perl)
59 #:use-module (gnu packages pkg-config)
60 #:use-module (gnu packages texinfo)
61 #:use-module (gnu packages python)
62 #:use-module (gnu packages sphinx)
63 #:use-module (gnu packages shells)
64 #:use-module (gnu packages tex)
65 #:use-module (gnu packages xml)
66 #:use-module ((guix utils)
67 #:select (%current-system cc-for-target)))
68
69(define-public acme
70 (package
71 (name "acme")
72 (version "0.97")
73 (source
74 (origin
75 (method svn-fetch)
76 (uri (svn-reference
77 (url "https://svn.code.sf.net/p/acme-crossass/code-0/trunk/")
78 (revision 274)))
79 (file-name (git-file-name name version))
80 (sha256
81 (base32 "1d0nh06vxxfgb6ki8c8l3j2735kdppkd1c0s3mv03pv58wivwngp"))
82 (modules '((guix build utils)))
83 ;; Public domain and no source code.
84 (snippet '(delete-file-recursively "ACME_Lib"))))
85 (build-system gnu-build-system)
86 (arguments
87 (list #:tests? #f ;Released version has no tests.
88 #:make-flags
89 #~(list (string-append "BINDIR=" #$output "/bin")
90 "-C" "src")
91 #:phases
92 #~(modify-phases %standard-phases
93 ;; No configure script.
94 (delete 'configure))))
95 (home-page "https://acme-crossass.sourceforge.io/")
96 (synopsis "Cross assembler for the 6502, 6510, 65c02 and 65816 processors")
97 (description
98 "ACME is a 6502, 6510, 65c02 and 65816 cross assembler that supports
99global/local/anonymous labels, offset assembly, conditional assembly and looping
100assembly. It can include other source files as well as binaries while
101assembling. Calculations can be done in integer or float mode.")
102 (license license:gpl2+)))
103
104(define-public asl
105 (let ((build "267"))
106 (package
107 (name "asl")
108 (version (string-append "1.42-beta-" build))
109 (source
110 (origin
111 (method url-fetch)
112 (uri (string-append
113 "http://john.ccac.rwth-aachen.de:8000/ftp/as/source/c_version/"
114 "asl-current-142-bld" build ".tar.bz2"))
115 (sha256
116 (base32 "13j2ccfgji4jiqbbqmcchhcps11ypz8aq8fq9vd83ngbhavh6c9s"))))
117 (build-system gnu-build-system)
118 (arguments
119 (list
120 #:make-flags #~(list "V=1") ; ensures output during "check" phase
121 #:phases
122 #~(modify-phases %standard-phases
123 (delete 'bootstrap)
124 (replace 'configure
125 (lambda* (#:key target #:allow-other-keys)
126 (copy-file "Makefile.def-samples/Makefile.def-unknown-linux"
127 "Makefile.def")
128
129 ;; Use the cross-compilation tools when cross-compiling.
130 (when #$(%current-target-system)
131 (substitute* "Makefile.def"
132 (("^(TARG_(CC|LD) = ).*" all prefix)
133 (string-append prefix target "-gcc\n"))))
134
135 ;; Set the output directories appropriately.
136 (substitute* "Makefile.def"
137 (("^(DOCDIR = ).*" all prefix)
138 (string-append prefix #$output:doc "/share/doc/" #$name))
139 (("/usr/local")
140 #$output))))
141 (add-after 'check 'build-doc
142 (lambda* (#:key parallel-build? #:allow-other-keys)
143 ;; Generating font shapes require a writable TEXMFVAR.
144 (setenv "TEXMFVAR" "/tmp")
145 (invoke "make"
146 "-j" (if parallel-build?
147 (number->string (parallel-job-count))
148 "1")
149 "docs"))))
150 #:test-target "test"))
151 (native-inputs
152 (list (texlive-local-tree (list texlive-german texlive-hyperref))))
153 (outputs '("out" "doc"))
154 (home-page "http://john.ccac.rwth-aachen.de:8000/as/")
155 (synopsis
156 "AS macro cross-assembler for microprocessors and microcontrollers")
157 (description
158 "AS is a portable macro cross-assembler targeting a wide range of
159microprocessors and microcontrollers, including devices from Intel, Motorola,
160MOS Technology, Hitachi, Fujitsu, NEC, Texas Instruments, Zilog and many other
161manufacturers.")
162 (license (list license:gpl2 license:gpl3)))))
163
164(define-public asm6f
165 (package
166 (name "asm6f")
167 (version "1.6_freem02")
168 (source (origin
169 (method git-fetch)
170 (uri (git-reference
171 (url "https://github.com/freem/asm6f")
172 (commit (string-append "v" version))))
173 (file-name (git-file-name name version))
174 (sha256
175 (base32
176 "1vz2mbnnm71sns0f08qjlg5rsw2kykg2v6bah073hfi6zzkqw52p"))))
177 (build-system gnu-build-system)
178 (arguments
179 (list
180 #:tests? #f ;no substantial test suite
181 #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
182 #:phases
183 #~(modify-phases %standard-phases
184 (delete 'configure) ;no configure phase
185 (replace 'install
186 (lambda _
187 (install-file "asm6f" (string-append #$output "/bin"))))
188 (add-after 'install 'install-readme
189 (lambda _
190 (install-file "readme.txt"
191 (string-append #$output "/share/doc/asm6f/")))))))
192 (home-page "https://github.com/freem/asm6f")
193 (synopsis "ASM6 6502 assembler fork for NES/Famicom")
194 (description "ASM6f is a fork of ASM6, primarily targeted at NES/Famicom
195development.
196@itemize
197@item Support for some illegal/undocumented opcodes
198@item FCEUX-compatible @file{.nl} output files
199@item Output of Lua-compatible symbol files
200@item New @code{IGNORENL} and @code{ENDINL} directives
201@item Support for iNES original and 2.0 header insertion
202@item Output of @file{.cdl} files, for use with FCEUX/Mesen
203@item Output of Mesen-compatible symbol files (both old and new formats)
204@item Generic +/- labels do not break @@local scope
205@item Support for @code{a:} prefix to force absolute addressing for
206zero-page addresses.
207@end itemize")
208 ;; The license text reads: "This is free software. You may use, modify,
209 ;; and / or redistribute any part of this software in any fashion."
210 (license (license:non-copyleft "LICENSE.txt"))))
211
212(define-public avra
213 (package
214 (name "avra")
215 (version "1.4.2")
216 (source
217 (origin
218 (method git-fetch)
219 (uri (git-reference
220 (url "https://github.com/Ro5bert/avra")
221 (commit version)))
222 (file-name (git-file-name name version))
223 (sha256
224 (base32 "09h8lw7z9xl6vpsnsdvxf1rcx5wg8xaw7dfbgnwjixcrsprs70wf"))))
225 (build-system gnu-build-system)
226 (arguments
227 (list
228 #:make-flags
229 #~(list (string-append "PREFIX=" #$output)
230 (string-append "CC=" #$(cc-for-target)))
231 #:phases
232 #~(modify-phases %standard-phases
233 (delete 'configure))))
234 (home-page "https://github.com/Ro5bert/avra")
235 (synopsis "Atmel AVR (Arduino) assembler")
236 (description
237 "AVRA is an assembler targeting the Atmel AVR family of microcontrollers,
238best known for their use on the Arduino family of single-board microcontroller
239kits. It is near-compatible with Atmel's own assembler, AVRASM32.")
240 (license license:gpl2+)))
241
242(define-public nasm
243 (package
244 (name "nasm")
245 (version "2.15.05")
246 (source (origin
247 (method url-fetch)
248 (uri (string-append "http://www.nasm.us/pub/nasm/releasebuilds/"
249 version "/nasm-" version ".tar.xz"))
250 (sha256
251 (base32
252 "0gqand86b0r86k3h46dh560lykxmxqqywz5m55kgjfq7q4lngbrw"))))
253 (build-system gnu-build-system)
254 (native-inputs (list perl ;for doc and test target
255 texinfo))
256 (arguments
257 `(#:test-target "test"
258 #:phases
259 (modify-phases %standard-phases
260 (add-after 'unpack 'dont-build-ps-pdf-outputs
261 (lambda _
262 (substitute* "doc/Makefile.in"
263 (("html nasmdoc.txt nasmdoc.pdf \\$\\(XZFILES\\)")
264 "html nasmdoc.txt")
265 (("\\$\\(INSTALL_DATA\\) nasmdoc.pdf")
266 "$(INSTALL_DATA)"))))
267 (add-after 'install 'install-info
268 (lambda _
269 (invoke "make" "install_doc"))))))
270 (home-page "https://www.nasm.us/")
271 (synopsis "80x86 and x86-64 assembler")
272 (description
273 "NASM, the Netwide Assembler, is an 80x86 and x86-64 assembler designed
274for portability and modularity. It supports a range of object file formats,
275including Linux and *BSD a.out, ELF, COFF, Mach-O, Microsoft 16-bit OBJ,
276Windows32 and Windows64. It will also output plain binary files. Its syntax
277is designed to be simple and easy to understand, similar to Intel's but less
278complex. It supports all currently known x86 architectural extensions, and
279has strong support for macros.")
280 (license license:bsd-2)))
281
282(define* (maybe-nasm #:optional
283 (system (or (%current-target-system)
284 (%current-system))))
285 ;; For some packages nasm is only needed when compiling to/for x86/x86_64.
286 (if (target-x86? system)
287 (list nasm)
288 '()))
289
290(export maybe-nasm)
291
292(define-public yasm
293 (package
294 (name "yasm")
295 (version "1.3.0")
296 (source (origin
297 (method url-fetch)
298 (uri (string-append
299 "http://www.tortall.net/projects/yasm/releases/yasm-"
300 version ".tar.gz"))
301 (sha256
302 (base32
303 "0gv0slmm0qpq91za3v2v9glff3il594x5xsrbgab7xcmnh0ndkix"))))
304 (build-system gnu-build-system)
305 (arguments
306 '(#:parallel-tests? #f)) ; Some tests fail
307 ; non-deterministically when run in
308 ; parallel
309 (inputs (list python-wrapper xmlto))
310 (home-page "https://yasm.tortall.net/")
311 (synopsis "Rewrite of the NASM assembler")
312 (description
313 "Yasm is a complete rewrite of the NASM assembler.
314
315Yasm currently supports the x86 and AMD64 instruction sets, accepts NASM
316and GAS assembler syntaxes, outputs binary, ELF32, ELF64, 32 and 64-bit
317Mach-O, RDOFF2, COFF, Win32, and Win64 object formats, and generates source
318debugging information in STABS, DWARF 2, and CodeView 8 formats.")
319 (license (license:non-copyleft "file://COPYING"
320 "See COPYING in the distribution."))))
321
322(define-public lightning
323 (package
324 (name "lightning")
325 (version "2.2.3")
326 (source (origin
327 (method url-fetch)
328 (uri (string-append "mirror://gnu/lightning/lightning-"
329 version ".tar.gz"))
330 (sha256
331 (base32
332 "0ab89k0xn1mdgabrbfk2993jx6835i8glrhhn7zgpbq07aiwfif0"))))
333 (build-system gnu-build-system)
334 (native-inputs (list zlib))
335 (arguments
336 `(#:configure-flags
337 (list "--disable-static")
338 ;; Some tests fail when run in parallel.
339 #:parallel-tests? #f))
340 (synopsis "Library for generating assembly code at runtime")
341 (description
342 "GNU Lightning is a library that generates assembly language code at
343run-time. Thus, it is useful in creating Just-In-Time compilers. It
344abstracts over the target CPU by exposing a standardized RISC instruction set
345to the clients.")
346 (home-page "https://www.gnu.org/software/lightning/")
347 (license license:gpl3+)))
348
349(define-public simde
350 (package
351 (name "simde")
352 (version "0.8.2")
353 (source
354 (origin
355 (method git-fetch)
356 (uri (git-reference
357 (url "https://github.com/simd-everywhere/simde")
358 (commit (string-append "v" version))))
359 (file-name (git-file-name name version))
360 (sha256
361 (base32 "0giijq5n3q1nv8c5skfq2dar70rgbsm7yk0gdj22wpsa58fc624a"))))
362 (build-system meson-build-system)
363 ;; We really want this for the headers, and the tests require a bundled library.
364 (arguments '(#:configure-flags '("-Dtests=false")))
365 (synopsis "Implementations of SIMD instruction sets for foreign systems")
366 (description "The SIMDe header-only library provides fast, portable
367implementations of SIMD intrinsics on hardware which doesn't natively support
368them, such as calling SSE functions on ARM. There is no performance penalty if
369the hardware supports the native implementation (e.g., SSE/AVX runs at full
370speed on x86, NEON on ARM, etc.).")
371 (home-page "https://simd-everywhere.github.io/blog/")
372 (license license:expat)))
373
374(define-public fasm
375 (package
376 (name "fasm")
377 (version "1.73.31")
378 (source
379 (origin
380 (method url-fetch)
381 (uri (string-append "https://flatassembler.net/fasm-"
382 version ".tgz"))
383 (sha256
384 (base32 "1qqg1czr9dr73l4gwrwim85mjs65al7vv8b292jipywimhhwnf4g"))))
385 (build-system gnu-build-system)
386 (arguments
387 `(#:tests? #f ; no tests exist
388 #:strip-binaries? #f ; fasm has no sections
389 #:phases
390 (modify-phases %standard-phases
391 (delete 'configure) ; no "configure" script
392 (replace 'build
393 (lambda _
394 (chdir "source/Linux/")
395 (if (string=? ,(%current-system) "x86_64-linux")
396 ;; Use pre-compiled binaries in top-level directory to build
397 ;; fasm.
398 (invoke "../../fasm.x64" "fasm.asm")
399 (invoke "../../fasm" "fasm.asm"))))
400 (replace 'install
401 (lambda _
402 (let ((out (assoc-ref %outputs "out")))
403 (install-file "fasm" (string-append out "/bin"))))))))
404 (supported-systems '("x86_64-linux" "i686-linux"))
405 (synopsis "Assembler for x86 processors")
406 (description
407 "@acronym{FASM, the Flat ASseMbler} is an assembler that supports x86 and
408IA-64 Intel architectures. It does multiple passes to optimize machine code.
409It has macro abilities and focuses on operating system portability.")
410 (home-page "https://flatassembler.net/")
411 (license license:bsd-2)))
412
413(define-public dev86
414 (package
415 (name "dev86")
416 (version "1.0.1")
417 (source (origin
418 (method git-fetch)
419 (uri (git-reference
420 (url "https://codeberg.org/jbruchon/dev86.git")
421 (commit (string-append "v" version))))
422 (file-name (git-file-name name version))
423 (sha256
424 (base32
425 "1g2zsa1cj6h7n33hjpr9xbvsxihkhya3aa92b1cv8prl4w8svqy5"))))
426 (build-system gnu-build-system)
427 (arguments
428 `(#:parallel-build? #f ; They use submakes wrong
429 #:make-flags (list ,(string-append "CC=" (cc-for-target))
430 ,(string-append "VERSION=" version)
431 (string-append "PREFIX="
432 (assoc-ref %outputs "out")))
433 #:tests? #f ; No tests exist
434 #:phases
435 (modify-phases %standard-phases
436 (delete 'configure))))
437 (synopsis "Intel 8086 (primarily 16-bit) assembler, C compiler and
438linker")
439 (description "This package provides a Intel 8086 (primarily 16-bit)
440assembler, a C compiler and a linker. The assembler uses Intel syntax
441(also Intel order of operands).")
442 (home-page "https://codeberg.org/jbruchon/dev86")
443 (license license:gpl2+)))
444
445(define-public libjit
446 (let ((commit "554c9f5c750daa6e13a6a5cd416873c81c7b8226"))
447 (package
448 (name "libjit")
449 (version "0.1.4")
450 (source (origin
451 (method git-fetch)
452 (uri (git-reference
453 (url "https://git.savannah.gnu.org/r/libjit.git")
454 (commit commit)))
455 (file-name (git-file-name name version))
456 (sha256
457 (base32
458 "0p6wklslkkp3s4aisj3w5a53bagqn5fy4m6088ppd4fcfxgqkrcd"))))
459 (build-system gnu-build-system)
460 (native-inputs
461 (list autoconf
462 automake
463 bison
464 flex
465 help2man
466 gettext-minimal
467 libtool
468 texinfo
469 pkg-config))
470 (home-page "https://www.gnu.org/software/libjit/")
471 (synopsis "Just-In-Time compilation library")
472 (description
473 "GNU libjit is a library that provides generic Just-In-Time compiler
474functionality independent of any particular bytecode, language, or
475runtime")
476 (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
477 (license license:lgpl2.1+))))
478
479(define-public rgbds
480 (package
481 (name "rgbds")
482 (version "0.7.0")
483 (source (origin
484 (method git-fetch)
485 (uri (git-reference
486 (url "https://github.com/gbdev/rgbds")
487 (commit (string-append "v" version))))
488 (file-name (git-file-name name version))
489 (sha256
490 (base32
491 "1gy75q0ikx0ki1wsrq97hxj9dw9436fcys2w91ipm90pbhk4ljva"))))
492 (build-system gnu-build-system)
493 (arguments
494 `(#:phases
495 (modify-phases %standard-phases
496 (delete 'configure)
497 (add-after 'unpack 'patch-pkg-config
498 (lambda _
499 (substitute* "Makefile"
500 (("pkg-config")
501 (or (which "pkg-config")
502 (string-append ,(%current-target-system)
503 "-pkg-config"))))))
504 (replace 'check
505 (lambda _
506 (with-directory-excursion "test/asm"
507 (invoke "./test.sh"))
508 (with-directory-excursion "test/link"
509 (invoke "./test.sh")))))
510 #:make-flags `(,(string-append "CC=" ,(cc-for-target))
511 ,(string-append "PREFIX="
512 (assoc-ref %outputs "out")))))
513 (native-inputs
514 (list bison flex pkg-config util-linux))
515 (inputs
516 (list libpng))
517 (home-page "https://github.com/gbdev/rgbds")
518 (synopsis "Rednex Game Boy Development System")
519 (description
520 "RGBDS (Rednex Game Boy Development System) is an assembler/linker
521package for the Game Boy and Game Boy Color. It consists of:
522@itemize @bullet
523@item rgbasm (assembler)
524@item rgblink (linker)
525@item rgbfix (checksum/header fixer)
526@item rgbgfx (PNG-to-Game Boy graphics converter)
527@end itemize")
528 (license license:expat)))
529
530(define-public wla-dx
531 (package
532 (name "wla-dx")
533 (version "10.5")
534 (source (origin
535 (method git-fetch)
536 (uri (git-reference
537 (url "https://github.com/vhelin/wla-dx")
538 (commit (string-append "v" version))))
539 (file-name (git-file-name name version))
540 (sha256
541 (base32
542 "1h6apmhaks4772s2cja34ck488p8yhb3nscbxjw5061ml2046zqq"))))
543 (build-system cmake-build-system)
544 (native-inputs (list python-sphinx)) ; to generate man pages
545 (arguments
546 (list
547 #:phases
548 #~(modify-phases %standard-phases
549 (add-before 'check 'copy-tests-to-build-directory
550 (lambda _
551 (copy-recursively "../source/tests" "tests")))
552 (replace 'check
553 (lambda* (#:key tests? #:allow-other-keys)
554 (let ((sh (which "sh")))
555 (when tests?
556 (invoke sh "../source/run_tests.sh"))))))))
557 (home-page "https://github.com/vhelin/wla-dx")
558 (synopsis "Assemblers for various processors")
559 (description "WLA DX is a set of tools to assemble assembly files to
560object or library files (@code{wla-ARCH}) and link them together (@code{wlalink}).
561Supported architectures are:
562
563@itemize @bullet
564@item z80
565@item gb (z80-gb)
566@item 6502
567@item 65c02
568@item 6510
569@item 65816
570@item 6800
571@item 6801
572@item 6809
573@item 8008
574@item 8080
575@item huc6280
576@item spc700
577@end itemize")
578 (license license:gpl2)))
579
580(define-public xa
581 (package
582 (name "xa")
583 (version "2.4.1")
584 (source (origin
585 (method url-fetch)
586 (uri (string-append "https://www.floodgap.com/retrotech/xa"
587 "/dists/xa-" version ".tar.gz"))
588 (sha256
589 (base32
590 "1hrspv9hxgk2nkbbh24g84hn0rglfwj8p7849zrn9qx869m2mhb3"))))
591 (build-system gnu-build-system)
592 (arguments
593 (list
594 #:test-target "test"
595 #:phases
596 #~(modify-phases %standard-phases
597 (delete 'configure)) ; no "configure" script
598 #:make-flags
599 #~(list (string-append "CC=" #$(cc-for-target))
600 (string-append "LD=" #$(cc-for-target))
601 (string-append "DESTDIR=" #$output)))) ; no $prefix support
602 (native-inputs (list perl))
603 (home-page "https://www.floodgap.com/retrotech/xa/")
604 (synopsis "Two-pass portable cross-assembler")
605 (description
606 "xa is a high-speed, two-pass portable cross-assembler.
607It understands mnemonics and generates code for NMOS 6502s (such
608as 6502A, 6504, 6507, 6510, 7501, 8500, 8501, 8502 ...),
609 CMOS 6502s (65C02 and Rockwell R65C02) and the 65816.")
610 (license license:gpl2)))
611
612(define-public armips
613 (let ((commit "6719edebaae03330ee5441d9b28280672edf00d5")
614 (revision "1"))
615 (package
616 (name "armips")
617 (version "0.11.0")
618 (source
619 (origin
620 (method git-fetch)
621 (uri (git-reference
622 (url "https://github.com/Kingcom/armips")
623 (commit commit)))
624 (file-name (git-file-name name version))
625 (sha256
626 (base32 "1a85h2b3r3hy9hm07v8drvkklp4qfdq3i3zwb3cgk011s0njdfvz"))
627 (modules '((guix build utils)))
628 (snippet
629 #~(begin
630 (substitute* "Core/Types.h"
631 (("#include <string>" all)
632 (string-append all "\n"
633 "#include <string_view>")))))))
634 (build-system cmake-build-system)
635 (arguments
636 `(#:configure-flags '("-DARMIPS_USE_STD_FILESYSTEM=ON")
637 #:phases
638 (modify-phases %standard-phases
639 (replace 'check
640 (lambda* (#:key inputs #:allow-other-keys)
641 (invoke "./armipstests" "../source/Tests")))
642 (replace 'install
643 (lambda* (#:key outputs #:allow-other-keys)
644 (install-file "armips" (string-append (assoc-ref outputs "out")
645 "/bin"))
646 #t)))))
647 (home-page "https://github.com/Kingcom/armips")
648 (synopsis "Assembler for various ARM and MIPS platforms")
649 (description
650 "armips is an assembler with full support for the MIPS R3000, MIPS R4000,
651Allegrex and RSP instruction sets, partial support for the EmotionEngine
652instruction set, as well as complete support for the ARM7 and ARM9 instruction
653sets, both THUMB and ARM mode.")
654 (license license:expat))))
655
656(define-public intel-xed
657 (package
658 (name "intel-xed")
659 (version "2025.03.02")
660 (source
661 (origin
662 (method git-fetch)
663 (uri (git-reference
664 (url "https://github.com/intelxed/xed")
665 (commit (string-append "v" version))))
666 (sha256 (base32 "1h1q1rq96mh0jaqsg5pwmxwrcbpb83i79kblzfqszlq2nn0ih55j"))
667 (file-name (git-file-name name version))))
668 (build-system gnu-build-system)
669 (native-inputs
670 `(("python" ,python-wrapper)
671 ;; As of the time of writing this comment, mbuild does not exist in the
672 ;; Python Package Index and seems to only be used by intel-xed, so we
673 ;; opt to include it here instead of packaging separately. Note also
674 ;; that the git repository contains no version tags, so we directly
675 ;; reference the "version" variable from setup.py instead.
676 ("mbuild"
677 ,(let ((name "mbuild")
678 (version "2022.07.28"))
679 (origin
680 (method git-fetch)
681 (uri (git-reference
682 (url "https://github.com/intelxed/mbuild")
683 (commit (string-append "v" version))))
684 (sha256
685 (base32
686 "0rc9xp202yqw42bwgylwxvfvjr1crdl50qvv8vzfczyvlf4wflcx"))
687 (file-name (git-file-name name version)))))))
688 (outputs '("out" "lib"))
689 (arguments
690 `(#:phases
691 ;; Upstream uses the custom Python build tool `mbuild', so we munge
692 ;; gnu-build-system to fit. The build process for this package is
693 ;; documented at https://intelxed.github.io/build-manual/.
694 (let* ((build-dir "build")
695 (kit-dir "kit"))
696 (modify-phases %standard-phases
697 (delete 'configure)
698 (replace 'build
699 (lambda* (#:key inputs #:allow-other-keys)
700 (let ((mbuild (assoc-ref inputs "mbuild")))
701 (setenv "PYTHONPATH" mbuild)
702 (invoke "./mfile.py"
703 (string-append "--build-dir=" build-dir)
704 (string-append "--install-dir=" kit-dir)
705 "examples"
706 "doc"
707 "install"))))
708 (replace 'check
709 (lambda _
710 ;; Skip broken test group `tests/tests-avx512pf'.
711 (invoke "tests/run-cmd.py"
712 (string-append "--build-dir=" kit-dir "/bin")
713 "--tests" "tests/tests-base"
714 "--tests" "tests/tests-avx512"
715 "--tests" "tests/tests-cet"
716 "--tests" "tests/tests-via"
717 "--tests" "tests/tests-syntax"
718 "--tests" "tests/tests-xop")))
719 (replace 'install
720 (lambda* (#:key outputs #:allow-other-keys)
721 (let* ((out (assoc-ref outputs "out"))
722 (lib (assoc-ref outputs "lib")))
723 (copy-recursively (string-append kit-dir "/bin")
724 (string-append out "/bin"))
725 (copy-recursively (string-append kit-dir "/include")
726 (string-append lib "/include"))
727 (copy-recursively (string-append kit-dir "/lib")
728 (string-append lib "/lib")))))))))
729 (home-page "https://intelxed.github.io/")
730 (synopsis "Encoder and decoder for x86 (IA32 and Intel64) instructions")
731 (description "The Intel X86 Encoder Decoder (XED) is a software library and
732for encoding and decoding X86 (IA32 and Intel64) instructions. The decoder
733takes sequences of 1-15 bytes along with machine mode information and produces
734a data structure describing the opcode, operands, and flags. The encoder takes
735a similar data structure and produces a sequence of 1 to 15 bytes. Disassembly
736is essentially a printing pass on the data structure.
737
738The library and development files are under the @code{lib} output, with a
739family of command line utility wrappers in the default output. Each of the cli
740tools is named like @code{xed*}. Documentation for the cli tools is sparse, so
741this is a case where ``the code is the documentation.''")
742 (license license:asl2.0)))
743
744(define-public neon2sse
745 (let ((commit "097a5ecacd527d5b5c3006e360fb9cb1c1c48a1f")
746 (version "0")
747 (revision "1"))
748 (package
749 (name "neon2sse")
750 (version (git-version version revision commit))
751 (source (origin
752 (method git-fetch)
753 (uri (git-reference
754 (url "https://github.com/intel/ARM_NEON_2_x86_SSE")
755 (commit commit)))
756 (file-name (git-file-name name version))
757 (sha256
758 (base32
759 "17mf788b8asrvjl6dnyzrm5xrz20wx9j5f8n6drgc6qgwqxpx4hv"))))
760 (build-system cmake-build-system)
761 (arguments
762 (list #:tests? #f)) ;no tests
763 (home-page "https://github.com/intel/ARM_NEON_2_x86_SSE")
764 (synopsis "Header file to simplify ARM->IA32 porting")
765 (description
766 "The @file{NEON_2_SSE.h} file is intended to simplify ARM-to-IA32
767porting. It makes the correspondence (or a real porting) of ARM NEON
768intrinsics as defined in the @file{arm_neon.h} header and x86 SSE (up to
769SSE4.2) intrinsic functions as defined in corresponding x86 compilers headers
770files.")
771 (license license:bsd-2))))
772
773(define-public cpu-features
774 (package
775 (name "cpu-features")
776 (version "0.9.0")
777 (source
778 (origin
779 (method git-fetch)
780 (uri (git-reference
781 (url "https://github.com/google/cpu_features")
782 (commit (string-append "v" version))))
783 (sha256
784 (base32 "0297li3408zm1dqnibaasrb51vs7n7iscnxsji3b78g0pir7jwxr"))
785 (file-name (git-file-name name version))))
786 (build-system cmake-build-system)
787 (arguments
788 (list
789 #:tests? #f ;; XXX: insists on using bundled googletest
790 #:configure-flags
791 #~(list "-DBUILD_SHARED_LIBS=ON")))
792 (home-page "https://github.com/google/cpu_features")
793 (synopsis "Cross platform C99 library to get cpu features at runtime")
794 (description
795 "Cpu_features is a cross-platform C library to retrieve CPU features
796(such as available instructions) at runtime, and supports these CPU architectures
797@itemize
798@item x86-64
799@item AArch64
800@item ARM
801@item MIPS
802@item POWER
803@item RISC-V
804@item LoongArch
805@item S390x
806@end itemize")
807 (license license:asl2.0)))
808
809
810(define-public blinkenlights
811 (package
812 (name "blinkenlights")
813 (version "1.1.0")
814 (source (origin
815 (method git-fetch)
816 (uri (git-reference
817 (url "https://github.com/jart/blink")
818 (commit version)))
819 (sha256
820 (base32
821 "0wlp1hqccbh9jl4h0vyv9kqbff4ccls6kgzz62gnsqnfsmz06273"))
822 (file-name (git-file-name name version))))
823 (build-system gnu-build-system)
824 (arguments
825 (list #:tests? #f ;Tests require network access
826 #:phases
827 #~(modify-phases %standard-phases
828 ;; Make build reproducible and -v message somewhat nicer
829 (add-before 'configure 'make-reproducible
830 (lambda _
831 (substitute* "Makefile"
832 (("shell LC_ALL=C TZ=UTC date" date)
833 (string-append date " -d \"@$(SOURCE_DATE_EPOCH)\""))
834 ;; BLINK_COMMITS and BLINK_GITSHA fall back
835 ;; to *_UNKNOWN with a compiler warning.
836 (("^BLINK_COMMITS := .*") "")
837 (("^BLINK_GITSHA := .*") ""))
838 (substitute* '("Makefile" "configure")
839 (("hostname") "echo guix"))))
840 ;; Call ./configure without --enable-fast-install argument, which
841 ;; causes the script to fail with an "unsupported option" error.
842 (replace 'configure
843 (lambda* (#:key inputs outputs #:allow-other-keys)
844 (invoke "./configure"
845 (string-append "CC=" #$(cc-for-target))
846 (string-append "--prefix=" #$output)))))))
847 (native-inputs (list python-wrapper))
848 (home-page "https://justine.lol/blinkenlights/")
849 (synopsis "Emulator for x86_64-linux programs with a text user interface")
850 (description
851 "Blinkenlights is a command-line debugger that focuses on visualizing how
852software changes memory. It can emulate statically-linked i8086 and
853x86_64-pc-linux-gnu programs.")
854 (license license:isc)))