1 # Copyright (C) 2009 The Android Open Source Project 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 # 15 16 # this file is used to prepare the NDK to build with the arm-eabi-4.4.0 17 # toolchain any number of source files 18 # 19 # its purpose is to define (or re-define) templates used to build 20 # various sources into target object files, libraries or executables. 21 # 22 # Note that this file may end up being parsed several times in future 23 # revisions of the NDK. 24 # 25 26 TARGET_CFLAGS := \ 27 -fpic \ 28 -ffunction-sections \ 29 -funwind-tables \ 30 -fstack-protector \ 31 -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ \ 32 -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ 33 34 TARGET_LDFLAGS := 35 36 TARGET_C_INCLUDES := \ 37 $(SYSROOT)/usr/include 38 39 # This is to avoid the dreaded warning compiler message: 40 # note: the mangling of 'va_list' has changed in GCC 4.4 41 # 42 # The fact that the mangling changed does not affect the NDK ABI 43 # very fortunately (since none of the exposed APIs used va_list 44 # in their exported C++ functions). Also, GCC 4.5 has already 45 # removed the warning from the compiler. 46 # 47 TARGET_CFLAGS += -Wno-psabi 48 49 ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) 50 TARGET_CFLAGS += -march=armv7-a \ 51 -mfloat-abi=softfp \ 52 -mfpu=vfp 53 54 TARGET_LDFLAGS += -Wl,--fix-cortex-a8 55 else 56 TARGET_CFLAGS += -march=armv5te \ 57 -mtune=xscale \ 58 -msoft-float 59 endif 60 61 TARGET_CFLAGS.neon := -mfpu=neon 62 63 TARGET_arm_release_CFLAGS := -O2 \ 64 -fomit-frame-pointer \ 65 -fstrict-aliasing \ 66 -funswitch-loops \ 67 -finline-limit=300 68 69 TARGET_thumb_release_CFLAGS := -mthumb \ 70 -Os \ 71 -fomit-frame-pointer \ 72 -fno-strict-aliasing \ 73 -finline-limit=64 74 75 # When building for debug, compile everything as arm. 76 TARGET_arm_debug_CFLAGS := $(TARGET_arm_release_CFLAGS) \ 77 -fno-omit-frame-pointer \ 78 -fno-strict-aliasing 79 80 TARGET_thumb_debug_CFLAGS := $(TARGET_thumb_release_CFLAGS) \ 81 -marm \ 82 -fno-omit-frame-pointer 83 84 # This function will be called to determine the target CFLAGS used to build 85 # a C or Assembler source file, based on its tags. 86 # 87 TARGET-process-src-files-tags = \ 88 $(eval __arm_sources := $(call get-src-files-with-tag,arm)) \ 89 $(eval __thumb_sources := $(call get-src-files-without-tag,arm)) \ 90 $(eval __debug_sources := $(call get-src-files-with-tag,debug)) \ 91 $(eval __release_sources := $(call get-src-files-without-tag,debug)) \ 92 $(call set-src-files-target-cflags, \ 93 $(call set_intersection,$(__arm_sources),$(__debug_sources)), \ 94 $(TARGET_arm_debug_CFLAGS)) \ 95 $(call set-src-files-target-cflags,\ 96 $(call set_intersection,$(__arm_sources),$(__release_sources)),\ 97 $(TARGET_arm_release_CFLAGS)) \ 98 $(call set-src-files-target-cflags,\ 99 $(call set_intersection,$(__arm_sources),$(__debug_sources)),\ 100 $(TARGET_arm_debug_CFLAGS)) \ 101 $(call set-src-files-target-cflags,\ 102 $(call set_intersection,$(__thumb_sources),$(__release_sources)),\ 103 $(TARGET_thumb_release_CFLAGS)) \ 104 $(call set-src-files-target-cflags,\ 105 $(call set_intersection,$(__thumb_sources),$(__debug_sources)),\ 106 $(TARGET_thumb_debug_CFLAGS)) \ 107 $(call add-src-files-target-cflags,\ 108 $(call get-src-files-with-tag,neon),\ 109 $(TARGET_CFLAGS.neon)) \ 110 $(call set-src-files-text,$(__arm_sources),arm$(space)$(space)) \ 111 $(call set-src-files-text,$(__thumb_sources),thumb) 112 113 # 114 # We need to add -lsupc++ to the final link command to make exceptions 115 # and RTTI work properly (when -fexceptions and -frtti are used). 116 # 117 # Normally, the toolchain should be configured to do that automatically, 118 # this will be debugged later. 119 # 120 define cmd-build-shared-library 121 $(PRIVATE_CXX) \ 122 $(PRIVATE_LDSCRIPT_XSC) \ 123 -Wl,-soname,$(notdir $@) \ 124 -shared \ 125 --sysroot=$(call host-path,$(PRIVATE_SYSROOT)) \ 126 $(PRIVATE_LINKER_OBJECTS_AND_LIBRARIES) \ 127 $(PRIVATE_LDFLAGS) \ 128 $(PRIVATE_LDLIBS) \ 129 -o $(call host-path,$@) 130 endef 131 132 define cmd-build-executable 133 $(PRIVATE_CXX) \ 134 $(PRIVATE_LDSCRIPT_X) \ 135 -Wl,--gc-sections \ 136 -Wl,-z,nocopyreloc \ 137 --sysroot=$(call host-path,$(PRIVATE_SYSROOT)) \ 138 $(PRIVATE_LINKER_OBJECTS_AND_LIBRARIES) \ 139 $(PRIVATE_LDFLAGS) \ 140 $(PRIVATE_LDLIBS) \ 141 -o $(call host-path,$@) 142 endef 143