diff mbox

[3/8] mongrel2: allow using uClibc but only on certain architectures

Message ID 1453148701-10036-4-git-send-email-thomas.petazzoni@free-electrons.com
State Superseded
Headers show

Commit Message

Thomas Petazzoni Jan. 18, 2016, 8:24 p.m. UTC
mongrel2 uses  the {get,make,swap}context functions:

 - With glibc, no problem, they are available on all supported
   architectures

 - With uClibc, they are available only on a subset of the
   architectures. Until now, only BR2_UCLIBC_VERSION_SNAPSHOT
   configurations were allowed to select mongrel2, but we are going to
   get rid of the uClibc snapshot version, and uClibc-ng is as capable
   as the uClibc snapshot. However, only certain architectures have
   the *context() functions.

 - With musl, there is no *context() support.

Since this dependency is quite complicated, we introduce a
BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS hidden boolean to encode which C
libraries are supported.

Also, listing the supported uClibc architectures would be too long in
the comment, so we simply indicate that the package needs uClibc or
glibc.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/mongrel2/Config.in | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

Comments

Romain Naour Jan. 25, 2016, 10:41 p.m. UTC | #1
Thomas, All,

Le 18/01/2016 21:24, Thomas Petazzoni a écrit :
> mongrel2 uses  the {get,make,swap}context functions:
> 
>  - With glibc, no problem, they are available on all supported
>    architectures
> 
>  - With uClibc, they are available only on a subset of the
>    architectures. Until now, only BR2_UCLIBC_VERSION_SNAPSHOT
>    configurations were allowed to select mongrel2, but we are going to
>    get rid of the uClibc snapshot version, and uClibc-ng is as capable
>    as the uClibc snapshot. However, only certain architectures have
>    the *context() functions.
> 
>  - With musl, there is no *context() support.
> 
> Since this dependency is quite complicated, we introduce a
> BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS hidden boolean to encode which C
> libraries are supported.
> 
> Also, listing the supported uClibc architectures would be too long in
> the comment, so we simply indicate that the package needs uClibc or
> glibc.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  package/mongrel2/Config.in | 22 ++++++++++++----------
>  1 file changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/package/mongrel2/Config.in b/package/mongrel2/Config.in
> index 1c7b495..49dd6fd 100644
> --- a/package/mongrel2/Config.in
> +++ b/package/mongrel2/Config.in
> @@ -1,10 +1,16 @@
> -comment "mongrel2 needs a toolchain w/ C++, threads, wchar, dynamic library"
> -	depends on BR2_UCLIBC_VERSION_SNAPSHOT || \
> -		BR2_TOOLCHAIN_USES_GLIBC || \
> -		BR2_arm
> +# mongrel2 uses {get,make,swap}context() functions, which are
> +# available in glibc for all architectures and in uClibc only for a
> +# subset of the architectures
> +config BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
> +	bool
> +	default y if BR2_TOOLCHAIN_USES_GLIBC
> +	default y if BR2_TOOLCHAIN_USES_UCLIBC && \
> +		(BR2_arm || BR2_armeb || BR2_i386 || BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || BR2_x86_64)

In the libunwind patch BR2_mips64 and BR2_mips64el where dropped from the
libunwind's supported architecture. Why they are not here ?

Best regards,
Romain

> +
> +comment "mongrel2 needs a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library"
>  	depends on !BR2_INSTALL_LIBSTDCPP || \
>  		!BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \
> -		BR2_STATIC_LIBS
> +		BR2_STATIC_LIBS || !BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
>  
>  config BR2_PACKAGE_MONGREL2
>  	bool "mongrel2"
> @@ -14,11 +20,7 @@ config BR2_PACKAGE_MONGREL2
>  	depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq
>  	depends on BR2_USE_WCHAR # zeromq -> util-linux
>  	depends on !BR2_STATIC_LIBS # uses dlopen()
> -	# {get,make,swap}context functions present in
> -	# {e,}glibc and in uClibc's master branch. Source has arm workaround
> -	depends on BR2_UCLIBC_VERSION_SNAPSHOT || \
> -		BR2_TOOLCHAIN_USES_GLIBC || \
> -		BR2_arm
> +	depends on BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
>  	help
>  	  Mongrel2 is an application, language, and network architecture
>  	  agnostic web server that focuses on web applications using
>
Thomas Petazzoni Jan. 25, 2016, 10:59 p.m. UTC | #2
Romain,

On Mon, 25 Jan 2016 23:41:13 +0100, Romain Naour wrote:

> > +# mongrel2 uses {get,make,swap}context() functions, which are
> > +# available in glibc for all architectures and in uClibc only for a
> > +# subset of the architectures
> > +config BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
> > +	bool
> > +	default y if BR2_TOOLCHAIN_USES_GLIBC
> > +	default y if BR2_TOOLCHAIN_USES_UCLIBC && \
> > +		(BR2_arm || BR2_armeb || BR2_i386 || BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || BR2_x86_64)
> 
> In the libunwind patch BR2_mips64 and BR2_mips64el where dropped from the
> libunwind's supported architecture. Why they are not here ?

I just tested, and I was able to build libunwind on mips64el with
uClibc, so it seems like my libunwind patch is incorrect in that
respect.

I'll fix that up in the v2.

Thanks!

Thomas
diff mbox

Patch

diff --git a/package/mongrel2/Config.in b/package/mongrel2/Config.in
index 1c7b495..49dd6fd 100644
--- a/package/mongrel2/Config.in
+++ b/package/mongrel2/Config.in
@@ -1,10 +1,16 @@ 
-comment "mongrel2 needs a toolchain w/ C++, threads, wchar, dynamic library"
-	depends on BR2_UCLIBC_VERSION_SNAPSHOT || \
-		BR2_TOOLCHAIN_USES_GLIBC || \
-		BR2_arm
+# mongrel2 uses {get,make,swap}context() functions, which are
+# available in glibc for all architectures and in uClibc only for a
+# subset of the architectures
+config BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
+	bool
+	default y if BR2_TOOLCHAIN_USES_GLIBC
+	default y if BR2_TOOLCHAIN_USES_UCLIBC && \
+		(BR2_arm || BR2_armeb || BR2_i386 || BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || BR2_x86_64)
+
+comment "mongrel2 needs a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library"
 	depends on !BR2_INSTALL_LIBSTDCPP || \
 		!BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \
-		BR2_STATIC_LIBS
+		BR2_STATIC_LIBS || !BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
 
 config BR2_PACKAGE_MONGREL2
 	bool "mongrel2"
@@ -14,11 +20,7 @@  config BR2_PACKAGE_MONGREL2
 	depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq
 	depends on BR2_USE_WCHAR # zeromq -> util-linux
 	depends on !BR2_STATIC_LIBS # uses dlopen()
-	# {get,make,swap}context functions present in
-	# {e,}glibc and in uClibc's master branch. Source has arm workaround
-	depends on BR2_UCLIBC_VERSION_SNAPSHOT || \
-		BR2_TOOLCHAIN_USES_GLIBC || \
-		BR2_arm
+	depends on BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS
 	help
 	  Mongrel2 is an application, language, and network architecture
 	  agnostic web server that focuses on web applications using