7ff07ad321
We don't need this on architectures other than aarch64, and we're still investigating why we need it on aarch64, but it doesn't seem unreasonable to have this flag set when linking the dynamic linker anyway; it's clearly the intended behavior. Change-Id: I4fa1b4ae543a818979934bf818eabac03bb9154f
87 lines
2.4 KiB
Makefile
87 lines
2.4 KiB
Makefile
LOCAL_PATH:= $(call my-dir)
|
|
include $(CLEAR_VARS)
|
|
|
|
ifeq ($(TARGET_ARCH),x86)
|
|
linker_begin_extension := c
|
|
else
|
|
linker_begin_extension := S
|
|
endif
|
|
|
|
LOCAL_SRC_FILES:= \
|
|
arch/$(TARGET_ARCH)/begin.$(linker_begin_extension) \
|
|
debugger.cpp \
|
|
dlfcn.cpp \
|
|
linker.cpp \
|
|
linker_environ.cpp \
|
|
linker_phdr.cpp \
|
|
rt.cpp \
|
|
|
|
LOCAL_LDFLAGS := \
|
|
-shared \
|
|
-Wl,-Bsymbolic \
|
|
-Wl,--exclude-libs,ALL \
|
|
|
|
LOCAL_CFLAGS += \
|
|
-fno-stack-protector \
|
|
-Wstrict-overflow=5 \
|
|
-fvisibility=hidden \
|
|
-Wall -Wextra -Werror \
|
|
|
|
LOCAL_CONLYFLAGS += \
|
|
-std=gnu99 \
|
|
|
|
LOCAL_CPPFLAGS += \
|
|
-std=gnu++11 \
|
|
|
|
# We need to access Bionic private headers in the linker.
|
|
LOCAL_CFLAGS += -I$(LOCAL_PATH)/../libc/
|
|
|
|
ifeq ($(TARGET_IS_64_BIT),true)
|
|
LOCAL_MODULE := linker64
|
|
else
|
|
LOCAL_MODULE := linker
|
|
endif
|
|
|
|
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
|
|
|
LOCAL_STATIC_LIBRARIES := libc_nomalloc
|
|
|
|
#LOCAL_FORCE_STATIC_EXECUTABLE := true # not necessary when not including BUILD_EXECUTABLE
|
|
|
|
#
|
|
# include $(BUILD_EXECUTABLE)
|
|
#
|
|
# Instead of including $(BUILD_EXECUTABLE), we execute the steps to create an executable by
|
|
# hand, as we want to insert an extra step that is not supported by the build system, and
|
|
# is probably specific the linker only, so there's no need to modify the build system for
|
|
# the purpose.
|
|
|
|
LOCAL_MODULE_CLASS := EXECUTABLES
|
|
LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX)
|
|
|
|
# we don't want crtbegin.o (because we have begin.o), so unset it
|
|
# just for this module
|
|
LOCAL_NO_CRT := true
|
|
|
|
# TODO: split out the asflags.
|
|
LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
|
|
|
|
include $(BUILD_SYSTEM)/dynamic_binary.mk
|
|
|
|
# See build/core/executable.mk
|
|
$(linked_module): PRIVATE_TARGET_GLOBAL_LD_DIRS := $(TARGET_GLOBAL_LD_DIRS)
|
|
$(linked_module): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(TARGET_GLOBAL_LDFLAGS)
|
|
$(linked_module): PRIVATE_TARGET_FDO_LIB := $(TARGET_FDO_LIB)
|
|
$(linked_module): PRIVATE_TARGET_LIBGCC := $(TARGET_LIBGCC)
|
|
$(linked_module): PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_CRTBEGIN_DYNAMIC_O)
|
|
$(linked_module): PRIVATE_TARGET_CRTBEGIN_STATIC_O := $(TARGET_CRTBEGIN_STATIC_O)
|
|
$(linked_module): PRIVATE_TARGET_CRTEND_O := $(TARGET_CRTEND_O)
|
|
$(linked_module): $(TARGET_CRTBEGIN_STATIC_O) $(all_objects) $(all_libraries) $(TARGET_CRTEND_O)
|
|
$(transform-o-to-static-executable)
|
|
@echo "target PrefixSymbols: $(PRIVATE_MODULE) ($@)"
|
|
$(hide) $(TARGET_OBJCOPY) --prefix-symbols=__dl_ $@
|
|
|
|
#
|
|
# end of BUILD_EXECUTABLE hack
|
|
#
|