aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2023-02-22 21:20:30 +0800
committerPo Lu2023-02-22 21:20:30 +0800
commit767da53fa3a15ed448c14aa4dc468f187a6e2df9 (patch)
tree2fc5be35e15985a9f62ed68431199c87d920b21f
parentf3b6cbb6755a1c1587b8a6c3165732c5f0187397 (diff)
downloademacs-767da53fa3a15ed448c14aa4dc468f187a6e2df9.tar.gz
emacs-767da53fa3a15ed448c14aa4dc468f187a6e2df9.zip
Update Android port
ImageMagick now builds but does not link yet some of the time. * INSTALL.android: Document ImageMagick and caveats. * build-aux/ndk-build-helper-1.mk (NDK_SO_NAMES): * build-aux/ndk-build-helper-2.mk (NDK_A_NAMES): * build-aux/ndk-build-helper.mk (TARGET_ARCH_ABI): Define architecture and don't respect explicitly specified library names. * configure.ac: Enable ImageMagick and lcms2 on Android. * 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)))): (NDK_CFLAGS, ALL_SOURCE_FILES): Handle sources files which start with $(LOCAL_PATH). * cross/ndk-build/ndk-clear-vars.mk: Don't undefine; clear variables instead. * m4/ndk-build.m4 (ndk_SEARCH_MODULE): Redirect make stderr to config.log.xf64
-rw-r--r--INSTALL.android62
-rw-r--r--build-aux/ndk-build-helper-1.mk4
-rw-r--r--build-aux/ndk-build-helper-2.mk5
-rw-r--r--build-aux/ndk-build-helper.mk3
-rw-r--r--configure.ac24
-rw-r--r--cross/ndk-build/ndk-build-shared-library.mk15
-rw-r--r--cross/ndk-build/ndk-build-static-library.mk20
-rw-r--r--cross/ndk-build/ndk-clear-vars.mk64
-rw-r--r--m4/ndk-build.m424
9 files changed, 145 insertions, 76 deletions
diff --git a/INSTALL.android b/INSTALL.android
index 1b362fbb583..b3a29d511db 100644
--- a/INSTALL.android
+++ b/INSTALL.android
@@ -209,8 +209,8 @@ themselves:
209 its Android.mk includes $(BUILD_SHARED_LIBRARY), then copy 209 its Android.mk includes $(BUILD_SHARED_LIBRARY), then copy
210 android/jansson_config.h to android/jansson_private_config.h.) 210 android/jansson_config.h to android/jansson_private_config.h.)
211 211
212And Emacs developers have ported the following dependencies to arm64 212Emacs developers have ported the following dependencies to ARM Android
213Android systems: 213systems:
214 214
215 gnutls, gmp - https://sourceforge.net/projects/android-ports-for-gnu-emacs 215 gnutls, gmp - https://sourceforge.net/projects/android-ports-for-gnu-emacs
216 (Please see the section GNUTLS near the end of this file.) 216 (Please see the section GNUTLS near the end of this file.)
@@ -219,6 +219,12 @@ Android systems:
219 tree-sitter - https://sourceforge.net/projects/android-ports-for-gnu-emacs 219 tree-sitter - https://sourceforge.net/projects/android-ports-for-gnu-emacs
220 (Please see the section TREE-SITTER near the end of this file.) 220 (Please see the section TREE-SITTER near the end of this file.)
221 221
222And other developers have ported the following dependencies to Android
223systems:
224
225 ImageMagick, lcms2 - https://github.com/MolotovCherry/Android-ImageMagick7
226 (Please see the section IMAGEMAGICK near the end of this file.)
227
222We anticipate that most untested non-trivial ndk-build dependencies 228We anticipate that most untested non-trivial ndk-build dependencies
223will need adjustments in Emacs to work, as the Emacs build system 229will need adjustments in Emacs to work, as the Emacs build system
224which emulates ndk-build is in an extremely early state. 230which emulates ndk-build is in an extremely early state.
@@ -590,6 +596,14 @@ the following tar archive in that site:
590 596
591and add the resulting folder to ``--with-ndk-build''. 597and add the resulting folder to ``--with-ndk-build''.
592 598
599IMAGEMAGICK
600
601There is a third party port of ImageMagick to Android. Unfortunately,
602the port also uses its own patched versions of libpng, libjpeg,
603libtiff and libwebp, which conflict with those used by Emacs. Its
604Makefiles were also written for MS Windows, so you must also apply the
605patch at the end of this file.
606
593 607
594 608
595This file is part of GNU Emacs. 609This file is part of GNU Emacs.
@@ -835,3 +849,47 @@ index e82f3d5..be3a3c4 100644
835 849
836 linux_x86_sources := \ 850 linux_x86_sources := \
837 linux-x86/crypto/aes/aes-586.S\ 851 linux-x86/crypto/aes/aes-586.S\
852
853PATCH FOR IMAGEMAGICK
854
855diff --git a/make/libmagickwand-7.mk b/make/libmagickwand-7.mk
856index 7be2fb6..70a2cee 100644
857--- a/make/libmagickwand-7.mk
858+++ b/make/libmagickwand-7.mk
859@@ -14,7 +14,7 @@ LOCAL_C_INCLUDES := \
860
861 # always ignored in static builds
862 ifneq ($(STATIC_BUILD),true)
863- LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lz
864+ LOCAL_LDLIBS := -llog -lz
865 endif
866
867 LOCAL_SRC_FILES := \
868@@ -54,6 +54,27 @@ ifeq ($(OPENCL_BUILD),true)
869 LOCAL_SHARED_LIBRARIES += libopencl
870 endif
871
872+ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
873+ LOCAL_EXPORT_C_INCLUDES += $(IMAGE_MAGICK)/configs/arm64
874+ LOCAL_C_INCLUDES += $(IMAGE_MAGICK)/configs/arm64
875+else ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
876+ LOCAL_EXPORT_C_INCLUDES += $(IMAGE_MAGICK)/configs/arm
877+ LOCAL_C_INCLUDES += $(IMAGE_MAGICK)/configs/arm
878+else ifeq ($(TARGET_ARCH_ABI),x86)
879+ LOCAL_EXPORT_C_INCLUDES += $(IMAGE_MAGICK)/configs/x86
880+ LOCAL_C_INCLUDES += $(IMAGE_MAGICK)/configs/x86
881+else ifeq ($(TARGET_ARCH_ABI),x86_64)
882+ LOCAL_EXPORT_C_INCLUDES += $(IMAGE_MAGICK)/configs/x86-64
883+ LOCAL_C_INCLUDES += $(IMAGE_MAGICK)/configs/x86-64
884+
885+ ifneq ($(STATIC_BUILD),true)
886+ LOCAL_LDFLAGS += -latomic
887+ endif
888+
889+endif
890+
891+LOCAL_EXPORT_C_INCLUDES += $(IMAGE_MAGICK)
892+
893 ifeq ($(BUILD_MAGICKWAND),true)
894 ifeq ($(STATIC_BUILD),true)
895 LOCAL_STATIC_LIBRARIES := \
diff --git a/build-aux/ndk-build-helper-1.mk b/build-aux/ndk-build-helper-1.mk
index 898edf3a137..04acecb5b29 100644
--- a/build-aux/ndk-build-helper-1.mk
+++ b/build-aux/ndk-build-helper-1.mk
@@ -36,15 +36,11 @@ $(info Building $(build_kind))
36$(info $(LOCAL_MODULE)) 36$(info $(LOCAL_MODULE))
37$(info $(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI)))) 37$(info $(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI))))
38 38
39ifeq ($(LOCAL_MODULE_FILENAME),)
40ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) 39ifeq ($(findstring lib,$(LOCAL_MODULE)),lib)
41NDK_SO_NAMES = $(LOCAL_MODULE)_emacs.so 40NDK_SO_NAMES = $(LOCAL_MODULE)_emacs.so
42else 41else
43NDK_SO_NAMES = lib$(LOCAL_MODULE)_emacs.so 42NDK_SO_NAMES = lib$(LOCAL_MODULE)_emacs.so
44endif 43endif
45else
46NDK_SO_NAMES = $(LOCAL_MODULE_FILENAME).so
47endif
48 44
49define add-so-name-1 45define add-so-name-1
50# Now recurse over this module's dependencies. 46# Now recurse over this module's dependencies.
diff --git a/build-aux/ndk-build-helper-2.mk b/build-aux/ndk-build-helper-2.mk
index 6be7f268fe7..59f77106784 100644
--- a/build-aux/ndk-build-helper-2.mk
+++ b/build-aux/ndk-build-helper-2.mk
@@ -30,16 +30,11 @@ $(info Building $(build_kind))
30$(info $(LOCAL_MODULE)) 30$(info $(LOCAL_MODULE))
31$(info $(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI)))) 31$(info $(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI))))
32 32
33ifeq ($(LOCAL_MODULE_FILENAME),)
34
35ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) 33ifeq ($(findstring lib,$(LOCAL_MODULE)),lib)
36NDK_A_NAMES = $(LOCAL_MODULE).a 34NDK_A_NAMES = $(LOCAL_MODULE).a
37else 35else
38NDK_A_NAMES = lib$(LOCAL_MODULE).a 36NDK_A_NAMES = lib$(LOCAL_MODULE).a
39endif 37endif
40else
41NDK_A_NAMES = $(LOCAL_MODULE_FILENAME).a
42endif
43 38
44define add-a-name 39define add-a-name
45ifeq ($(findstring lib,$(1)),lib) 40ifeq ($(findstring lib,$(1)),lib)
diff --git a/build-aux/ndk-build-helper.mk b/build-aux/ndk-build-helper.mk
index 886459b1378..fe8a6a5119c 100644
--- a/build-aux/ndk-build-helper.mk
+++ b/build-aux/ndk-build-helper.mk
@@ -21,6 +21,9 @@
21# See the text under ``NDK BUILD SYSTEM IMPLEMENTATION'' in 21# See the text under ``NDK BUILD SYSTEM IMPLEMENTATION'' in
22# INSTALL.android for more details. 22# INSTALL.android for more details.
23 23
24# TARGET_ARCH_ABI is the ABI that is being built for.
25TARGET_ARCH_ABI := $(EMACS_ABI)
26
24# NDK_LAST_MAKEFILE is the last Makefile that was included. 27# NDK_LAST_MAKEFILE is the last Makefile that was included.
25NDK_LAST_MAKEFILE = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST))) 28NDK_LAST_MAKEFILE = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST)))
26 29
diff --git a/configure.ac b/configure.ac
index 4aa8945b8ba..715d8790026 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1078,6 +1078,8 @@ package will likely install on older systems but crash on startup.])
1078 passthrough="$passthrough --with-selinux=$with_selinux" 1078 passthrough="$passthrough --with-selinux=$with_selinux"
1079 passthrough="$passthrough --with-modules=$with_modules" 1079 passthrough="$passthrough --with-modules=$with_modules"
1080 passthrough="$passthrough --with-tree-sitter=$with_tree_sitter" 1080 passthrough="$passthrough --with-tree-sitter=$with_tree_sitter"
1081 passthrough="$passthrough --with-imagemagick=$with_imagemagick"
1082 passthrough="$passthrough --with-lcms2=$with_lcms2"
1081 1083
1082 AS_IF([XCONFIGURE=android ANDROID_CC="$ANDROID_CC" \ 1084 AS_IF([XCONFIGURE=android ANDROID_CC="$ANDROID_CC" \
1083 ANDROID_SDK="$android_sdk" android_abi=$android_abi \ 1085 ANDROID_SDK="$android_sdk" android_abi=$android_abi \
@@ -1152,13 +1154,13 @@ if test "$ANDROID" = "yes"; then
1152 with_selinux=no 1154 with_selinux=no
1153 with_modules=no 1155 with_modules=no
1154 with_tree_sitter=no 1156 with_tree_sitter=no
1157 with_imagemagick=no
1158 with_lcms2=no
1155 fi 1159 fi
1156 1160
1157 with_rsvg=no 1161 with_rsvg=no
1158 with_lcms2=no
1159 with_libsystemd=no 1162 with_libsystemd=no
1160 with_cairo=no 1163 with_cairo=no
1161 with_imagemagick=no
1162 with_xft=no 1164 with_xft=no
1163 with_harfbuzz=no 1165 with_harfbuzz=no
1164 with_libotf=no 1166 with_libotf=no
@@ -3430,7 +3432,8 @@ AC_SUBST([SQLITE3_CFLAGS])
3430 3432
3431HAVE_IMAGEMAGICK=no 3433HAVE_IMAGEMAGICK=no
3432if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}" = "yes" || \ 3434if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}" = "yes" || \
3433 test "${HAVE_BE_APP}" = "yes" || test "${window_system}" = "pgtk"; then 3435 test "${HAVE_BE_APP}" = "yes" || test "${window_system}" = "pgtk" || \
3436 test "${REALLY_ANDROID}" = "yes"; then
3434 if test "${with_imagemagick}" != "no"; then 3437 if test "${with_imagemagick}" != "no"; then
3435 if test -n "$BREW"; then 3438 if test -n "$BREW"; then
3436 # Homebrew doesn't link ImageMagick 6 by default, so make sure 3439 # Homebrew doesn't link ImageMagick 6 by default, so make sure
@@ -3453,14 +3456,23 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}"
3453 OLD_LIBS=$LIBS 3456 OLD_LIBS=$LIBS
3454 CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS" 3457 CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS"
3455 LIBS="$IMAGEMAGICK_LIBS $LIBS" 3458 LIBS="$IMAGEMAGICK_LIBS $LIBS"
3456 AC_CHECK_FUNCS([MagickRelinquishMemory MagickExportImagePixels \ 3459 if test "$REALLY_ANDROID" != "yes"; then
3457 MagickMergeImageLayers MagickAutoOrientImage]) 3460 AC_CHECK_FUNCS([MagickRelinquishMemory MagickExportImagePixels \
3461 MagickMergeImageLayers MagickAutoOrientImage])
3462 else
3463 # AC_CHECK_FUNCS doesn't work for Android dependencies because
3464 # they are built alongside Emacs.
3465 AC_CHECK_DECLS([MagickRelinquishMemory,MagickExportImagePixels,
3466MagickMergeImageLayers,MagickAutoOrientImage],
3467 [], [], [#include <MagickWand/MagickWand.h>])
3468 fi
3458 CFLAGS=$OLD_CFLAGS 3469 CFLAGS=$OLD_CFLAGS
3459 LIBS=$OLD_LIBS 3470 LIBS=$OLD_LIBS
3460 # Check that ImageMagick links. It does not link on Fedora 25 3471 # Check that ImageMagick links. It does not link on Fedora 25
3461 # with './configure CC=clang', as pkg-config outputs flags like 3472 # with './configure CC=clang', as pkg-config outputs flags like
3462 # -lomp that work for GCC but not Clang. 3473 # -lomp that work for GCC but not Clang.
3463 if test "$ac_cv_func_MagickRelinquishMemory" != yes; then 3474 if test "$ac_cv_func_MagickRelinquishMemory" != yes \
3475 && test "$REALLY_ANDROID" != "yes"; then
3464 HAVE_IMAGEMAGICK=no 3476 HAVE_IMAGEMAGICK=no
3465 fi 3477 fi
3466 fi 3478 fi
diff --git a/cross/ndk-build/ndk-build-shared-library.mk b/cross/ndk-build/ndk-build-shared-library.mk
index 44d5bbb1991..6d86bdb7e8c 100644
--- a/cross/ndk-build/ndk-build-shared-library.mk
+++ b/cross/ndk-build/ndk-build-shared-library.mk
@@ -27,6 +27,10 @@ eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
27# same name but of different types. 27# same name but of different types.
28objname = $(1)-shared-$(subst /,_,$(2).o) 28objname = $(1)-shared-$(subst /,_,$(2).o)
29 29
30# LOCAL_SRC_FILES sometimes contains absolute file names. Filter them
31# out with this function.
32maybe-absolute = $(or $(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1))
33
30# Here are the default flags to link shared libraries with. 34# Here are the default flags to link shared libraries with.
31NDK_SO_DEFAULT_LDFLAGS := -lc -lm 35NDK_SO_DEFAULT_LDFLAGS := -lc -lm
32 36
@@ -34,26 +38,26 @@ define single-object-target
34 38
35ifeq (x$(suffix $(1)),x.c) 39ifeq (x$(suffix $(1)),x.c)
36 40
37$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 41$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
38 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(call LOCAL_C_ADDITIONAL_FLAGS,$(1)) 42 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(call LOCAL_C_ADDITIONAL_FLAGS,$(1))
39 43
40else 44else
41ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp)) 45ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp))
42 46
43$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 47$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
44 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(NDK_CXXFLAGS_$(LOCAL_MODULE)) 48 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
45 49
46else 50else
47ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),) 51ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),)
48 52
49$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 53$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
50 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE)) 54 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE))
51 55
52else 56else
53ifneq (x$(suffix $(1)),x.asm) 57ifneq (x$(suffix $(1)),x.asm)
54ifeq (x$(suffix $(1)),x.cc) 58ifeq (x$(suffix $(1)),x.cc)
55 59
56$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 60$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
57 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(NDK_CXXFLAGS_$(LOCAL_MODULE)) 61 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_BUILD_CFLAGS) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
58 62
59else 63else
@@ -137,9 +141,8 @@ ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH))
137ALL_OBJECT_FILES$(LOCAL_MODULE) := 141ALL_OBJECT_FILES$(LOCAL_MODULE) :=
138 142
139# Now filter out code that is only built on systems with neon. 143# Now filter out code that is only built on systems with neon.
140ifeq ($(NDK_BUILD_ABI),armeabi-v7a) 144ifneq $(findstring v8,$(NDK_BUILD_ARCH))
141ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES)) 145ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES))
142endif
143 146
144$(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source)))) 147$(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source))))
145 148
diff --git a/cross/ndk-build/ndk-build-static-library.mk b/cross/ndk-build/ndk-build-static-library.mk
index c1584e789a7..3c68b902e6a 100644
--- a/cross/ndk-build/ndk-build-static-library.mk
+++ b/cross/ndk-build/ndk-build-static-library.mk
@@ -22,30 +22,34 @@
22eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) 22eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
23objname = $(1)-static-$(subst /,_,$(2).o) 23objname = $(1)-static-$(subst /,_,$(2).o)
24 24
25# LOCAL_SRC_FILES sometimes contains absolute file names. Filter them
26# out with this function.
27maybe-absolute = $(or $(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1))
28
25define single-object-target 29define single-object-target
26 30
27ifeq (x$(suffix $(1)),x.c) 31ifeq (x$(suffix $(1)),x.c)
28 32
29$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 33$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
30 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(call LOCAL_C_ADDITIONAL_FLAGS,$(1)) 34 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(call LOCAL_C_ADDITIONAL_FLAGS,$(1))
31 35
32else 36else
33ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp)) 37ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp))
34 38
35$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 39$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
36 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_CXXFLAGS_$(LOCAL_MODULE)) 40 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
37 41
38else 42else
39ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),) 43ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),)
40 44
41$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 45$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
42 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE)) 46 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE))
43 47
44else 48else
45ifneq (x$(suffix $(1)),x.asm) 49ifneq (x$(suffix $(1)),x.asm)
46ifeq (x$(suffix $(1)),x.cc) 50ifeq (x$(suffix $(1)),x.cc)
47 51
48$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 52$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
49 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_CXXFLAGS_$(LOCAL_MODULE)) 53 $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_BUILD_CFLAGS) $(NDK_CFLAGS_$(LOCAL_MODULE)) $(NDK_CXXFLAGS_$(LOCAL_MODULE))
50 54
51else 55else
@@ -63,7 +67,7 @@ ifeq ($(findstring x86,$(NDK_BUILD_ARCH)),)
63$$(error Trying to build nasm file on non-Intel platform!) 67$$(error Trying to build nasm file on non-Intel platform!)
64else 68else
65 69
66$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) 70$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(call maybe-absolute,$(1))
67 $(NDK_BUILD_NASM) -o $$@ -i $(LOCAL_PATH) -i $$(dir $$<) $(NDK_ASFLAGS_$(LOCAL_MODULE)) $$< 71 $(NDK_BUILD_NASM) -o $$@ -i $(LOCAL_PATH) -i $$(dir $$<) $(NDK_ASFLAGS_$(LOCAL_MODULE)) $$<
68 72
69endif 73endif
@@ -102,15 +106,11 @@ NDK_CFLAGS ::= -mthumb
102endif 106endif
103endif 107endif
104 108
105LOCAL_MODULE_FILENAME := $(strip $(LOCAL_MODULE_FILENAME))
106
107ifndef LOCAL_MODULE_FILENAME
108ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) 109ifeq ($(findstring lib,$(LOCAL_MODULE)),lib)
109LOCAL_MODULE_FILENAME := $(LOCAL_MODULE) 110LOCAL_MODULE_FILENAME := $(LOCAL_MODULE)
110else 111else
111LOCAL_MODULE_FILENAME := lib$(LOCAL_MODULE) 112LOCAL_MODULE_FILENAME := lib$(LOCAL_MODULE)
112endif 113endif
113endif
114 114
115LOCAL_MODULE_FILENAME := $(LOCAL_MODULE_FILENAME).a 115LOCAL_MODULE_FILENAME := $(LOCAL_MODULE_FILENAME).a
116 116
@@ -123,9 +123,7 @@ include ndk-resolve.mk
123ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH)) 123ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH))
124 124
125# Now filter out code that is only built on systems with neon. 125# Now filter out code that is only built on systems with neon.
126ifeq ($(NDK_BUILD_ABI),armeabi-v7a)
127ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES)) 126ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES))
128endif
129 127
130# This defines all dependencies. 128# This defines all dependencies.
131ALL_OBJECT_FILES$(LOCAL_MODULE) = 129ALL_OBJECT_FILES$(LOCAL_MODULE) =
diff --git a/cross/ndk-build/ndk-clear-vars.mk b/cross/ndk-build/ndk-clear-vars.mk
index 5e8eff9f0ab..7309b7bb513 100644
--- a/cross/ndk-build/ndk-clear-vars.mk
+++ b/cross/ndk-build/ndk-clear-vars.mk
@@ -19,39 +19,39 @@
19# variables, and then having those Makefiles include another makefile 19# variables, and then having those Makefiles include another makefile
20# which actually builds targets. 20# which actually builds targets.
21 21
22undefine LOCAL_MODULE 22LOCAL_MODULE :=
23undefine LOCAL_MODULE_FILENAME 23LOCAL_MODULE_FILENAME :=
24undefine LOCAL_SRC_FILES 24LOCAL_SRC_FILES :=
25undefine LOCAL_CPP_EXTENSION 25LOCAL_CPP_EXTENSION :=
26undefine LOCAL_CPP_FEATURES 26LOCAL_CPP_FEATURES :=
27undefine LOCAL_C_INCLUDES 27LOCAL_C_INCLUDES :=
28undefine LOCAL_CFLAGS 28LOCAL_CFLAGS :=
29undefine LOCAL_CPPFLAGS 29LOCAL_CPPFLAGS :=
30undefine LOCAL_STATIC_LIBRARIES 30LOCAL_STATIC_LIBRARIES :=
31undefine LOCAL_SHARED_LIBRARIES 31LOCAL_SHARED_LIBRARIES :=
32undefine LOCAL_WHOLE_STATIC_LIBRARIES 32LOCAL_WHOLE_STATIC_LIBRARIES :=
33undefine LOCAL_LDLIBS 33LOCAL_LDLIBS :=
34undefine LOCAL_LDFLAGS 34LOCAL_LDFLAGS :=
35undefine LOCAL_ALLOW_UNDEFINED_SYMBOLS 35LOCAL_ALLOW_UNDEFINED_SYMBOLS :=
36undefine LOCAL_ARM_MODE 36LOCAL_ARM_MODE :=
37undefine LOCAL_ARM_NEON 37LOCAL_ARM_NEON :=
38undefine LOCAL_DISABLE_FORMAT_STRING_CHECKS 38LOCAL_DISABLE_FORMAT_STRING_CHECKS :=
39undefine LOCAL_EXPORT_CFLAGS 39LOCAL_EXPORT_CFLAGS :=
40undefine LOCAL_EXPORT_CPPFLAGS 40LOCAL_EXPORT_CPPFLAGS :=
41undefine LOCAL_EXPORT_C_INCLUDES 41LOCAL_EXPORT_C_INCLUDES :=
42undefine LOCAL_EXPORT_C_INCLUDE_DIRS 42LOCAL_EXPORT_C_INCLUDE_DIRS :=
43undefine LOCAL_EXPORT_LDFLAGS 43LOCAL_EXPORT_LDFLAGS :=
44undefine LOCAL_EXPORT_LDLIBS 44LOCAL_EXPORT_LDLIBS :=
45 45
46# AOSP extensions. 46# AOSP extensions.
47undefine LOCAL_SRC_FILES_$(NDK_BUILD_ARCH) 47LOCAL_SRC_FILES_$(NDK_BUILD_ARCH) :=
48undefine LOCAL_ASFLAGS_$(NDK_BUILD_ARCH) 48LOCAL_ASFLAGS_$(NDK_BUILD_ARCH) :=
49undefine LOCAL_CFLAGS_$(NDK_BUILD_ARCH) 49LOCAL_CFLAGS_$(NDK_BUILD_ARCH) :=
50undefine LOCAL_ADDITIONAL_DEPENDENCIES 50LOCAL_ADDITIONAL_DEPENDENCIES :=
51undefine LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH) 51LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH) :=
52undefine LOCAL_IS_HOST_MODULE 52LOCAL_IS_HOST_MODULE :=
53 53
54# Emacs extensions! 54# Emacs extensions!
55undefine LOCAL_ASM_RULE_DEFINED 55LOCAL_ASM_RULE_DEFINED :=
56undefine LOCAL_ASM_RULE 56LOCAL_ASM_RULE :=
57undefine LOCAL_C_ADDITIONAL_FLAGS 57LOCAL_C_ADDITIONAL_FLAGS :=
diff --git a/m4/ndk-build.m4 b/m4/ndk-build.m4
index e1e4115ffca..7b5c45997b1 100644
--- a/m4/ndk-build.m4
+++ b/m4/ndk-build.m4
@@ -82,6 +82,7 @@ esac
82 82
83ndk_package_map="libwebpdemux:webpdemux libxml-2.0:libxml2 jansson:libjansson" 83ndk_package_map="libwebpdemux:webpdemux libxml-2.0:libxml2 jansson:libjansson"
84ndk_package_map="$ndk_package_map sqlite3:libsqlite_static_minimal" 84ndk_package_map="$ndk_package_map sqlite3:libsqlite_static_minimal"
85ndk_package_map="$ndk_package_map MagickWand:libmagickwand-7 lcms2:liblcms2"
85 86
86# Replace ndk_module with the appropriate Android module name if it is 87# Replace ndk_module with the appropriate Android module name if it is
87# found in ndk_package_map. 88# found in ndk_package_map.
@@ -111,7 +112,8 @@ ndk_parse_pkg_config_string () {
111 ndk_input="$(printf "$ndk_input" | cut -s -f2- -d' ')" 112 ndk_input="$(printf "$ndk_input" | cut -s -f2- -d' ')"
112 113
113 if test "$ndk_str" = ">=" || test "$ndk_str" = "<=" \ 114 if test "$ndk_str" = ">=" || test "$ndk_str" = "<=" \
114 || test "$ndk_str" = ">" || test "$ndk_str" = "<"; then 115 || test "$ndk_str" = ">" || test "$ndk_str" = "<" \
116 || test "$ndk_str" = "!="; then
115 ndk_input="$(printf "$ndk_input" | cut -s -f2- -d' ')" 117 ndk_input="$(printf "$ndk_input" | cut -s -f2- -d' ')"
116 else 118 else
117 ndk_modules="$ndk_modules$ndk_str " 119 ndk_modules="$ndk_modules$ndk_str "
@@ -135,11 +137,12 @@ ndk_resolve_import_module () {
135 # Read this Android.mk file. Set NDK_ROOT to /tmp: the Android in 137 # Read this Android.mk file. Set NDK_ROOT to /tmp: the Android in
136 # tree build system sets it to a meaning value, but build files 138 # tree build system sets it to a meaning value, but build files
137 # just use it to test whether or not the NDK is being used. 139 # just use it to test whether or not the NDK is being used.
138 ndk_commands=$($MAKE -s -f build-aux/ndk-build-helper.mk EMACS_SRCDIR=. \ 140 ndk_commands=$(($MAKE -s -f build-aux/ndk-build-helper.mk EMACS_SRCDIR=. \
139 EMACS_ABI=$ndk_ABI ANDROID_MAKEFILE="$ndk_android_mk" \ 141 EMACS_ABI=$ndk_ABI ANDROID_MAKEFILE="$ndk_android_mk" \
140 ANDROID_MODULE_DIRECTORY=$(dirname "$ndk_android_mk") \ 142 ANDROID_MODULE_DIRECTORY=$(dirname "$ndk_android_mk") \
141 NDK_BUILD_DIR="$ndk_DIR" NDK_ROOT="/tmp" \ 143 NDK_BUILD_DIR="$ndk_DIR" NDK_ROOT="/tmp" \
142 | awk -f build-aux/ndk-module-extract.awk \ 144 2>&AS_MESSAGE_LOG_FD) \
145 | awk -f build-aux/ndk-module-extract.awk \
143 MODULE="$ndk_module") 146 MODULE="$ndk_module")
144 147
145 AS_IF([test -n "${ndk_commands//\n }"], [eval "$ndk_commands"]) 148 AS_IF([test -n "${ndk_commands//\n }"], [eval "$ndk_commands"])
@@ -298,10 +301,11 @@ for ndk_android_mk in $ndk_module_files; do
298 # Read this Android.mk file. Set NDK_ROOT to /tmp: the Android in 301 # Read this Android.mk file. Set NDK_ROOT to /tmp: the Android in
299 # tree build system sets it to a meaning value, but build files just 302 # tree build system sets it to a meaning value, but build files just
300 # use it to test whether or not the NDK is being used. 303 # use it to test whether or not the NDK is being used.
301 ndk_commands=$($MAKE -s -f build-aux/ndk-build-helper.mk EMACS_SRCDIR=. \ 304 ndk_commands=$(($MAKE -s -f build-aux/ndk-build-helper.mk EMACS_SRCDIR=. \
302 EMACS_ABI=$ndk_ABI ANDROID_MAKEFILE="$ndk_android_mk" \ 305 EMACS_ABI=$ndk_ABI ANDROID_MAKEFILE="$ndk_android_mk" \
303 ANDROID_MODULE_DIRECTORY=$(dirname "$ndk_android_mk") \ 306 ANDROID_MODULE_DIRECTORY=$(dirname "$ndk_android_mk") \
304 NDK_BUILD_DIR="$ndk_DIR" NDK_ROOT="/tmp" \ 307 NDK_BUILD_DIR="$ndk_DIR" NDK_ROOT="/tmp" \
308 2>&AS_MESSAGE_LOG_FD) \
305 | awk -f build-aux/ndk-module-extract.awk \ 309 | awk -f build-aux/ndk-module-extract.awk \
306 MODULE="$ndk_module") 310 MODULE="$ndk_module")
307 311