| # 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=non-virtual-dtor', |
| '-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] |