diff options
author | Po Lu <luangruo@yahoo.com> | 2023-01-24 10:34:40 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2023-01-24 10:34:40 +0800 |
commit | 4de6b187933479ce93b6079f42a485e5868f01a5 (patch) | |
tree | db3e4cbeb5487a8397e686e9a242fdeb90fad43a /build-aux | |
parent | 9d3aacedf0c217af207d39e390f376914160396b (diff) | |
download | emacs-4de6b187933479ce93b6079f42a485e5868f01a5.tar.gz |
Update Android port
* .gitignore: Update with new files. Do not ignore std*.in.h.
* INSTALL.android: Explain how to build Emacs with external
dependencies.
* Makefile.in (xcompile, cross): Rename to `cross'.
(clean_dirs): Clean cross, not xcompile.
* README: Document new directories.
* build-aux/ndk-build-helper-1.mk (build_kind, NDK_SO_NAMES):
* build-aux/ndk-build-helper-2.mk (build_kind, NDK_SO_NAMES):
* build-aux/ndk-build-helper-3.mk (build_kind):
* build-aux/ndk-build-helper-4.mk:
* build-aux/ndk-build-helper.mk (NDK_BUILD_DIR, my-dir):
* build-aux/ndk-module-extract.awk: New files.
* configure.ac: Set up libgif, libwebp, and libpng for
ndk-build.
* cross/ndk-build/Makefile.in (srcdir, NDK_BUILD_ANDROID_MK):
* cross/ndk-build/ndk-build-executable.mk:
* cross/ndk-build/ndk-build-shared-library.mk (eq, objname):
* cross/ndk-build/ndk-build-static-library.mk (eq, objname):
* cross/ndk-build/ndk-build.in (NDK_BUILD_MODULES):
* cross/ndk-build/ndk-build.mk.in (NDK_BUILD_MODULES)
(NDK_BUILD_SHARED):
* cross/ndk-build/ndk-clear-vars.mk:
* cross/ndk-build/ndk-prebuilt-shared-library.mk:
* cross/ndk-build/ndk-prebuilt-static-library.mk: New files.
* doc/emacs/android.texi (Android, Android Environment):
Document clipboard support on Android.
* doc/emacs/emacs.texi (Top): Update menus.
* etc/MACHINES: Document Android.
* java/AndroidManifest.xml.in: Respect new
`--with-android-debug' option.
* java/Makefile.in (CROSS_BINS, CROSS_LIBS): Adjust for rename.
Include ndk-build.mk.:(emacs.apk-in): Depend on shared
libraries. Then, package shared libraries.
* java/org/gnu/emacs/EmacsClipboard.java (EmacsClipboard): New
class.
* java/org/gnu/emacs/EmacsFontDriver.java: Update comment to say
this is unused.
* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
function `sendExpose'.
* java/org/gnu/emacs/EmacsSdk11Clipboard.java
(EmacsSdk11Clipboard):
* java/org/gnu/emacs/EmacsSdk8Clipboard.java
(EmacsSdk8Clipboard): New classes.
* java/org/gnu/emacs/EmacsView.java (EmacsView, handleDirtyBitmap)
(onDetachedFromWindow): When window is reattached, expose the
frame.
* lib/Makefile.in (VPATH):
(ALL_CFLAGS): Adjust for rename.
* lisp/term/android-win.el (android-clipboard-exists-p)
(android-get-clipboard, android-set-clipboard)
(android-clipboard-owner-p, android-primary-selection)
(android-get-clipboard-1, android-get-primary)
(android-selection-bounds, android-encode-select-string)
(gui-backend-get-selection, gui-backend-selection-exists-p)
(gui-backend-selection-owner-p, gui-backend-set-selection): New
functions.
* m4/ndk-build.m4: New file.
* src/Makefile.in (GIF_CFLAGS, ANDROID_LDFLAGS): New variables.
(EMACS_CFLAGS): Add GIF_CFLAGS. Include
ndk-build.mk.
(libemacs.so): Depend on and link with required
libraries.
* src/android.c (android_check_compressed_file): New function.
(android_open): Work around Android platform bug.
(sendExpose): New function.
(android_readdir): Set d_type if this is a directory.
* src/androidgui.h (enum android_event_type)
(struct android_expose_event, union android_event): Add expose
events.
* src/androidselect.c (struct android_emacs_clipboard)
(android_init_emacs_clipboard, Fandroid_clipboard_owner_p)
(Fandroid_set_clipboard, Fandroid_get_clipboard)
(Fandroid_clipboard_exists_p, init_androidselect)
(syms_of_androidselect): New file.
* src/androidterm.c (handle_one_android_event): Handle
exposures.
* src/androidterm.h: Update prototypes.
* src/emacs.c (android_emacs_init): Initialize androidselect.
Diffstat (limited to 'build-aux')
-rw-r--r-- | build-aux/ndk-build-helper-1.mk | 92 | ||||
-rw-r--r-- | build-aux/ndk-build-helper-2.mk | 87 | ||||
-rw-r--r-- | build-aux/ndk-build-helper-3.mk | 28 | ||||
-rw-r--r-- | build-aux/ndk-build-helper-4.mk | 38 | ||||
-rw-r--r-- | build-aux/ndk-build-helper.mk | 52 | ||||
-rw-r--r-- | build-aux/ndk-module-extract.awk | 64 |
6 files changed, 361 insertions, 0 deletions
diff --git a/build-aux/ndk-build-helper-1.mk b/build-aux/ndk-build-helper-1.mk new file mode 100644 index 00000000000..fb8e4da2f0a --- /dev/null +++ b/build-aux/ndk-build-helper-1.mk @@ -0,0 +1,92 @@ +# ndk-build-helper-1.mk -- Helper for ndk-build.m4. +# Copyright (C) 2023 Free Software Foundation, Inc. +# This file is part of GNU Emacs. + +# GNU Emacs is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +# Print out information now defined. Important details include: +# - list of source files to compile. +# - module export include directories. +# - module export CFLAGS. +# - module export LDFLAGS. +# - module name. + +build_kind = shared +NDK_SO_NAMES = +NDK_A_NAMES = + +# Record this module's dependencies. This information is used later +# on to recurse over libraries. +NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES := $(LOCAL_STATIC_LIBRARIES) $(LOCAL_WHOLE_STATIC_LIBRARIES) +NDK_$(LOCAL_MODULE)_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES) + +$(info Building $(build_kind)) +$(info $(LOCAL_MODULE)) +$(info $(addprefix $(ANDROID_MODULE_DIRECTORY)?,$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI)))) + +$(info $(foreach dir,$(LOCAL_EXPORT_C_INCLUDE_DIRS) $(LOCAL_EXPORT_C_INCLUDES),-I$(dir))) +$(info $(LOCAL_EXPORT_CFLAGS)) +ifeq ($(LOCAL_MODULE_FILENAME),) +ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) +NDK_SO_NAMES = $(LOCAL_MODULE)_emacs.so +else +NDK_SO_NAMES = lib$(LOCAL_MODULE)_emacs.so +endif +else +NDK_SO_NAMES = $(LOCAL_MODULE_FILENAME).so +endif + +define add-a-name +ifeq ($(findstring lib,$(1)),lib) +NDK_A_NAME = $(1).a +else +NDK_A_NAME = lib$(1).a +endif + +ifeq ($$(NDK_A_NAMES:$$(NDK_A_NAME)=),$$(NDK_A_NAMES)) +NDK_A_NAMES := $$(NDK_A_NAMES) $$(NDK_A_NAME) + +# Now recurse over this module's dependencies. +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_STATIC_LIBRARIES)),$$(eval $$(call add-a-name,$$(module)))) +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_SHARED_LIBRARIES)),$$(eval $$(call add-so-name,$$(module)))) +endif +endef + +define add-so-name +ifeq ($(findstring lib,$(1)),lib) +NDK_SO_NAME = $(1)_emacs.so +else +NDK_SO_NAME = lib$(1)_emacs.so +endif + +ifeq ($$(NDK_SO_NAMES:$$(NDK_SO_NAME)=),$$(NDK_SO_NAMES)) +NDK_SO_NAMES := $$(NDK_SO_NAMES) $$(NDK_SO_NAME) + +# Now recurse over this module's dependencies. +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_STATIC_LIBRARIES)),$$(eval $$(call add-a-name,$$(module)))) +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_SHARED_LIBRARIES)),$$(eval $$(call add-so-name,$$(module)))) +endif +endef + +# Resolve additional dependencies based on LOCAL_STATIC_LIBRARIES and +# LOCAL_SHARED_LIBRARIES. + +SYSTEM_LIBRARIES = z libz libc c + +$(foreach module,$(filter-out $(SYSTEM_LIBRARIES), $(LOCAL_STATIC_LIBRARIES)),$(eval $(call add-a-name,$(module)))) +$(foreach module,$(filter-out $(SYSTEM_LIBRARIES), $(LOCAL_SHARED_LIBRARIES)),$(eval $(call add-so-name,$(module)))) + +$(info $(LOCAL_EXPORT_LDFLAGS) $(abspath $(addprefix $(NDK_BUILD_DIR)/,$(NDK_A_NAMES))) -L$(abspath $(NDK_BUILD_DIR)) $(foreach soname,$(NDK_SO_NAMES),-l:$(soname))) +$(info $(NDK_SO_NAMES)) +$(info End) diff --git a/build-aux/ndk-build-helper-2.mk b/build-aux/ndk-build-helper-2.mk new file mode 100644 index 00000000000..82c1d53c7d0 --- /dev/null +++ b/build-aux/ndk-build-helper-2.mk @@ -0,0 +1,87 @@ +# ndk-build-helper-2.mk -- Helper for ndk-build.m4. +# Copyright (C) 2023 Free Software Foundation, Inc. +# This file is part of GNU Emacs. + +# GNU Emacs is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +# Say a static library is being built +build_kind = static +NDK_SO_NAMES = +NDK_A_NAMES = + +# Record this module's dependencies. This information is used later +# on to recurse over libraries. +NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES := $(LOCAL_STATIC_LIBRARIES) $(LOCAL_WHOLE_STATIC_LIBRARIES) +NDK_$(LOCAL_MODULE)_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES) + +$(info Building $(build_kind)) +$(info $(LOCAL_MODULE)) +$(info $(addprefix $(ANDROID_MODULE_DIRECTORY)/,$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI)))) + +$(info $(foreach dir,$(LOCAL_EXPORT_C_INCLUDE_DIRS) $(LOCAL_EXPORT_C_INCLUDES),-I$(dir))) +$(info $(LOCAL_EXPORT_CFLAGS)) +ifeq ($(LOCAL_MODULE_FILENAME),) + +ifeq ($(findstring lib,$(LOCAL_MODULE)),lib) +NDK_A_NAMES = $(LOCAL_MODULE).a +else +NDK_A_NAMES = lib$(LOCAL_MODULE).a +endif +else +NDK_A_NAMES = $(LOCAL_MODULE_FILENAME).a +endif + +define add-a-name +ifeq ($(findstring lib,$(1)),lib) +NDK_A_NAME = $(1).a +else +NDK_A_NAME = lib$(1).a +endif + +ifeq ($$(NDK_A_NAMES:$$(NDK_A_NAME)=),$$(NDK_A_NAMES)) +NDK_A_NAMES := $$(NDK_A_NAMES) $$(NDK_A_NAME) + +# Now recurse over this module's dependencies. +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_STATIC_LIBRARIES)),$$(eval $$(call add-a-name,$$(module)))) +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_SHARED_LIBRARIES)),$$(eval $$(call add-so-name,$$(module)))) +endif +endef + +define add-so-name +ifeq ($(findstring lib,$(1)),lib) +NDK_SO_NAME = $(1)_emacs.so +else +NDK_SO_NAME = lib$(1)_emacs.so +endif + +ifeq ($$(NDK_SO_NAMES:$$(NDK_SO_NAME)=),$$(NDK_SO_NAMES)) +NDK_SO_NAMES := $$(NDK_SO_NAMES) $$(NDK_SO_NAME) + +# Now recurse over this module's dependencies. +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_STATIC_LIBRARIES)),$$(eval $$(call add-a-name,$$(module)))) +$$(foreach module,$$(filter-out $$(SYSTEM_LIBRARIES), $$(NDK_$(1)_SHARED_LIBRARIES)),$$(eval $$(call add-so-name,$$(module)))) +endif +endef + +# Resolve additional dependencies based on LOCAL_STATIC_LIBRARIES and +# LOCAL_SHARED_LIBRARIES. + +SYSTEM_LIBRARIES = z libz + +$(foreach module,$(filter-out $(SYSTEM_LIBRARIES), $(LOCAL_STATIC_LIBRARIES)),$(eval $(call add-a-name,$(module)))) +$(foreach module,$(filter-out $(SYSTEM_LIBRARIES), $(LOCAL_SHARED_LIBRARIES)),$(eval $(call add-so-name,$(module)))) + +$(info $(LOCAL_EXPORT_LDFLAGS) $(abspath $(addprefix $(NDK_BUILD_DIR)/,$(NDK_A_NAMES))) $(and $(NDK_SO_NAMES), -L$(abspath $(NDK_BUILD_DIR)) $(foreach soname,$(NDK_SO_NAMES),-l:$(soname)))) +$(info $(NDK_A_NAMES)) +$(info End) diff --git a/build-aux/ndk-build-helper-3.mk b/build-aux/ndk-build-helper-3.mk new file mode 100644 index 00000000000..4d0358d4f77 --- /dev/null +++ b/build-aux/ndk-build-helper-3.mk @@ -0,0 +1,28 @@ +# ndk-build-helper-3.mk -- Helper for ndk-build.m4. +# Copyright (C) 2023 Free Software Foundation, Inc. +# This file is part of GNU Emacs. + +# GNU Emacs is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +# Say a static library is being built +build_kind = executable + +$(info Building $(build_kind)) +$(info $(LOCAL_MODULE)) +$(info $(addprefix $(ANDROID_MODULE_DIRECTORY),$(LOCAL_SRC_FILES) $(LOCAL_SRC_FILES$(EMACS_ABI)))) + +$(info $(foreach dir,$(LOCAL_EXPORT_C_INCLUDE_DIRS) $(LOCAL_EXPORT_C_INCLUDES),-I$(dir))) +$(info $(LOCAL_EXPORT_CFLAGS)) +$(info $(LOCAL_EXPORT_LDFLAGS)) +$(info End) diff --git a/build-aux/ndk-build-helper-4.mk b/build-aux/ndk-build-helper-4.mk new file mode 100644 index 00000000000..e1024f0a243 --- /dev/null +++ b/build-aux/ndk-build-helper-4.mk @@ -0,0 +1,38 @@ +# Copyright (C) 2023 Free Software Foundation, Inc. +# This file is part of GNU Emacs. + +# GNU Emacs is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +undefine LOCAL_MODULE +undefine LOCAL_MODULE_FILENAME +undefine LOCAL_SRC_FILES +undefine LOCAL_CPP_EXTENSION +undefine LOCAL_CPP_FEATURES +undefine LOCAL_C_INCLUDES +undefine LOCAL_CFLAGS +undefine LOCAL_CPPFLAGS +undefine LOCAL_STATIC_LIBRARIES +undefine LOCAL_SHARED_LIBRARIES +undefine LOCAL_WHOLE_STATIC_LIBRARIES +undefine LOCAL_LDLIBS +undefine LOCAL_LDFLAGS +undefine LOCAL_ALLOW_UNDEFINED_SYMBOLS +undefine LOCAL_ARM_MODE +undefine LOCAL_ARM_NEON +undefine LOCAL_DISABLE_FORMAT_STRING_CHECKS +undefine LOCAL_EXPORT_CFLAGS +undefine LOCAL_EXPORT_CPPFLAGS +undefine LOCAL_EXPORT_C_INCLUDES +undefine LOCAL_EXPORT_LDFLAGS +undefine LOCAL_EXPORT_LDLIBS diff --git a/build-aux/ndk-build-helper.mk b/build-aux/ndk-build-helper.mk new file mode 100644 index 00000000000..beb32cae3f1 --- /dev/null +++ b/build-aux/ndk-build-helper.mk @@ -0,0 +1,52 @@ +# ndk-build-helper.mk -- Helper for ndk-build.m4. +# Copyright (C) 2023 Free Software Foundation, Inc. +# This file is part of GNU Emacs. + +# GNU Emacs is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +# This Makefile sets up enough to parse an Android-style Android.mk +# file and return useful information about its contents. + +# See the text under ``NDK BUILD SYSTEM IMPLEMENTATION'' in +# INSTALL.android for more details. + +# Make NDK_BUILD_DIR absolute. +NDK_BUILD_DIR := $(absname $(NDK_BUILD_DIR)) + +# my-dir is a function that returns the Android module directory. +my-dir = $(ANDROID_MODULE_DIRECTORY) + +# all-subdir-makefiles is a function which returns all Android.mk +# files within this directory. +all-subdir-makefiles = $(shell find . -name "Android.mk") + +# These functions are not implemented. +parent-makefile = +grand-parent-makefile = +import-module = + +# Print out module information every time BUILD_SHARED_LIBRARY is +# called. + +BUILD_SHARED_LIBRARY=$(EMACS_SRCDIR)/build-aux/ndk-build-helper-1.mk +BUILD_STATIC_LIBRARY=$(EMACS_SRCDIR)/build-aux/ndk-build-helper-2.mk +BUILD_EXECUTABLE=$(EMACS_SRCDIR)/build-aux/ndk-build-helper-3.mk +CLEAR_VARS=$(EMACS_SRCDIR)/build-aux/ndk-build-helper-4.mk + +# Now include Android.mk. + +include $(ANDROID_MAKEFILE) + +# Dummy target. +all: diff --git a/build-aux/ndk-module-extract.awk b/build-aux/ndk-module-extract.awk new file mode 100644 index 00000000000..eaea3e96dd8 --- /dev/null +++ b/build-aux/ndk-module-extract.awk @@ -0,0 +1,64 @@ +/^Building.+$/ { + kind = $2 +} + +// { + if (!match ($0, /^End$/) && !match ($0, /^Building.+$/)) + { + if (kind) + { + if (ldflags_found) + target = $0 + else if (cflags_found) + { + ldflags = $0 + ldflags_found = 1 + } + else if (includes_found) + { + cflags = $0 + cflags_found = 1 + } + else if (src_found) + { + includes = $0 + includes_found = 1 + } + else if (name_found) + { + src = $0 + src_found = 1; + } + else + { + name = $0 + name_found = 1 + } + } + } +} + +/^End$/ { + if (name == MODULE && (kind == "shared" || kind == "static")) + { + printf "module_name=%s\n", name + printf "module_kind=%s\n", kind + printf "module_src=\"%s\"\n", src + printf "module_includes=\"%s\"\n", includes + printf "module_cflags=\"%s\"\n", cflags + printf "module_ldflags=\"%s\"\n", ldflags + printf "module_target=\"%s\"\n", target + } + + src = "" + name = "" + kind = "" + includes = "" + cflags = "" + ldflags = "" + name_found = "" + src_found = "" + includes_found = "" + cflags_found = "" + ldflags_found = "" +} |