diff mbox series

[bug#41574] gnu: Add intel-xev.

Message ID 338KSVUXDSMM8.2HI3H62CJZAVU@wilsonb.com
State Accepted
Headers show
Series [bug#41574] gnu: Add intel-xev. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch fail View Laminar job

Commit Message

guix--- via Guix-patches via June 3, 2020, 10:33 a.m. UTC
This patch makes two main changes:

1) Fixes upstream's source of non-determinism!
2) Renames packages from `xed` to `intel-xed`,

along with a few other minor improvements.

Comments

Marius Bakke June 22, 2020, 8:49 p.m. UTC | #1
elaexuotee--- via Guix-patches via <guix-patches@gnu.org> writes:

> This patch makes two main changes:
>
> 1) Fixes upstream's source of non-determinism!
> 2) Renames packages from `xed` to `intel-xed`,
>
> along with a few other minor improvements.
>
> From 4e0d690a702fbfc983cf2d981d4f07f1eb79ede3 Mon Sep 17 00:00:00 2001
> From: "B. Wilson" <elaexuotee@wilsonb.com>
> Date: Thu, 28 May 2020 07:32:28 +0900
> Subject: [PATCH] gnu: Add intel-xed.
> To: guix-patches@gnu.org
>
> * gnu/packages/assembly.scm (intel-xed): New variable.
> ---
>  gnu/local.mk                                  |   1 +
>  gnu/packages/assembly.scm                     | 105 +++++++++++++++++-
>  .../intel-xed-fix-nondeterminism.patch        | 100 +++++++++++++++++
>  3 files changed, 202 insertions(+), 4 deletions(-)
>  create mode 100644 gnu/packages/patches/intel-xed-fix-nondeterminism.patch

[...]

