Patchwork [v2] qt4: fix generated sdk

login
register
mail settings
Submitter Eric BENARD
Date Sept. 13, 2011, 2:44 p.m.
Message ID <1315925099-9259-1-git-send-email-eric@eukrea.com>
Download mbox | patch
Permalink /patch/11333/
State New, archived
Headers show

Comments

Eric BENARD - Sept. 13, 2011, 2:44 p.m.
- qt4-tools-nativesdk : actually the qmake binary which gets installed
comes from the native recipe. This patch fix this problem by laucnhing
configure twice : once to compile qmake using the right toolchain for
nativesdk, and a second time using the native qmake to compile all the
other tools for the nativesdk. Then we install the right qmake.

- mkspec : the link actually created in qt4-tools-nativesdk's
do_install point to nowhere so remove it and generate the link in
meta-toolchain-qte as it's the only place where we have all the variable
to create it.

- toolchain_create_sdk_env_script_append : we need to add OE_QMAKE_CFLAGS,
OE_QMAKE_CXXFLAGS and OE_QMAKE_LDFLAGS else the sdk won't find these
variables that are inserted by qmake in the Makefiles.

- with this patch, oe-core generates a working meta-toolchain-qte which
can compile a small example and is properly recognized by qtcreator (this
brings oe-core's meta-toolchain-qte to oe-dev's functional state).

Signed-off-by: Eric Bénard <eric@eukrea.com>
---
v2: fix typo in comment

 meta/recipes-qt/meta/meta-toolchain-qte.bb  |    7 +++++++
 meta/recipes-qt/qt4/qt4-tools-nativesdk.inc |   22 +++++++++++-----------
 2 files changed, 18 insertions(+), 11 deletions(-)
Richard Purdie - Sept. 16, 2011, 4:57 p.m.
On Tue, 2011-09-13 at 16:44 +0200, Eric Bénard wrote:
> - qt4-tools-nativesdk : actually the qmake binary which gets installed
> comes from the native recipe. This patch fix this problem by laucnhing
> configure twice : once to compile qmake using the right toolchain for
> nativesdk, and a second time using the native qmake to compile all the
> other tools for the nativesdk. Then we install the right qmake.

I was reading through this and wondered why we can't this use the qmake
from the qt4-tools-native recipe?

Cheers,

Richard
Otavio Salvador - Sept. 16, 2011, 5:09 p.m.
On Fri, Sep 16, 2011 at 13:57, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
> On Tue, 2011-09-13 at 16:44 +0200, Eric Bénard wrote:
>> - qt4-tools-nativesdk : actually the qmake binary which gets installed
>> comes from the native recipe. This patch fix this problem by laucnhing
>> configure twice : once to compile qmake using the right toolchain for
>> nativesdk, and a second time using the native qmake to compile all the
>> other tools for the nativesdk. Then we install the right qmake.
>
> I was reading through this and wondered why we can't this use the qmake
> from the qt4-tools-native recipe?

With mine qt.conf patch (not yet sent) this ought to work fine.
Eric BENARD - Sept. 16, 2011, 7:52 p.m.
Hi Richard,

Le 16/09/2011 18:57, Richard Purdie a écrit :
> On Tue, 2011-09-13 at 16:44 +0200, Eric Bénard wrote:
>> - qt4-tools-nativesdk : actually the qmake binary which gets installed
>> comes from the native recipe. This patch fix this problem by laucnhing
>> configure twice : once to compile qmake using the right toolchain for
>> nativesdk, and a second time using the native qmake to compile all the
>> other tools for the nativesdk. Then we install the right qmake.
>
> I was reading through this and wondered why we can't this use the qmake
> from the qt4-tools-native recipe?
>
Path are not properly set in the native one and the actual meta-toolchain 
doesn't compile a simple hello world in qt (because path are the one of the 
buildir of OE instead of the path where is installed the sdk).

