[PATCH] gnu: unicorn: Update to 2.0.1.post1.

  • Done
  • quality assurance status badge
3 participants
  • c4droid
  • jgart
  • Sören Tempel
Submitted by
c4droid wrote on 11 May 2023 11:39
(address . guix-patches@gnu.org)
Hi, Guix!

I noticed unicorn is using pyproject now, so I update the unicorn definition in my guix fork,
I tested it on my local machine it can be built successfully.
Sören Tempel wrote on 24 Oct 2023 17:38
Re: [PATCH] gnu: unicorn: Update to 2.0.1.post1
(address . 63442@debbugs.gnu.org)(address . c4droid@foxmail.com)

I can confirm that this patch builds locally. I can also confirm that
the Python bindings work as intended. The Unicorn version presently
shipped by Guix is very ancient and doesn't build at the moment (fails
test). As such, it would be cool if this patch could be merged.

I am currently working on a Guix package for angr https://angr.io/ and
need Unicorn 2.X for this (with the patch my angr Guix package works as
intended). I would also be willing to revise the patch in case OP isn't
active any more.

Let me know if any changes are needed (CC'd the mentors, hope that's ok).

Sören Tempel
Re: [PATCH] gnu: unicorn: Update to 2.0.1.post1.
(address . 63442@debbugs.gnu.org)
Toggle quote (2 lines)
> I can confirm that this patch builds locally. I can also confirm that

Can you send an updated patch as a v2?

The update-unicorn.patch no longer applies.

I tried to wiggle it but no luck:

all the best,
soeren wrote on 11 Jul 20:00 +0200
[PATCH] gnu: unicorn: Update to 2.0.1.post1.
(address . 63442@debbugs.gnu.org)(address . jgart@dismail.de)
From: c4droid <c4droid@foxmail.com>

* gnu/packages/emulators.scm (unicorn) Update to 2.0.1.post1.

Co-authored-by: Sören Tempel <soeren@soeren-tempel.net>
gnu/packages/emulators.scm | 118 ++++++-------------------------------
1 file changed, 19 insertions(+), 99 deletions(-)

Toggle diff (146 lines)
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 4471de9040..5979294ef2 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -61,6 +61,7 @@ (define-module (gnu packages emulators)
#:use-module (gnu packages boost)
#:use-module (gnu packages cdrom)
#:use-module (gnu packages check)
+ #:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
#:use-module (gnu packages containers)
#:use-module (gnu packages cross-base)
@@ -113,6 +114,7 @@ (define-module (gnu packages emulators)
#:use-module (guix build-system gnu)
#:use-module (guix build-system meson)
#:use-module (guix build-system python)
+ #:use-module (guix build-system pyproject)
#:use-module (guix build-system qt))
(define-public vice
@@ -2296,106 +2298,24 @@ (define-public zsnes
(license license:gpl2+)
(supported-systems (list "x86_64-linux"))))
-;; 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-before 'build 'build-library
- (lambda* (#:key inputs #:allow-other-keys)
- (invoke "make"
- "-j" (number->string (parallel-job-count))
- "CC=gcc")))
- (add-after 'build-library 'install-library
- (lambda* (#:key outputs #:allow-other-keys)
- (invoke "make" "install"
- (string-append
- (assoc-ref outputs "out")))))
- (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 "out")
- ;; 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 "python")
- "/share/doc/unicorn/samples"))
- (c-docdir
- (string-append (assoc-ref outputs "out")
- "/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 "https://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+))))
+ (package
+ (name "unicorn")
+ (version "2.0.1.post1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri name version))
+ (sha256
+ (base32 "0mlfs8qfi0clyncfkbxp6in0cpl747510i6bqymwid43xcirbikz"))))
+ (build-system pyproject-build-system)
+ (native-inputs (list cmake pkg-config))
+ (home-page "https://www.unicorn-engine.org")
+ (synopsis "Generic CPU emulator framework")
+ (description
+ "Uniforn is a lightweight, multi-platform, multi-architecture CPU
+emulator framework based on QEMU.")
+ (license license:gpl2+)))
(define-public ppsspp

base-commit: 437f8f19ac74c85b80432881d9df2b0d80943bca
(address . 63442-done@debbugs.gnu.org)
Applied, thanks!
all the best,
Your comment

Commenting via the web interface is currently disabled.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 63442
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch