diff mbox series

[1/1] package/libopenssl: fix performance issue in static build

Message ID 20210425133845.2459496-1-fontaine.fabrice@gmail.com
State Accepted
Headers show
Series [1/1] package/libopenssl: fix performance issue in static build | expand

Commit Message

Fabrice Fontaine April 25, 2021, 1:38 p.m. UTC
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>
---
 package/libopenssl/Config.in     |  4 ----
 package/libopenssl/libopenssl.mk | 25 ++++++++++++++++++++-----
 2 files changed, 20 insertions(+), 9 deletions(-)

Comments

Yann E. MORIN May 4, 2021, 7:23 p.m. UTC | #1
Fabrice, All,

On 2021-04-25 15:38 +0200, Fabrice Fontaine spake thusly:
> 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>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
>  package/libopenssl/Config.in     |  4 ----
>  package/libopenssl/libopenssl.mk | 25 ++++++++++++++++++++-----
>  2 files changed, 20 insertions(+), 9 deletions(-)
> 
> diff --git a/package/libopenssl/Config.in b/package/libopenssl/Config.in
> index 8909e36b9e..723fd282a4 100644
> --- a/package/libopenssl/Config.in
> +++ b/package/libopenssl/Config.in
> @@ -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
> diff --git a/package/libopenssl/libopenssl.mk b/package/libopenssl/libopenssl.mk
> index a10b64c8fd..487fe554c1 100644
> --- a/package/libopenssl/libopenssl.mk
> +++ b/package/libopenssl/libopenssl.mk
> @@ -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}
> -- 
> 2.30.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Peter Korsgaard May 7, 2021, 8:39 a.m. UTC | #2
>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes:

 > 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>

Committed to 2021.02.x, thanks.
diff mbox series

Patch

diff --git a/package/libopenssl/Config.in b/package/libopenssl/Config.in
index 8909e36b9e..723fd282a4 100644
--- a/package/libopenssl/Config.in
+++ b/package/libopenssl/Config.in
@@ -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
diff --git a/package/libopenssl/libopenssl.mk b/package/libopenssl/libopenssl.mk
index a10b64c8fd..487fe554c1 100644
--- a/package/libopenssl/libopenssl.mk
+++ b/package/libopenssl/libopenssl.mk
@@ -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}