diff options
author | Po Lu <luangruo@yahoo.com> | 2023-01-26 15:37:04 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2023-01-26 15:37:04 +0800 |
commit | 4255d7f0514c5fa1badded6b0bc445ec2d2764c0 (patch) | |
tree | 93efa03d4ba0c1987eab16645f9ebcc405ab9e19 /cross | |
parent | 8125e26a323cb8906a14005519b0fa5693718c90 (diff) | |
download | emacs-4255d7f0514c5fa1badded6b0bc445ec2d2764c0.tar.gz |
Update Android port
* .gitignore: Ignore lib/math.h.
* INSTALL.android: Update accordingly.
* build-aux/ndk-build-helper-1.mk:
* build-aux/ndk-build-helper-2.mk:
* build-aux/ndk-build-helper.mk:
* build-aux/ndk-module-extract.awk: Handle C++ modules.
* configure.ac: Enable libxml2 on Android.
* cross/ndk-build/Makefile.in:
* cross/ndk-build/ndk-build-shared-library.mk:
* cross/ndk-build/ndk-build-static-library.mk:
* cross/ndk-build/ndk-build.mk.in:
* cross/ndk-build/ndk-resolve.mk: Fix dependency resolution of
includes.
* java/org/gnu/emacs/EmacsView.java (popupMenu): Fix minimum SDK
version for actual popup menus.
* lib/math.h: Delete file.
* m4/ndk-build.m4 (ndk_SEARCH_MODULE, ndk_CHECK_MODULES): Look
for nasm and C++ libraries.
* src/android.c (faccessat): Rename to `android_faccessat'.
* src/android.h: Update prototypes.
* src/dired.c (file_name_completion_dirp):
* src/fileio.c (file_access_p, Faccess_file, file_directory_p):
* src/lisp.h:
* src/lread.c (openp):
* src/process.c (allocate_pty): Use sys_faccessat.
* src/sysdep.c (sys_faccessat): New function.
Diffstat (limited to 'cross')
-rw-r--r-- | cross/ndk-build/Makefile.in | 29 | ||||
-rw-r--r-- | cross/ndk-build/ndk-build-shared-library.mk | 37 | ||||
-rw-r--r-- | cross/ndk-build/ndk-build-static-library.mk | 30 | ||||
-rw-r--r-- | cross/ndk-build/ndk-build.mk.in | 18 | ||||
-rw-r--r-- | cross/ndk-build/ndk-resolve.mk | 31 |
5 files changed, 138 insertions, 7 deletions
diff --git a/cross/ndk-build/Makefile.in b/cross/ndk-build/Makefile.in index ec8e6205680..125c825e506 100644 --- a/cross/ndk-build/Makefile.in +++ b/cross/ndk-build/Makefile.in @@ -30,6 +30,7 @@ NDK_BUILD_ANDROID_MK = @NDK_BUILD_ANDROID_MK@ NDK_BUILD_SDK = @NDK_BUILD_SDK@ NDK_BUILD_CC = @NDK_BUILD_CC@ NDK_BUILD_AR = @NDK_BUILD_AR@ + NDK_BUILD_NASM = @NDK_BUILD_NASM@ # This is a list of targets to build. NDK_BUILD_MODULES = @NDK_BUILD_MODULES@ @@ -49,13 +50,33 @@ endef # Remove duplicate files. NDK_BUILD_ANDROID_MK := $(call uniqify,$(NDK_BUILD_ANDROID_MK)) +# Remove duplicate modules as well. These can occur when a single +# module imports a module and also declares it in +# LOCAL_SHARED_LIBRARIES. +NDK_BUILD_MODULES := $(call uniqify,$(NDK_BUILD_MODULES)) + define subr-1 -# Define ndk-build functions. +# Define ndk-build functions. Many of these are identical to those in +# build-aux/ndk-build-helper.mk. -define my-dir -$(dir $(abspath $(1))) -endef +# NDK_LAST_MAKEFILE is the last Makefile that was included. +NDK_LAST_MAKEFILE = $$(lastword $$(filter %Android.mk,$$(MAKEFILE_LIST))) + +# local-makefile is the current Makefile being loaded. +local-makefile = $$(NDK_LAST_MAKEFILE) + +# my-dir is a function that returns the Android module directory. If +# no Android.mk has been loaded, use the directory of the Makefile +# being included. +my-dir = $$(or $$(and $$(local-makefile),$$(dir $$(local-makefile))),$(dir $(1))) + +# Return all Android.mk files under the first arg. +all-makefiles-under = $$(wildcard $$(1)/*/Android.mk) + +# Return all Android.mk files in subdirectories of this Makefile's +# location. +all-subdir-makefiles = $$(call all-makefiles-under,$$(call my-dir)) # NDK-defined include variables. diff --git a/cross/ndk-build/ndk-build-shared-library.mk b/cross/ndk-build/ndk-build-shared-library.mk index 6a607049a9c..a4b7b47f749 100644 --- a/cross/ndk-build/ndk-build-shared-library.mk +++ b/cross/ndk-build/ndk-build-shared-library.mk @@ -22,6 +22,9 @@ eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) objname = $(1)-$(subst /,_,$(2).o) +# Here are the default flags to link shared libraries with. +NDK_SO_DEFAULT_LDFLAGS := -lc -lm + define single-object-target ifeq (x$(suffix $(1)),x.c) @@ -30,13 +33,31 @@ $(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) else +ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp)) + +$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) + $(NDK_BUILD_CC) -c $$< -o $$@ $(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))): $(LOCAL_PATH)/$(1) $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE)) else +ifneq (x$(suffix $(1)),x.asm) $$(error Unsupported suffix: $(suffix $(1))) +else +ifeq ($(findstring x86,$(NDK_BUILD_ARCH)),) +$$(error Trying to build nasm file on non-Intel platform!) +else + +$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) + $(NDK_BUILD_NASM) -o $$@ -i $(LOCAL_PATH) -i $$(dir $$<) $(NDK_ASFLAGS_$(LOCAL_MODULE)) $$< + +endif +endif +endif endif endif @@ -47,9 +68,21 @@ 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)) -NDK_CFLAGS_$(LOCAL_MODULE) += -fPIC -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) +NDK_CXXFLAGS_$(LOCAL_MODULE) := $(LOCAL_CPPFLAGS) $(LOCAL_RTTI_FLAG) + +# Now look for features in LOCAL_CPP_FEATURES and enable them. + +ifneq ($(findstring exceptions,$(LOCAL_CPPFLAGS)),) +NDK_CXXFLAGS_$(LOCAL_MODULE) += -fexceptions +endif + +ifneq ($(findstring rtti,$(LOCAL_CPPFLAGS)),) +NDK_CXXFLAGS_$(LOCAL_MODULE) += -frtti +endif + ALL_OBJECT_FILES$(LOCAL_MODULE) := ifeq ($(NDK_BUILD_ARCH)$(NDK_ARM_MODE),armarm) @@ -91,7 +124,7 @@ $(foreach source,$(ALL_SOURCE_FILES),$(eval $(call single-object-target,$(source 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)) + $(NDK_BUILD_CC) $(1) $(2) -o $$@ -shared $(NDK_LDFLAGS$(LOCAL_MODULE)) $(NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE)) $(NDK_SO_DEFAULT_LDFLAGS) endef NDK_WHOLE_ARCHIVE_PREFIX = -Wl,--whole-archive diff --git a/cross/ndk-build/ndk-build-static-library.mk b/cross/ndk-build/ndk-build-static-library.mk index 2e4893a997b..4d16d81330c 100644 --- a/cross/ndk-build/ndk-build-static-library.mk +++ b/cross/ndk-build/ndk-build-static-library.mk @@ -30,13 +30,31 @@ $(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_CFLAGS_$(LOCAL_MODULE)) else +ifeq (x$(suffix $(1)),x.$(or $(LOCAL_CPP_EXTENSION),cpp)) + +$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) + $(NDK_BUILD_CC) -c $$< -o $$@ $(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))): $(LOCAL_PATH)/$(1) $(NDK_BUILD_CC) -c $$< -o $$@ $(NDK_ASFLAGS_$(LOCAL_MODULE)) else +ifneq (x$(suffix $(1)),x.asm) $$(error Unsupported suffix: $(suffix $(1))) +else +ifeq ($(findstring x86,$(NDK_BUILD_ARCH)),) +$$(error Trying to build nasm file on non-Intel platform!) +else + +$(call objname,$(LOCAL_MODULE),$(basename $(1))): $(LOCAL_PATH)/$(1) + $(NDK_BUILD_NASM) -o $$@ -i $(LOCAL_PATH) -i $$(dir $$<) $(NDK_ASFLAGS_$(LOCAL_MODULE)) $$< + +endif +endif +endif endif endif @@ -47,8 +65,20 @@ 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)) NDK_LDFLAGS_$(LOCAL_MODULE) := $(LOCAL_LDLIBS) $(LOCAL_LDFLAGS) +NDK_CXXFLAGS_$(LOCAL_MODULE) := $(LOCAL_CPPFLAGS) $(LOCAL_RTTI_FLAG) ALL_OBJECT_FILES$(LOCAL_MODULE) := +# Now look for features in LOCAL_CPP_FEATURES and enable them. + +ifneq ($(findstring exceptions,$(LOCAL_CPPFLAGS)),) +NDK_CXXFLAGS_$(LOCAL_MODULE) += -fexceptions +endif + +ifneq ($(findstring rtti,$(LOCAL_CPPFLAGS)),) +NDK_CXXFLAGS_$(LOCAL_MODULE) += -frtti +endif + + ifeq ($(NDK_BUILD_ARCH)$(NDK_ARM_MODE),armarm) NDK_CFLAGS ::= -marm else diff --git a/cross/ndk-build/ndk-build.mk.in b/cross/ndk-build/ndk-build.mk.in index 6ad577ccc35..798dcf6c19e 100644 --- a/cross/ndk-build/ndk-build.mk.in +++ b/cross/ndk-build/ndk-build.mk.in @@ -20,9 +20,27 @@ # This file is included all over the place to build prerequisites. NDK_BUILD_MODULES = @NDK_BUILD_MODULES@ +NDK_BUILD_CXX_SHARED = @NDK_BUILD_CXX_SHARED@ +NDK_BUILD_ANY_CXX_MODULE = @NDK_BUILD_ANY_CXX_MODULE@ NDK_BUILD_SHARED = NDK_BUILD_STATIC = +define uniqify +$(if $1,$(firstword $1) $(call uniqify,$(filter-out $(firstword $1),$1))) +endef + +# Remove duplicate modules. These can occur when a single module +# imports a module and also declares it in LOCAL_SHARED_LIBRARIES. +NDK_BUILD_MODULES := $(call uniqify,$(NDK_BUILD_MODULES)) + +# The C++ standard library must be extracted from the Android NDK +# directories and included in the application package, if any module +# requires the C++ standard library. + +ifneq ($(NDK_BUILD_ANY_CXX_MODULE),) +NDK_BUILD_SHARED += $(NDK_BUILD_ANY_CXX_SHARED) +endif + define subr-1 $(top_builddir)/cross/ndk-build/$(1): diff --git a/cross/ndk-build/ndk-resolve.mk b/cross/ndk-build/ndk-resolve.mk index 7fe807e35cc..910be8dab53 100644 --- a/cross/ndk-build/ndk-resolve.mk +++ b/cross/ndk-build/ndk-resolve.mk @@ -25,9 +25,10 @@ NDK_LOCAL_STATIC_LIBRARIES_$(LOCAL_MODULE) := $(LOCAL_STATIC_LIBRARIES) $(LOCAL_ 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_EXPORT_C_INCLUDES_$(LOCAL_MODULE) := $(LOCAL_EXPORT_C_INCLUDES) $(LOCAL_EXPORT_C_INCLUDE_DIRS) NDK_LOCAL_A_NAMES_$(LOCAL_MODULE) := NDK_WHOLE_A_NAMES_$(LOCAL_MODULE) := +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) := # List of all dependencies resolved for this module thus far. # Used to avoid infinite recursion. @@ -40,6 +41,34 @@ 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))) +# If the module happens to be zlib, then add -lz to the shared library +# flags. +ifneq ($(strip $(1)),libz) +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) += -lz +endif + +ifneq ($(strip $(1)),z) +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) += -lz +endif + +# Likewise for libdl. +ifneq ($(strip $(1)),libdl) +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) += -ldl +endif + +ifneq ($(strip $(1)),dl) +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) += -ldl +endif + +# Likewise for libstdc++. +ifneq ($(strip $(1)),libstdc++) +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) += -lstdc++ +endif + +ifneq ($(strip $(1)),dl) +NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE) += -lstdc++ +endif + ifneq ($(2),) ifneq ($(findstring lib,$(1)),) NDK_LOCAL_A_NAMES_$(LOCAL_MODULE) += $(1).a |