diff options
| author | Po Lu | 2023-02-22 21:20:30 +0800 |
|---|---|---|
| committer | Po Lu | 2023-02-22 21:20:30 +0800 |
| commit | 767da53fa3a15ed448c14aa4dc468f187a6e2df9 (patch) | |
| tree | 2fc5be35e15985a9f62ed68431199c87d920b21f | |
| parent | f3b6cbb6755a1c1587b8a6c3165732c5f0187397 (diff) | |
| download | emacs-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.android | 62 | ||||
| -rw-r--r-- | build-aux/ndk-build-helper-1.mk | 4 | ||||
| -rw-r--r-- | build-aux/ndk-build-helper-2.mk | 5 | ||||
| -rw-r--r-- | build-aux/ndk-build-helper.mk | 3 | ||||
| -rw-r--r-- | configure.ac | 24 | ||||
| -rw-r--r-- | cross/ndk-build/ndk-build-shared-library.mk | 15 | ||||
| -rw-r--r-- | cross/ndk-build/ndk-build-static-library.mk | 20 | ||||
| -rw-r--r-- | cross/ndk-build/ndk-clear-vars.mk | 64 | ||||
| -rw-r--r-- | m4/ndk-build.m4 | 24 |
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 | ||
| 212 | And Emacs developers have ported the following dependencies to arm64 | 212 | Emacs developers have ported the following dependencies to ARM Android |
| 213 | Android systems: | 213 | systems: |
| 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 | ||
| 222 | And other developers have ported the following dependencies to Android | ||
| 223 | systems: | ||
| 224 | |||
| 225 | ImageMagick, lcms2 - https://github.com/MolotovCherry/Android-ImageMagick7 | ||
| 226 | (Please see the section IMAGEMAGICK near the end of this file.) | ||
| 227 | |||
| 222 | We anticipate that most untested non-trivial ndk-build dependencies | 228 | We anticipate that most untested non-trivial ndk-build dependencies |
| 223 | will need adjustments in Emacs to work, as the Emacs build system | 229 | will need adjustments in Emacs to work, as the Emacs build system |
| 224 | which emulates ndk-build is in an extremely early state. | 230 | which emulates ndk-build is in an extremely early state. |
| @@ -590,6 +596,14 @@ the following tar archive in that site: | |||
| 590 | 596 | ||
| 591 | and add the resulting folder to ``--with-ndk-build''. | 597 | and add the resulting folder to ``--with-ndk-build''. |
| 592 | 598 | ||
| 599 | IMAGEMAGICK | ||
| 600 | |||
| 601 | There is a third party port of ImageMagick to Android. Unfortunately, | ||
| 602 | the port also uses its own patched versions of libpng, libjpeg, | ||
| 603 | libtiff and libwebp, which conflict with those used by Emacs. Its | ||
| 604 | Makefiles were also written for MS Windows, so you must also apply the | ||
| 605 | patch at the end of this file. | ||
| 606 | |||
| 593 | 607 | ||
| 594 | 608 | ||
| 595 | This file is part of GNU Emacs. | 609 | This 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 | |||
| 853 | PATCH FOR IMAGEMAGICK | ||
| 854 | |||
| 855 | diff --git a/make/libmagickwand-7.mk b/make/libmagickwand-7.mk | ||
| 856 | index 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 | ||
| 39 | ifeq ($(LOCAL_MODULE_FILENAME),) | ||
| 40 | ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) | 39 | ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) |
| 41 | NDK_SO_NAMES = $(LOCAL_MODULE)_emacs.so | 40 | NDK_SO_NAMES = $(LOCAL_MODULE)_emacs.so |
| 42 | else | 41 | else |
| 43 | NDK_SO_NAMES = lib$(LOCAL_MODULE)_emacs.so | 42 | NDK_SO_NAMES = lib$(LOCAL_MODULE)_emacs.so |
| 44 | endif | 43 | endif |
| 45 | else | ||
| 46 | NDK_SO_NAMES = $(LOCAL_MODULE_FILENAME).so | ||
| 47 | endif | ||
| 48 | 44 | ||
| 49 | define add-so-name-1 | 45 | define 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 | ||
| 33 | ifeq ($(LOCAL_MODULE_FILENAME),) | ||
| 34 | |||
| 35 | ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) | 33 | ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) |
| 36 | NDK_A_NAMES = $(LOCAL_MODULE).a | 34 | NDK_A_NAMES = $(LOCAL_MODULE).a |
| 37 | else | 35 | else |
| 38 | NDK_A_NAMES = lib$(LOCAL_MODULE).a | 36 | NDK_A_NAMES = lib$(LOCAL_MODULE).a |
| 39 | endif | 37 | endif |
| 40 | else | ||
| 41 | NDK_A_NAMES = $(LOCAL_MODULE_FILENAME).a | ||
| 42 | endif | ||
| 43 | 38 | ||
| 44 | define add-a-name | 39 | define add-a-name |
| 45 | ifeq ($(findstring lib,$(1)),lib) | 40 | ifeq ($(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. | ||
| 25 | TARGET_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. |
| 25 | NDK_LAST_MAKEFILE = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST))) | 28 | NDK_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 | ||
| 3431 | HAVE_IMAGEMAGICK=no | 3433 | HAVE_IMAGEMAGICK=no |
| 3432 | if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}" = "yes" || \ | 3434 | if 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, | ||
| 3466 | MagickMergeImageLayers,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. |
| 28 | objname = $(1)-shared-$(subst /,_,$(2).o) | 28 | objname = $(1)-shared-$(subst /,_,$(2).o) |
| 29 | 29 | ||
| 30 | # LOCAL_SRC_FILES sometimes contains absolute file names. Filter them | ||
| 31 | # out with this function. | ||
| 32 | maybe-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. |
| 31 | NDK_SO_DEFAULT_LDFLAGS := -lc -lm | 35 | NDK_SO_DEFAULT_LDFLAGS := -lc -lm |
| 32 | 36 | ||
| @@ -34,26 +38,26 @@ define single-object-target | |||
| 34 | 38 | ||
| 35 | ifeq (x$(suffix $(1)),x.c) | 39 | ifeq (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 | ||
| 40 | else | 44 | else |
| 41 | ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp)) | 45 | ifeq (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 | ||
| 46 | else | 50 | else |
| 47 | ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),) | 51 | ifneq ($(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 | ||
| 52 | else | 56 | else |
| 53 | ifneq (x$(suffix $(1)),x.asm) | 57 | ifneq (x$(suffix $(1)),x.asm) |
| 54 | ifeq (x$(suffix $(1)),x.cc) | 58 | ifeq (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 | ||
| 59 | else | 63 | else |
| @@ -137,9 +141,8 @@ ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH)) | |||
| 137 | ALL_OBJECT_FILES$(LOCAL_MODULE) := | 141 | ALL_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. |
| 140 | ifeq ($(NDK_BUILD_ABI),armeabi-v7a) | 144 | ifneq $(findstring v8,$(NDK_BUILD_ARCH)) |
| 141 | ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES)) | 145 | ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES)) |
| 142 | endif | ||
| 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 @@ | |||
| 22 | eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) | 22 | eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) |
| 23 | objname = $(1)-static-$(subst /,_,$(2).o) | 23 | objname = $(1)-static-$(subst /,_,$(2).o) |
| 24 | 24 | ||
| 25 | # LOCAL_SRC_FILES sometimes contains absolute file names. Filter them | ||
| 26 | # out with this function. | ||
| 27 | maybe-absolute = $(or $(and $(wildcard $(1)),$(1)),$(LOCAL_PATH)/$(1)) | ||
| 28 | |||
| 25 | define single-object-target | 29 | define single-object-target |
| 26 | 30 | ||
| 27 | ifeq (x$(suffix $(1)),x.c) | 31 | ifeq (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 | ||
| 32 | else | 36 | else |
| 33 | ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp)) | 37 | ifeq (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 | ||
| 38 | else | 42 | else |
| 39 | ifneq ($(or $(call eq,x$(suffix $(1)),x.s),$(call eq,x$(suffix $(1)),x.S)),) | 43 | ifneq ($(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 | ||
| 44 | else | 48 | else |
| 45 | ifneq (x$(suffix $(1)),x.asm) | 49 | ifneq (x$(suffix $(1)),x.asm) |
| 46 | ifeq (x$(suffix $(1)),x.cc) | 50 | ifeq (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 | ||
| 51 | else | 55 | else |
| @@ -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!) |
| 64 | else | 68 | else |
| 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 | ||
| 69 | endif | 73 | endif |
| @@ -102,15 +106,11 @@ NDK_CFLAGS ::= -mthumb | |||
| 102 | endif | 106 | endif |
| 103 | endif | 107 | endif |
| 104 | 108 | ||
| 105 | LOCAL_MODULE_FILENAME := $(strip $(LOCAL_MODULE_FILENAME)) | ||
| 106 | |||
| 107 | ifndef LOCAL_MODULE_FILENAME | ||
| 108 | ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) | 109 | ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) |
| 109 | LOCAL_MODULE_FILENAME := $(LOCAL_MODULE) | 110 | LOCAL_MODULE_FILENAME := $(LOCAL_MODULE) |
| 110 | else | 111 | else |
| 111 | LOCAL_MODULE_FILENAME := lib$(LOCAL_MODULE) | 112 | LOCAL_MODULE_FILENAME := lib$(LOCAL_MODULE) |
| 112 | endif | 113 | endif |
| 113 | endif | ||
| 114 | 114 | ||
| 115 | LOCAL_MODULE_FILENAME := $(LOCAL_MODULE_FILENAME).a | 115 | LOCAL_MODULE_FILENAME := $(LOCAL_MODULE_FILENAME).a |
| 116 | 116 | ||
| @@ -123,9 +123,7 @@ include ndk-resolve.mk | |||
| 123 | ALL_SOURCE_FILES := $(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES_$(NDK_BUILD_ARCH)) | 123 | ALL_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. |
| 126 | ifeq ($(NDK_BUILD_ABI),armeabi-v7a) | ||
| 127 | ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES)) | 126 | ALL_SOURCE_FILES := $(filter-out %.neon,$(ALL_SOURCE_FILES)) |
| 128 | endif | ||
| 129 | 127 | ||
| 130 | # This defines all dependencies. | 128 | # This defines all dependencies. |
| 131 | ALL_OBJECT_FILES$(LOCAL_MODULE) = | 129 | ALL_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 | ||
| 22 | undefine LOCAL_MODULE | 22 | LOCAL_MODULE := |
| 23 | undefine LOCAL_MODULE_FILENAME | 23 | LOCAL_MODULE_FILENAME := |
| 24 | undefine LOCAL_SRC_FILES | 24 | LOCAL_SRC_FILES := |
| 25 | undefine LOCAL_CPP_EXTENSION | 25 | LOCAL_CPP_EXTENSION := |
| 26 | undefine LOCAL_CPP_FEATURES | 26 | LOCAL_CPP_FEATURES := |
| 27 | undefine LOCAL_C_INCLUDES | 27 | LOCAL_C_INCLUDES := |
| 28 | undefine LOCAL_CFLAGS | 28 | LOCAL_CFLAGS := |
| 29 | undefine LOCAL_CPPFLAGS | 29 | LOCAL_CPPFLAGS := |
| 30 | undefine LOCAL_STATIC_LIBRARIES | 30 | LOCAL_STATIC_LIBRARIES := |
| 31 | undefine LOCAL_SHARED_LIBRARIES | 31 | LOCAL_SHARED_LIBRARIES := |
| 32 | undefine LOCAL_WHOLE_STATIC_LIBRARIES | 32 | LOCAL_WHOLE_STATIC_LIBRARIES := |
| 33 | undefine LOCAL_LDLIBS | 33 | LOCAL_LDLIBS := |
| 34 | undefine LOCAL_LDFLAGS | 34 | LOCAL_LDFLAGS := |
| 35 | undefine LOCAL_ALLOW_UNDEFINED_SYMBOLS | 35 | LOCAL_ALLOW_UNDEFINED_SYMBOLS := |
| 36 | undefine LOCAL_ARM_MODE | 36 | LOCAL_ARM_MODE := |
| 37 | undefine LOCAL_ARM_NEON | 37 | LOCAL_ARM_NEON := |
| 38 | undefine LOCAL_DISABLE_FORMAT_STRING_CHECKS | 38 | LOCAL_DISABLE_FORMAT_STRING_CHECKS := |
| 39 | undefine LOCAL_EXPORT_CFLAGS | 39 | LOCAL_EXPORT_CFLAGS := |
| 40 | undefine LOCAL_EXPORT_CPPFLAGS | 40 | LOCAL_EXPORT_CPPFLAGS := |
| 41 | undefine LOCAL_EXPORT_C_INCLUDES | 41 | LOCAL_EXPORT_C_INCLUDES := |
| 42 | undefine LOCAL_EXPORT_C_INCLUDE_DIRS | 42 | LOCAL_EXPORT_C_INCLUDE_DIRS := |
| 43 | undefine LOCAL_EXPORT_LDFLAGS | 43 | LOCAL_EXPORT_LDFLAGS := |
| 44 | undefine LOCAL_EXPORT_LDLIBS | 44 | LOCAL_EXPORT_LDLIBS := |
| 45 | 45 | ||
| 46 | # AOSP extensions. | 46 | # AOSP extensions. |
| 47 | undefine LOCAL_SRC_FILES_$(NDK_BUILD_ARCH) | 47 | LOCAL_SRC_FILES_$(NDK_BUILD_ARCH) := |
| 48 | undefine LOCAL_ASFLAGS_$(NDK_BUILD_ARCH) | 48 | LOCAL_ASFLAGS_$(NDK_BUILD_ARCH) := |
| 49 | undefine LOCAL_CFLAGS_$(NDK_BUILD_ARCH) | 49 | LOCAL_CFLAGS_$(NDK_BUILD_ARCH) := |
| 50 | undefine LOCAL_ADDITIONAL_DEPENDENCIES | 50 | LOCAL_ADDITIONAL_DEPENDENCIES := |
| 51 | undefine LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH) | 51 | LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH) := |
| 52 | undefine LOCAL_IS_HOST_MODULE | 52 | LOCAL_IS_HOST_MODULE := |
| 53 | 53 | ||
| 54 | # Emacs extensions! | 54 | # Emacs extensions! |
| 55 | undefine LOCAL_ASM_RULE_DEFINED | 55 | LOCAL_ASM_RULE_DEFINED := |
| 56 | undefine LOCAL_ASM_RULE | 56 | LOCAL_ASM_RULE := |
| 57 | undefine LOCAL_C_ADDITIONAL_FLAGS | 57 | LOCAL_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 | ||
| 83 | ndk_package_map="libwebpdemux:webpdemux libxml-2.0:libxml2 jansson:libjansson" | 83 | ndk_package_map="libwebpdemux:webpdemux libxml-2.0:libxml2 jansson:libjansson" |
| 84 | ndk_package_map="$ndk_package_map sqlite3:libsqlite_static_minimal" | 84 | ndk_package_map="$ndk_package_map sqlite3:libsqlite_static_minimal" |
| 85 | ndk_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 | ||