From 7d0bea4a25b6097fb6cc0cea7d7ed1ebe5ec90b6 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Thu, 22 Dec 2011 12:08:05 +0300 Subject: [PATCH] [android] Added toolchain support for x86 and armv7. Define NDK_ABI=armeabi/armeabi-v7a/x86 to use it --- tools/mkspecs/android-g++/qmake.conf | 54 ++++++++++++++++++---------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/tools/mkspecs/android-g++/qmake.conf b/tools/mkspecs/android-g++/qmake.conf index 9e6e95ff49..aaafbf4318 100644 --- a/tools/mkspecs/android-g++/qmake.conf +++ b/tools/mkspecs/android-g++/qmake.conf @@ -9,41 +9,57 @@ include(qws.conf) # NDK_ROOT should be defined for qmake # NDK_HOST should be defined for qmake +# NDK_ABI optionally can be defined to armeabi, armeabi-v7a or x86, by default armeabi will be used -NDK_TOOLCHAIN_PREFIX = arm-linux-androideabi -NDK_TOOLCHAIN_VERSION = 4.4.3 +contains(NDK_ABI, x86) { + NDK_TOOLCHAIN = x86-4.4.3 + ANDROID_TARGET_ARCH = x86 + ANDROID_CC_PREFIX = i686-android-linux +} else { + NDK_TOOLCHAIN = arm-linux-androideabi-4.4.3 + ANDROID_TARGET_ARCH = arm + ANDROID_CC_PREFIX = arm-linux-androideabi +} ANDROID_PLATFORM = android-5 -ANDROID_TARGET_ARCH = armeabi +ANDROID_TARGET_ABI = $$(NDK_ABI) + +# by default use armv5 architecture +isEmpty( ANDROID_TARGET_ABI ): ANDROID_TARGET_ABI = armeabi -NDK_TOOLCHAIN = $$NDK_TOOLCHAIN_PREFIX-$$NDK_TOOLCHAIN_VERSION NDK_TOOLCHAIN_PATH=$$(NDK_ROOT)/toolchains/$$NDK_TOOLCHAIN/prebuilt/$$(NDK_HOST) CONFIG += $$ANDROID_PLATFORM -ANDROID_PLATFORM_ROOT_PATH = $$(NDK_ROOT)/platforms/$$ANDROID_PLATFORM/arch-arm +ANDROID_PLATFORM_ROOT_PATH = $$(NDK_ROOT)/platforms/$$ANDROID_PLATFORM/arch-$$ANDROID_TARGET_ARCH ANDROID_PLATFORM_PATH = $$ANDROID_PLATFORM_ROOT_PATH/usr -ANDROID_SOURCES_CXX_STL_LIBDIR = $$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi +ANDROID_SOURCES_CXX_STL_LIBDIR = $$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/$$ANDROID_TARGET_ABI ANDROID_SOURCES_CXX_STL_INCDIR = $$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/include $$ANDROID_SOURCES_CXX_STL_LIBDIR/include # modifications to g++.conf -QMAKE_CC = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLCHAIN_PREFIX-gcc +QMAKE_CC = $$NDK_TOOLCHAIN_PATH/bin/$$ANDROID_CC_PREFIX-gcc -contains(ANDROID_TARGET_ARCH, armeabi-v7a): QMAKE_CFLAGS = -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mfpu=neon -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wa,--noexecstack - else: QMAKE_CFLAGS = -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wa,--noexecstack - -QMAKE_CFLAGS += --sysroot=$$ANDROID_PLATFORM_ROOT_PATH +QMAKE_CFLAGS += --sysroot=$$ANDROID_PLATFORM_ROOT_PATH -ffunction-sections -fdata-sections -fomit-frame-pointer -DANDROID +#QMAKE_CFLAGS += -funwind-tables +QMAKE_CFLAGS_DEBUG += -fstack-protector -O0 -g +QMAKE_CFLAGS_RELEASE += -O3 +contains(ANDROID_TARGET_ARCH, arm) { + QMAKE_CFLAGS += -fpic -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -mthumb -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack + contains(ANDROID_TARGET_ABI, armeabi-v7a): QMAKE_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfp + else: QMAKE_CFLAGS += -march=armv5te -mtune=xscale -msoft-float +} else { + # x86 options + QMAKE_CFLAGS += -fstrict-aliasing -finline-limit=300 -funswitch-loops +} QMAKE_CFLAGS_WARN_ON = -Wall -W QMAKE_CFLAGS_WARN_OFF = -QMAKE_CFLAGS_RELEASE = -mthumb -O3 -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -QMAKE_CFLAGS_DEBUG = -mthumb -O0 -g -fno-omit-frame-pointer QMAKE_CFLAGS_SHLIB = -fPIC QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CFLAGS_THREAD = -D_REENTRANT QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden -QMAKE_CXX = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLCHAIN_PREFIX-g++ -QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED +QMAKE_CXX = $$NDK_TOOLCHAIN_PATH/bin/$$ANDROID_CC_PREFIX-g++ +QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS += -frtti -fexceptions QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF @@ -58,13 +74,13 @@ QMAKE_LINK = $$QMAKE_CXX QMAKE_LINK_SHLIB = $$QMAKE_LINK # modifications to linux.conf -QMAKE_AR = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLCHAIN_PREFIX-ar cqs -QMAKE_OBJCOPY = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLCHAIN_PREFIX-objcopy +QMAKE_AR = $$NDK_TOOLCHAIN_PATH/bin/$$ANDROID_CC_PREFIX-ar cqs +QMAKE_OBJCOPY = $$NDK_TOOLCHAIN_PATH/bin/$$ANDROID_CC_PREFIX_PREFIX-objcopy # don't strip the files! -QMAKE_STRIP = # $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLCHAIN_PREFIX-strip +QMAKE_STRIP = # $$NDK_TOOLCHAIN_PATH/bin/$$ANDROID_CC_PREFIX-strip -QMAKE_RANLIB = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLCHAIN_PREFIX-ranlib +QMAKE_RANLIB = $$NDK_TOOLCHAIN_PATH/bin/$$ANDROID_CC_PREFIX-ranlib QMAKE_INCDIR = $$ANDROID_PLATFORM_PATH/include $$ANDROID_SOURCES_CXX_STL_INCDIR QMAKE_LIBDIR = $$ANDROID_SOURCES_CXX_STL_LIBDIR $$ANDROID_PLATFORM_PATH/lib