qt5base-lts/mkspecs/unsupported/android-g++/qmake.conf
Arvid Picciani 38f521b0bd native android support with eglfs
Enable eglfs build against any android > 4 tree,
linking to native libs without emulation layers,
running on top of surfaceflinger.
No GNUs where harmed in the process.

Yes, any android.
Tested on maguro, tf300, eeepc-x86
x86-64 compiles but broken elsewhere.

You don't need an Android.mk, but you must compile from within
a shell setup with androids "lunch" or an equivalent that set TOP and OUT.
Since we do callbacks to androids build system,
the same env restrictions apply (must use gnu bash, and gnumake 3.81)

Done-with: Samuel Roedal <samuel.rodal@digia.com>
Done-with: Robin Burchell <robin+qt@viroteck.net>
Done-with: Brian Avery <brian.avery@nokia.com>

Change-Id: Iec0178cdeadbeefc79e4fe6ef449d399ac8ca666
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
2012-10-04 11:58:48 +02:00

176 lines
7.5 KiB
Plaintext

ANDROID_BUILD_TOP=$$(ANDROID_BUILD_TOP)
isEmpty(ANDROID_BUILD_TOP) : error("$ANDROID_BUILD_TOP is empty. Forgot to run 'lunch'?")
ANDROID_PRODUCT_OUT=$$(ANDROID_PRODUCT_OUT)
isEmpty(ANDROID_PRODUCT_OUT) : error("$ANDROID_PRODUCT_OUT is empty. forgot to run 'lunch'?")
defineReplace(getAndroidBuildVar) {
thevar = $$1
r=$$system(cd $$ANDROID_BUILD_TOP && CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core make --no-print-directory -f build/core/config.mk dumpvar-$${thevar})
return($$r)
}
# .qmake.cache is not available at mkspec loading time.
# not caching those is horribly slow though
!exists($$PWD/android_build_vars) {
store_ANDROID_TOOLCHAIN_PREFIX = "ANDROID_TOOLCHAIN_PREFIX=$$getAndroidBuildVar(abs-TARGET_TOOLS_PREFIX)"
store_ANDROID_TARGET_CFLAGS = "ANDROID_TARGET_CFLAGS=$$getAndroidBuildVar(TARGET_GLOBAL_CFLAGS)"
store_ANDROID_TARGET_LDFLAGS = "ANDROID_TARGET_LDFLAGS=$$getAndroidBuildVar(TARGET_GLOBAL_LDFLAGS)"
store_ANDROID_TARGET_ARCH = "ANDROID_TARGET_ARCH=$$getAndroidBuildVar(TARGET_ARCH)"
write_file(android_build_vars, store_ANDROID_TOOLCHAIN_PREFIX)
write_file(android_build_vars, store_ANDROID_TARGET_CFLAGS, append)
write_file(android_build_vars, store_ANDROID_TARGET_LDFLAGS, append)
write_file(android_build_vars, store_ANDROID_TARGET_ARCH, append)
}
warning(using android build env from cache in $$PWD/android_build_vars . delete this file if you changed your build env )
exists($$PWD/android_build_vars) {
include($$PWD/android_build_vars)
}
MAKEFILE_GENERATOR = UNIX
TARGET_PLATFORM = unix
TEMPLATE = app
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
CONFIG = qt warn_on release link_prl
QT = core gui
DEFINES += Q_OS_LINUX_ANDROID ANDROID HAVE_ANDROID_OS
DEFINES += QT_NO_PRINTER QT_NO_PRINTDIALOG QT_NO_EXCEPTIONS
QT_QPA_DEFAULT_PLATFORM = eglfs
EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_surfaceflinger.cpp
EGLFS_PLATFORM_HOOKS_LIBS += -lgui -lutils
QMAKE_CC = $${ANDROID_TOOLCHAIN_PREFIX}gcc
QMAKE_CFLAGS = $${ANDROID_TARGET_CFLAGS}
QMAKE_CFLAGS_WARN_ON = -Wall -Wextra
QMAKE_CFLAGS_WARN_OFF = -Wno-psabi
QMAKE_CFLAGS_SHLIB = -fPIC
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_THREAD = -D_REENTRANT
QMAKE_CFLAGS_HIDESYMS =
QMAKE_CXX = $${ANDROID_TOOLCHAIN_PREFIX}g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
QMAKE_LINK = $$QMAKE_CXX
QMAKE_LINK_SHLIB = $$QMAKE_LINK
QMAKE_AR = $${ANDROID_TOOLCHAIN_PREFIX}ar cqs
QMAKE_OBJCOPY = $${ANDROID_TOOLCHAIN_PREFIX}objcopy
QMAKE_STRIP = $${ANDROID_TOOLCHAIN_PREFIX}strip
QMAKE_RANLIB = $${ANDROID_TOOLCHAIN_PREFIX}ranlib
QMAKE_INCDIR = $${ANDROID_BUILD_TOP} \
$${ANDROID_BUILD_TOP}/dalvik/libnativehelper/include/nativehelper \
$${ANDROID_BUILD_TOP}/bionic \
$${ANDROID_BUILD_TOP}/bionic/libc/include \
$${ANDROID_BUILD_TOP}/bionic/libc/kernel/arch-arm \
$${ANDROID_BUILD_TOP}/bionic/libc/kernel/common \
$${ANDROID_BUILD_TOP}/bionic/libc/private \
$${ANDROID_BUILD_TOP}/bionic/libm/include \
$${ANDROID_BUILD_TOP}/bionic/libm/include/arm \
$${ANDROID_BUILD_TOP}/bionic/libstdc++/include \
$${ANDROID_BUILD_TOP}/bionic/libthread_db/include \
$${ANDROID_BUILD_TOP}/dalvik/libnativehelper/include \
$${ANDROID_BUILD_TOP}/external/icu4c/common/ \
$${ANDROID_BUILD_TOP}/external/icu4c/i18n/ \
$${ANDROID_BUILD_TOP}/external/skia/include \
$${ANDROID_BUILD_TOP}/external/stlport/stlport \
$${ANDROID_BUILD_TOP}/frameworks/include \
$${ANDROID_BUILD_TOP}/frameworks/native/include \
$${ANDROID_BUILD_TOP}/frameworks/native/include/gui \
$${ANDROID_BUILD_TOP}/frameworks/native/opengl/include \
$${ANDROID_BUILD_TOP}/frameworks/base/include \
$${ANDROID_BUILD_TOP}/frameworks/base/native/include \
$${ANDROID_BUILD_TOP}/frameworks/base/opengl/include \
$${ANDROID_BUILD_TOP}/hardware/libhardware/include \
$${ANDROID_BUILD_TOP}/hardware/libhardware_legacy/include \
$${ANDROID_BUILD_TOP}/hardware/ril/include \
$${ANDROID_BUILD_TOP}/system/core/include \
$${ANDROID_BUILD_TOP}/system/core/include/arch/linux-arm/ \
$${ANDROID_PRODUCT_OUT}/obj/include
QMAKE_INCDIR += $${ANDROID_BUILD_TOP}/bionic/libc/arch-$${ANDROID_TARGET_ARCH}/include
QMAKE_LIBDIR = ${ANDROID_PRODUCT_OUT}/obj/lib
QMAKE_INCDIR_X11 =
QMAKE_LIBDIR_X11 =
QMAKE_INCDIR_OPENGL =
QMAKE_INCDIR_OPENGL_ES1 =
QMAKE_LIBDIR_OPENGL_ES1 =
QMAKE_INCDIR_OPENGL_ES2 =
QMAKE_LIBDIR_OPENGL_ES2 =
QMAKE_LINK = $$QMAKE_CXX
QMAKE_LINK_SHLIB = $$QMAKE_CXX
QMAKE_LFLAGS = $${ANDROID_TARGET_LDFLAGS} \
-nostdlib \
-L${ANDROID_PRODUCT_OUT}/obj/lib \
-Wl,-rpath-link,${ANDROID_PRODUCT_OUT}/obj/lib
QMAKE_LFLAGS_PLUGIN = -Wl,-T,${ANDROID_BUILD_TOP}/build/core/armelf.xsc \
-Wl,-shared,-Bsymbolic
#apparantly this file is missing from some builds.
#it does work without, but this may change in future.
#QMAKE_LFLAGS_APP = -Wl,-T,${ANDROID_BUILD_TOP}/build/core/armelf.xs \
QMAKE_LFLAGS_APP = ${ANDROID_PRODUCT_OUT}/obj/lib/crtbegin_dynamic.o \
${ANDROID_PRODUCT_OUT}/obj/lib/crtend_android.o
QMAKE_LFLAGS_SHLIB = -Wl,-T,${ANDROID_BUILD_TOP}/build/core/armelf.xsc \
-Wl,-shared,-Bsymbolic \
${ANDROID_PRODUCT_OUT}/obj/lib/crtbegin_so.o \
${ANDROID_PRODUCT_OUT}/obj/lib/crtend_so.o
QMAKE_LFLAGS_SONAME =
QMAKE_LFLAGS_NOUNDEF = -Wl,--no-undefined
QMAKE_LFLAGS_RPATH = -Wl,-rpath=
QMAKE_LIBS = -lstlport -lstdc++ -llog -lz -lm -ldl -lc -lgcc
QMAKE_LIBS_X11 =
QMAKE_LIBS_X11SM =
QMAKE_LIBS_QT_THREAD =
QMAKE_LIBS_QT_OPENGL =
QMAKE_LIBS_QTOPIA =
QMAKE_LIBS_THREAD =
QMAKE_LIBS_OPENGL =
QMAKE_LIBS_OPENGL_QT =
QMAKE_LIBS_OPENGL_ES1 = -lGLESv1_CM
QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 $$QMAKE_LIBS
CONFIG += linux-android-9 android-9 linux-android android
load(qt_config)
QT_CONFIG -=accessibility
# we don't support exceptions, but right now this has no effect
# you need to manually delete mkspecs/features/exceptions.prf
CONFIG -= exceptions
CONFIG += exceptions_off