small-package/diy/patches/ARMV8CE_AES.patch

66 lines
2.4 KiB
Diff

--- a/mbedtls/Makefile
+++ b/mbedtls/Makefile
@@ -23,6 +23,8 @@ PKG_CPE_ID:=cpe:/a:arm:mbed_tls
PKG_CONFIG_DEPENDS := \
CONFIG_LIBMBEDTLS_DEBUG_C \
+ CONFIG_LIBMBEDTLS_HAVE_ARMV8CE_AES \
+ CONFIG_LIBMBEDTLS_HAVE_SSE2 \
CONFIG_LIBMBEDTLS_HKDF_C
include $(INCLUDE_DIR)/package.mk
@@ -60,6 +62,34 @@ config LIBMBEDTLS_DEBUG_C
Usually, you don't need this, so don't select this if you're unsure.
+config LIBMBEDTLS_HAVE_ARMV8CE_AES
+ depends on PACKAGE_libmbedtls
+ bool
+ default y
+ prompt "Enable use of the ARMv8 Crypto Extensions"
+ depends on aarch64 && !TARGET_bcm27xx && !TARGET_bcm4908
+ help
+ Use of the ARMv8 Crypto Extensions greatly increase performance
+ (up to 4x faster on AES-GCM while 10x faster on raw AES).
+
+ Related instructions should be included in all modern Aarch64
+ devices, except some wastes like Broadcom.
+ If you don't sure, say Y here.
+
+config LIBMBEDTLS_HAVE_SSE2
+ depends on PACKAGE_libmbedtls
+ bool
+ default y if !TARGET_x86_legacy && !TARGET_x86_geode
+ prompt "Enable use of x86 SSE2 instructions"
+ depends on x86_64 || i386
+ help
+ Use of SSE2 instructions greatly increase performance (up to
+ 3x faster) with a minimum (~0.2%, or 23KB) increase in package
+ size, but it will bring no benefit if your hardware does not
+ support them, such as Geode GX and LX. In this case you may
+ save 23KB by saying yes here. AMD Geode NX, and Intel
+ Pentium 4 and above support SSE2.
+
config LIBMBEDTLS_HKDF_C
depends on PACKAGE_libmbedtls
bool "Enable the HKDF algorithm (RFC 5869)"
@@ -92,6 +122,9 @@ PKG_INSTALL:=1
TARGET_CFLAGS += -ffunction-sections -fdata-sections
TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS))
+ifneq ($(CONFIG_LIBMBEDTLS_HAVE_ARMV8CE_AES),)
+ TARGET_CFLAGS := $(filter-out -march=%,$(TARGET_CFLAGS)) -march=armv8-a+crypto
+endif
CMAKE_OPTIONS += \
-DUSE_SHARED_MBEDTLS_LIBRARY:Bool=ON \
@@ -103,6 +136,8 @@ define Build/Configure
awk 'BEGIN { rc = 1 } \
/#define MBEDTLS_DEBUG_C/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_DEBUG_C),,// )#define MBEDTLS_DEBUG_C"; rc = 0 } \
+ /#define MBEDTLS_ARMV8CE_AES_C/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_HAVE_ARMV8CE_AES),,// )#define MBEDTLS_ARMV8CE_AES_C"; rc = 0 } \
+ /#define MBEDTLS_HAVE_SSE2/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_HAVE_SSE2),,// )#define MBEDTLS_HAVE_SSE2"; rc = 0 } \
{ print } \
END { exit(rc) }' $(PKG_BUILD_DIR)/include/mbedtls/config.h \
>$(PKG_BUILD_DIR)/include/mbedtls/config.h.new && \