From 54836c47c76f655a7e3d6cf28f0cf27b8d9f3cdd Mon Sep 17 00:00:00 2001 From: Po Lu Date: Tue, 24 Jan 2023 19:10:58 +0800 Subject: Enable libjpeg on Android * INSTALL.android: Update documentation. * build-aux/ndk-build-helper-1.mk: When building shared libraries, do not link libemacs.so with dependent archive files. * build-aux/ndk-build-helper-2.mk: Add whole archive dependencies as well. * configure.ac (HAVE_JPEG): Enable on Android. * cross/ndk-build/ndk-build-shared-library.mk: Link the shared object with archive file dependencies. * cross/ndk-build/ndk-build-static-library.mk: Build all code position-independently. * cross/ndk-build/ndk-resolve.mk: Separately resolve a names of archive and whole archive dependencies. * src/Makefile.in (JPEG_CFLAGS): New variable. (EMACS_CFLAGS): Add it. --- cross/ndk-build/ndk-build-shared-library.mk | 20 ++++++++++++------- cross/ndk-build/ndk-build-static-library.mk | 2 +- cross/ndk-build/ndk-resolve.mk | 31 ++++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 13 deletions(-) (limited to 'cross') diff --git a/cross/ndk-build/ndk-build-shared-library.mk b/cross/ndk-build/ndk-build-shared-library.mk index c4fb523a0c1..6a607049a9c 100644 --- a/cross/ndk-build/ndk-build-shared-library.mk +++ b/cross/ndk-build/ndk-build-shared-library.mk @@ -60,15 +60,11 @@ NDK_CFLAGS ::= -mthumb endif endif -LOCAL_MODULE_FILENAME := $(strip $(LOCAL_MODULE_FILENAME)) - -ifndef LOCAL_MODULE_FILENAME ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) LOCAL_MODULE_FILENAME := $(LOCAL_MODULE)_emacs else LOCAL_MODULE_FILENAME := lib$(LOCAL_MODULE)_emacs endif -endif # Since a shared library is being built, suffix the library with # _emacs. Otherwise, libraries already on the system will be found @@ -89,6 +85,16 @@ ALL_OBJECT_FILES$(LOCAL_MODULE) = $(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source)))) -# Now define the rule to build the shared library. -$(LOCAL_MODULE_FILENAME): $(ALL_OBJECT_FILES$(LOCAL_MODULE)) - $(NDK_BUILD_CC) $^ -o $@ -shared $(NDK_LDFLAGS$(LOCAL_MODULE)) +# Now define the rule to build the shared library. Shared libraries +# link with all of the archive files from the static libraries on +# which they depend. + +define define-module-rule +$(LOCAL_MODULE_FILENAME): $(ALL_OBJECT_FILES$(LOCAL_MODULE)) $(NDK_LOCAL_A_NAMES_$(LOCAL_MODULE)) $(NDK_WHOLE_A_NAMES_$(LOCAL_MODULE)) + $(NDK_BUILD_CC) $(1) $(2) -o $$@ -shared $(NDK_LDFLAGS$(LOCAL_MODULE)) +endef + +NDK_WHOLE_ARCHIVE_PREFIX = -Wl,--whole-archive +NDK_WHOLE_ARCHIVE_SUFFIX = -Wl,--no-whole-archive + +$(eval $(call define-module-rule,$(ALL_OBJECT_FILES$(LOCAL_MODULE)) $(NDK_LOCAL_A_NAMES_$(LOCAL_MODULE)),$(and $(strip $(NDK_WHOLE_A_NAMES_$(LOCAL_MODULE))),$(NDK_WHOLE_ARCHIVE_PREFIX) $(NDK_WHOLE_A_NAMES_$(LOCAL_MODULE)) $(NDK_WHOLE_ARCHIVE_SUFFIX)))) diff --git a/cross/ndk-build/ndk-build-static-library.mk b/cross/ndk-build/ndk-build-static-library.mk index 2eddb215429..2e4893a997b 100644 --- a/cross/ndk-build/ndk-build-static-library.mk +++ b/cross/ndk-build/ndk-build-static-library.mk @@ -44,7 +44,7 @@ ALL_OBJECT_FILES$(LOCAL_MODULE) += $(call objname,$(LOCAL_MODULE),$(basename $(1 endef NDK_CFLAGS_$(LOCAL_MODULE) := $(addprefix -I,$(LOCAL_C_INCLUDES)) -NDK_CFLAGS_$(LOCAL_MODULE) += -iquote $(LOCAL_PATH) $(LOCAL_EXPORT_CFLAGS) $(LOCAL_CFLAGS) $(LOCAL_CFLAGS_$(NDK_BUILD_ARCH)) +NDK_CFLAGS_$(LOCAL_MODULE) += -fPIC -iquote $(LOCAL_PATH) $(LOCAL_EXPORT_CFLAGS) $(LOCAL_CFLAGS) $(LOCAL_CFLAGS_$(NDK_BUILD_ARCH)) NDK_ASFLAGS_$(LOCAL_MODULE) := $(LOCAL_ASFLAGS) $(LOCAL_ASFLAGS_$(NDK_BUILD_ARCH)) NDK_LDFLAGS_$(LOCAL_MODULE) := $(LOCAL_LDLIBS) $(LOCAL_LDFLAGS) ALL_OBJECT_FILES$(LOCAL_MODULE) := diff --git a/cross/ndk-build/ndk-resolve.mk b/cross/ndk-build/ndk-resolve.mk index 29dd5c9908d..7fe807e35cc 100644 --- a/cross/ndk-build/ndk-resolve.mk +++ b/cross/ndk-build/ndk-resolve.mk @@ -22,9 +22,12 @@ # Save information. NDK_LOCAL_PATH_$(LOCAL_MODULE) := $(LOCAL_PATH) NDK_LOCAL_STATIC_LIBRARIES_$(LOCAL_MODULE) := $(LOCAL_STATIC_LIBRARIES) $(LOCAL_WHOLE_STATIC_LIBRARIES) +NDK_LOCAL_WHOLE_LIBRARIES_$(LOCAL_MODULE) := $(LOCAL_WHOLE_STATIC_LIBRARIES) NDK_LOCAL_SHARED_LIBRARIES_$(LOCAL_MODULE) := $(LOCAL_SHARED_LIBRARIES) NDK_LOCAL_EXPORT_CFLAGS_$(LOCAL_MODULE) := $(LOCAL_EXPORT_CFLAGS) NDK_LOCAL_EXPORT_C_INCLUDES_$(LOCAL_MODULE) := $(LOCAL_EXPORT_C_INCLUDES) +NDK_LOCAL_A_NAMES_$(LOCAL_MODULE) := +NDK_WHOLE_A_NAMES_$(LOCAL_MODULE) := # List of all dependencies resolved for this module thus far. # Used to avoid infinite recursion. @@ -33,15 +36,33 @@ NDK_RESOLVED_$(LOCAL_MODULE) := define ndk-resolve ifeq ($(patsubst $(1),,$(NDK_RESOLVED$(LOCAL_MODULE))),$(NDK_RESOLVED$(LOCAL_MODULE))) -NDK_RESOLVED$(LOCAL_MODULE) += $(1) +NDK_RESOLVED_$(LOCAL_MODULE) += $(1) NDK_CFLAGS_$(LOCAL_MODULE) += $(NDK_LOCAL_EXPORT_CFLAGS_$(1)) NDK_CFLAGS_$(LOCAL_MODULE) += $(addprefix -I,$(NDK_LOCAL_EXPORT_C_INCLUDES_$(1))) -$$(foreach module,$$(NDK_LOCAL_STATIC_LIBRARIES_$(1)),$$(eval $$(call ndk-resolve,$$(module)))) -$$(foreach module,$$(NDK_LOCAL_SHARED_LIBRARIES_$(1)),$$(eval $$(call ndk-resolve,$$(module)))) +ifneq ($(2),) +ifneq ($(findstring lib,$(1)),) +NDK_LOCAL_A_NAMES_$(LOCAL_MODULE) += $(1).a +else +NDK_LOCAL_A_NAMES_$(LOCAL_MODULE) += lib$(1).a +endif +endif + +ifneq ($(3),) +ifneq ($(findstring lib,$(1)),) +NDK_WHOLE_A_NAMES_$(LOCAL_MODULE) += $(1).a +else +NDK_WHOLE_A_NAMES_$(LOCAL_MODULE) += lib$(1).a +endif +endif + +$$(foreach module,$$(NDK_LOCAL_STATIC_LIBRARIES_$(1)),$$(eval $$(call ndk-resolve,$$(module),1,))) +$$(foreach module,$$(NDK_LOCAL_SHARED_LIBRARIES_$(1)),$$(eval $$(call ndk-resolve,$$(module),,))) +$$(foreach module,$$(NDK_LOCAL_WHOLE_LIBRARIES_$(1)),$$(eval $$(call ndk-resolve,$$(module),,1))) endif endef -$(foreach module,$(LOCAL_SHARED_LIBRARIES),$(eval $(call ndk-resolve,$(module)))) -$(foreach module,$(LOCAL_STATIC_LIBRARIES) $(LOCAL_WHOLE_STATIC_LIBRARIES),$(eval $(call ndk-resolve,$(module)))) +$(foreach module,$(LOCAL_SHARED_LIBRARIES),$(eval $(call ndk-resolve,$(module),,))) +$(foreach module,$(LOCAL_STATIC_LIBRARIES),$(eval $(call ndk-resolve,$(module),1,))) +$(foreach module,$(LOCAL_WHOLE_STATIC_LIBRARIES), $(eval $(call ndk-resolve,$(module),,1))) -- cgit v1.2.3