Android.mk revision e66190d2a97a713ae4b4786e60ca3d67ab8aa192
1LOCAL_PATH:= $(call my-dir)
2include $(CLEAR_VARS)
3
4ifeq ($(TARGET_ARCH),x86)
5    linker_begin_extension := c
6else
7    linker_begin_extension := S
8endif
9
10LOCAL_SRC_FILES:= \
11    arch/$(TARGET_ARCH)/begin.$(linker_begin_extension) \
12    debugger.cpp \
13    dlfcn.cpp \
14    linker.cpp \
15    linker_environ.cpp \
16    linker_format.cpp \
17    linker_phdr.cpp \
18    rt.cpp
19
20LOCAL_LDFLAGS := -shared
21
22LOCAL_CFLAGS += -fno-stack-protector \
23        -Wstrict-overflow=5 \
24        -fvisibility=hidden \
25        -Wall -Wextra -Werror
26
27# We need to access Bionic private headers in the linker...
28LOCAL_CFLAGS += -I$(LOCAL_PATH)/../libc/
29
30# ...one of which is <private/bionic_tls.h>, for which we
31# need HAVE_ARM_TLS_REGISTER.
32ifeq ($(TARGET_ARCH)-$(ARCH_ARM_HAVE_TLS_REGISTER),arm-true)
33    LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
34endif
35
36ifeq ($(TARGET_ARCH),arm)
37    LOCAL_CFLAGS += -DANDROID_ARM_LINKER
38endif
39
40ifeq ($(TARGET_ARCH),x86)
41    LOCAL_CFLAGS += -DANDROID_X86_LINKER
42endif
43
44ifeq ($(TARGET_ARCH),mips)
45    LOCAL_CFLAGS += -DANDROID_MIPS_LINKER
46endif
47
48LOCAL_MODULE:= linker
49LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
50
51LOCAL_STATIC_LIBRARIES := libc_nomalloc
52
53#LOCAL_FORCE_STATIC_EXECUTABLE := true # not necessary when not including BUILD_EXECUTABLE
54
55#
56# include $(BUILD_EXECUTABLE)
57#
58# Instead of including $(BUILD_EXECUTABLE), we execute the steps to create an executable by
59# hand, as we want to insert an extra step that is not supported by the build system, and
60# is probably specific the linker only, so there's no need to modify the build system for
61# the purpose.
62
63LOCAL_MODULE_CLASS := EXECUTABLES
64LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX)
65
66# we don't want crtbegin.o (because we have begin.o), so unset it
67# just for this module
68LOCAL_NO_CRT := true
69
70include $(BUILD_SYSTEM)/dynamic_binary.mk
71
72# See build/core/executable.mk
73$(linked_module): PRIVATE_TARGET_GLOBAL_LD_DIRS := $(TARGET_GLOBAL_LD_DIRS)
74$(linked_module): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(TARGET_GLOBAL_LDFLAGS)
75$(linked_module): PRIVATE_TARGET_FDO_LIB := $(TARGET_FDO_LIB)
76$(linked_module): PRIVATE_TARGET_LIBGCC := $(TARGET_LIBGCC)
77$(linked_module): PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_CRTBEGIN_DYNAMIC_O)
78$(linked_module): PRIVATE_TARGET_CRTBEGIN_STATIC_O := $(TARGET_CRTBEGIN_STATIC_O)
79$(linked_module): PRIVATE_TARGET_CRTEND_O := $(TARGET_CRTEND_O)
80$(linked_module): $(TARGET_CRTBEGIN_STATIC_O) $(all_objects) $(all_libraries) $(TARGET_CRTEND_O)
81	$(transform-o-to-static-executable)
82	@echo "target PrefixSymbols: $(PRIVATE_MODULE) ($@)"
83	$(hide) $(TARGET_OBJCOPY) --prefix-symbols=__dl_ $@
84
85#
86# end of BUILD_EXECUTABLE hack
87#
88