106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Copyright (C) 2010 The Android Open Source Project
306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Licensed under the Apache License, Version 2.0 (the "License");
506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# you may not use this file except in compliance with the License.
606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# You may obtain a copy of the License at
706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#      http://www.apache.org/licenses/LICENSE-2.0
906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
1006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Unless required by applicable law or agreed to in writing, software
1106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# distributed under the License is distributed on an "AS IS" BASIS,
1206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# See the License for the specific language governing permissions and
1406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# limitations under the License.
1506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
1606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
1706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Configuration for Linux on MIPS.
1806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Included by combo/select.mk
1906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
2006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# You can set TARGET_ARCH_VARIANT to use an arch version other
2106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# than mips32r2-fp. Each value should correspond to a file named
2206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# $(BUILD_COMBOS)/arch/<name>.mk which must contain
2306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# makefile variable definitions similar to the preprocessor
245bdf305bbe529a85735200353478057b65bb462eYing Wang# defines in build/core/combo/include/arch/<combo>/AndroidConfig.h. Their
2506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# purpose is to allow module Android.mk files to selectively compile
2606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# different versions of code based upon the funtionality and
2706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# instructions available in a given architecture version.
2806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
2906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# The blocks also define specific arch_variant_cflags, which
3006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# include defines, and compiler settings for the given architecture
3106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# version.
3206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham#
33369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughesifeq ($(strip $(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT)),)
34369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott HughesTARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT := mips32r2-fp
3506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
3606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
374de6fa4069407607813dfdd1993114c79194d337Ben Cheng# Decouple NDK library selection with platform compiler version
384de6fa4069407607813dfdd1993114c79194d337Ben Cheng$(combo_2nd_arch_prefix)TARGET_NDK_GCC_VERSION := 4.8
394de6fa4069407607813dfdd1993114c79194d337Ben Cheng
40914f7fd938ed8b1a9abcea57325010d464cdc55eBen Chengifeq ($(strip $(TARGET_GCC_VERSION_EXP)),)
413c4fcd84515ff6edcbeae7a0ceaacb1eecae437eDuane Sand$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := 4.9
42914f7fd938ed8b1a9abcea57325010d464cdc55eBen Chengelse
43369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP)
44054ffd2e7c3da585ab223518569e7436858ba5e0Ben Chengendif
45054ffd2e7c3da585ab223518569e7436858ba5e0Ben Cheng
46369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott HughesTARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_$(combo_2nd_arch_prefix)ARCH)/$(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT).mk
4706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamifeq ($(strip $(wildcard $(TARGET_ARCH_SPECIFIC_MAKEFILE))),)
48369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(error Unknown MIPS architecture variant: $(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT))
4906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
5006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
5106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhaminclude $(TARGET_ARCH_SPECIFIC_MAKEFILE)
5225671e15cc1b199ca693f95864ab93a63909a526Dehao Cheninclude $(BUILD_SYSTEM)/combo/fdo.mk
5306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
5406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
55369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughesifeq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),)
563c4fcd84515ff6edcbeae7a0ceaacb1eecae437eDuane Sand$(combo_2nd_arch_prefix)TARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mips64el-linux-android-$($(combo_2nd_arch_prefix)TARGET_GCC_VERSION)
573c4fcd84515ff6edcbeae7a0ceaacb1eecae437eDuane Sand$(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX := $($(combo_2nd_arch_prefix)TARGET_TOOLCHAIN_ROOT)/bin/mips64el-linux-android-
5806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
5906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
60369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CC := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
61369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CXX := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX)
62369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_AR := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
63369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_OBJCOPY := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
64369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_LD := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
65a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher Ferris$(combo_2nd_arch_prefix)TARGET_READELF := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)readelf$(HOST_EXECUTABLE_SUFFIX)
66369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_STRIP := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
6706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
68369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
6906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
7006afc1c5ab9e07094832e790249586a7619d9539Raghu GandhamTARGET_mips_CFLAGS :=	-O2 \
7106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-fomit-frame-pointer \
7206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-fno-strict-aliasing    \
7306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-funswitch-loops
7406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
7506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Set FORCE_MIPS_DEBUGGING to "true" in your buildspec.mk
7606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# or in your environment to gdb debugging easier.
7706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# Don't forget to do a clean build.
7806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamifeq ($(FORCE_MIPS_DEBUGGING),true)
7906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham  TARGET_mips_CFLAGS += -fno-omit-frame-pointer
8006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
8106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
82f4723fa49b6e61f727b6321a4006ee8ba3f393b9Ying Wangandroid_config_h := $(call select-android-config-h,linux-mips)
83f4723fa49b6e61f727b6321a4006ee8ba3f393b9Ying Wang
84369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += \
8506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			$(TARGET_mips_CFLAGS) \
861acd8b0552e94f46b985b0ecdc878ab61cc894d2Elliott Hughes			-U__unix -U__unix__ -Umips \
8706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-ffunction-sections \
8806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-fdata-sections \
8906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-funwind-tables \
906cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman			-Wa,--noexecstack \
9106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-Werror=format-security \
92fb45baa7e7f7909fb58460194476e8f7ffd23cdeNick Kralevich			-D_FORTIFY_SOURCE=2 \
9348f239c94faca140427afc9aa06cf356b1b6b0deAndrew Hsieh			-no-canonical-prefixes \
9448f239c94faca140427afc9aa06cf356b1b6b0deAndrew Hsieh			-fno-canonical-system-headers \
95f4723fa49b6e61f727b6321a4006ee8ba3f393b9Ying Wang			$(arch_variant_cflags) \
96f4723fa49b6e61f727b6321a4006ee8ba3f393b9Ying Wang			-include $(android_config_h) \
97f4723fa49b6e61f727b6321a4006ee8ba3f393b9Ying Wang			-I $(dir $(android_config_h))
9806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
9906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamifneq ($(ARCH_MIPS_PAGE_SHIFT),)
100369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += -DPAGE_SHIFT=$(ARCH_MIPS_PAGE_SHIFT)
10106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
10206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
103369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_GLOBAL_LDFLAGS += \
1046cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman			-Wl,-z,noexecstack \
1056cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman			-Wl,-z,relro \
1066cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman			-Wl,-z,now \
1076cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman			-Wl,--warn-shared-textrel \
10813eb1eb53d0fd9aaef6d5a2bc286ea21d845254dChris Dearman			-Wl,--fatal-warnings \
10906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			$(arch_variant_ldflags)
11006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
111369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden
11206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
11306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# More flags/options can be added here
114369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_RELEASE_CFLAGS := \
11506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-DNDEBUG \
11606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-g \
11706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-Wstrict-aliasing=2 \
11806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-fgcse-after-reload \
11906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-frerun-cse-after-loop \
12006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham			-frename-registers
12106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
12206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamlibc_root := bionic/libc
12306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamlibm_root := bionic/libm
12406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamlibstdc++_root := bionic/libstdc++
12506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
12606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
12706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham## on some hosts, the target cross-compiler is not available so do not run this command
128369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughesifneq ($(wildcard $($(combo_2nd_arch_prefix)TARGET_CC)),)
12906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# We compile with the global cflags to ensure that
13006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# any flags which affect libgcc are correctly taken
13106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham# into account.
132369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_LIBGCC := \
133369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes  $(shell $($(combo_2nd_arch_prefix)TARGET_CC) $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-file-name=libgcc.a)
1344c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh$(combo_2nd_arch_prefix)TARGET_LIBATOMIC := \
1354c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh  $(shell $($(combo_2nd_arch_prefix)TARGET_CC) $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-file-name=libatomic.a)
136369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott HughesLIBGCC_EH := $(shell $($(combo_2nd_arch_prefix)TARGET_CC) $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-file-name=libgcc_eh.a)
13706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamifneq ($(LIBGCC_EH),libgcc_eh.a)
138369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes  $(combo_2nd_arch_prefix)TARGET_LIBGCC += $(LIBGCC_EH)
13906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
14006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendif
14106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
142dddb566eba8cd666b6f3b70067e77acb4e1656deElliott HughesKERNEL_HEADERS_COMMON := $(libc_root)/kernel/uapi
143171e940c7a565e651cf7d0f2edb84d9d92df7f39Elliott HughesKERNEL_HEADERS_ARCH   := $(libc_root)/kernel/uapi/asm-mips # mips covers both mips and mips64.
144b88bdebcb95d674249353a90141fa43054b9fc90Elliott HughesKERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH)
14506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
146369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_C_INCLUDES := \
14706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(libc_root)/arch-mips/include \
14806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(libc_root)/include \
14906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(libstdc++_root)/include \
15006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(KERNEL_HEADERS) \
15106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(libm_root)/include \
15206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(libm_root)/include/mips \
15306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
154369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CRTBEGIN_STATIC_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
155369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CRTBEGIN_DYNAMIC_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
156369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CRTEND_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
15706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
158369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CRTBEGIN_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
159369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CRTEND_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
16006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
161369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_STRIP_MODULE:=true
16206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
163369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
16406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
165369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughes$(combo_2nd_arch_prefix)TARGET_CUSTOM_LD_COMMAND := true
16606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
167369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughesdefine $(combo_2nd_arch_prefix)transform-o-to-shared-lib-inner
16806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham$(hide) $(PRIVATE_CXX) \
16906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-nostdlib -Wl,-soname,$(notdir $@) \
17006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--gc-sections \
17104cf31597021af3cd045dd9c50d94a87d0394023Dan Albert	$(if $(filter true,$(PRIVATE_CLANG)),-shared,-Wl,-shared) \
17206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
17306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \
17406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_ALL_OBJECTS) \
17506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--whole-archive \
17606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
17706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--no-whole-archive \
17806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
17906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
18006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
181d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \
18206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
18306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-o $@ \
18406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
18506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_LDFLAGS) \
1864c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	$(PRIVATE_TARGET_LIBATOMIC) \
187d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \
188de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O)) \
189de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(PRIVATE_LDLIBS)
19006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendef
19106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
192369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughesdefine $(combo_2nd_arch_prefix)transform-o-to-executable-inner
193908ab54fda172baa9a646259fafd8af35290f0a6Dan Albert$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \
19406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,-dynamic-linker,/system/bin/linker \
19506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--gc-sections \
19606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,-z,nocopyreloc \
19791fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
1989fb3526648a08d8d8c1e6325aeb3c6500bcd44c2Ying Wang	-Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \
19991fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O)) \
20006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_ALL_OBJECTS) \
2016cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman	-Wl,--whole-archive \
2026cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
2036cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman	-Wl,--no-whole-archive \
20406afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
20506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
20606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
207d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \
2088725b941b007adfdcb54e7c3aed4b1c21f4dc5adAndrew Hsieh	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
2098725b941b007adfdcb54e7c3aed4b1c21f4dc5adAndrew Hsieh	-o $@ \
21091fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
21106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_LDFLAGS) \
2124c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	$(PRIVATE_TARGET_LIBATOMIC) \
213d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \
214de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) \
215de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(PRIVATE_LDLIBS)
21606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendef
21706afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham
218369b3326f3ab67f64067d3dfacfa86587d6aecd1Elliott Hughesdefine $(combo_2nd_arch_prefix)transform-o-to-static-executable-inner
21906afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham$(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \
22006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--gc-sections \
22106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-o $@ \
22291fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
22391fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_STATIC_O)) \
22491fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
22506afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_LDFLAGS) \
22606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(PRIVATE_ALL_OBJECTS) \
2276cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman	-Wl,--whole-archive \
2286cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
2296cc0c334fc8add0d53121ee09993630d804e70fcChris Dearman	-Wl,--no-whole-archive \
23006afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES)))) \
23106afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--start-group \
23206afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
23306afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	$(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
2344c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	$(PRIVATE_TARGET_LIBATOMIC) \
235d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \
23606afc1c5ab9e07094832e790249586a7619d9539Raghu Gandham	-Wl,--end-group \
23791fd1231c3254bc9d0642e5a646b5657bdaedffaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O))
23806afc1c5ab9e07094832e790249586a7619d9539Raghu Gandhamendef
239