summaryrefslogtreecommitdiff
path: root/cross
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2023-02-23 21:31:42 +0800
committerPo Lu <luangruo@yahoo.com>2023-02-23 21:31:42 +0800
commit351813556da2dc04ae5cc639d5ddebdf8edf4f5e (patch)
treebc7329e93d9c48eb0bbeedeb45811613f578896a /cross
parentc0a39006a2ada0d0e034307e17742abe44220448 (diff)
downloademacs-351813556da2dc04ae5cc639d5ddebdf8edf4f5e.tar.gz
Fix ImageMagick build on Android
* INSTALL.android (-linux_arm_sources): * build-aux/ndk-build-helper-1.mk: (NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES)::(NDK_CXX_FLAG_$(LOCAL_MODULE)): * build-aux/ndk-build-helper-2.mk: (NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES)::(NDK_CXX_FLAG_$(LOCAL_MODULE)): * cross/ndk-build/ndk-build-shared-library.mk (objname)::($(call objname,$(LOCAL_MODULE),$(basename $(1))))::(ALL_OBJECT_FILES$(LOCAL_MODULE)): * cross/ndk-build/ndk-build-static-library.mk (objname)::($(call objname,$(LOCAL_MODULE),$(basename $(1))))::(ALL_OBJECT_FILES$(LOCAL_MODULE)): (ALL_SOURCE_FILES): Update ImageMagick build instructions and C++ module detection.
Diffstat (limited to 'cross')
-rw-r--r--cross/ndk-build/ndk-build-shared-library.mk27
-rw-r--r--cross/ndk-build/ndk-build-static-library.mk31
2 files changed, 38 insertions, 20 deletions
diff --git a/cross/ndk-build/ndk-build-shared-library.mk b/cross/ndk-build/ndk-build-shared-library.mk
index 3f1cec9c2dc..2209e94d359 100644
--- a/cross/ndk-build/ndk-build-shared-library.mk
+++ b/cross/ndk-build/ndk-build-shared-library.mk
@@ -28,8 +28,9 @@ eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
objname = $(1)-shared-$(subst /,_,$(2).o)
# LOCAL_SRC_FILES sometimes contains absolute file names. Filter them
-# out with this function.
-maybe-absolute = $(or $(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1))
+# out with this function. If $(2), this is a file relative to the
+# build directory.
+maybe-absolute = $(or $(and $(2),$(1)),$(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1))
# Here are the default flags to link shared libraries with.
NDK_SO_DEFAULT_LDFLAGS := -lc -lm
@@ -38,7 +39,7 @@ define single-object-target
ifeq (x$(suffix $(1)),x.c)
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(call LOCAL_C_ADDITIONAL_FLAGS,$(1))
else
@@ -50,14 +51,14 @@ $(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
else
ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),)
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE))
else
ifneq (x$(suffix $(1)),x.asm)
ifeq (x$(suffix $(1)),x.cc)
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
else
@@ -89,6 +90,13 @@ ALL_OBJECT_FILES$(LOCAL_MODULE) += $(call objname,$(LOCAL_MODULE),$(basename $(1
endef
+define single-neon-target
+
+# Define rules for the target.
+$$(eval $$(call single-object-target,$(patsubst %.neon,%,$(1)),))
+
+endef
+
# Make sure to not add a prefix to local includes that already specify
# $(LOCAL_PATH).
NDK_CFLAGS_$(LOCAL_MODULE) := $(addprefix -I,$(LOCAL_C_INCLUDES))
@@ -140,10 +148,13 @@ ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH))
# This defines all dependencies.
ALL_OBJECT_FILES$(LOCAL_MODULE) :=
-# Now filter out code that is only built on systems with neon.
-ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES))
+# Now filter out code that is built with neon. Define rules to build
+# those separately.
+NEON_SOURCE_FILES := $(filter %.neon,$(ALL_SOURCE_FILES))
+ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES))
-$(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source))))
+$(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source),)))
+$(foreach source,$(NEON_SOURCE_FILES),$(eval $(call single-neon-target,$(source))))
# Now define the rule to build the shared library. Shared libraries
# link with all of the archive files from the static libraries on
diff --git a/cross/ndk-build/ndk-build-static-library.mk b/cross/ndk-build/ndk-build-static-library.mk
index 3c68b902e6a..04aea49bffe 100644
--- a/cross/ndk-build/ndk-build-static-library.mk
+++ b/cross/ndk-build/ndk-build-static-library.mk
@@ -21,35 +21,32 @@
eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
objname = $(1)-static-$(subst /,_,$(2).o)
-
-# LOCAL_SRC_FILES sometimes contains absolute file names. Filter them
-# out with this function.
-maybe-absolute = $(or $(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1))
+maybe-absolute = $(or $(and $(2),$(1)),$(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1))
define single-object-target
ifeq (x$(suffix $(1)),x.c)
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(call LOCAL_C_ADDITIONAL_FLAGS,$(1))
else
ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp))
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
else
ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),)
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE))
else
ifneq (x$(suffix $(1)),x.asm)
ifeq (x$(suffix $(1)),x.cc)
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
else
@@ -67,7 +64,7 @@ ifeq ($(findstring x86,$(NDK_BUILD_ARCH)),)
$$(error Trying to build nasm file on non-Intel platform!)
else
-$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
+$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1),$(2))
$(NDK_BUILD_NASM) -o $$@ -i $(LOCAL_PATH) -i $$(dir $$<) $(NDK_ASFLAGS_$(LOCAL_MODULE)) $$<
endif
@@ -80,6 +77,13 @@ endif
ALL_OBJECT_FILES$(LOCAL_MODULE) += $(call objname,$(LOCAL_MODULE),$(basename $(1)))
endef
+define single-neon-target
+
+# Define rules for the target.
+$$(eval $$(call single-object-target,$(patsubst %.neon,%,$(1)),))
+
+endef
+
NDK_CFLAGS_$(LOCAL_MODULE) := $(addprefix -I,$(LOCAL_C_INCLUDES))
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)) $(and $(findstring clang,$(NDK_BUILD_CC)),$(LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH)))
@@ -122,13 +126,16 @@ include ndk-resolve.mk
# Then define rules to build all objects.
ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH))
-# Now filter out code that is only built on systems with neon.
-ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES))
+# Now filter out code that is built with neon. Define rules to build
+# those separately.
+NEON_SOURCE_FILES := $(filter %.neon,$(ALL_SOURCE_FILES))
+ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES))
# This defines all dependencies.
ALL_OBJECT_FILES$(LOCAL_MODULE) =
-$(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source))))
+$(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source),)))
+$(foreach source,$(NEON_SOURCE_FILES),$(eval $(call single-neon-target,$(source),)))
# Now define the rule to build the library.
$(LOCAL_MODULE_FILENAME): $(ALL_OBJECT_FILES$(LOCAL_MODULE))