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