First hack for external toolchain support based on sysroot
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
@@ -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
@@ -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)
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com
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
@@ -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
@@ -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
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
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 findPTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, even if DirectFB'sMakefileproperly sets -D_GNU_SOURCE.Signed-off-by Thomas Petazzoni <[email protected]>--- 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 \ $(callcopy_toolchain_lib_root, $$libs, /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \ donetoolchain/external-toolchain/ext-tool.mk +1
-0+ $(call copy_toolchain_sysroot)
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com