1 LOCAL_PATH:= $(call my-dir) 2 include $(CLEAR_VARS) 3 4 LOCAL_SRC_FILES:= \ 5 arch/$(TARGET_ARCH)/begin.S \ 6 linker.c \ 7 linker_environ.c \ 8 linker_format.c \ 9 rt.c \ 10 dlfcn.c \ 11 debugger.c 12 13 LOCAL_LDFLAGS := -shared 14 15 LOCAL_CFLAGS += -fno-stack-protector \ 16 -Wstrict-overflow=5 \ 17 -fvisibility=hidden 18 19 # Set LINKER_DEBUG to either 1 or 0 20 # 21 LOCAL_CFLAGS += -DLINKER_DEBUG=0 22 23 # we need to access the Bionic private header <bionic_tls.h> 24 # in the linker; duplicate the HAVE_ARM_TLS_REGISTER definition 25 # from the libc build 26 ifeq ($(TARGET_ARCH)-$(ARCH_ARM_HAVE_TLS_REGISTER),arm-true) 27 LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER 28 endif 29 LOCAL_CFLAGS += -I$(LOCAL_PATH)/../libc/private 30 31 ifeq ($(TARGET_ARCH),arm) 32 LOCAL_CFLAGS += -DANDROID_ARM_LINKER 33 else 34 ifeq ($(TARGET_ARCH),x86) 35 LOCAL_CFLAGS += -DANDROID_X86_LINKER 36 endif 37 endif 38 39 LOCAL_MODULE:= linker 40 41 LOCAL_STATIC_LIBRARIES := libc_nomalloc 42 43 #LOCAL_FORCE_STATIC_EXECUTABLE := true # not necessary when not including BUILD_EXECUTABLE 44 45 # 46 # include $(BUILD_EXECUTABLE) 47 # 48 # Instead of including $(BUILD_EXECUTABLE), we execute the steps to create an executable by 49 # hand, as we want to insert an extra step that is not supported by the build system, and 50 # is probably specific the linker only, so there's no need to modify the build system for 51 # the purpose. 52 53 LOCAL_MODULE_CLASS := EXECUTABLES 54 LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX) 55 56 # we don't want crtbegin.o (because we have begin.o), so unset it 57 # just for this module 58 LOCAL_NO_CRT := true 59 60 include $(BUILD_SYSTEM)/dynamic_binary.mk 61 62 $(linked_module): $(TARGET_CRTBEGIN_STATIC_O) $(all_objects) $(all_libraries) $(TARGET_CRTEND_O) 63 $(transform-o-to-static-executable) 64 @echo "target PrefixSymbols: $(PRIVATE_MODULE) ($@)" 65 $(hide) $(TARGET_OBJCOPY) --prefix-symbols=__dl_ $@ 66 67 # 68 # end of BUILD_EXECUTABLE hack 69 # 70