TARGET_linux-mips.mk revision 13eb1eb53d0fd9aaef6d5a2bc286ea21d845254d
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Copyright (C) 2010 The Android Open Source Project
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License");
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# you may not use this file except in compliance with the License.
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# You may obtain a copy of the License at
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#      http://www.apache.org/licenses/LICENSE-2.0
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Unless required by applicable law or agreed to in writing, software
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS,
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# See the License for the specific language governing permissions and
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# limitations under the License.
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Configuration for Linux on MIPS.
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Included by combo/select.mk
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# You can set TARGET_ARCH_VARIANT to use an arch version other
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# than mips32r2-fp. Each value should correspond to a file named
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# $(BUILD_COMBOS)/arch/<name>.mk which must contain
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# makefile variable definitions similar to the preprocessor
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# defines in build/core/combo/include/arch/<combo>/AndroidConfig.h. Their
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# purpose is to allow module Android.mk files to selectively compile
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# different versions of code based upon the funtionality and
2795b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati# instructions available in a given architecture version.
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# The blocks also define specific arch_variant_cflags, which
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# include defines, and compiler settings for the given architecture
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# version.
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifeq ($(strip $(TARGET_ARCH_VARIANT)),)
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_ARCH_VARIANT := mips32r2-fp
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifeq ($(strip $(TARGET_GCC_VERSION_EXP)),)
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GCC_VERSION := 4.8
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectelse
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP)
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT).mk
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifeq ($(strip $(wildcard $(TARGET_ARCH_SPECIFIC_MAKEFILE))),)
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project$(error Unknown MIPS architecture variant: $(TARGET_ARCH_VARIANT))
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectinclude $(TARGET_ARCH_SPECIFIC_MAKEFILE)
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifeq ($(strip $(TARGET_TOOLS_PREFIX)),)
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mipsel-linux-android-$(TARGET_GCC_VERSION)
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/mipsel-linux-android-
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CC := $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CXX := $(TARGET_TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX)
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_AR := $(TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifeq ($(TARGET_BUILD_VARIANT),user)
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectelse
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ && \
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        $(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_mips_CFLAGS :=	-O2 \
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-fomit-frame-pointer \
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-fno-strict-aliasing    \
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-funswitch-loops
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Set FORCE_MIPS_DEBUGGING to "true" in your buildspec.mk
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# or in your environment to gdb debugging easier.
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Don't forget to do a clean build.
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifeq ($(FORCE_MIPS_DEBUGGING),true)
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  TARGET_mips_CFLAGS += -fno-omit-frame-pointer
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectandroid_config_h := $(call select-android-config-h,linux-mips)
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GLOBAL_CFLAGS += \
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			$(TARGET_mips_CFLAGS) \
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Ulinux -U__unix -U__unix__ -Umips \
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-fpic -fPIE\
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-ffunction-sections \
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-fdata-sections \
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-funwind-tables \
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wa,--noexecstack \
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Werror=format-security \
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-D_FORTIFY_SOURCE=2 \
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			$(arch_variant_cflags) \
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-include $(android_config_h) \
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-I $(dir $(android_config_h))
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# This warning causes dalvik not to build with gcc 4.6+ and -Werror.
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# We cannot turn it off blindly since the option is not available
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# in gcc-4.4.x.
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifneq ($(filter 4.6 4.6.% 4.7 4.7.% 4.8, $(TARGET_GCC_VERSION)),)
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable \
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        -fno-strict-volatile-bitfields
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# This is to avoid the dreaded warning compiler message:
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#   note: the mangling of 'va_list' has changed in GCC 4.4
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# The fact that the mangling changed does not affect the NDK ABI
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# very fortunately (since none of the exposed APIs used va_list
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# in their exported C++ functions). Also, GCC 4.5 has already
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# removed the warning from the compiler.
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GLOBAL_CFLAGS += -Wno-psabi
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifneq ($(ARCH_MIPS_PAGE_SHIFT),)
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GLOBAL_CFLAGS += -DPAGE_SHIFT=$(ARCH_MIPS_PAGE_SHIFT)
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GLOBAL_LDFLAGS += \
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wl,-z,noexecstack \
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wl,-z,relro \
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wl,-z,now \
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wl,--warn-shared-textrel \
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wl,--fatal-warnings \
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			$(arch_variant_ldflags)
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# More flags/options can be added here
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_RELEASE_CFLAGS := \
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-DNDEBUG \
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-g \
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-Wstrict-aliasing=2 \
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-fgcse-after-reload \
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-frerun-cse-after-loop \
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			-frename-registers
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectlibc_root := bionic/libc
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectlibm_root := bionic/libm
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectlibstdc++_root := bionic/libstdc++
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectlibthread_db_root := bionic/libthread_db
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project## on some hosts, the target cross-compiler is not available so do not run this command
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifneq ($(wildcard $(TARGET_CC)),)
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# We compile with the global cflags to ensure that
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# any flags which affect libgcc are correctly taken
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# into account.
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_LIBGCC := \
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) -print-file-name=libgcc.a)
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectLIBGCC_EH := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) -print-file-name=libgcc_eh.a)
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifneq ($(LIBGCC_EH),libgcc_eh.a)
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  TARGET_LIBGCC += $(LIBGCC_EH)
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttarget_libgcov := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) \
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        --print-file-name=libgcov.a)
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project# Define FDO (Feedback Directed Optimization) options.
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_FDO_CFLAGS:=
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_FDO_LIB:=
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectifneq ($(strip $(BUILD_FDO_INSTRUMENT)),)
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  # Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation.
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  # The profile will be generated on /data/local/tmp/profile on the device.
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  TARGET_FDO_CFLAGS := -fprofile-generate=/data/local/tmp/profile -DANDROID_FDO
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  TARGET_FDO_LIB := $(target_libgcov)
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectelse
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  # If BUILD_FDO_INSTRUMENT is turned off, then consider doing the FDO optimizations.
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  # Set TARGET_FDO_PROFILE_PATH to set a custom profile directory for your build.
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  ifeq ($(strip $(TARGET_FDO_PROFILE_PATH)),)
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    TARGET_FDO_PROFILE_PATH := fdo/profiles/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT)
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  else
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ifeq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),)
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project      $(warning Custom TARGET_FDO_PROFILE_PATH supplied, but directory does not exist. Turn off FDO.)
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    endif
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  endif
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  # If the FDO profile directory can't be found, then FDO is off.
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  ifneq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),)
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    TARGET_FDO_CFLAGS := -fprofile-use=$(TARGET_FDO_PROFILE_PATH) -DANDROID_FDO
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    TARGET_FDO_LIB := $(target_libgcov)
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  endif
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendif
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectKERNEL_HEADERS_COMMON := $(libc_root)/kernel/uapi
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectKERNEL_HEADERS_ARCH   := $(libc_root)/kernel/uapi/asm-$(TARGET_ARCH)
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectKERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH)
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_C_INCLUDES := \
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(libc_root)/arch-mips/include \
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(libc_root)/include \
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(libstdc++_root)/include \
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(KERNEL_HEADERS) \
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(libm_root)/include \
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(libm_root)/include/mips \
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(libthread_db_root)/include
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CRTBEGIN_STATIC_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CRTEND_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CRTBEGIN_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CRTEND_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_STRIP_MODULE:=true
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTARGET_CUSTOM_LD_COMMAND := true
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectdefine transform-o-to-shared-lib-inner
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project$(hide) $(PRIVATE_CXX) \
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-nostdlib -Wl,-soname,$(notdir $@) \
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--gc-sections \
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,-shared,-Bsymbolic \
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--whole-archive \
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--no-whole-archive \
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_LIBGCC) \
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_FDO_LIB) \
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-o $@ \
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_LDFLAGS) \
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_LIBGCC) \
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O))
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendef
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectdefine transform-o-to-executable-inner
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,-dynamic-linker,/system/bin/linker \
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--gc-sections \
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,-z,nocopyreloc \
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,-rpath-link=$(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O)) \
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--whole-archive \
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--no-whole-archive \
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
253cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
254cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_LIBGCC) \
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_FDO_LIB) \
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-o $@ \
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_LDFLAGS) \
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_LIBGCC) \
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O))
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendef
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectdefine transform-o-to-static-executable-inner
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project$(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--gc-sections \
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-o $@ \
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_STATIC_O)) \
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_LDFLAGS) \
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--whole-archive \
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--no-whole-archive \
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES)))) \
278cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton	-Wl,--start-group \
279cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton	$(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_FDO_LIB) \
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(PRIVATE_TARGET_LIBGCC) \
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	-Wl,--end-group \
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O))
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectendef
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project