package/libopenssl: fix performance issue in static build
authorFabrice Fontaine <fontaine.fabrice@gmail.com>
Sun, 25 Apr 2021 13:38:45 +0000 (15:38 +0200)
committerYann E. MORIN <yann.morin.1998@free.fr>
Tue, 4 May 2021 19:22:52 +0000 (21:22 +0200)
Revert commit 8c2c959b028d44f5518d4445f864aedae3d90406 as no-dso has
been added back to openssl since version 1.1.1e and
https://github.com/openssl/openssl/commit/8dcd57461972dceaaf014b71d173d0a8758e7054
and because gcc no-asm has performance issue

Fixes:
 - https://bugs.buildroot.org/show_bug.cgi?id=13751

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
package/libopenssl/Config.in
package/libopenssl/libopenssl.mk

index 8909e36b9e261e27eba46348c147173f9881e674..723fd282a4e86b275bece8cd8922b6c8e280a71d 100644 (file)
@@ -14,10 +14,6 @@ config BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH_LINUX_PPC
 
 config BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH
        string
-       # Use "gcc" minimalistic target to disable DSO
-       # no-asm is needed with generic architectures such as gcc, see
-       # https://github.com/openssl/openssl/issues/9839
-       default "gcc no-asm"                    if BR2_STATIC_LIBS
        # Doesn't work for thumb-only (Cortex-M?)
        default "linux-armv4"                   if BR2_ARM_CPU_HAS_ARM
        default "linux-aarch64"                 if BR2_aarch64
index a10b64c8fd9993f08f5b7e63b7e4c327d1469e1d..487fe554c144436161948ccd7073f517e14977f1 100644 (file)
@@ -25,10 +25,6 @@ LIBOPENSSL_CFLAGS += -mxgot
 LIBOPENSSL_CFLAGS += -DOPENSSL_SMALL_FOOTPRINT
 endif
 
-ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
-LIBOPENSSL_CFLAGS += -DOPENSSL_THREADS
-endif
-
 ifeq ($(BR2_USE_MMU),)
 LIBOPENSSL_CFLAGS += -DHAVE_FORK=0 -DOPENSSL_NO_MADVISE
 endif
@@ -79,7 +75,7 @@ define LIBOPENSSL_CONFIGURE_CMDS
                        --prefix=/usr \
                        --openssldir=/etc/ssl \
                        $(if $(BR2_TOOLCHAIN_HAS_LIBATOMIC),-latomic) \
-                       $(if $(BR2_TOOLCHAIN_HAS_THREADS),-lpthread threads, no-threads) \
+                       $(if $(BR2_TOOLCHAIN_HAS_THREADS),threads,no-threads) \
                        $(if $(BR2_STATIC_LIBS),no-shared,shared) \
                        $(if $(BR2_PACKAGE_HAS_CRYPTODEV),enable-devcryptoeng) \
                        no-rc5 \
@@ -89,12 +85,21 @@ define LIBOPENSSL_CONFIGURE_CMDS
                        no-fuzz-libfuzzer \
                        no-fuzz-afl \
                        $(if $(BR2_STATIC_LIBS),zlib,zlib-dynamic) \
+                       $(if $(BR2_STATIC_LIBS),no-dso) \
        )
        $(SED) "s#-march=[-a-z0-9] ##" -e "s#-mcpu=[-a-z0-9] ##g" $(@D)/Makefile
        $(SED) "s#-O[0-9sg]#$(LIBOPENSSL_CFLAGS)#" $(@D)/Makefile
        $(SED) "s# build_tests##" $(@D)/Makefile
 endef
 
+# libdl is not available in a static build, and this is not implied by no-dso
+ifeq ($(BR2_STATIC_LIBS),y)
+define LIBOPENSSL_FIXUP_STATIC_MAKEFILE
+       $(SED) 's#-ldl##g' $(@D)/Makefile
+endef
+LIBOPENSSL_POST_CONFIGURE_HOOKS += LIBOPENSSL_FIXUP_STATIC_MAKEFILE
+endif
+
 define HOST_LIBOPENSSL_BUILD_CMDS
        $(HOST_MAKE_ENV) $(MAKE) -C $(@D)
 endef
@@ -117,6 +122,16 @@ define LIBOPENSSL_INSTALL_TARGET_CMDS
        rm -f $(TARGET_DIR)/usr/bin/c_rehash
 endef
 
+# libdl has no business in a static build
+ifeq ($(BR2_STATIC_LIBS),y)
+define LIBOPENSSL_FIXUP_STATIC_PKGCONFIG
+       $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/libcrypto.pc
+       $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/libssl.pc
+       $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/openssl.pc
+endef
+LIBOPENSSL_POST_INSTALL_STAGING_HOOKS += LIBOPENSSL_FIXUP_STATIC_PKGCONFIG
+endif
+
 ifeq ($(BR2_PACKAGE_PERL),)
 define LIBOPENSSL_REMOVE_PERL_SCRIPTS
        $(RM) -f $(TARGET_DIR)/etc/ssl/misc/{CA.pl,tsget}