gnu: Add unicorn.
* gnu/packages/emulators.scm (unicorn): New variable.
This commit is contained in:
parent
89c98c063a
commit
f43e410470
@ -44,7 +44,9 @@
|
||||
#:use-module (gnu packages boost)
|
||||
#:use-module (gnu packages backup)
|
||||
#:use-module (gnu packages cdrom)
|
||||
#:use-module (gnu packages check)
|
||||
#:use-module (gnu packages compression)
|
||||
#:use-module (gnu packages cross-base)
|
||||
#:use-module (gnu packages curl)
|
||||
#:use-module (gnu packages elf)
|
||||
#:use-module (gnu packages fonts)
|
||||
@ -88,7 +90,8 @@
|
||||
#:use-module (gnu packages web)
|
||||
#:use-module (guix build-system cmake)
|
||||
#:use-module (guix build-system glib-or-gtk)
|
||||
#:use-module (guix build-system gnu))
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system python))
|
||||
|
||||
(define-public desmume
|
||||
(package
|
||||
@ -1663,3 +1666,115 @@ from various forks of Gens, and improved platform portability.")
|
||||
"bsnes is a Super Nintendo / Super Famicom emulator that focuses on
|
||||
performance, features, and ease of use.")
|
||||
(license license:gpl3)))
|
||||
|
||||
;; python-pwntools requires a -rc release of unicorn
|
||||
(define-public unicorn
|
||||
(let ((unless-x86
|
||||
(lambda (code)
|
||||
(if (member (%current-system) '("x86_64-linux" "i686-linux"))
|
||||
'()
|
||||
code))))
|
||||
(package
|
||||
(name "unicorn")
|
||||
(version "1.0.2-rc4")
|
||||
;; NOTE: unicorn ships a bundled QEMU, but with a lot of custom modifications.
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/unicorn-engine/unicorn")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"17nyccgk7hpc4hab24yn57f1xnmr7kq4px98zbp2bkwcrxny8gwy"))))
|
||||
(outputs '("out" "python"))
|
||||
;; The main library is not written in Python, but the build process has
|
||||
;; little in common with any defined build system, so we might as well
|
||||
;; build on top of python-build-system and make use of all
|
||||
;; the Python-specific phases that can be reused.
|
||||
(build-system python-build-system)
|
||||
(arguments
|
||||
`(#:modules ((srfi srfi-26)
|
||||
(guix build python-build-system)
|
||||
(guix build utils))
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'install-bindings-to-python-output
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
;; python-build-system will build the bindings and install them to
|
||||
;; the "out" output, so change the build-internal names of the
|
||||
;; outputs.
|
||||
;;
|
||||
;; TODO: remove this once #40469 lands, through the core-updates
|
||||
;; holding zone, on master.
|
||||
(set-car! (assoc "out" outputs) "lib")
|
||||
(set-car! (assoc "python" outputs) "out")
|
||||
#t))
|
||||
(add-before 'build 'build-library
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(invoke "make"
|
||||
"-j" (number->string (parallel-job-count))
|
||||
"UNICORN_STATIC=no"
|
||||
"CC=gcc")))
|
||||
(add-after 'build-library 'install-library
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(invoke "make" "install"
|
||||
"UNICORN_STATIC=no"
|
||||
(string-append
|
||||
"PREFIX="
|
||||
(assoc-ref outputs "lib")))))
|
||||
(add-before 'build 'prepare-bindings
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(chdir "bindings/python")
|
||||
;; Set this environment variable so that the Python bindings
|
||||
;; don't build their own copy of the shared object, but use
|
||||
;; a dummy value such that the bindings test suite uses the
|
||||
;; same mechanism for loading the library as any other user.
|
||||
(setenv "LIBUNICORN_PATH" "1")
|
||||
(substitute* "unicorn/unicorn.py"
|
||||
(("_path_list = \\[.*")
|
||||
(string-append
|
||||
"_path_list = [\""
|
||||
(assoc-ref outputs "lib")
|
||||
;; eat the rest of the list
|
||||
"/lib\"] + 0*[")))
|
||||
#t))
|
||||
(add-before 'check 'check-library
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(for-each
|
||||
(lambda (suite)
|
||||
(with-directory-excursion
|
||||
(string-append "../../tests/" suite)
|
||||
(invoke "make" "test" "CC=gcc"
|
||||
,@(unless-x86
|
||||
'("AS=i686-unknown-linux-gnu-as"
|
||||
"OBJCOPY=i686-unknown-linux-gnu-objcopy")))))
|
||||
'("unit" "regress"))
|
||||
#t))
|
||||
(add-after 'install 'install-samples
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let* ((python-samples (find-files "." "sample_.*"))
|
||||
(c-samples (find-files "../../samples" ".*\\.c"))
|
||||
(python-docdir
|
||||
(string-append (assoc-ref outputs "out")
|
||||
"/share/doc/unicorn/samples"))
|
||||
(c-docdir
|
||||
(string-append (assoc-ref outputs "lib")
|
||||
"/share/doc/unicorn/samples")))
|
||||
(for-each (cut install-file <> c-docdir) c-samples)
|
||||
(for-each (cut install-file <> python-docdir) python-samples)
|
||||
#t))))))
|
||||
(native-inputs
|
||||
;; NOTE: cross-binutils needs to be wrapped with unless-x86, as otherwise
|
||||
;; the linker provided by the package will be used, circumventing the ld-wrapper.
|
||||
`(,@(unless-x86
|
||||
`(("assembler-for-tests" ,(cross-binutils "i686-unknown-linux-gnu"))))
|
||||
("cmocka" ,cmocka)
|
||||
("hexdump-for-tests" ,util-linux)))
|
||||
(home-page "http://www.unicorn-engine.org")
|
||||
(synopsis "Unicorn CPU emulator framework")
|
||||
(description
|
||||
"Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator
|
||||
framework based on QEMU.")
|
||||
(license license:gpl2+))))
|
||||
|
Loading…
Reference in New Issue
Block a user