Skip to content

Instantly share code, notes, and snippets.

@vvb2060
Last active November 24, 2023 14:55
Show Gist options
  • Save vvb2060/56d5b8fda2553f36938b2b72b1390114 to your computer and use it in GitHub Desktop.
Save vvb2060/56d5b8fda2553f36938b2b72b1390114 to your computer and use it in GitHub Desktop.
NDK strip static library patch
build-binary.mk | 8 ++++++++
default-build-commands.mk | 10 +++++++++-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/build-binary.mk b/build-binary.mk
index 6241dcc..bdf7d20 100644
--- a/build-binary.mk
+++ b/build-binary.mk
@@ -596,11 +596,19 @@ $(LOCAL_BUILT_MODULE): PRIVATE_ABI := $(TARGET_ARCH_ABI)
$(LOCAL_BUILT_MODULE): PRIVATE_AR := $(TARGET_AR) $(ar_flags) $(TARGET_AR_FLAGS)
$(LOCAL_BUILT_MODULE): PRIVATE_AR_OBJECTS := $(ar_objects)
$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_STATIC_LIB := $(cmd-build-static-library)
+$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_STATIC_LIB_LD := $(cmd-build-static-library-ld)
+$(LOCAL_BUILT_MODULE): PRIVATE_OBJCOPY := $(TARGET_OBJCOPY)
+$(LOCAL_BUILT_MODULE): PRIVATE_OBJCOPY_MODE := $(LOCAL_OBJCOPY_MODE)
+$(LOCAL_BUILT_MODULE): PRIVATE_OBJCOPY_CMD := $(call cmd-objcopy, $(LOCAL_BUILT_MODULE))
$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
$(call host-echo-build-step,$(PRIVATE_ABI),StaticLibrary) "$(PRIVATE_NAME)"
$(hide) $(call host-rm,$@)
+ $(hide) $(PRIVATE_BUILD_STATIC_LIB_LD)
$(hide) $(PRIVATE_BUILD_STATIC_LIB)
+ifeq ($(strip $(LOCAL_STATIC_OBJCOPY)),true)
+ $(if $(filter none,$(PRIVATE_OBJCOPY_MODE)),,$(hide) $(PRIVATE_OBJCOPY_CMD))
+endif
ALL_STATIC_LIBRARIES += $(LOCAL_BUILT_MODULE)
diff --git a/default-build-commands.mk b/default-build-commands.mk
index 60ab955..b7f6276 100644
--- a/default-build-commands.mk
+++ b/default-build-commands.mk
@@ -78,12 +78,18 @@ $(PRIVATE_CXX) \
-o $(call host-path,$(LOCAL_BUILT_MODULE))
endef
+define cmd-build-static-library-ld
+$(PRIVATE_LD) -r $(PRIVATE_AR_OBJECTS) -o $(call host-path,$(TARGET_OUT)/$(LOCAL_MODULE).o)
+endef
+
define cmd-build-static-library
-$(PRIVATE_AR) $(call host-path,$(LOCAL_BUILT_MODULE)) $(PRIVATE_AR_OBJECTS)
+$(PRIVATE_AR) $(call host-path,$(LOCAL_BUILT_MODULE)) $(call host-path,$(TARGET_OUT)/$(LOCAL_MODULE).o)
endef
cmd-strip = $(PRIVATE_STRIP) $(PRIVATE_STRIP_MODE) $(call host-path,$1)
+cmd-objcopy = $(PRIVATE_OBJCOPY) $(PRIVATE_OBJCOPY_MODE) $(call host-path,$1)
+
# arm32 currently uses a linker script in place of libgcc to ensure that
# libunwind is linked in the correct order. --exclude-libs does not propagate to
# the contents of the linker script and can't be specified within the linker
@@ -169,6 +175,8 @@ TARGET_ARFLAGS := crsD
TARGET_STRIP = $(LLVM_TOOLCHAIN_PREFIX)llvm-strip$(HOST_EXEEXT)
+TARGET_OBJCOPY = $(LLVM_TOOLCHAIN_PREFIX)llvm-objcopy$(HOST_EXEEXT)
+
TARGET_OBJ_EXTENSION := .o
TARGET_LIB_EXTENSION := .a
TARGET_SONAME_EXTENSION := .so
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment