qt4: heavily cleanup Makefile and add a generic way for configuring projects using qmake

git-svn-id: svn://svn.openwrt.org/openwrt/packages@22455 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
mirko 2010-08-01 15:53:32 +00:00
parent 7a6ad17ce4
commit 8e11971902
4 changed files with 132 additions and 50 deletions

View File

@ -6,8 +6,6 @@
# #
# TODO: # TODO:
# - handle software which uses qmake in a more generic way (move functionality / generic qmake-config into buildroot)
# - use generic qmake, moc, etc. executables since building them within the qt stack will get redundant and annyoing when other sw will need them as well
# - test/add X11/xcb support # - test/add X11/xcb support
# - handle plugins in a granular way (find out which packages should provide which plugins) # - handle plugins in a granular way (find out which packages should provide which plugins)
@ -45,7 +43,7 @@ endef
define Package/qt4 define Package/qt4
$(call Package/qt4/Default) $(call Package/qt4/Default)
DEPENDS:=@FEATURE_drawing-backend_DirectFB +FEATURE_drawing-backend_DirectFB:directfb +zlib +libstdcpp +libsqlite3 # require directfb for now, as other systems (libX11, xcb) are untested DEPENDS:=@FEATURE_drawing-backend_DirectFB +FEATURE_drawing-backend_DirectFB:directfb +zlib +libstdcpp +libsqlite3 +tslib # require directfb for now, as other systems (libX11, xcb) are untested
endef endef
define Package/qt4-gui define Package/qt4-gui
@ -178,7 +176,10 @@ define Package/qt4-xml
TITLE+=(xml) TITLE+=(xml)
endef endef
TARGET_CFLAGS+="-I$(STAGING_DIR)/usr/include/freetype2 -I$(PKG_BUILD_DIR)/include" TARGET_INCDIRS+=$(STAGING_DIR)/include $(STAGING_DIR)/usr/include $(TOOLCHAIN_DIR)/include $(TOOLCHAIN_DIR)/usr/include
TARGET_LIBDIRS+=$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib $(TOOLCHAIN_DIR)/lib $(TOOLCHAIN_DIR)/usr/lib
TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib,-rpath-link=$(PKG_BUILD_DIR)/lib
TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/include/freetype2 -I$(PKG_BUILD_DIR)/include
define Build/Configure define Build/Configure
# NOTES: # NOTES:
@ -187,49 +188,22 @@ define Build/Configure
# linuxfb/directfb: since directfb is not much overhead compared to plain framebuffer, force using directfb # linuxfb/directfb: since directfb is not much overhead compared to plain framebuffer, force using directfb
# do not use fontconfig as it doesn't work anyway for qte # do not use fontconfig as it doesn't work anyway for qte
# bindir: bindir is where the host tools (qmake, moc, rcc, uic) will get installed into - they are just used on the host and not goig to be packaged # bindir: bindir is where the host tools (qmake, moc, rcc, uic) will get installed into - they are just used on the host and not goig to be packaged
( \ mkdir -p $(PKG_BUILD_DIR)/mkspecs/qws/linux-openwrt-g++
cd $(PKG_BUILD_DIR); \ cp -a ./files/{qmake.conf,qplatformdefs.h} $(PKG_BUILD_DIR)/mkspecs/qws/linux-openwrt-g++/
QPATH='mkspecs/qws/linux-openwrt-g++' ; \ ( cd $(PKG_BUILD_DIR) ; \
mkdir $$$$QPATH ; \ TARGET_CC="$(TARGET_CROSS)gcc" \
echo '#include "../../linux-g++/qplatformdefs.h"' \ TARGET_CXX="$(TARGET_CROSS)g++" \
>> $$$$QPATH/qplatformdefs.h ; \ TARGET_AR="$(TARGET_CROSS)ar cqs" \
echo 'include(../../common/g++.conf)' \ TARGET_OBJCOPY="$(TARGET_CROSS)objcopy" \
>> $$$$QPATH/qmake.conf ; \ TARGET_RANLIB="$(TARGET_CROSS)ranlib" \
echo 'include(../../common/linux.conf)' \ TARGET_CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
>> $$$$QPATH/qmake.conf ; \ TARGET_CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
echo 'include(../../common/qws.conf)' \ TARGET_LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
>> $$$$QPATH/qmake.conf ; \ TARGET_INCDIRS="$(TARGET_INCDIRS)" \
echo "QMAKE_CC = $(TARGET_CC)" \ TARGET_LIBDIRS="$(TARGET_LIBDIRS)" \
>> $$$$QPATH/qmake.conf ; \ STAGING_DIR="$(STAGING_DIR)" \
echo "QMAKE_CXX = $(TARGET_CXX)" \ STAGING_DIR_HOST="$(STAGING_DIR)/../host" \
>> $$$$QPATH/qmake.conf ; \ ./configure \
echo "QMAKE_AR = $(TARGET_CROSS)ar cqs" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_OBJCOPY = $(TARGET_CROSS)objcopy" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_RANLIB = $(TARGET_CROSS)ranlib" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_CFLAGS = $(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_CXXFLAGS = $(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_LINK = $(TARGET_CXX)" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_LINK_SHLIB = $(TARGET_CXX)" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_LINK_C = $(TARGET_CC)" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_LINK_C_SHLIB = $(TARGET_CC)" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_LFLAGS = -L$(PKG_BUILD_DIR)/lib $(TARGET_LDFLAGS) -Wl,-rpath-link=$(STAGING_DIR)/usr/lib" \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_STRIP = : " \
>> $$$$QPATH/qmake.conf ; \
echo "QMAKE_STRIPFLAGS_LIB = " \
>> $$$$QPATH/qmake.conf ; \
echo 'load(qt_config)' \
>> $$$$QPATH/qmake.conf ; \
echo yes | ./configure \
-prefix $(CONFIGURE_PREFIX) \ -prefix $(CONFIGURE_PREFIX) \
-bindir $(CONFIGURE_PREFIX)/bin \ -bindir $(CONFIGURE_PREFIX)/bin \
-libdir $(CONFIGURE_PREFIX)/lib \ -libdir $(CONFIGURE_PREFIX)/lib \
@ -245,9 +219,11 @@ define Build/Configure
-make examples \ -make examples \
-nomake docs \ -nomake docs \
-nomake translations \ -nomake translations \
-embedded openwrt \ -xplatform qws/linux-openwrt-g++ \
-platform linux-g++ \ -platform linux-g++ \
-embedded \
-release \ -release \
-confirm-license \
-opensource \ -opensource \
-no-mmx \ -no-mmx \
-no-3dnow \ -no-3dnow \
@ -299,14 +275,42 @@ define Build/Configure
-no-xkb \ -no-xkb \
-no-glib \ -no-glib \
-qt3support \ -qt3support \
-qt-gfx-directfb \ -no-gfx-transformed \
-qt-gfx-linuxfb \ -no-gfx-qvfb \
-no-gfx-vnc \
-no-gfx-multiscreen \ -no-gfx-multiscreen \
-no-gfx-qnx \
-plugin-gfx-directfb \
-plugin-gfx-linuxfb \
-no-mouse-qvfb \
-no-mouse-qnx \
-qt-mouse-linuxinput \
-plugin-mouse-linuxtp \
-plugin-mouse-pc \
-plugin-mouse-tslib \
-no-kbd-qvfb \
-no-kbd-qnx \
-qt-kbd-tty \
-plugin-kbd-linuxinput \
) )
endef endef
define Build/Compile define Build/Compile
# just passing <make install> results in not building 3rdparty/webkit/JavaScriptCore # just passing <make install> results in not building 3rdparty/webkit/JavaScriptCore
# unfortunately in this particular case, <make> makes further <qmake> calls, therewith
# uses the qmake.conf which needs get the cross-compiling vars passed once again
TARGET_CC="$(TARGET_CROSS)gcc" \
TARGET_CXX="$(TARGET_CROSS)g++" \
TARGET_AR="$(TARGET_CROSS)ar cqs" \
TARGET_OBJCOPY="$(TARGET_CROSS)objcopy" \
TARGET_RANLIB="$(TARGET_CROSS)ranlib" \
TARGET_CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
TARGET_CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
TARGET_LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
TARGET_INCDIRS="$(TARGET_INCDIRS)" \
TARGET_LIBDIRS="$(TARGET_LIBDIRS)" \
STAGING_DIR="$(STAGING_DIR)" \
STAGING_DIR_HOST="$(STAGING_DIR)/../host" \
$(MAKE) -C $(PKG_BUILD_DIR) $(MAKE) -C $(PKG_BUILD_DIR)
INSTALL_ROOT=$(PKG_INSTALL_DIR) \ INSTALL_ROOT=$(PKG_INSTALL_DIR) \
$(MAKE) -C $(PKG_BUILD_DIR) install $(MAKE) -C $(PKG_BUILD_DIR) install
@ -322,12 +326,17 @@ define Build/InstallDev
$(STAGING_DIR_HOST)/bin/ $(STAGING_DIR_HOST)/bin/
$(INSTALL_DIR) \ $(INSTALL_DIR) \
$(1)/mk \
$(1)/usr/share/mkspecs \ $(1)/usr/share/mkspecs \
$(1)/usr/lib/pkgconfig \ $(1)/usr/lib/pkgconfig \
$(1)/usr/lib \ $(1)/usr/lib \
$(1)/usr/include \ $(1)/usr/include \
$(1)/usr/lib/Qt/plugins $(1)/usr/lib/Qt/plugins
$(CP) \
./files/qmake.mk \
$(1)/mk/
$(CP) \ $(CP) \
$(PKG_INSTALL_DIR)/usr/share/Qt/mkspecs/* \ $(PKG_INSTALL_DIR)/usr/share/Qt/mkspecs/* \
$(1)/usr/share/mkspecs/ $(1)/usr/share/mkspecs/

View File

@ -0,0 +1,43 @@
include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)
# QMAKE_{INC,LIB}DIR_QT needs to be overridden,
# as they're set to $$[QT_INSTALL_{HEADERS,LIBS}] by default
# which are compiled into the qmake binary statically
QMAKE_INCDIR_QT = $$(TARGET_INCDIRS)
QMAKE_LIBDIR_QT = $$(TARGET_LIBDIRS)
QMAKE_INCDIR = $$(TARGET_INCDIRS)
QMAKE_LIBDIR = $$(TARGET_LIBDIRS)
QMAKE_MOC = $$(STAGING_DIR_HOST)/bin/moc
QMAKE_UIC = $$(STAGING_DIR_HOST)/bin/uic
QMAKE_RCC = $$(STAGING_DIR_HOST)/bin/rcc
QMAKE_CC = $$(TARGET_CC)
QMAKE_CXX = $$(TARGET_CXX)
QMAKE_AR = $$(TARGET_CROSS)ar cqs
QMAKE_OBJCOPY = $$(TARGET_CROSS)objcopy
QMAKE_RANLIB = $$(TARGET_CROSS)ranlib
QMAKE_CFLAGS = $$(TARGET_CFLAGS)
QMAKE_CXXFLAGS = $$(TARGET_CFLAGS)
QMAKE_LINK = $$(TARGET_CXX)
QMAKE_LINK_C = $$(TARGET_CC)
QMAKE_LFLAGS = $$(TARGET_LDFLAGS) # this will end up in redundant "-L"-strings, as they're already in $QMAKE_LIBDIR_QT, however TARGET_LDFLAGS may contain not only directories but special linker options
#unset vars which would intefere with vars/flags passed over by OpenWrt
QMAKE_STRIP = # do not strip
QMAKE_STRIPFLAGS_LIB = # do not strip
QMAKE_CFLAGS_WARN_ON =
QMAKE_CFLAGS_WARN_OFF =
QMAKE_CFLAGS_RELEASE =
QMAKE_CFLAGS_DEBUG =
QMAKE_CFLAGS_PRECOMPILE =
QMAKE_CFLAGS_USE_PRECOMPILE =
QMAKE_CXXFLAGS_WARN_ON =
QMAKE_CXXFLAGS_WARN_OFF =
QMAKE_CXXFLAGS_RELEASE =
QMAKE_CXXFLAGS_DEBUG =
QMAKE_CXXFLAGS_PRECOMPILE =
QMAKE_CXXFLAGS_USE_PRECOMPILE =
QMAKE_LFLAGS_RELEASE =
load(qt_config)

View File

@ -0,0 +1,29 @@
#
# Copyright (C) 2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
QMAKE_SPECFILE:=$(STAGING_DIR)/usr/share/mkspecs/qws/linux-openwrt-g++
TARGET_INCDIRS+=$(STAGING_DIR)/include $(STAGING_DIR)/usr/include $(TOOLCHAIN_DIR)/include $(TOOLCHAIN_DIR)/usr/include
TARGET_LIBDIRS+=$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib $(TOOLCHAIN_DIR)/lib $(TOOLCHAIN_DIR)/usr/lib
define Build/Configure/Qmake
TARGET_CC="$(TARGET_CROSS)gcc" \
TARGET_CXX="$(TARGET_CROSS)g++" \
TARGET_AR="$(TARGET_CROSS)ar cqs" \
TARGET_OBJCOPY="$(TARGET_CROSS)objcopy" \
TARGET_RANLIB="$(TARGET_CROSS)ranlib" \
TARGET_CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
TARGET_CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
TARGET_LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
TARGET_INCDIRS="$(TARGET_INCDIRS)" \
TARGET_LIBDIRS="$(TARGET_LIBDIRS)" \
STAGING_DIR_HOST="$(STAGING_DIR)/../host" \
qmake \
-spec $(QMAKE_SPECFILE) \
-o $(PKG_BUILD_DIR)/Makefile \
$(PKG_BUILD_DIR)/$(1).pro
endef

View File

@ -0,0 +1 @@
#include "../../linux-g++/qplatformdefs.h"