Skip to contentSkip to conversation

First hack for external toolchain support based on sysroot

RFC In review Thomas Petazzoni 2 participants 4 messages Dec 2, 2008 – Dec 10, 2008

lore
Share & tools
lore
#0 lore raw

RFC 1/1 First hack for external toolchain support based on sysroot

Hi,

This evening, I had a quick look at implementing support for external toolchain based on --sysroot. It seems to work, see the included patch. It's very hacky at the moment, I'm waiting for your suggestions to improve the patch.

Sincerly,

Thomas

---

Another external toolchain support solution

* In toolchain/external-toolchain/ext-tool.mk, copy the contents of the sysroot directory to the staging dir.

* In package/Makefile.in, add a --sysroot CFLAGS pointing to the staging dir

* Remove the CFLAGS and LDFLAGS definition from TARGET_CONFIGURE_OPTS. I haven't investigated exactly why, but with these options, DirectFB fails to build because it cannot find PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, even if DirectFB's Makefile properly sets -D_GNU_SOURCE.

---
 package/Makefile.in                      |    4 +---
 toolchain/external-toolchain/ext-tool.mk |    6 ++++++
 2 files changed, 7 insertions(+), 3 deletions(-)
package/Makefile.in +1 -3
Index: buildroot2/package/Makefile.in
===================================================================
@@ -89,7 +89,7 @@
 # else it's an external toolchain
 #########################################################################
 else
-TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) -I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include -I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include
+TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) -I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include -I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include --sysroot $(STAGING_DIR)/
 TARGET_CXXFLAGS=$(TARGET_CFLAGS)
 TARGET_LDFLAGS=-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib
 endif
@@ -210,8 +210,6 @@
 		AR="$(TARGET_AR)" \
 		AS="$(TARGET_AS)" \
 		LD="$(TARGET_LD)" \
-		CFLAGS="$(TARGET_CFLAGS)" \
-		LDFLAGS="$(TARGET_LDFLAGS)" \
 		NM="$(TARGET_NM)" \
 		CC="$(TARGET_CC) $(TARGET_CFLAGS)" \
 		GCC="$(TARGET_CC) $(TARGET_CFLAGS)" \
toolchain/external-toolchain/ext-tool.mk +6 -0
Index: buildroot2/toolchain/external-toolchain/ext-tool.mk
===================================================================
@@ -44,6 +44,11 @@
  \
 	echo -n
 
