Skip to contentSkip to conversation

musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

PATCH New Charles Duffy 4 participants 10 messages Oct 14, 2015 – Oct 18, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

From: Charles Duffy <[email protected]>

---
 package/musl/musl.mk | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
package/musl/musl.mk +3 -1
index 22589f5..aca78ab 100644
@@ -28,7 +28,9 @@ define MUSL_CONFIGURE_CMDS
 			--host=$(GNU_TARGET_NAME) \
 			--prefix=/usr \
 			--libdir=/lib \
-			--disable-gcc-wrapper)
+			--disable-gcc-wrapper \
+			$(if $(BR2_STATIC_LIBS),--disable-shared) \
+			$(if $(BR2_SHARED_LIBS),--disable-static))
 endef
 
 define MUSL_BUILD_CMDS
Signature · 1 line
2.0.0
#1 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

Charles,

Quoted 3 lines · Charles Duffy

From: Charles Duffy <[email protected]>

Thanks for the patch!

package/musl/musl.mk define MUSL_CONFIGURE_CMDS · line 33

Quoted 12 lines
package/musl/musl.mk +3 -1
index 22589f5..aca78ab 100644
@@ -28,7 +28,9 @@ define MUSL_CONFIGURE_CMDS
 			--host=$(GNU_TARGET_NAME) \
 			--prefix=/usr \
 			--libdir=/lib \
-			--disable-gcc-wrapper)
+			--disable-gcc-wrapper \
+			$(if $(BR2_STATIC_LIBS),--disable-shared) \
+			$(if $(BR2_SHARED_LIBS),--disable-static))

Could you instead try the following change:

- --disable-gcc-wrapper)
+ --disable-gcc-wrapper \
+ $(SHARED_STATIC_LIBS_OPTS))

The SHARED_STATIC_LIBS_OPTS variable, defined in package/Makefile.in, already contains the right combination of --{enable,disable}-{static,shared} depending on BR2_STATIC_LIBS, BR2_SHARED_LIBS and BR2_STATIC_SHARED_LIBS.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

package/musl/musl.mk define MUSL_CONFIGURE_CMDS

Quoted 7 lines · Thomas Petazzoni

Could you instead try the following change:

package/musl/musl.mk +2 -1
-                       --disable-gcc-wrapper)
+                       --disable-gcc-wrapper \
+                       $(SHARED_STATIC_LIBS_OPTS))

Works perfectly. Should I bother resubmitting, or are you inclined to make
the change directly?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20151014/c6a2d855/attachment.html>

#3 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

Charles,

Quoted 5 lines · Charles Duffy
Quoted 2 lines · Thomas Petazzoni

Could you instead try the following change:

Quoted 7 lines

package/musl/musl.mk define MUSL_CONFIGURE_CMDS

Quoted 5 lines
package/musl/musl.mk +2 -1
-                       --disable-gcc-wrapper)
+                       --disable-gcc-wrapper \
+                       $(SHARED_STATIC_LIBS_OPTS))

Works perfectly. Should I bother resubmitting, or are you inclined to make the change directly?

I did the change and applied. See
http://git.buildroot.net/buildroot/commit/?id=bb41933d3642f44c8d2db07886b2e5bf18b97fad.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#4 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

In reply to Charles Duffy

Charles, Peter, Arnout, Yann,

Quoted 12 lines · Charles Duffy

From: Charles Duffy <[email protected]>

---
 package/musl/musl.mk | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
package/musl/musl.mk +0 -0
index 22589f5..aca78ab 100644

package/musl/musl.mk define MUSL_CONFIGURE_CMDS · line 34

Quoted 8 lines
package/musl/musl.mk +3 -1
@@ -28,7 +28,9 @@ define MUSL_CONFIGURE_CMDS
 			--host=$(GNU_TARGET_NAME) \
 			--prefix=/usr \
 			--libdir=/lib \
-			--disable-gcc-wrapper)
+			--disable-gcc-wrapper \
+			$(if $(BR2_STATIC_LIBS),--disable-shared) \
+			$(if $(BR2_SHARED_LIBS),--disable-static))
 endef

In fact, this patch is causing some problems. Now, when BR2_SHARED_LIBS=y, musl is built with --disable-static. Due to this, there is no libc.a generated for musl. For the internal toolchain backend, this is OK.

But when the produced toolchain gets re-used as an external toolchain, it fails because the external toolchain logic in Buildroot uses "gcc -print-file-name=libc.a" to find the sysroot. Since there is no libc.a, it fails and the toolchain cannot be used.

Arnout, Yann, Peter, what do you think about this?

Should we always produce a libc.a in the musl case, so that it's more like glibc and uClibc.

Or should we adjust our external toolchain logic to fallback on searching for a different file than libc.a when libc.a is not available?

Thanks for your feedback,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#5 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

Thomas, All,

On 2015-10-18 15:09 +0200, Thomas Petazzoni spake thusly:

Quoted 32 lines · Charles Duffy
Quoted 12 lines

From: Charles Duffy <[email protected]>

---
 package/musl/musl.mk | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
package/musl/musl.mk +0 -0
index 22589f5..aca78ab 100644

package/musl/musl.mk define MUSL_CONFIGURE_CMDS · line 34

Quoted 8 lines
package/musl/musl.mk +3 -1
@@ -28,7 +28,9 @@ define MUSL_CONFIGURE_CMDS
 			--host=$(GNU_TARGET_NAME) \
 			--prefix=/usr \
 			--libdir=/lib \
-			--disable-gcc-wrapper)
+			--disable-gcc-wrapper \
+			$(if $(BR2_STATIC_LIBS),--disable-shared) \
+			$(if $(BR2_SHARED_LIBS),--disable-static))
 endef

In fact, this patch is causing some problems. Now, when BR2_SHARED_LIBS=y, musl is built with --disable-static. Due to this, there is no libc.a generated for musl. For the internal toolchain backend, this is OK.

But when the produced toolchain gets re-used as an external toolchain, it fails because the external toolchain logic in Buildroot uses "gcc -print-file-name=libc.a" to find the sysroot. Since there is no libc.a, it fails and the toolchain cannot be used.

Quoted 7 lines

Arnout, Yann, Peter, what do you think about this?

Should we always produce a libc.a in the musl case, so that it's more like glibc and uClibc.

Or should we adjust our external toolchain logic to fallback on searching for a different file than libc.a when libc.a is not available?

Hmmm... I have to admit that this is a tough one...

On the one hand, there's no reason to produce libc.a when we really want dynamically-linked executables.

On the other hand, the toolchain is always a bit "special", and it still makes sense to have libc.a even in the purely-shared scenario.

Really, I am totally unsure which way to go.

The quick fix to our build failures would be to revert this patch, of course, until we have a better solution.

Charles, was there a hard resaon you provided this patch, or was it more like "hey, let's not build static or shared when not needed" ?

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#6 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

I provided this patch because my build results were unnecessarily enlarged by dynamic libraries on an otherwise static-only system.

It sounds to me like we could optionally disable only dynamic libraries; leave static libraries always enabled; and end up in a place that works for everyone.

Quoted 74 lines · Yann E. MORIN

Thomas, All,

On 2015-10-18 15:09 +0200, Thomas Petazzoni spake thusly:

Quoted 32 lines · Charles Duffy
Quoted 12 lines

From: Charles Duffy <[email protected]>

---
 package/musl/musl.mk | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
package/musl/musl.mk +0 -0
index 22589f5..aca78ab 100644

package/musl/musl.mk define MUSL_CONFIGURE_CMDS · line 34

Quoted 8 lines
package/musl/musl.mk +3 -1
@@ -28,7 +28,9 @@ define MUSL_CONFIGURE_CMDS
                    --host=$(GNU_TARGET_NAME) \
                    --prefix=/usr \
                    --libdir=/lib \
-                   --disable-gcc-wrapper)
+                   --disable-gcc-wrapper \
+                   $(if $(BR2_STATIC_LIBS),--disable-shared) \
+                   $(if $(BR2_SHARED_LIBS),--disable-static))
 endef

