device: Add -device and -device-option to configure

For some reference platforms and SDKs we will need to pass in
extra paths. Currently users have to modify the mkspec to adjust
paths or set environment variables that will be picked up.

This change introduces the -device <name> and -device-option
<key=value> option. The key value pairs will be written to a
qdevice.pri and can be used by the qmake.conf of the device spec.

The reason to not save the key value pairs in qconfig.pri is
becase of the fact that the device spec loads the qdevice.pri
earlier than the qconfig.pri. qdevice.pri allows the mkspec
to set the compiler flags and qconfig.pri allows configure to
add to those compiler flags.

Done-with: Holger Freyther

Change-Id: I931a197b8be72397e1eedfee09502eefc01c9d4f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Reviewed-by: Johannes Zellner <johannes.zellner@nokia.com>
Reviewed-by: Donald Carr <donald.carr@nokia.com>
This commit is contained in:
Girish Ramakrishnan 2012-03-20 14:02:21 -07:00 committed by Qt by Nokia
parent 4c655bef5e
commit 84e98fd9d2
5 changed files with 76 additions and 5 deletions

1
.gitignore vendored
View File

@ -97,6 +97,7 @@ configure.cache
config.status config.status
mkspecs/default mkspecs/default
mkspecs/qconfig.pri mkspecs/qconfig.pri
mkspecs/qdevice.pri
moc_*.cpp moc_*.cpp
qmake/qmake.exe qmake/qmake.exe
qmake/Makefile.bak qmake/Makefile.bak

View File

@ -68,7 +68,7 @@ test -r Makefile && $MAKE distclean >/dev/null 2>&1
# Make sure output from possible previous tests is gone # Make sure output from possible previous tests is gone
rm -f "$EXE" "${EXE}.exe" rm -f "$EXE" "${EXE}.exe"
"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG-=debug_and_release" "LIBS*=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" "QT_BUILD_TREE=$OUTDIR" "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile" OUTDIR=$OUTDIR "$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG-=debug_and_release" "LIBS*=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" "QT_BUILD_TREE=$OUTDIR" "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile"
if [ "$VERBOSE" = "yes" ]; then if [ "$VERBOSE" = "yes" ]; then
$MAKE $MAKE

47
configure vendored
View File