+copy_toolchain_sysroot = \
+	SYSROOT_DIR=`$(TARGET_CC) -v 2>&1 | grep ^Configured | tr " " "\n" | grep -- "--with-sysroot" | cut -f2 -d=`; \
+	cp -a $${SYSROOT_DIR}/* $(STAGING_DIR)/ ; \
+	find $(STAGING_DIR) -type d | xargs chmod 755
+
 uclibc: dependencies $(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C)))
 
 $(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))):
@@ -54,3 +59,4 @@
 	for libs in $(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIBS))); do \
 		$(call copy_toolchain_lib_root, $$libs, /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \
 	done
+	$(call copy_toolchain_sysroot)
\ No newline at end of file
Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
#1 lore raw

RFC 1/1 First hack for external toolchain support based on sysroot

I had done the first bit and not the second. I will start to look at this. Perhaps the CFLAGS and LDFLAGS can go back to how they were when new started all this.
eg LD="$(TARGET_LD) $(TARGET_LDFLAGS)"

Does that work for DirectFB?

Cheers foe this good work, maybe we will have external toolchain working properly soon?

My next question is - with sysroot set do we really need to set the SYSROOT option to pkgconfig? and do we need to sed all the .la files?

Many thanks
Daniel Laird

-----Original Message-----
From: Thomas Petazzoni [mailto:thomas.petazzoni at free-electrons.com]
Sent: 2008 Dec 02 22:22
To: Daniel James Laird; buildroot at uclibc.org
Subject: [RFC] First hack for external toolchain support based on sysroot

Hi,

This evening, I had a quick look at implementing support for external toolchain based on --sysroot. It seems to work, see the included patch. It's very hacky at the moment, I'm waiting for your suggestions to improve the patch.

Sincerly,

Thomas

---

Another external toolchain support solution

* In toolchain/external-toolchain/ext-tool.mk, copy the contents of the sysroot directory to the staging dir.

* In package/Makefile.in, add a --sysroot CFLAGS pointing to the staging dir

* Remove the CFLAGS and LDFLAGS definition from TARGET_CONFIGURE_OPTS. I haven't investigated exactly why, but with these options, DirectFB fails to build because it cannot find PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, even if DirectFB's Makefile properly sets -D_GNU_SOURCE.

---
 package/Makefile.in                      |    4 +---
 toolchain/external-toolchain/ext-tool.mk |    6 ++++++
 2 files changed, 7 insertions(+), 3 deletions(-)
package/Makefile.in +1 -4
Index: buildroot2/package/Makefile.in
===================================================================
@@ -89,7 +89,7 @@
 # else it's an external toolchain
 #########################################################################
 else
-TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
-I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include
-I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include
+TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
-I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include

-I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include --sysroot $(STAGING_DIR)/
TARGET_CXXFLAGS=$(TARGET_CFLAGS) TARGET_LDFLAGS=-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib endif
@@ -210,8 +210,6 @@
AR="$(TARGET_AR)" \
AS="$(TARGET_AS)" \
LD="$(TARGET_LD)" \
- CFLAGS="$(TARGET_CFLAGS)" \
- LDFLAGS="$(TARGET_LDFLAGS)" \
NM="$(TARGET_NM)" \
CC="$(TARGET_CC) $(TARGET_CFLAGS)" \
GCC="$(TARGET_CC) $(TARGET_CFLAGS)" \

toolchain/external-toolchain/ext-tool.mk +2 -0
Index: buildroot2/toolchain/external-toolchain/ext-tool.mk
===================================================================
@@ -44,6 +44,11 @@
  \
 	echo -n
 
+copy_toolchain_sysroot = \
+	SYSROOT_DIR=`$(TARGET_CC) -v 2>&1 | grep ^Configured | tr " " "\n" |

grep -- "--with-sysroot" | cut -f2 -d=`; \
+ cp -a $${SYSROOT_DIR}/* $(STAGING_DIR)/ ; \
+ find $(STAGING_DIR) -type d | xargs chmod 755
+
uclibc: dependencies $(TARGET_DIR)/lib/$(strip $(subst ",,
$(BR2_TOOLCHAIN_EXTERNAL_LIB_C)))

$(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))):
@@ -54,3 +59,4 @@
for libs in $(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIBS))); do
\
$(call copy_toolchain_lib_root, $$libs, /lib,
$(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \
done
+ $(call copy_toolchain_sysroot)
\ No newline at end of file

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
#2 lore raw

Le Wed, 3 Dec 2008 08:14:00 +0000,
"Daniel Laird" <[email protected]> a ?crit :

Quoted 6 lines

I had done the first bit and not the second. I will start to look at this. Perhaps the CFLAGS and LDFLAGS can go back to how they were when new started all this.
eg LD="$(TARGET_LD) $(TARGET_LDFLAGS)"

Does that work for DirectFB?

Maybe, I haven't tried.

Quoted 2 lines

Cheers foe this good work, maybe we will have external toolchain working properly soon?

I hope so :-)

The nice advantage of the --sysroot solution is that it should work in all cases, while the -rpath-link solution didn't work for Qtopia, for example.

Quoted 2 lines

My next question is - with sysroot set do we really need to set the SYSROOT option to pkgconfig? and do we need to sed all the .la files?

I'd say we still need them. Otherwise in a .la file you'll have /usr/lib/libfoobar.a, and I don't think gcc will interpret that relative to its --sysroot. But it remains to be checked.

Sincerly,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
#3 lore raw
In reply to Thomas Petazzoni

Hi,

Any reaction to this patch ?

Thanks,

Thomas

Le Tue, 2 Dec 2008 23:21:32 +0100,
Thomas Petazzoni <[email protected]> a ?crit :

Quoted 82 lines

Hi,

This evening, I had a quick look at implementing support for external toolchain based on --sysroot. It seems to work, see the included patch. It's very hacky at the moment, I'm waiting for your suggestions to improve the patch.

Sincerly,

Thomas

---

Another external toolchain support solution

* In toolchain/external-toolchain/ext-tool.mk, copy the contents of the sysroot directory to the staging dir.

* In package/Makefile.in, add a --sysroot CFLAGS pointing to the staging dir

* Remove the CFLAGS and LDFLAGS definition from TARGET_CONFIGURE_OPTS. I haven't investigated exactly why, but with these options, DirectFB fails to build because it cannot find PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, even if DirectFB's Makefile properly sets -D_GNU_SOURCE.

---
 package/Makefile.in                      |    4 +---
 toolchain/external-toolchain/ext-tool.mk |    6 ++++++
 2 files changed, 7 insertions(+), 3 deletions(-)

Index: buildroot2/package/Makefile.in
===================================================================

package/Makefile.in +1 -6
@@ -89,7 +89,7 @@
 # else it's an external toolchain
 #########################################################################
 else
-TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
-I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include
-I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include
+TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
-I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include
-I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include
--sysroot $(STAGING_DIR)/ TARGET_CXXFLAGS=$(TARGET_CFLAGS)

TARGET_LDFLAGS=-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib endif @@ -210,8 +210,6 @@ AR="$(TARGET_AR)" \ AS="$(TARGET_AS)" \
LD="$(TARGET_LD)" \

package/Makefile.in +0 -2
-		CFLAGS="$(TARGET_CFLAGS)" \
-		LDFLAGS="$(TARGET_LDFLAGS)" \
 		NM="$(TARGET_NM)" \
 		CC="$(TARGET_CC) $(TARGET_CFLAGS)" \
 		GCC="$(TARGET_CC) $(TARGET_CFLAGS)" \

Index: buildroot2/toolchain/external-toolchain/ext-tool.mk
===================================================================

toolchain/external-toolchain/ext-tool.mk +5 -0
@@ -44,6 +44,11 @@
  \
 	echo -n
 
+copy_toolchain_sysroot = \
+	SYSROOT_DIR=`$(TARGET_CC) -v 2>&1 | grep ^Configured | tr "
 " "\n" | grep -- "--with-sysroot" | cut -f2 -d=`; \
+	cp -a $${SYSROOT_DIR}/* $(STAGING_DIR)/ ; \
+	find $(STAGING_DIR) -type d | xargs chmod 755
+
 uclibc: dependencies $(TARGET_DIR)/lib/$(strip $(subst ",,
 $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))) 

$(TARGET_DIR)/lib/$(strip $(subst ",,
$(BR2_TOOLCHAIN_EXTERNAL_LIB_C))): @@ -54,3 +59,4 @@
for libs in $(strip $(subst ",,
$(BR2_TOOLCHAIN_EXTERNAL_LIBS))); do \ $(call copy_toolchain_lib_root, $$libs, /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \ done

toolchain/external-toolchain/ext-tool.mk +1 -0
+	$(call copy_toolchain_sysroot)
\ No newline at end of file
Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com