package/python-argon2-cffi: only enable sse2 when supported

We need to backport a commit so that we can enable/disable sse2 using
the ARGON2_CFFI_USE_SSE2 env variable.

Fixes:
http://autobuild.buildroot.net/results/030/0306d66d081dd0807c577edd50d39075a46d0dd9/build-end.log

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
James Hilliard 2020-05-07 14:39:01 -06:00 committed by Thomas Petazzoni
parent e0fbbdb6fc
commit 8120962635
2 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,78 @@
From 098890ed36d54a7c8beb8c01428c78de7ab77b05 Mon Sep 17 00:00:00 2001
From: James Hilliard <james.hilliard1@gmail.com>
Date: Wed, 6 May 2020 23:40:11 -0600
Subject: [PATCH] Add env variable ARGON2_CFFI_USE_SSE2 to override sse2
optimizations (#61)
This is useful for cross compiling since platform.machine() is broken
for cross builds.
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
[james.hilliard1@gmail.com: backport from upstream commit
098890ed36d54a7c8beb8c01428c78de7ab77b05]
---
CHANGELOG.rst | 2 +-
docs/installation.rst | 10 ++++++++++
setup.py | 12 +++++++++---
3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 9fa2bf0..4405297 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -26,7 +26,7 @@ Deprecations:
Changes:
^^^^^^^^
-*none*
+- Added ``ARGON2_CFFI_USE_SSE2`` env variable to override SSE2 autodetection.
----
diff --git a/docs/installation.rst b/docs/installation.rst
index 3ee9ccd..563c891 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -57,6 +57,16 @@ This approach can lead to problems around your build chain and you can run into
**It is your own responsibility to deal with these risks if you choose this path.**
+Override Automatic SSE2 Detection
+------------------------------------------
+
+If you set ``ARGON2_CFFI_USE_SSE2`` to ``1`` (and *only* ``1``), ``argon2-cffi`` will build with sse2 support.
+
+If you set ``ARGON2_CFFI_USE_SSE2`` to ``0`` (and *only* ``0``), ``argon2-cffi`` will build without sse2 support.
+
+This should generally only be used if the sse2 autodetection causes a compilation failure or if you are cross compiling.
+
+
.. _SSE2: https://en.wikipedia.org/wiki/SSE2
.. _PyPI: https://pypi.org/project/argon2-cffi/
.. _CFFI environment: https://cffi.readthedocs.io/en/latest/installation.html
diff --git a/setup.py b/setup.py
index e91e73a..c26a691 100644
--- a/setup.py
+++ b/setup.py
@@ -19,9 +19,15 @@ from setuptools.command.install import install
NAME = "argon2-cffi"
PACKAGES = find_packages(where="src")
-# Optimized version requires SSE2 extensions. They have been around since
-# 2001 so we try to compile it on every recent-ish x86.
-optimized = platform.machine() in ("i686", "x86", "x86_64", "AMD64")
+use_sse2 = os.environ.get("ARGON2_CFFI_USE_SSE2", None)
+if use_sse2 == "1":
+ optimized = True
+elif use_sse2 == "0":
+ optimized = False
+else:
+ # Optimized version requires SSE2 extensions. They have been around since
+ # 2001 so we try to compile it on every recent-ish x86.
+ optimized = platform.machine() in ("i686", "x86", "x86_64", "AMD64")
CFFI_MODULES = ["src/argon2/_ffi_build.py:ffi"]
lib_base = os.path.join("extras", "libargon2", "src")
--
2.20.1

View File

@ -12,4 +12,10 @@ PYTHON_ARGON2_CFFI_LICENSE = MIT
PYTHON_ARGON2_CFFI_LICENSE_FILES = LICENSE
PYTHON_ARGON2_CFFI_DEPENDENCIES = host-python-cffi
ifeq ($(BR2_X86_CPU_HAS_SSE2),y)
PYTHON_ARGON2_CFFI_ENV = ARGON2_CFFI_USE_SSE2=1
else
PYTHON_ARGON2_CFFI_ENV = ARGON2_CFFI_USE_SSE2=0
endif
$(eval $(python-package))