16db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# Copyright (C) 2014 The Android Open Source Project 26db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 36db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# Licensed under the Apache License, Version 2.0 (the "License"); 46db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# you may not use this file except in compliance with the License. 56db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# You may obtain a copy of the License at 66db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 76db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# http://www.apache.org/licenses/LICENSE-2.0 86db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 96db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# Unless required by applicable law or agreed to in writing, software 106db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# distributed under the License is distributed on an "AS IS" BASIS, 116db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# See the License for the specific language governing permissions and 136db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# limitations under the License. 146db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 156db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 166db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# this file is used to prepare the NDK to build with the arm clang-3.5 176db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# toolchain any number of source files 186db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 196db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# its purpose is to define (or re-define) templates used to build 206db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# various sources into target object files, libraries or executables. 216db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 226db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# Note that this file may end up being parsed several times in future 236db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# revisions of the NDK. 246db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 256db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 266db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 276db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# Override the toolchain prefix 286db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 296db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 306db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehLLVM_VERSION := 3.5 316db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehLLVM_NAME := llvm-$(LLVM_VERSION) 326db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehLLVM_TOOLCHAIN_ROOT := $(NDK_ROOT)/toolchains/$(LLVM_NAME) 336db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehLLVM_TOOLCHAIN_PREBUILT_ROOT := $(call host-prebuilt-tag,$(LLVM_TOOLCHAIN_ROOT)) 346db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehLLVM_TOOLCHAIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/ 356db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 366db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTOOLCHAIN_VERSION := 4.8 376db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTOOLCHAIN_NAME := arm-linux-androideabi-$(TOOLCHAIN_VERSION) 386db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTOOLCHAIN_ROOT := $(NDK_ROOT)/toolchains/$(TOOLCHAIN_NAME) 396db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTOOLCHAIN_PREBUILT_ROOT := $(call host-prebuilt-tag,$(TOOLCHAIN_ROOT)) 406db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTOOLCHAIN_PREFIX := $(TOOLCHAIN_PREBUILT_ROOT)/bin/arm-linux-androideabi- 416db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 426db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_CC := $(LLVM_TOOLCHAIN_PREFIX)clang$(HOST_EXEEXT) 436db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_CXX := $(LLVM_TOOLCHAIN_PREFIX)clang++$(HOST_EXEEXT) 446db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 456db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 466db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# CFLAGS and LDFLAGS 476db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 486db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 496db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_CFLAGS := \ 506db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -gcc-toolchain $(call host-path,$(TOOLCHAIN_PREBUILT_ROOT)) \ 516db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fpic \ 526db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -ffunction-sections \ 536db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -funwind-tables \ 5445e3de094fefaf9912154ae307f49a961f6c8ff0Daniel Micay -fstack-protector-strong \ 556db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -Wno-invalid-command-line-argument \ 566db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -Wno-unused-command-line-argument \ 576db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -no-canonical-prefixes 586db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 596db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# Disable integrated-as for better compatibility 606db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_CFLAGS += \ 616db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fno-integrated-as 626db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 636db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_LDFLAGS += \ 646db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -gcc-toolchain $(call host-path,$(TOOLCHAIN_PREBUILT_ROOT)) \ 656db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -no-canonical-prefixes 666db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 676db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_C_INCLUDES := \ 686db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(SYSROOT_INC)/usr/include 696db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 706db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsiehifneq ($(filter %armeabi-v7a,$(TARGET_ARCH_ABI)),) 716db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh LLVM_TRIPLE := armv7-none-linux-androideabi 726db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 736db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh TARGET_CFLAGS += -target $(LLVM_TRIPLE) \ 746db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -march=armv7-a \ 756db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -mfloat-abi=softfp \ 766db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -mfpu=vfpv3-d16 776db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 786db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh TARGET_LDFLAGS += -target $(LLVM_TRIPLE) \ 796db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -Wl,--fix-cortex-a8 806db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsiehelse 816db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsiehifneq ($(filter %armeabi-v7a-hard,$(TARGET_ARCH_ABI)),) 826db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh LLVM_TRIPLE := armv7-none-linux-androideabi 836db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 846db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh TARGET_CFLAGS += -target $(LLVM_TRIPLE) \ 856db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -march=armv7-a \ 866db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -mfpu=vfpv3-d16 \ 876db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -mhard-float \ 886db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -D_NDK_MATH_NO_SOFTFP=1 896db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 906db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh TARGET_LDFLAGS += -target $(LLVM_TRIPLE) \ 916db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -Wl,--fix-cortex-a8 \ 926db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -Wl,--no-warn-mismatch \ 936db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -lm_hard 946db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsiehelse 956db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh LLVM_TRIPLE := armv5te-none-linux-androideabi 966db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 976db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh TARGET_CFLAGS += -target $(LLVM_TRIPLE) \ 986db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -march=armv5te \ 996db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -mtune=xscale \ 1006db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -msoft-float 1016db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1026db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh TARGET_LDFLAGS += -target $(LLVM_TRIPLE) 1036db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsiehendif 1046db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsiehendif 1056db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1066db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_CFLAGS.neon := -mfpu=neon 1076db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1086db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_arm_release_CFLAGS := -O2 \ 1096db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -g \ 1106db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -DNDEBUG \ 1116db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fomit-frame-pointer \ 1126db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fstrict-aliasing 1136db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1146db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_thumb_release_CFLAGS := -mthumb \ 1156db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -Os \ 1166db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -g \ 1176db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -DNDEBUG \ 1186db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fomit-frame-pointer \ 1196db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fno-strict-aliasing 1206db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1216db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# When building for debug, compile everything as arm. 1226db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_arm_debug_CFLAGS := $(TARGET_arm_release_CFLAGS) \ 1236db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -O0 \ 1246db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -UNDEBUG \ 1256db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fno-omit-frame-pointer \ 1266db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fno-strict-aliasing 1276db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1286db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET_thumb_debug_CFLAGS := $(TARGET_thumb_release_CFLAGS) \ 1296db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -O0 \ 1306db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -UNDEBUG \ 1316db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -marm \ 1326db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh -fno-omit-frame-pointer 1336db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh 1346db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# This function will be called to determine the target CFLAGS used to build 1356db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# a C or Assembler source file, based on its tags. 1366db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh# 1376db73059bfc7830f10a291d4b666f8ed21b775a8Andrew HsiehTARGET-process-src-files-tags = \ 1386db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(eval __arm_sources := $(call get-src-files-with-tag,arm)) \ 1396db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(eval __thumb_sources := $(call get-src-files-without-tag,arm)) \ 1406db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(eval __debug_sources := $(call get-src-files-with-tag,debug)) \ 1416db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(eval __release_sources := $(call get-src-files-without-tag,debug)) \ 1426db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-target-cflags, \ 1436db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(call set_intersection,$(__arm_sources),$(__debug_sources)), \ 1446db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(TARGET_arm_debug_CFLAGS)) \ 1456db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-target-cflags,\ 1466db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(call set_intersection,$(__arm_sources),$(__release_sources)),\ 1476db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(TARGET_arm_release_CFLAGS)) \ 1486db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-target-cflags,\ 1496db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(call set_intersection,$(__arm_sources),$(__debug_sources)),\ 1506db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(TARGET_arm_debug_CFLAGS)) \ 1516db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-target-cflags,\ 1526db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(call set_intersection,$(__thumb_sources),$(__release_sources)),\ 1536db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(TARGET_thumb_release_CFLAGS)) \ 1546db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-target-cflags,\ 1556db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(call set_intersection,$(__thumb_sources),$(__debug_sources)),\ 1566db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(TARGET_thumb_debug_CFLAGS)) \ 1576db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call add-src-files-target-cflags,\ 1586db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(call get-src-files-with-tag,neon),\ 1596db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh $(TARGET_CFLAGS.neon)) \ 1606db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-text,$(__arm_sources),arm) \ 1616db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh$(call set-src-files-text,$(__thumb_sources),thumb) 162