diff --git a/core/binary.mk b/core/binary.mk index ec6c553d2..152f19bb4 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1089,7 +1089,6 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_C_INCLUDES := $(my_c_includes) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_IMPORT_INCLUDES := $(import_includes) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LDFLAGS := $(my_ldflags) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LDLIBS := $(my_ldlibs) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_NO_CRT := $(strip $(LOCAL_NO_CRT) $(LOCAL_NO_CRT_$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH))) # this is really the way to get the files onto the command line instead # of using $^, because then LOCAL_ADDITIONAL_DEPENDENCIES doesn't work diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 31c92252c..6a82ba9a9 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -191,7 +191,6 @@ LOCAL_CLANG_CPPFLAGS_$(TARGET_ARCH):= LOCAL_C_INCLUDES_$(TARGET_ARCH):= LOCAL_ASFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_ASFLAGS_$(TARGET_ARCH):= -LOCAL_NO_CRT_$(TARGET_ARCH):= LOCAL_LDFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_LDFLAGS_$(TARGET_ARCH):= LOCAL_SHARED_LIBRARIES_$(TARGET_ARCH):= @@ -210,7 +209,6 @@ LOCAL_CLANG_CPPFLAGS_$(TARGET_2ND_ARCH):= LOCAL_C_INCLUDES_$(TARGET_2ND_ARCH):= LOCAL_ASFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_ASFLAGS_$(TARGET_2ND_ARCH):= -LOCAL_NO_CRT_$(TARGET_2ND_ARCH):= LOCAL_LDFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_LDFLAGS_$(TARGET_2ND_ARCH):= LOCAL_SHARED_LIBRARIES_$(TARGET_2ND_ARCH):= @@ -229,7 +227,6 @@ LOCAL_CLANG_CPPFLAGS_$(HOST_ARCH):= LOCAL_C_INCLUDES_$(HOST_ARCH):= LOCAL_ASFLAGS_$(HOST_ARCH):= LOCAL_CLANG_ASFLAGS_$(HOST_ARCH):= -LOCAL_NO_CRT_$(HOST_ARCH):= LOCAL_LDFLAGS_$(HOST_ARCH):= LOCAL_CLANG_LDFLAGS_$(HOST_ARCH):= LOCAL_SHARED_LIBRARIES_$(HOST_ARCH):= @@ -247,7 +244,6 @@ LOCAL_CLANG_CPPFLAGS_$(HOST_2ND_ARCH):= LOCAL_C_INCLUDES_$(HOST_2ND_ARCH):= LOCAL_ASFLAGS_$(HOST_2ND_ARCH):= LOCAL_CLANG_ASFLAGS_$(HOST_2ND_ARCH):= -LOCAL_NO_CRT_$(HOST_2ND_ARCH):= LOCAL_LDFLAGS_$(HOST_2ND_ARCH):= LOCAL_CLANG_LDFLAGS_$(HOST_2ND_ARCH):= LOCAL_SHARED_LIBRARIES_$(HOST_2ND_ARCH):= diff --git a/core/definitions.mk b/core/definitions.mk index 0a5bf5ce7..46c3aad35 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -831,7 +831,6 @@ define dump-module-variables @echo PRIVATE_ALL_STATIC_LIBRARIES=$(PRIVATE_ALL_STATIC_LIBRARIES); @echo PRIVATE_ALL_WHOLE_STATIC_LIBRARIES=$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES); @echo PRIVATE_ALL_OBJECTS=$(PRIVATE_ALL_OBJECTS); -@echo PRIVATE_NO_CRT=$(PRIVATE_NO_CRT); endef ########################################################### @@ -1442,7 +1441,7 @@ $(hide) $(PRIVATE_CXX) \ -Wl,--gc-sections \ $(if $(filter true,$(PRIVATE_CLANG)),-shared,-Wl$(comma)-shared) \ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \ - $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \ + $(PRIVATE_TARGET_CRTBEGIN_SO_O) \ $(PRIVATE_ALL_OBJECTS) \ -Wl,--whole-archive \ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \ @@ -1458,7 +1457,7 @@ $(hide) $(PRIVATE_CXX) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ $(PRIVATE_LDFLAGS) \ - $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O)) \ + $(PRIVATE_TARGET_CRTEND_SO_O) \ $(PRIVATE_LDLIBS) endef @@ -1515,7 +1514,7 @@ $(hide) $(PRIVATE_CXX) -pie \ -Wl,-z,nocopyreloc \ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \ -Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \ - $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O)) \ + $(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O) \ $(PRIVATE_ALL_OBJECTS) \ -Wl,--whole-archive \ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \ @@ -1531,7 +1530,7 @@ $(hide) $(PRIVATE_CXX) -pie \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ $(PRIVATE_LDFLAGS) \ - $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) \ + $(PRIVATE_TARGET_CRTEND_O) \ $(PRIVATE_LDLIBS) endef @@ -1559,7 +1558,7 @@ $(hide) $(PRIVATE_CXX) \ -Wl,--gc-sections \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \ - $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_STATIC_O)) \ + $(PRIVATE_TARGET_CRTBEGIN_STATIC_O) \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ $(PRIVATE_LDFLAGS) \ $(PRIVATE_ALL_OBJECTS) \ @@ -1576,7 +1575,7 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(PRIVATE_TARGET_LIBGCC) \ -Wl,--end-group \ - $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) + $(PRIVATE_TARGET_CRTEND_O) endef define transform-o-to-static-executable diff --git a/core/executable_internal.mk b/core/executable_internal.mk index cdaf293d1..1d576a25c 100644 --- a/core/executable_internal.mk +++ b/core/executable_internal.mk @@ -43,9 +43,15 @@ else my_target_libgcc := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBGCC) endif my_target_libatomic := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBATOMIC) +ifeq ($(LOCAL_NO_CRT),true) +my_target_crtbegin_dynamic_o := +my_target_crtbegin_static_o := +my_target_crtend_o := +else my_target_crtbegin_dynamic_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_CRTBEGIN_DYNAMIC_O) my_target_crtbegin_static_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_CRTBEGIN_STATIC_O) my_target_crtend_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_CRTEND_O) +endif ifdef LOCAL_SDK_VERSION # Make sure the prebuilt NDK paths are put ahead of the TARGET_GLOBAL_LD_DIRS, # so we don't have race condition when the system libraries (such as libc, libstdc++) are also built in the tree. diff --git a/core/shared_library_internal.mk b/core/shared_library_internal.mk index e21cf5d25..150750261 100644 --- a/core/shared_library_internal.mk +++ b/core/shared_library_internal.mk @@ -48,8 +48,13 @@ else my_target_libgcc := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBGCC) endif my_target_libatomic := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBATOMIC) +ifeq ($(LOCAL_NO_CRT),true) +my_target_crtbegin_so_o := +my_target_crtend_so_o := +else my_target_crtbegin_so_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_CRTBEGIN_SO_O) my_target_crtend_so_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_CRTEND_SO_O) +endif ifdef LOCAL_SDK_VERSION # Make sure the prebuilt NDK paths are put ahead of the TARGET_GLOBAL_LD_DIRS, # so we don't have race condition when the system libraries (such as libc, libstdc++) are also built in the tree.