Also (maybe I'm wrong here), isn't it possible to have the nativesdk generated 
binaries being compiled for an architecture (SDK_ARCH) different than the 
native one (BUILD_ARCH) ?

In one case I see -nativesdk are compiled using 
CC=x86_64-angstromsdk-linux-gcc when -native are compiled using CC=gcc so I 
was assuming this change makes the binaries more consistent in the nativesdk 
package.

Eric

Patch

diff --git a/meta/recipes-qt/meta/meta-toolchain-qte.bb b/meta/recipes-qt/meta/meta-toolchain-qte.bb
index 72d58db..735ccd1 100644
--- a/meta/recipes-qt/meta/meta-toolchain-qte.bb
+++ b/meta/recipes-qt/meta/meta-toolchain-qte.bb
@@ -10,6 +10,9 @@  QT_DIR_NAME = "qtopia"
 QT_TOOLS_PREFIX = "${SDKPATHNATIVE}${bindir_nativesdk}"
 
 toolchain_create_sdk_env_script_append() {
+    echo 'export OE_QMAKE_CFLAGS="$CFLAGS"' >> $script
+    echo 'export OE_QMAKE_CXXFLAGS="$CXXFLAGS"' >> $script
+    echo 'export OE_QMAKE_LDFLAGS="$LDFLAGS"' >> $script
     echo 'export OE_QMAKE_CC=${TARGET_PREFIX}gcc' >> $script
     echo 'export OE_QMAKE_CXX=${TARGET_PREFIX}g++' >> $script
     echo 'export OE_QMAKE_LINK=${TARGET_PREFIX}g++' >> $script
@@ -24,4 +27,8 @@  toolchain_create_sdk_env_script_append() {
     echo 'export OE_QMAKE_QDBUSXML2CPP=${QT_TOOLS_PREFIX}/qdbusxml2cpp4' >> $script
     echo 'export OE_QMAKE_QT_CONFIG=${SDKTARGETSYSROOT}/${datadir}/${QT_DIR_NAME}/mkspecs/qconfig.pri' >> $script
     echo 'export QMAKESPEC=${SDKTARGETSYSROOT}/${datadir}/${QT_DIR_NAME}/mkspecs/linux-g++' >> $script
+
+    # make a symbolic link to mkspecs for compatibility with Nokia's SDK
+    # and QTCreator
+    (cd ${SDK_OUTPUT}/${QT_TOOLS_PREFIX}/..; ln -s ${SDKTARGETSYSROOT}/usr/share/qtopia/mkspecs mkspecs;)
 }
diff --git a/meta/recipes-qt/qt4/qt4-tools-nativesdk.inc b/meta/recipes-qt/qt4/qt4-tools-nativesdk.inc
index 068528e..0ae0af6 100644
--- a/meta/recipes-qt/qt4/qt4-tools-nativesdk.inc
+++ b/meta/recipes-qt/qt4/qt4-tools-nativesdk.inc
@@ -51,10 +51,6 @@  EXTRA_OECONF = "-prefix ${prefix} \
 EXTRA_OEMAKE = " "
 
 do_configure() {
-    if [ ! -e bin/qmake ]; then
-        ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
-    fi
-
     if [ ! -e mkspecs/${TARGET_OS}-oe-g++ ]; then
         ln -sf linux-g++ mkspecs/${TARGET_OS}-oe-g++
     fi
@@ -62,7 +58,16 @@  do_configure() {
     cp ../g++.conf mkspecs/common
     cp ../linux.conf mkspecs/common
 
-    (echo o; echo yes) | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+    # first launch configure to get qmake compiled for the nativesdk
+    (echo o; echo yes) | CC="${CC}" CXX="${CXX}" ./configure ${EXTRA_OECONF} || true
+
+    # then backup the binary and start again with a qmake which can run on the build host
+    mv bin/qmake bin/qmake_nativesdk
+    if [ ! -e bin/qmake ]; then
+        ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
+    fi
+
+    (echo o; echo yes) | CC="${CC}" CXX="${CXX}" ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
 }
 
 TOBUILD = "\
@@ -91,7 +96,7 @@  do_compile() {
 
 do_install() {
     install -d ${D}${bindir}
-    install -m 0755 bin/qmake ${D}${bindir}/qmake2
+    install -m 0755 bin/qmake_nativesdk ${D}${bindir}/qmake2
     for i in moc uic uic3 rcc lrelease lupdate qdbuscpp2xml qdbusxml2cpp; do
         install -m 0755 bin/${i} ${D}${bindir}/${i}4
     done
@@ -101,9 +106,4 @@  do_install() {
     for i in moc uic uic3 rcc lrelease lupdate qdbuscpp2xml qdbusxml2cpp; do \
         ln -s ${i}4 ${i}; \
     done)
-
-    # make a symbolic link to mkspecs for compatibility with Nokia's SDK
-    # and QTCreator
-    (cd ${D}${bindir}/..; ln -s ${TARGET_SYS}/usr/share/qtopia/mkspecs mkspecs;)
 }
-