From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:42697) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jHzhj-0006ti-Q1 for guix-patches@gnu.org; Fri, 27 Mar 2020 20:52:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jHzhi-00009Y-AC for guix-patches@gnu.org; Fri, 27 Mar 2020 20:52:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:55801) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jHzhi-00008l-6Z for guix-patches@gnu.org; Fri, 27 Mar 2020 20:52:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jHzhi-0001Xq-4N for guix-patches@gnu.org; Fri, 27 Mar 2020 20:52:02 -0400 Subject: [bug#40267] [PATCH 1/2] gnu: Add unicorn. Resent-Message-ID: Received: from eggs.gnu.org ([2001:470:142:3::10]:42540) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jHzgf-0006YU-En for guix-patches@gnu.org; Fri, 27 Mar 2020 20:50:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jHzgd-00074A-Mf for guix-patches@gnu.org; Fri, 27 Mar 2020 20:50:57 -0400 Received: from pat.zlotemysli.pl ([37.59.186.212]:34348) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1jHzgd-000734-Dt for guix-patches@gnu.org; Fri, 27 Mar 2020 20:50:55 -0400 From: Jakub =?UTF-8?Q?K=C4=85dzio=C5=82ka?= Date: Sat, 28 Mar 2020 01:50:52 +0100 Message-Id: <20200328005052.22846-1-kuba@kadziolka.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 40267@debbugs.gnu.org * gnu/packages/emulators.scm (unicorn-next): New variable. --- If I package a -rc version, should it have a -next suffix in its name even though the "stable" version isn't packaged? Maybe I should also package the non-rc unicorn? The test suite for that version fails to compile, so it's not entirely trivial. I'd also like to bring these build phases to your attention - I feel like they need a review the most. gnu/packages/emulators.scm | 110 ++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm index 3591b1740c..5b5e1359e3 100644 --- a/gnu/packages/emulators.scm +++ b/gnu/packages/emulators.scm @@ -44,6 +44,7 @@ #: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 curl) #:use-module (gnu packages elf) @@ -88,7 +89,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 @@ -1628,3 +1630,109 @@ derived from Gens. Project goals include clean source code, combined features from various forks of Gens, and improved platform portability.") (supported-systems '("i686-linux" "x86_64-linux")) (license license:gpl2+))) + +;; python-pwntools requires a -rc release of unicorn +(define-public unicorn-next + (package + (name "unicorn-next") + (version "1.0.2-rc2") + ;; NOTE: unicorn ships a bundled QEMU, but with 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 + "0v5sc8sniv2w0bki1f7n3pgsk17y7hggw55fvkjzk2sv8z8w4bsj")))) + (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. + (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)) + (string-append + "UNICORN_QEMU_FLAGS=--python=" + (assoc-ref inputs "python-for-qemu") + "/bin/python2") + "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) + ;; TODO: running the tests on non-x86 requires a cross-binutils + ;; with x86 as target. + ,@(if (member (%current-system) '("x86_64-linux" "i686-linux")) + '((for-each + (lambda (suite) + (with-directory-excursion + (string-append "../../tests/" suite) + (invoke "make" "test" "CC=gcc"))) + '("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 + `(("cmocka" ,cmocka) + ("python-for-qemu" ,python-2) + ("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+))) -- 2.26.0