Build statically linked version of dex2oat.
Change-Id: Icde39b770781095af7bd87ae6b907ad97a8a05da
diff --git a/build/Android.executable.mk b/build/Android.executable.mk
index 5ed94d5..fdb2be1 100644
--- a/build/Android.executable.mk
+++ b/build/Android.executable.mk
@@ -28,6 +28,7 @@
# $(5): target or host
# $(6): ndebug or debug
# $(7): value for LOCAL_MULTILIB (empty means default)
+# $(8): static or shared (empty means shared, applies only for host)
define build-art-executable
ifneq ($(5),target)
ifneq ($(5),host)
@@ -42,11 +43,12 @@
art_executable := $(1)
art_source := $(2)
- art_shared_libraries := $(3)
+ art_libraries := $(3)
art_c_includes := $(4)
art_target_or_host := $(5)
art_ndebug_or_debug := $(6)
art_multilib := $(7)
+ art_static_or_shared := $(8)
art_out_binary_name :=
include $(CLEAR_VARS)
@@ -54,7 +56,12 @@
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $$(art_source)
LOCAL_C_INCLUDES += $(ART_C_INCLUDES) art/runtime art/cmdline $$(art_c_includes)
- LOCAL_SHARED_LIBRARIES += $$(art_shared_libraries)
+
+ ifeq ($$(art_static_or_shared),static)
+ LOCAL_STATIC_LIBRARIES += $$(art_libraries)
+ else
+ LOCAL_SHARED_LIBRARIES += $$(art_libraries)
+ endif
ifeq ($$(art_ndebug_or_debug),ndebug)
LOCAL_MODULE := $$(art_executable)
@@ -62,6 +69,10 @@
LOCAL_MODULE := $$(art_executable)d
endif
+ ifeq ($$(art_static_or_shared),static)
+ LOCAL_MODULE := $(LOCAL_MODULE)s
+ endif
+
LOCAL_CFLAGS := $(ART_EXECUTABLES_CFLAGS)
# Mac OS linker doesn't understand --export-dynamic.
ifneq ($$(HOST_OS)-$$(art_target_or_host),darwin-host)
@@ -82,13 +93,26 @@
else
LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS)
endif
- LOCAL_LDLIBS += -lpthread -ldl
+ ifeq ($$(art_static_or_shared),static)
+ LOCAL_LDFLAGS += -static
+ # We need this because GC stress mode makes use of _Unwind_GetIP and _Unwind_Backtrace and
+ # the symbols are also defined in libgcc_eh.a(unwind-dw2.o)
+ # TODO: Having this is not ideal as it might obscure errors. Try to get rid of it.
+ LOCAL_LDFLAGS += -z muldefs
+ endif
+ LOCAL_LDLIBS += -lpthread -ldl -lrt
endif
+ # If dynamically linked add libart by default. Statically linked executables
+ # needs to specify it in art_libraries to ensure proper ordering.
ifeq ($$(art_ndebug_or_debug),ndebug)
- LOCAL_SHARED_LIBRARIES += libart
+ ifneq ($$(art_static_or_shared),static)
+ LOCAL_SHARED_LIBRARIES += libart
+ endif
else # debug
- LOCAL_SHARED_LIBRARIES += libartd
+ ifneq ($$(art_static_or_shared),static)
+ LOCAL_SHARED_LIBRARIES += libartd
+ endif
endif
LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk
@@ -143,11 +167,12 @@
# Clear out local variables now that we're done with them.
art_executable :=
art_source :=
- art_shared_libraries :=
+ art_libraries :=
art_c_includes :=
art_target_or_host :=
art_ndebug_or_debug :=
art_multilib :=
+ art_static_or_shared :=
art_out_binary_name :=
endef