1db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
2db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# Copyright (C) 2013 The Android Open Source Project
3db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
4db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# Licensed under the Apache License, Version 2.0 (the "License");
5db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# you may not use this file except in compliance with the License.
6db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# You may obtain a copy of the License at
7db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
8db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#      http://www.apache.org/licenses/LICENSE-2.0
9db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
10db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# Unless required by applicable law or agreed to in writing, software
11db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# distributed under the License is distributed on an "AS IS" BASIS,
12db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# See the License for the specific language governing permissions and
14db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# limitations under the License.
15db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
16db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
17db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# Configuration for Linux on ARM.
18db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# Included by combo/select.mk
19db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
20db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# You can set TARGET_ARCH_VARIANT to use an arch version other
21db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# than ARMv5TE. Each value should correspond to a file named
22db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# $(BUILD_COMBOS)/arch/<name>.mk which must contain
23db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# makefile variable definitions similar to the preprocessor
24db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# defines in build/core/combo/include/arch/<combo>/AndroidConfig.h. Their
25db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# purpose is to allow module Android.mk files to selectively compile
26db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# different versions of code based upon the funtionality and
27db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# instructions available in a given architecture version.
28db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
29db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# The blocks also define specific arch_variant_cflags, which
30db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# include defines, and compiler settings for the given architecture
31db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# version.
32db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
33db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengifeq ($(strip $(TARGET_ARCH_VARIANT)),)
34db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_ARCH_VARIANT := armv8
35db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendif
36db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
374de6fa4069407607813dfdd1993114c79194d337Ben Cheng# Decouple NDK library selection with platform compiler version
38ac6a9195cadc83a50cea376fc61268db6fc2f129Przemyslaw SzczepaniakTARGET_NDK_GCC_VERSION := 4.9
394de6fa4069407607813dfdd1993114c79194d337Ben Cheng
40db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengifeq ($(strip $(TARGET_GCC_VERSION_EXP)),)
41d033121431821c69e4c2faf5056bff3ee9c89974Ben ChengTARGET_GCC_VERSION := 4.9
42db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengelse
43db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP)
44db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendif
45db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
46db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT).mk
47db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengifeq ($(strip $(wildcard $(TARGET_ARCH_SPECIFIC_MAKEFILE))),)
48db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng$(error Unknown ARM architecture version: $(TARGET_ARCH_VARIANT))
49db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendif
50db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
51db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chenginclude $(TARGET_ARCH_SPECIFIC_MAKEFILE)
5225671e15cc1b199ca693f95864ab93a63909a526Dehao Cheninclude $(BUILD_SYSTEM)/combo/fdo.mk
53db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
54db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
55db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengifeq ($(strip $(TARGET_TOOLS_PREFIX)),)
56db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/aarch64/aarch64-linux-android-$(TARGET_GCC_VERSION)
57db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/aarch64-linux-android-
58db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendif
59db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
60db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_CC := $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
61db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_CXX := $(TARGET_TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX)
62db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_AR := $(TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
63db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
64db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
65a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher FerrisTARGET_READELF := $(TARGET_TOOLS_PREFIX)readelf$(HOST_EXECUTABLE_SUFFIX)
66db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
67db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
68db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
69db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
70c294779d7f6ddabbb6e009fa6dafa9d70ce4eb29Elliott HughesTARGET_GLOBAL_CFLAGS += \
71c294779d7f6ddabbb6e009fa6dafa9d70ce4eb29Elliott Hughes    -fno-strict-aliasing \
72c294779d7f6ddabbb6e009fa6dafa9d70ce4eb29Elliott Hughes
734f0eb7d50c5b472be762c581eeda580a9b8ede1bColin Crossandroid_config_h := $(call select-android-config-h,linux-arm64)
74db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
75db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_GLOBAL_CFLAGS += \
76d033121431821c69e4c2faf5056bff3ee9c89974Ben Cheng			-fstack-protector \
77db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-ffunction-sections \
78db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-fdata-sections \
79db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-funwind-tables \
80db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-Wa,--noexecstack \
81db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-Werror=format-security \
82db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-D_FORTIFY_SOURCE=2 \
83db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-fno-short-enums \
8448f239c94faca140427afc9aa06cf356b1b6b0deAndrew Hsieh			-no-canonical-prefixes \
8548f239c94faca140427afc9aa06cf356b1b6b0deAndrew Hsieh			-fno-canonical-system-headers \
86db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			$(arch_variant_cflags) \
87db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-include $(android_config_h) \
88db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-I $(dir $(android_config_h))
89db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
9018042e19608970ad930afe938dd0232a43fbd63bElliott Hughes# Help catch common 32/64-bit errors.
9118042e19608970ad930afe938dd0232a43fbd63bElliott HughesTARGET_GLOBAL_CFLAGS += \
9218042e19608970ad930afe938dd0232a43fbd63bElliott Hughes    -Werror=pointer-to-int-cast \
9318042e19608970ad930afe938dd0232a43fbd63bElliott Hughes    -Werror=int-to-pointer-cast \
948f47fc379e79becfc395c4f51b691aa7af75baeeColin Cross
95db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_GLOBAL_CFLAGS += -fno-strict-volatile-bitfields
96db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
97db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# This is to avoid the dreaded warning compiler message:
98db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#   note: the mangling of 'va_list' has changed in GCC 4.4
99db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
100db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# The fact that the mangling changed does not affect the NDK ABI
101db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# very fortunately (since none of the exposed APIs used va_list
102db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# in their exported C++ functions). Also, GCC 4.5 has already
103db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# removed the warning from the compiler.
104db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng#
105db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_GLOBAL_CFLAGS += -Wno-psabi
106db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
107db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_GLOBAL_LDFLAGS += \
108db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-Wl,-z,noexecstack \
10945545761d20e1eab324b8ce302afceb9c440c2a3Nick Kralevich			-Wl,-z,relro \
11045545761d20e1eab324b8ce302afceb9c440c2a3Nick Kralevich			-Wl,-z,now \
111db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-Wl,--warn-shared-textrel \
112db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-Wl,--fatal-warnings \
11350536c20affe5d720dd8164a39b82f8c78881911Andrew Hsieh			-Wl,-maarch64linux \
114db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			$(arch_variant_ldflags)
115db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
116db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden
117db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
118db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng# More flags/options can be added here
119db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_RELEASE_CFLAGS := \
120db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-DNDEBUG \
121db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-O2 -g \
122db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-Wstrict-aliasing=2 \
123db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-fgcse-after-reload \
124db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-frerun-cse-after-loop \
125db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng			-frename-registers
126db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
127db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chenglibc_root := bionic/libc
128db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chenglibm_root := bionic/libm
129db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chenglibstdc++_root := bionic/libstdc++
130db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
13171c36eb4513f2b02eb0d26e199a2303b43f82382Ben ChengTARGET_LIBGCC := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) \
13271c36eb4513f2b02eb0d26e199a2303b43f82382Ben Cheng	-print-libgcc-file-name)
1334c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew HsiehTARGET_LIBATOMIC := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) \
1344c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	-print-file-name=libatomic.a)
135db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
136dddb566eba8cd666b6f3b70067e77acb4e1656deElliott HughesKERNEL_HEADERS_COMMON := $(libc_root)/kernel/uapi
137dddb566eba8cd666b6f3b70067e77acb4e1656deElliott HughesKERNEL_HEADERS_ARCH   := $(libc_root)/kernel/uapi/asm-$(TARGET_ARCH)
13826990f55739e481662a850b2be3f23230d7df39eElliott HughesKERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH)
139db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
140db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_C_INCLUDES := \
1414f0eb7d50c5b472be762c581eeda580a9b8ede1bColin Cross	$(libc_root)/arch-arm64/include \
142db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(libc_root)/include \
143db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(libstdc++_root)/include \
144db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(KERNEL_HEADERS) \
145db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(libm_root)/include \
1464f0eb7d50c5b472be762c581eeda580a9b8ede1bColin Cross	$(libm_root)/include/arm64 \
147db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
14871c36eb4513f2b02eb0d26e199a2303b43f82382Ben ChengTARGET_CRTBEGIN_STATIC_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
14971c36eb4513f2b02eb0d26e199a2303b43f82382Ben ChengTARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
15071c36eb4513f2b02eb0d26e199a2303b43f82382Ben ChengTARGET_CRTEND_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
151db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
15271c36eb4513f2b02eb0d26e199a2303b43f82382Ben ChengTARGET_CRTBEGIN_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
15371c36eb4513f2b02eb0d26e199a2303b43f82382Ben ChengTARGET_CRTEND_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
154db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
155db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_STRIP_MODULE:=true
156db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
157db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
158db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
159db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben ChengTARGET_CUSTOM_LD_COMMAND := true
160db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
161db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengdefine transform-o-to-shared-lib-inner
162db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng$(hide) $(PRIVATE_CXX) \
163db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-nostdlib -Wl,-soname,$(notdir $@) \
164d033121431821c69e4c2faf5056bff3ee9c89974Ben Cheng	-Wl,--gc-sections \
16504cf31597021af3cd045dd9c50d94a87d0394023Dan Albert	$(if $(filter true,$(PRIVATE_CLANG)),-shared,-Wl,-shared) \
166db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
167db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \
168db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_ALL_OBJECTS) \
169db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--whole-archive \
170db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
171db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--no-whole-archive \
172db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
173db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
174db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
175db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \
176db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
177db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-o $@ \
178db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
179db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_LDFLAGS) \
1804c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	$(PRIVATE_TARGET_LIBATOMIC) \
181d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \
182de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O)) \
183de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(PRIVATE_LDLIBS)
184db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendef
185db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
186db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengdefine transform-o-to-executable-inner
187908ab54fda172baa9a646259fafd8af35290f0a6Dan Albert$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \
18898b8fdd975e966b881d744f8013fbeb892be45b1Ben Cheng	-Wl,-dynamic-linker,/system/bin/linker64 \
189d033121431821c69e4c2faf5056bff3ee9c89974Ben Cheng	-Wl,--gc-sections \
190db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,-z,nocopyreloc \
191db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
1929fb3526648a08d8d8c1e6325aeb3c6500bcd44c2Ying Wang	-Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \
193db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O)) \
194db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_ALL_OBJECTS) \
195db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--whole-archive \
196db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
197db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--no-whole-archive \
198db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
199db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
200db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
201db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \
202db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
203db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-o $@ \
204db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
205db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_LDFLAGS) \
2064c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	$(PRIVATE_TARGET_LIBATOMIC) \
207d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \
208de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) \
209de36cd72e8e5a154c1fedf63e1ea83af9d5288aaYing Wang	$(PRIVATE_LDLIBS)
210db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendef
211db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng
212db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengdefine transform-o-to-static-executable-inner
213e61dea99c3050d0c04188437d09a8e762f04cb03Ben Cheng$(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \
214d033121431821c69e4c2faf5056bff3ee9c89974Ben Cheng	-Wl,--gc-sections \
215db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-o $@ \
216db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
217db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_STATIC_O)) \
218db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
219db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_LDFLAGS) \
220db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(PRIVATE_ALL_OBJECTS) \
221db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--whole-archive \
222db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
223db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--no-whole-archive \
224db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES)))) \
225db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--start-group \
226db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
227db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
2284c952d72b7aca4801e0ee4070cf54e3de57b98b5Andrew Hsieh	$(PRIVATE_TARGET_LIBATOMIC) \
229d90de32951835818a12b5fbb29871722ec1a7b1dYing Wang	$(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \
230db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	-Wl,--end-group \
231db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Cheng	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O))
232db4fc200c47d37b73d21c71c8923e4a844f9fde0Ben Chengendef
233