@ -71,8 +71,10 @@ QTCONFIG_CONFIG=
QT_CONFIG= QT_CONFIG=
SUPPORTED= SUPPORTED=
QMAKE_VARS_FILE=.qmake.vars QMAKE_VARS_FILE=.qmake.vars
DEVICE_VARS_FILE=.device.vars
:> "$QMAKE_VARS_FILE" :> "$QMAKE_VARS_FILE"
:> "$DEVICE_VARS_FILE"
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# utility functions # utility functions
@ -223,6 +225,23 @@ linkerSupportsFlag()
compilerSupportsFlag "$lflags" >/dev/null 2>&1 compilerSupportsFlag "$lflags" >/dev/null 2>&1
} }
#-------------------------------------------------------------------------------
# device options
#-------------------------------------------------------------------------------
DeviceVar()
{
case "$1" in
set)
eq="="
;;
*)
echo >&2 "BUG: wrong command to QMakeVar: $1"
;;
esac
echo "$2" "$eq" "$3" >> "$DEVICE_VARS_FILE"
}
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# operating system detection # operating system detection
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
@ -910,7 +929,7 @@ while [ "$#" -gt 0 ]; do
shift shift
VAL=$1 VAL=$1
;; ;;
-prefix|-docdir|-headerdir|-plugindir|-importdir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-platform|-xplatform|-sdk|-arch|-host-arch|-mysql_config|-sysroot|-hostdatadir|-hostbindir) -prefix|-docdir|-headerdir|-plugindir|-importdir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-platform|-xplatform|-device|-device-option|-sdk|-arch|-host-arch|-mysql_config|-sysroot|-hostdatadir|-hostbindir)
VAR=`echo $1 | sed "s,^-\(.*\),\1,"` VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
shift shift
VAL="$1" VAL="$1"
@ -1306,6 +1325,14 @@ while [ "$#" -gt 0 ]; do
XPLATFORM="$VAL" XPLATFORM="$VAL"
case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac
;; ;;
device)
XPLATFORM="devices/$VAL"
;;
device-option)
DEV_VAR=`echo $VAL | sed "s,^\(.*\)=.*,\1,"`
DEV_VAL=`echo $VAL | sed "s,^.*=\(.*\),\1,"`
DeviceVar set $DEV_VAR $DEV_VAL
;;
debug-and-release) debug-and-release)
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
CFG_DEBUG_RELEASE="$VAL" CFG_DEBUG_RELEASE="$VAL"
@ -2456,6 +2483,15 @@ if [ "$CFG_RTOS_ENABLED" = "no" ]; then
esac esac
fi fi
#-------------------------------------------------------------------------------
# write out device config before we run the test.
#-------------------------------------------------------------------------------
if cmp -s "$DEVICE_VARS_FILE" "$outpath/mkspecs/qdevice.pri"; then
rm -f "$DEVICE_VARS_FILE"
else
mv -f $DEVICE_VARS_FILE "$outpath/mkspecs/qdevice.pri"
fi
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# tests that don't need qmake (must be run before displaying help) # tests that don't need qmake (must be run before displaying help)
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
@ -2929,6 +2965,7 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
[-no-openssl] [-openssl] [-openssl-linked] [-no-openssl] [-openssl] [-openssl-linked]
[-no-gtkstyle] [-gtkstyle] [-no-gtkstyle] [-gtkstyle]
[-qt-pcre] [-system-pcre] [-qt-pcre] [-system-pcre]
[-device <name>] [-device-option <key=value>]
[additional platform specific options (see below)] [additional platform specific options (see below)]
@ -3192,6 +3229,10 @@ Additional options:
-force-asserts ........ Force Q_ASSERT to be enabled even in release builds. -force-asserts ........ Force Q_ASSERT to be enabled even in release builds.
-device <name> ............... Cross-compile for device <name> (experimental)
-device-option <key=value> ... Add device specific options for the device mkspec
(experimental)
EOF EOF
if [ "$CFG_SEPARATE_DEBUG_INFO" = "auto" ]; then if [ "$CFG_SEPARATE_DEBUG_INFO" = "auto" ]; then
@ -3925,12 +3966,12 @@ fi # Build qmake
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Use config.tests/arch/arch.pro to has the compiler tell us what the target architecture is # Use config.tests/arch/arch.pro to has the compiler tell us what the target architecture is
CFG_ARCH=`"$outpath/bin/qmake" -spec "$XQMAKESPEC" -o /dev/null "$relpath/config.tests/arch/arch.pro" 2>&1 | sed -n -e 's,^Project MESSAGE:.*Architecture: \([a-zA-Z0-9_]*\).*,\1,p'` CFG_ARCH=`OUTDIR="$outpath" "$outpath/bin/qmake" -spec "$XQMAKESPEC" -o /dev/null "$relpath/config.tests/arch/arch.pro" 2>&1 | sed -n -e 's,^Project MESSAGE:.*Architecture: \([a-zA-Z0-9_]*\).*,\1,p'`
[ -z "$CFG_ARCH" ] && CFG_ARCH="unknown" [ -z "$CFG_ARCH" ] && CFG_ARCH="unknown"
if [ "$QMAKESPEC" != "$XQMAKESPEC" ]; then if [ "$QMAKESPEC" != "$XQMAKESPEC" ]; then
# Do the same test again, using the host compiler # Do the same test again, using the host compiler
CFG_HOST_ARCH=`"$outpath/bin/qmake" -spec "$QMAKESPEC" -o /dev/null "$relpath/config.tests/arch/arch.pro" 2>&1 | sed -n -e 's,^Project MESSAGE:.*Architecture: \([a-zA-Z0-9_]*\).*,\1,p'` CFG_HOST_ARCH=`OUTDIR="$outpath" "$outpath/bin/qmake" -spec "$QMAKESPEC" -o /dev/null "$relpath/config.tests/arch/arch.pro" 2>&1 | sed -n -e 's,^Project MESSAGE:.*Architecture: \([a-zA-Z0-9_]*\).*,\1,p'`
[ -z "$CFG_HOST_ARCH" ] && CFG_HOST_ARCH="unknown" [ -z "$CFG_HOST_ARCH" ] && CFG_HOST_ARCH="unknown"
else else
# not cross compiling, host == target # not cross compiling, host == target

