summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2021-11-11 21:33:54 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2021-11-12 00:30:13 +0100
commitd7c77f80b27341d1ce65e1a9e7d9f658faaf4850 (patch)
tree40fe4405178a39a96aa7effd8802f4c4c97e7eab
parent8ef195f2ff187454cc709d7857235676bb4176ee (diff)
downloadpsycopg2-strip-wheel.tar.gz
Strip debug symbols from binary packages2_9_2strip-wheel
The _psycopg.so library goes down from 1.6mb to 300k in Linux packages.
-rwxr-xr-xscripts/build/build_manylinux2014.sh1
-rwxr-xr-xscripts/build/build_manylinux_2_24.sh1
-rwxr-xr-xscripts/build/strip_wheel.sh41
3 files changed, 43 insertions, 0 deletions
diff --git a/scripts/build/build_manylinux2014.sh b/scripts/build/build_manylinux2014.sh
index 0e87bd5..ba32e47 100755
--- a/scripts/build/build_manylinux2014.sh
+++ b/scripts/build/build_manylinux2014.sh
@@ -41,6 +41,7 @@ done
# Bundle external shared libraries into the wheels
for whl in "${prjdir}"/dist/*.whl; do
+ "${dir}/strip_wheel.sh" "$whl"
auditwheel repair "$whl" -w "$distdir"
done
diff --git a/scripts/build/build_manylinux_2_24.sh b/scripts/build/build_manylinux_2_24.sh
index 6a9e992..742014a 100755
--- a/scripts/build/build_manylinux_2_24.sh
+++ b/scripts/build/build_manylinux_2_24.sh
@@ -41,6 +41,7 @@ done
# Bundle external shared libraries into the wheels
for whl in "${prjdir}"/dist/*.whl; do
+ "${dir}/strip_wheel.sh" "$whl"
auditwheel repair "$whl" -w "$distdir"
done
diff --git a/scripts/build/strip_wheel.sh b/scripts/build/strip_wheel.sh
new file mode 100755
index 0000000..0747f8c
--- /dev/null
+++ b/scripts/build/strip_wheel.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+# Strip symbols inplace from the libraries in a zip archive.
+#
+# Stripping symbols is beneficial (reduction of 30% of the final package, >
+# %90% of the installed libraries. However just running `auditwheel repair
+# --strip` breaks some of the libraries included from the system, which fail at
+# import with errors such as "ELF load command address/offset not properly
+# aligned".
+#
+# System libraries are already pretty stripped. _psycopg2.so goes around
+# 1.6M -> 300K (python 3.8, x86_64)
+#
+# This script is designed to run on a wheel archive before auditwheel.
+
+set -euo pipefail
+set -x
+
+wheel=$(realpath "$1")
+shift
+
+# python or python3?
+if which python > /dev/null; then
+ py=python
+else
+ py=python3
+fi
+
+tmpdir=$(mktemp -d)
+trap "rm -r ${tmpdir}" EXIT
+
+cd "${tmpdir}"
+$py -m zipfile -e "${wheel}" .
+
+find . -name *.so -ls -exec strip "$@" {} \;
+# Display the size after strip
+find . -name *.so -ls
+
+$py -m zipfile -c "${wheel}" *
+
+cd -