In fact, this patch is causing some problems. Now, when BR2_SHARED_LIBS=y, musl is built with --disable-static. Due to this, there is no libc.a generated for musl. For the internal toolchain backend, this is OK.

But when the produced toolchain gets re-used as an external toolchain, it fails because the external toolchain logic in Buildroot uses "gcc -print-file-name=libc.a" to find the sysroot. Since there is no libc.a, it fails and the toolchain cannot be used.

Quoted 7 lines

Arnout, Yann, Peter, what do you think about this?

Should we always produce a libc.a in the musl case, so that it's more like glibc and uClibc.

Or should we adjust our external toolchain logic to fallback on searching for a different file than libc.a when libc.a is not available?

Hmmm... I have to admit that this is a tough one...

On the one hand, there's no reason to produce libc.a when we really want dynamically-linked executables.

On the other hand, the toolchain is always a bit "special", and it still makes sense to have libc.a even in the purely-shared scenario.

Really, I am totally unsure which way to go.

The quick fix to our build failures would be to revert this patch, of course, until we have a better solution.

Charles, was there a hard resaon you provided this patch, or was it more like "hey, let's not build static or shared when not needed" ?

Regards,
Yann E. MORIN.

--

.-----------------.--------------------.------------------.--------------------.

|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics'
conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___
     |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is
no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v
 conspiracy.  |
Quoted 2 lines

'------------------------------^-------^------------------^--------------------'

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20151018/4b3de436/attachment-0001.html>

#7 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

Charles, Yann,

Quoted 6 lines · Charles Duffy

I provided this patch because my build results were unnecessarily enlarged by dynamic libraries on an otherwise static-only system.

It sounds to me like we could optionally disable only dynamic libraries; leave static libraries always enabled; and end up in a place that works for everyone.

Yeah, that's also my thought. In uClibc, you can enable/disable the shared library build, but not the static library build. So maybe we should do:

	--enable-static \
	$(if $(BR2_STATIC_LIBS),--disable-shared,--enable-shared)

I.e, always static, and shared as soon as BR2_STATIC_LIBS is disabled.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#8 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

Thomas, Charles, All,

On 2015-10-18 18:33 +0200, Thomas Petazzoni spake thusly:

Quoted 10 lines

Charles, Yann,

Quoted 6 lines · Charles Duffy

I provided this patch because my build results were unnecessarily enlarged by dynamic libraries on an otherwise static-only system.

It sounds to me like we could optionally disable only dynamic libraries; leave static libraries always enabled; and end up in a place that works for everyone.

Quoted 8 lines

Yeah, that's also my thought. In uClibc, you can enable/disable the shared library build, but not the static library build. So maybe we should do:

	--enable-static \
	$(if $(BR2_STATIC_LIBS),--disable-shared,--enable-shared)

I.e, always static, and shared as soon as BR2_STATIC_LIBS is disabled.

Yes, I think this would be the best solution.

Charles, care to send the patch, please?

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#9 lore raw

PATCH 1/1 musl: Honor BR2_STATIC_LIBS / BR2_SHARED_LIBS

In reply to Thomas Petazzoni
Quoted 11 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Thomas" == Thomas Petazzoni <[email protected]> writes:

Charles, Yann,

Quoted 6 lines · Charles Duffy

I provided this patch because my build results were unnecessarily enlarged by dynamic libraries on an otherwise static-only system.

It sounds to me like we could optionally disable only dynamic libraries; leave static libraries always enabled; and end up in a place that works for everyone.

Quoted 8 lines

Yeah, that's also my thought. In uClibc, you can enable/disable the shared library build, but not the static library build. So maybe we should do:

	--enable-static \
	$(if $(BR2_STATIC_LIBS),--disable-shared,--enable-shared)

I.e, always static, and shared as soon as BR2_STATIC_LIBS is disabled.

Yes, I think that's the safest/easiest/best-matching-the-other-libcs approach.

Signature · 2 lines
Venlig hilsen,
Peter Korsgaard