View File

@ -0,0 +1,27 @@
# Load generated qdevice.pri
exists($$_QMAKE_CACHE_) {
# set in default_pre, so it's the first place to check for qdevice.pri
DIR = $$fromfile($$_QMAKE_CACHE_, QT_BUILD_TREE)
!isEmpty(DIR):DEVICE_PRI = $$DIR/mkspecs/qdevice.pri
}
isEmpty(DEVICE_PRI) {
# OUTDIR environ is set by configure (arch detection) and compile.test
DIR = $$(OUTDIR)
!isEmpty(DIR):DEVICE_PRI = $$DIR/mkspecs/qdevice.pri
}
isEmpty(DEVICE_PRI) {
DIR = $$[QT_HOST_DATA]
!isEmpty(DIR):DEVICE_PRI = $$DIR/mkspecs/qdevice.pri
}
isEmpty(DEVICE_PRI) {
error(Could not locate qdevice.pri)
}
exists($$DEVICE_PRI):include($$DEVICE_PRI)
unset(DEVICE_PRI)
unset(DIR)

View File

@ -72,6 +72,7 @@ unix {
$(DEL_FILE) src/corelib/global/qconfig.h; \ $(DEL_FILE) src/corelib/global/qconfig.h; \
$(DEL_FILE) src/corelib/global/qconfig.cpp; \ $(DEL_FILE) src/corelib/global/qconfig.cpp; \
$(DEL_FILE) mkspecs/qconfig.pri; \ $(DEL_FILE) mkspecs/qconfig.pri; \
$(DEL_FILE) mkspecs/qdevice.pri; \
$(DEL_FILE) mkspecs/qmodule.pri; \ $(DEL_FILE) mkspecs/qmodule.pri; \
$(DEL_FILE) .qmake.cache; \ $(DEL_FILE) .qmake.cache; \
(cd qmake && $(MAKE) distclean); (cd qmake && $(MAKE) distclean);
@ -80,6 +81,7 @@ win32 {
confclean.commands += -$(DEL_FILE) src\\corelib\\global\\qconfig.h $$escape_expand(\\n\\t) \ confclean.commands += -$(DEL_FILE) src\\corelib\\global\\qconfig.h $$escape_expand(\\n\\t) \
-$(DEL_FILE) src\\corelib\\global\\qconfig.cpp $$escape_expand(\\n\\t) \ -$(DEL_FILE) src\\corelib\\global\\qconfig.cpp $$escape_expand(\\n\\t) \
-$(DEL_FILE) mkspecs\\qconfig.pri $$escape_expand(\\n\\t) \ -$(DEL_FILE) mkspecs\\qconfig.pri $$escape_expand(\\n\\t) \
-$(DEL_FILE) mkspecs\\qdevice.pri $$escape_expand(\\n\\t) \
-$(DEL_FILE) mkspecs\\qmodule.pri $$escape_expand(\\n\\t) \ -$(DEL_FILE) mkspecs\\qmodule.pri $$escape_expand(\\n\\t) \
-$(DEL_FILE) .qmake.cache $$escape_expand(\\n\\t) \ -$(DEL_FILE) .qmake.cache $$escape_expand(\\n\\t) \
(cd qmake && $(MAKE) distclean) (cd qmake && $(MAKE) distclean)
@ -115,7 +117,7 @@ INSTALLS += configtests
#mkspecs #mkspecs
mkspecs.path = $$[QT_HOST_DATA]/mkspecs mkspecs.path = $$[QT_HOST_DATA]/mkspecs
mkspecs.files = $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri $$files($$PWD/mkspecs/*) mkspecs.files = $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri $$OUT_PWD/mkspecs/qdevice.pri $$files($$PWD/mkspecs/*)
mkspecs.files -= $$PWD/mkspecs/modules mkspecs.files -= $$PWD/mkspecs/modules
unix { unix {
DEFAULT_QMAKESPEC = $$QMAKESPEC DEFAULT_QMAKESPEC = $$QMAKESPEC