[android] Added toolchain support for x86 and armv7. Define NDK_ABI=armeabi/armeabi-v7a/x86 to use it

This commit is contained in:
Alex Zolotarev 2011-12-22 12:08:05 +03:00 committed by Alex Zolotarev
parent cb8ce45cae
commit 7d0bea4a25

View file

@ -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