From patchwork Sat Mar 28 00:50:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Maja_K=C4=85dzio=C5=82ka?= X-Patchwork-Id: 20919 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 09DDA27BBE4; Sat, 28 Mar 2020 00:52:14 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 26B7227BBEA for ; Sat, 28 Mar 2020 00:52:13 +0000 (GMT) Received: from localhost ([::1]:48786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jHzhs-0006to-Ik for patchwork@mira.cbaines.net; Fri, 27 Mar 2020 20:52:12 -0400 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 X-Loop: help-debbugs@gnu.org Subject: [bug#40267] [PATCH 1/2] gnu: Add unicorn. Resent-From: Jakub =?utf-8?b?S8SFZHppb8WCa2E=?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 28 Mar 2020 00:52:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 40267 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 40267@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.15853566625832 (code B ref -1); Sat, 28 Mar 2020 00:52:01 +0000 Received: (at submit) by debbugs.gnu.org; 28 Mar 2020 00:51:02 +0000 Received: from localhost ([127.0.0.1]:33541 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jHzgj-0001Vx-CJ for submit@debbugs.gnu.org; Fri, 27 Mar 2020 20:51:01 -0400 Received: from lists.gnu.org ([209.51.188.17]:49177) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jHzgh-0001Vm-80 for submit@debbugs.gnu.org; Fri, 27 Mar 2020 20:50:59 -0400 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 Received: (qmail 11701 invoked by uid 1009); 28 Mar 2020 01:50:53 +0100 Received: from 188.123.215.55 (kuba@kadziolka.net@188.123.215.55) by pat (envelope-from , uid 1002) with qmail-scanner-2.08st (clamdscan: 0.98.6/25763. spamassassin: 3.4.0. perlscan: 2.08st. Clear:RC:1(188.123.215.55):. Processed in 0.027054 secs); 28 Mar 2020 00:50:53 -0000 Received: from unknown (HELO localhost.localdomain) (kuba@kadziolka.net@188.123.215.55) by pat.zlotemysli.pl with AES256-SHA encrypted SMTP; 28 Mar 2020 01:50:53 +0100 From: Jakub =?utf-8?b?S8SFZHppb8WCa2E=?= Date: Sat, 28 Mar 2020 01:50:52 +0100 Message-Id: <20200328005052.22846-1-kuba@kadziolka.net> X-Mailer: git-send-email 2.26.0 MIME-Version: 1.0 X-Qmailux-2.08st: added fake Content-Type header X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * 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+)))