Bug#1013257: libxsmm: please make the build (partly) reproducible

Chris Lamb lamby at debian.org
Mon Jun 20 09:13:05 BST 2022


Source: libxsmm
Version: 1.17-1
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: timestamps
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0] we noticed that
libxsmm could not be built reproducibly.

This is because it ships a build.txt with an absolute build path and
uses the current date in some headers files. These are fixed in the
attached patch.

However, the ABSDIR (also in build.txt) is embedded in in the libxsmm.a
library in an ELF text header.


 [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
--- a/debian/patches/0003-Reproducible-build.patch	1970-01-01 01:00:00.000000000 +0100
--- b/debian/patches/0003-Reproducible-build.patch	2022-06-20 09:01:20.106293806 +0100
@@ -0,0 +1,39 @@
+Description: Make the build reproducible
+Author: Chris Lamb <lamby at debian.org>
+Last-Update: 2022-06-20
+
+--- libxsmm-1.17.orig/scripts/libxsmm_config.py
++++ libxsmm-1.17/scripts/libxsmm_config.py
+@@ -10,9 +10,11 @@
+ # Hans Pabst (Intel Corp.)
+ ###############################################################################
+ from string import Template
+-from datetime import date
++import datetime
+ import libxsmm_utilities
+ import fnmatch
++import os
++import time
+ import sys
+ 
+ 
+@@ -87,6 +89,10 @@ if __name__ == "__main__":
+         maxn = libxsmm_utilities.max_mnk(mnklist, avgdim, 1)
+         maxk = libxsmm_utilities.max_mnk(mnklist, avgdim, 2)
+ 
++        build_date = datetime.datetime.utcfromtimestamp(
++            int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
++        )
++
+         substitute = {
+             "VERSION": realversion,
+             "BRANCH": branch,
+@@ -94,7 +100,7 @@ if __name__ == "__main__":
+             "MINOR": minor,
+             "UPDATE": update,
+             "PATCH": patch,
+-            "DATE": date.today().strftime("%Y%m%d"),
++            "DATE": build_date.strftime("%Y%m%d"),
+             "CACHELINE": cacheline,
+             "PREFETCH": [-1, prefetch][0 <= prefetch],
+             "MAX_MNK": maxmnk,
--- a/debian/patches/series	2022-06-20 08:24:21.976388516 +0100
--- b/debian/patches/series	2022-06-20 08:46:51.618995900 +0100
@@ -1,2 +1,3 @@
 0001-Makefile-rebuild-fix.patch
 0002-Makefile-fix-pkgconfigdir.patch
+0003-Reproducible-build.patch
--- a/debian/rules	2022-06-20 08:24:21.976388516 +0100
--- b/debian/rules	2022-06-20 08:49:26.476766896 +0100
@@ -16,6 +16,8 @@
 	# Do not include docs in /usr/share/libxsmm
 	rm -f debian/*/usr/share/libxsmm/*.md
 	rm -f debian/*/usr/share/libxsmm/*.pdf
+	# Do not include build.txt
+	rm -f ./debian/*/usr/share/libxsmm/build.txt
 
 execute_after_dh_installdocs:
 	# Do not install broken symlinks
--- a/scripts/libxsmm_config.py	2022-06-20 08:24:21.984388483 +0100
--- b/scripts/libxsmm_config.py	2022-06-20 09:01:29.846352447 +0100
@@ -10,9 +10,11 @@
 # Hans Pabst (Intel Corp.)
 ###############################################################################
 from string import Template
-from datetime import date
+import datetime
 import libxsmm_utilities
 import fnmatch
+import os
+import time
 import sys
 
 
@@ -87,6 +89,10 @@
         maxn = libxsmm_utilities.max_mnk(mnklist, avgdim, 1)
         maxk = libxsmm_utilities.max_mnk(mnklist, avgdim, 2)
 
+        build_date = datetime.datetime.utcfromtimestamp(
+            int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
+        )
+
         substitute = {
             "VERSION": realversion,
             "BRANCH": branch,
@@ -94,7 +100,7 @@
             "MINOR": minor,
             "UPDATE": update,
             "PATCH": patch,
-            "DATE": date.today().strftime("%Y%m%d"),
+            "DATE": build_date.strftime("%Y%m%d"),
             "CACHELINE": cacheline,
             "PREFETCH": [-1, prefetch][0 <= prefetch],
             "MAX_MNK": maxmnk,


More information about the debian-science-maintainers mailing list