blob: 6af20985973faa2f084f10b1b788b2694d2bef33 [file] [log] [blame]
# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
devices = {
'generic_x86': 'x86',
'hammerhead': 'arm',
}
triples = {
'generic_x86': 'i686-linux-android',
'hammerhead': 'arm-linux-androideabi',
}
timeouts = {
'generic_x86': '120',
'hammerhead': '60',
}
# use -I
includes = {
'generic': [
'external/libcxx/include',
'external/libcxx/test/support',
'libnativehelper/include/nativehelper',
],
'arm': [
'build/core/combo/include/arch/linux-arm/',
],
'x86': [
'build/core/combo/include/arch/target_linux-x86/',
],
}
# use -isystem
system_includes = {
'generic': [
'system/core/include',
'hardware/libhardware/include',
'hardware/libhardware_legacy/include',
'hardware/ril/include',
'libnativehelper/include',
'frameworks/native/include',
'frameworks/native/opengl/include',
'frameworks/av/include',
'frameworks/base/include',
'external/skia/include',
'bionic/libc/include',
'bionic/libc/kernel/uapi',
'bionic/libm/include',
'prebuilts/clang/linux-x86/host/3.5/lib/clang/3.5/include/',
],
'arm': [
'hardware/qcom/msm8x74/kernel-headers',
'bionic/libc/arch-arm/include',
'bionic/libc/kernel/uapi/asm-arm',
'bionic/libm/include/arm',
],
'x86': [
'bionic/libc/arch-x86/include',
'bionic/libc/kernel/uapi/asm-x86',
'bionic/libm/include/i387',
],
'generic_x86': [
'out/target/product/generic_x86/obj/include',
'out/target/product/generic_x86/obj/include/clang',
],
'hammerhead': [
'out/target/product/hammerhead/obj/include',
'out/target/product/hammerhead/obj/include/clang',
'device/lge/hammerhead/kernel-headers',
],
}
compiler_flags = {
'generic': [
'-fdata-sections',
'-ffunction-sections',
'-fmessage-length=0',
'-fno-short-enums',
'-fno-strict-aliasing',
'-fomit-frame-pointer',
'-fpic',
'-fPIE',
'-fstack-protector',
'-funwind-tables',
'-fvisibility-inlines-hidden',
'-no-canonical-prefixes',
'-no-integrated-as',
'-nostdlibinc',
'-std=c++11',
],
'arm': [
'-B', os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/arm-linux-androideabi/bin'),
'-target', 'arm-linux-androideabi',
'-include', os.path.join(config.android_root, 'build/core/combo/include/arch/linux-arm/AndroidConfig.h'),
],
'x86': [
'-finline-functions',
'-B', os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8/x86_64-linux-android/bin'),
'-target', 'i686-linux-android',
'-include', os.path.join(config.android_root, 'build/core/combo/include/arch/target_linux-x86/AndroidConfig.h'),
],
}
arch_flags = {
'arm': [
'-msoft-float',
'-march=armv7-a',
'-mfloat-abi=softfp',
'-mfpu=neon',
'-mthumb',
],
'x86': [
'-m32',
'-march=i686',
'-msse2',
'-msse3',
],
}
defines = [
'-D_FORTIFY_SOURCE=2',
'-DANDROID',
'-D__compiler_offsetof=__builtin_offsetof',
]
warning_flags = [
'-W',
'-Wall',
'-Werror=address',
'-Werror=format-security',
'-Werror=int-conversion',
'-Werror=return-type',
'-Werror=sequence-point',
'-Winit-self',
'-Wno-multichar',
'-Wno-unused',
'-Wpointer-arith',
'-Wsign-promo',
'-Wstrict-aliasing=2',
'-Wa,--noexecstack',
]
link_flags = {
'generic': [
'-nostdlib',
'-Bdynamic',
'-fPIE',
'-pie',
'-Wl,-dynamic-linker,/system/bin/linker',
'-Wl,--gc-sections',
'-Wl,-z,nocopyreloc',
'-Wl,-z,noexecstack',
'-Wl,-z,relro',
'-Wl,-z,now',
'-Wl,--warn-shared-textrel',
'-Wl,--fatal-warnings',
'-Wl,--icf=safe',
'-Wl,--no-undefined',
'-no-integrated-as',
'-Wl,--no-whole-archive',
'-L', os.path.join(os.getenv('ANDROID_PRODUCT_OUT'), 'obj/lib'),
'-Wl,-rpath-link={}'.format(os.path.join(os.getenv('ANDROID_PRODUCT_OUT'), 'obj/lib')),
'-lc++',
'-lc',
'-lm',
],
'arm': [
'-Wl,--fix-cortex-a8',
'-target', 'arm-linux-androideabi',
'-B', os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/arm-linux-androideabi/bin'),
],
'x86': [
'-target', 'i686-linux-android',
'-B', os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8/x86_64-linux-android/bin'),
],
}
builtins = {
'generic': [
os.path.join(os.getenv('ANDROID_PRODUCT_OUT'), 'obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a'),
],
'arm': [
os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/arm-linux-androideabi/lib/libatomic.a'),
os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/lib/gcc/arm-linux-androideabi/4.8/libgcc.a'),
],
'x86': [
os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8/x86_64-linux-android/lib/libatomic.a'),
os.path.join(config.android_root, 'prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8/lib/gcc/x86_64-linux-android/4.8/32/libgcc.a'),
],
}
crtbegin = os.path.join(os.getenv('ANDROID_PRODUCT_OUT'), 'obj/lib/crtbegin_dynamic.o')
crtend = os.path.join(os.getenv('ANDROID_PRODUCT_OUT'), 'obj/lib/crtend_android.o')
def compiler_flags_for(device):
arch = devices[device]
flags = warning_flags + defines + arch_flags[arch]
all_includes = includes['generic'] + includes[arch]
for inc in all_includes:
flags += ['-I', os.path.join(config.android_root, inc)]
all_system_includes = (system_includes['generic'] +
system_includes[arch] +
system_includes[device])
for inc in all_system_includes:
flags += ['-isystem', os.path.join(config.android_root, inc)]
flags += compiler_flags['generic'] + compiler_flags[arch]
return flags
device = os.getenv('ANDROID_PRODUCT_OUT').split('/')[-1]
arch = devices[device]
config.target_triple = triples[device]
config.cppflags = compiler_flags_for(device)
config.ldflags = (
link_flags['generic'] +
link_flags[arch] +
builtins['generic'] +
builtins[arch]
)
config.crtbegin = os.path.join(config.android_root, crtbegin)
config.crtend = os.path.join(config.android_root, crtend)
if device in timeouts:
config.timeout = timeouts[device]