> @@ -149,14 +151,14 @@ to the clients.")
>  (define-public fasm
>    (package
>      (name "fasm")
> -    (version "1.73.24")
> +    (version "1.73.22")
>      (source
>       (origin
>         (method url-fetch)
>         (uri (string-append "https://flatassembler.net/fasm-"
>                             version ".tgz"))
>         (sha256
> -        (base32 "142vxhs8mh8isvlzq7ir0asmqda410phzxmk9gk9b43dldskkj7k"))))
> +        (base32 "1pb0rcfdsb0h89khjjrbikz5wjdllavj3ajim0rcyh7x12xr1hw5"))))
>      (build-system gnu-build-system)
>      (arguments
>       `(#:tests? #f                      ; no tests exist
> @@ -347,14 +349,14 @@ Supported architectures are:
>  (define-public xa
>    (package
>      (name "xa")
> -    (version "2.3.11")
> +    (version "2.3.10")
>      (source (origin
>                (method url-fetch)
>                (uri (string-append "https://www.floodgap.com/retrotech/xa"
>                                    "/dists/xa-" version ".tar.gz"))
>                (sha256
>                 (base32
> -                "0b81r7mvzqxgnbbmhixcnrf9nc72v1nqaw19k67221g3k561dwij"))))
> +                "0y5sd247g11jfk5msxy91hz2nhpy7smj125dzfyfhjsjnqk5nyw6"))))

Were these two downgrades intended?  I'm assuming no, since the new
package don't appear to use them.

[...]

> +(define-public intel-xed
> +  (package
> +    (name "intel-xed")
> +    (version "11.2.0")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             (url "https://github.com/intelxed/xed.git")
> +             (commit "40125558530137444b4ee6fd26b445bfa105b543")))
> +       (sha256 (base32 "1jffayski2gpd54vaska7fmiwnnia8v3cka4nfyzjgl8xsky9v2s"))
> +       (file-name (git-file-name name version))
> +       (patches (search-patches "intel-xed-fix-nondeterminism.patch"))))
> +    (build-system gnu-build-system)
> +    (native-inputs
> +     `(("python-2" ,python-2)
> +       ("python-3" ,python-3)

Does it work to use 'python-wrapper' instead of providing both Python 2
and Python 3 here?

> +    (outputs '("out" "lib" "src"))

Is the src output used for other things than documentation?  If not, I
think we can drop it and let users do 'guix build --source intel-xed'
instead.  The description should be modified accordingly.

Apart from this the package LGTM.  Probably it should have:

  (supported-systems '("x86_64-linux" "i686-linux"))

too?

[...]

> diff --git a/gnu/packages/patches/intel-xed-fix-nondeterminism.patch b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
> new file mode 100644
> index 0000000000..657f7e979d
> --- /dev/null
> +++ b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
> @@ -0,0 +1,100 @@
> +diff --git a/pysrc/ild_codegen.py b/pysrc/ild_codegen.py

Can you add a short description at the top of the patch file explaining
what it does any why?

Can you send an updated patch?  Thanks!
diff mbox series

Patch

From 4e0d690a702fbfc983cf2d981d4f07f1eb79ede3 Mon Sep 17 00:00:00 2001
From: "B. Wilson" <elaexuotee@wilsonb.com>
Date: Thu, 28 May 2020 07:32:28 +0900
Subject: [PATCH] gnu: Add intel-xed.
To: guix-patches@gnu.org

* gnu/packages/assembly.scm (intel-xed): New variable.
---
 gnu/local.mk                                  |   1 +
 gnu/packages/assembly.scm                     | 105 +++++++++++++++++-
 .../intel-xed-fix-nondeterminism.patch        | 100 +++++++++++++++++
 3 files changed, 202 insertions(+), 4 deletions(-)
 create mode 100644 gnu/packages/patches/intel-xed-fix-nondeterminism.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index babcb8f6ad..9cefb31235 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1103,6 +1103,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/ilmbase-fix-test-arm.patch		\
   %D%/packages/patches/inetutils-hurd.patch			\
   %D%/packages/patches/inkscape-poppler-0.76.patch		\
+  %D%/packages/patches/intel-xed-fix-nondeterminism.patch	\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index c9582bc596..c78400f5fc 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -8,6 +8,7 @@ 
 ;;; Copyright © 2019 Andy Tai <atai@atai.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Christopher Lemmer Webber <cwebber@dustycloud.org>
+;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,6 +48,7 @@ 
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages python)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages shells)
   #:use-module (gnu packages xml)
   #:use-module ((guix utils)
                 #:select (%current-system)))
@@ -149,14 +151,14 @@  to the clients.")
 (define-public fasm
   (package
     (name "fasm")
-    (version "1.73.24")
+    (version "1.73.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://flatassembler.net/fasm-"
                            version ".tgz"))
        (sha256
-        (base32 "142vxhs8mh8isvlzq7ir0asmqda410phzxmk9gk9b43dldskkj7k"))))
+        (base32 "1pb0rcfdsb0h89khjjrbikz5wjdllavj3ajim0rcyh7x12xr1hw5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests exist
@@ -347,14 +349,14 @@  Supported architectures are:
 (define-public xa
   (package
     (name "xa")
-    (version "2.3.11")
+    (version "2.3.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.floodgap.com/retrotech/xa"
                                   "/dists/xa-" version ".tar.gz"))
               (sha256
                (base32
-                "0b81r7mvzqxgnbbmhixcnrf9nc72v1nqaw19k67221g3k561dwij"))))
+                "0y5sd247g11jfk5msxy91hz2nhpy7smj125dzfyfhjsjnqk5nyw6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f   ; TODO: custom test harness, not sure how it works
@@ -371,3 +373,98 @@  It understands mnemonics and generates code for NMOS 6502s (such
 as 6502A, 6504, 6507, 6510, 7501, 8500, 8501, 8502 ...),
  CMOS 6502s (65C02 and Rockwell R65C02) and the 65816.")
     (license license:gpl2)))
