18a206c81d
I still want to break linker_format out into its own library so we can reuse it for malloc debugging and so forth. (There are many similar pieces of code in bionic, but the linker's one seems to be the most complete/functional.) Change-Id: If3721853d28937c8e821ca1d23cf200e228a409a
77 lines
2 KiB
Makefile
77 lines
2 KiB
Makefile
LOCAL_PATH:= $(call my-dir)
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_SRC_FILES:= \
|
|
arch/$(TARGET_ARCH)/begin.S \
|
|
debugger.cpp \
|
|
dlfcn.cpp \
|
|
linker.cpp \
|
|
linker_environ.cpp \
|
|
linker_format.cpp \
|
|
linker_phdr.cpp \
|
|
rt.cpp
|
|
|
|
LOCAL_LDFLAGS := -shared
|
|
|
|
LOCAL_CFLAGS += -fno-stack-protector \
|
|
-Wstrict-overflow=5 \
|
|
-fvisibility=hidden \
|
|
-Wall -Wextra
|
|
|
|
# Set LINKER_DEBUG to either 1 or 0
|
|
#
|
|
LOCAL_CFLAGS += -DLINKER_DEBUG=0
|
|
|
|
# We need to access Bionic private headers in the linker...
|
|
LOCAL_CFLAGS += -I$(LOCAL_PATH)/../libc/
|
|
|
|
# ...one of which is <private/bionic_tls.h>, for which we
|
|
# need HAVE_ARM_TLS_REGISTER.
|
|
ifeq ($(TARGET_ARCH)-$(ARCH_ARM_HAVE_TLS_REGISTER),arm-true)
|
|
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
|
|
endif
|
|
|
|
ifeq ($(TARGET_ARCH),arm)
|
|
LOCAL_CFLAGS += -DANDROID_ARM_LINKER
|
|
endif
|
|
|
|
ifeq ($(TARGET_ARCH),x86)
|
|
LOCAL_CFLAGS += -DANDROID_X86_LINKER
|
|
endif
|
|
|
|
ifeq ($(TARGET_ARCH),mips)
|
|
LOCAL_CFLAGS += -DANDROID_MIPS_LINKER
|
|
endif
|
|
|
|
LOCAL_MODULE:= linker
|
|
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
|
|
|
|
include $(BUILD_SYSTEM)/dynamic_binary.mk
|
|
|
|
$(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
|
|
#
|