+
+(define-public intel-xed
+  (package
+    (name "intel-xed")
+    (version "11.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/intelxed/xed.git")
+             (commit "40125558530137444b4ee6fd26b445bfa105b543")))
+       (sha256 (base32 "1jffayski2gpd54vaska7fmiwnnia8v3cka4nfyzjgl8xsky9v2s"))
+       (file-name (git-file-name name version))
+       (patches (search-patches "intel-xed-fix-nondeterminism.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("python-2" ,python-2)
+       ("python-3" ,python-3)
+       ("tcsh" ,tcsh)
+       ("mbuild"
+        ,(let ((name "mbuild")
+               (version "0.2496"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/intelxed/mbuild.git")
+                   (commit "5304b94361fccd830c0e2417535a866b79c1c297")))
+             (sha256
+              (base32
+               "0r3avc3035aklqxcnc14rlmmwpj3jp09vbcbwynhvvmcp8srl7dl"))
+             (file-name (git-file-name name version)))))))
+    (outputs '("out" "lib" "src"))
+    (arguments
+     `(#:phases
+       ;; Upstream uses the custom Python build tool `mbuild', so we munge
+       ;; gnu-build-system to fit.  The build process for this package is
+       ;; documented at https://intelxed.github.io/build-manual/.
+       (let* ((build-dir "build")
+              (kit-dir "kit"))
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (replace 'build
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((mbuild (assoc-ref inputs "mbuild")))
+                 (setenv "PYTHONPATH" (string-append
+                                        (getenv "PYTHONPATH") ":" mbuild))
+                 (invoke "./mfile.py"
+                         (string-append "--build-dir=" build-dir)
+                         (string-append "--install-dir=" kit-dir)
+                         "examples"
+                         "doc"
+                         "install"))))
+           (replace 'check
+             (lambda _
+               (invoke "tests/run-cmd.py"
+                       ;; Skip broken test group `tests/tests-avx512pf'.
+                       (string-append "--build-dir=" kit-dir "/bin")
+                       "--tests" "tests/tests-base"
+                       "--tests" "tests/tests-avx512"
+                       "--tests" "tests/tests-cet"
+                       "--tests" "tests/tests-via"
+                       "--tests" "tests/tests-syntax"
+                       "--tests" "tests/tests-xop")))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (lib (assoc-ref outputs "lib"))
+                      (src (assoc-ref outputs "src"))
+                      (pkg (strip-store-file-name out))
+                      (src-dir (string-append src "/src/" pkg "/examples")))
+                 (copy-recursively (string-append kit-dir "/bin")
+                                   (string-append out "/bin"))
+                 (copy-recursively (string-append kit-dir "/examples") src-dir)
+                 (copy-recursively (string-append kit-dir "/include") src-dir)
+                 ;; Discard residual build system files.
+                 (for-each delete-file (find-files src-dir "\\.py$"))
+                 (copy-recursively (string-append kit-dir "/include")
+                                   (string-append lib "/include"))
+                 (copy-recursively (string-append kit-dir "/lib")
+                                   (string-append lib "/lib"))
+                 #t)))))))
+    (home-page "https://intelxed.github.io/")
+    (synopsis "Encoder and decoder for x86 (IA32 and Intel64) instructions")
+    (description "The Intel X86 Encoder Decoder (XED) is a software library and
+for encoding and decoding X86 (IA32 and Intel64) instructions.  The decoder
+takes sequences of 1-15 bytes along with machine mode information and produces
+a data structure describing the opcode, operands, and flags.  The encoder takes
+a similar data structure and produces a sequence of 1 to 15 bytes.  Disassembly
+is essentially a printing pass on the data structure.
+
+The library and development files are under the @code{lib} output, with a
+family of command line utility wrappers in the default output.  Each of the cli
+tools is named like @code{xed*}.  Documentation for the cli tools is sparse, so
+see the @code{src} output for the corresponding source code.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/patches/intel-xed-fix-nondeterminism.patch b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
new file mode 100644
index 0000000000..657f7e979d
--- /dev/null
+++ b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
@@ -0,0 +1,100 @@ 
+diff --git a/pysrc/ild_codegen.py b/pysrc/ild_codegen.py
+index 628ec45..a9bff79 100755
+--- a/pysrc/ild_codegen.py
++++ b/pysrc/ild_codegen.py
+@@ -188,14 +188,14 @@ def gen_l2_func_list(agi, target_nt_dict, arg_nt_dict,
+                      ild_t_member):
+     """generate L2 functions"""
+     l2_func_list = []
+-    for (nt_name,array) in target_nt_dict.items():
++    for (nt_name,array) in sorted(target_nt_dict.items()):
+         target_opname = array.get_target_opname()
+         if array.is_const_lookup_fun():
+             fo = gen_const_l2_function(agi, nt_name,
+                                 target_opname, ild_t_member)
+             l2_func_list.append(fo)
+         else:
+-            for arg_nt_seq,arg_arr in arg_nt_dict.items():
++            for arg_nt_seq,arg_arr in sorted(arg_nt_dict.items()):
+                 fo = gen_scalable_l2_function(agi, nt_name,
+                      target_opname, ild_t_member, arg_arr, list(arg_nt_seq))
+                 l2_func_list.append(fo)
+diff --git a/pysrc/ild_disp.py b/pysrc/ild_disp.py
+index 942c036..cf80e29 100755
+--- a/pysrc/ild_disp.py
++++ b/pysrc/ild_disp.py
+@@ -350,7 +350,8 @@ def work(agi, united_lookup,  disp_nts, brdisp_nts, ild_gendir,
+     disp_dict = _gen_l3_array_dict(agi, disp_nts, _disp_token)
+ 
+     
+-    nt_arr_list = list(brdisp_dict.values()) + list(disp_dict.values())
++    nt_arr_list = ([v for (k,v) in sorted(brdisp_dict.items())] +
++                   [v for (k,v) in sorted(disp_dict.items())])
+     #create function that calls all initialization functions
+     init_f = ild_nt.gen_init_function(nt_arr_list, 'xed_ild_disp_l3_init')
+     
+@@ -367,7 +368,7 @@ def work(agi, united_lookup,  disp_nts, brdisp_nts, ild_gendir,
+     l2_functions = []
+     eosz_op = ild_eosz.get_target_opname()
+     easz_op = ild_easz.get_target_opname()
+-    for nt_name,array in list(disp_dict.items()) + list(brdisp_dict.items()):
++    for nt_name,array in sorted(disp_dict.items()) + sorted(brdisp_dict.items()):
+         #Some DISP NTs depend on EOSZ, others on EASZ, we need to know
+         #that when we generate L2 functions
+         if eosz_op in array.get_arg_names():
+diff --git a/pysrc/ild_easz.py b/pysrc/ild_easz.py
+index 02cd691..c53b9f2 100755
+--- a/pysrc/ild_easz.py
++++ b/pysrc/ild_easz.py
+@@ -165,9 +165,10 @@ def work(agi, united_lookup, easz_nts, ild_gendir, debug):
+             return
+         nt_seq_arrays[tuple(nt_seq)] = array
+     #init function calls all single init functions for the created tables
+-    init_f = ild_nt.gen_init_function(list(nt_seq_arrays.values()),
++    nt_seq_values = [v for (k,v) in sorted(nt_seq_arrays.items())]
++    init_f = ild_nt.gen_init_function(nt_seq_values,
+                                        'xed_ild_easz_init')
+-    ild_nt.dump_lu_arrays(agi, list(nt_seq_arrays.values()), _easz_c_fn, 
++    ild_nt.dump_lu_arrays(agi, nt_seq_values, _easz_c_fn, 
+                           mbuild.join('include-private', _easz_header_fn),
+                           init_f)
+     getter_fos = []
+diff --git a/pysrc/ild_eosz.py b/pysrc/ild_eosz.py
+index 6643bc3..89d2d89 100755
+--- a/pysrc/ild_eosz.py
++++ b/pysrc/ild_eosz.py
+@@ -200,10 +200,11 @@ def work(agi, united_lookup, eosz_nts, ild_gendir, debug):
+             return None
+         nt_seq_arrays[tuple(nt_seq)] = array
+     #init function calls all single init functions for the created tables
+-    init_f = ild_nt.gen_init_function(list(nt_seq_arrays.values()), 
++    nt_seq_values = [v for (k,v) in sorted(nt_seq_arrays.items())]
++    init_f = ild_nt.gen_init_function(nt_seq_values, 
+                                       'xed_ild_eosz_init')
+     #dump init and lookup functions for EOSZ sequences
+-    ild_nt.dump_lu_arrays(agi, list(nt_seq_arrays.values()), _eosz_c_fn,
++    ild_nt.dump_lu_arrays(agi, nt_seq_values, _eosz_c_fn,
+                           mbuild.join('include-private', _eosz_header_fn),
+                           init_f)
+     #generate EOSZ getter functions - they get xed_decoded_inst_t*
+diff --git a/pysrc/ild_imm.py b/pysrc/ild_imm.py
+index 51c413c..0530bae 100755
+--- a/pysrc/ild_imm.py
++++ b/pysrc/ild_imm.py
+@@ -322,12 +322,14 @@ def work(agi, united_lookup, imm_nts, ild_gendir, eosz_dict,
+                                      level='l3')
+         nt_dict[nt_name] = array
+ 
++    nt_dict_values = [v for (k,v) in sorted(nt_dict.items())]
++
+     #create function that calls all initialization functions for L3
+-    init_f = ild_nt.gen_init_function(list(nt_dict.values()),
++    init_f = ild_nt.gen_init_function(nt_dict_values,
+                                       'xed_ild_imm_l3_init')
+     
+     #dump L3 functions
+-    ild_nt.dump_lu_arrays(agi, list(nt_dict.values()), _l3_c_fn,
++    ild_nt.dump_lu_arrays(agi, nt_dict_values, _l3_c_fn,
+                           mbuild.join('include-private',_l3_header_fn),
+                           init_f)
+     
-- 
2.27.0