From 5957a6b8059a92da1b747ea1273b69da3c8e54c8 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Tue, 25 Oct 2022 01:50:35 +0200 Subject: [PATCH] Support Android AArch64 (#1540) * Build LPeg via LuaRocks to deal with Android shenanigans once and for all... Involves writing a custom makefile & rockspec for lpeg, because everything is terrible. * Apply the android-aarch64 patch from #993 * libzmq is linked against the STL, so, as stupid as it looks, this means czmq must, too. * Unbreak input on 64bit Android size_t is 64bit, need to truncate to a Lua number --- Makefile | 3 +- Makefile.defs | 40 +++-- Makefile.third | 34 ++-- ffi/input_android.lua | 2 +- thirdparty/czmq/CMakeLists.txt | 2 +- thirdparty/lpeg/CMakeLists.txt | 38 ++++- thirdparty/lpeg/lpeg-1.0.2-2.rockspec | 46 ++++++ .../lpeg/lpeg-1.0.2-standard-makefile.patch | 149 ++++++++++++++++++ thirdparty/lua-Spore/CMakeLists.txt | 3 - thirdparty/lua-htmlparser/CMakeLists.txt | 3 - thirdparty/openssl/CMakeLists.txt | 2 + 11 files changed, 274 insertions(+), 48 deletions(-) create mode 100644 thirdparty/lpeg/lpeg-1.0.2-2.rockspec create mode 100644 thirdparty/lpeg/lpeg-1.0.2-standard-makefile.patch diff --git a/Makefile b/Makefile index 4fe874bd7..a964e43b5 100644 --- a/Makefile +++ b/Makefile @@ -23,9 +23,9 @@ all: $(OUTPUT_DIR)/libs $(if $(ANDROID),,$(LUAJIT)) \ $(if $(USE_LJ_WPACLIENT),$(LJ_WPACLIENT),) \ $(TURBO_FFI_WRAP_LIB) \ $(LUA_HTMLPARSER_ROCK) \ + $(LPEG_ROCK) \ $(LUA_RAPIDJSON_ROCK) \ $(LUA_SPORE_ROCK) \ - $(if $(ANDROID),$(LPEG_DYNLIB) $(LPEG_RE),) \ $(if $(WIN32),,$(ZMQ_LIB) $(CZMQ_LIB)) \ $(if $(WIN32),,$(OUTPUT_DIR)/sdcv) \ $(if $(MACOS),$(OUTPUT_DIR)/koreader,) \ @@ -62,7 +62,6 @@ endif # set up some needed paths and links install -d $(OUTPUT_DIR)/{cache,history,clipboard,fonts} ln -sf $(CURDIR)/$(THIRDPARTY_DIR)/kpvcrlib/cr3.css $(OUTPUT_DIR)/data/ - test -e $(LPEG_RE) && chmod 664 $(LPEG_RE) || true # hot fix re.lua permission $(OUTPUT_DIR)/libs: install -d $(OUTPUT_DIR)/libs diff --git a/Makefile.defs b/Makefile.defs index 4b8939e5f..7d0b95b3b 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -16,7 +16,13 @@ TOOLCHAIN_DIR=$(MAKEFILE_DIR)toolchain ANDROID_ARCH?=arm ANDROID_TOOLCHAIN=$(TOOLCHAIN_DIR)/android-toolchain-$(ANDROID_ARCH) NDK?=$(TOOLCHAIN_DIR)/android-ndk-r15c -NDKABI?=14 +ifeq ($(ANDROID_ARCH), arm64) + NDKABI?=21 +else ifeq ($(ANDROID_ARCH), x86_64) + NDKABI?=21 +else + NDKABI?=14 +endif # Detect LuaRocks 3 LR_VER_NUM := $(shell luarocks --version | grep -o [0-9].[0-9]) @@ -136,6 +142,8 @@ else ifeq ($(TARGET), android) export SYSROOT=$(NDK)/platforms/android-$(NDKABI)/arch-$(ANDROID_ARCH) ifeq ($(ANDROID_ARCH), x86) CHOST?=i686-linux-android + else ifeq ($(ANDROID_ARCH), arm64) + CHOST?=aarch64-linux-android else CHOST?=arm-linux-androideabi endif @@ -368,7 +376,10 @@ ANDROID_COMPAT_CXXFLAGS:=--sysroot $(SYSROOT) -I$(NDK)/sources/cxx-stl/gnu-libst ifeq ($(ANDROID_ARCH), arm) ANDROID_ARM_ARCH:=-march=armv7-a -mfpu=vfpv3-d16 ANDROID_ARM_ARCH+=-mthumb + # NOTE: NDK15c actually uses -fstack-protector-strong ANDROID_ARM_ARCH+=-ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes +else ifeq ($(ANDROID_ARCH), arm64) + ANDROID_ARM_ARCH:=-ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes endif # Use target-specific CFLAGS @@ -436,8 +447,12 @@ else ifeq ($(TARGET), android) COMPAT_LDFLAGS:=-L$(NDK)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a COMPAT_CXXFLAGS+=-I$(NDK)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include SHARED_STL_LIB:=$(ANDROID_TOOLCHAIN)/arm-linux-androideabi/lib/armv7-a/thumb/libgnustl_shared.so - endif - ifeq ($(ANDROID_ARCH), x86) + else ifeq ($(ANDROID_ARCH), arm64) + ARM_ARCH:=$(ANDROID_ARM_ARCH) + export ac_cv_type_in_port_t=yes + COMPAT_LDFLAGS:=-L$(NDK)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a + COMPAT_CXXFLAGS+=-I$(NDK)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include + else ifeq ($(ANDROID_ARCH), x86) COMPAT_LDFLAGS:=-L$(NDK)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86 COMPAT_CXXFLAGS+=-I$(NDK)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include endif @@ -526,9 +541,9 @@ endif # NOTE: Follow the NDK's lead ifeq ($(TARGET), android) - LDFLAGS+=-no-canonical-prefixes -Wl,--fix-cortex-a8 + LDFLAGS+=-no-canonical-prefixes ifeq ($(ANDROID_ARCH), arm) - LDFLAGS+=-march=armv7-a + LDFLAGS+=-Wl,--fix-cortex-a8 -march=armv7-a endif endif @@ -910,13 +925,18 @@ ifeq ($(LR_GT_3_0),1) LUAROCKS_DIR=$(OUTPUT_DIR)/rocks/lib/luarocks/rocks-5.1 LUAROCKS_BINARY+=--lua-version=5.1 endif -LUA_INCDIR=$(if $(DARWINHOST),/usr/local/include/lua5.1,"$(LUAJIT_DIR)/src") -LUA_LIBDIR=$(if $(DARWINHOST),/usr/local/lib,"$(CURDIR)/$(dir $(LUAJIT_LIB))") +LUA_INCDIR=$(if $(DARWINHOST),/usr/local/include/lua5.1,$(LUAJIT_DIR)/src) +LUA_LIBDIR=$(if $(DARWINHOST),/usr/local/lib,$(CURDIR)/$(dir $(LUAJIT_LIB))) LUA_HTMLPARSER_VER=scm-0 LUA_HTMLPARSER_BUILD_DIR=$(THIRDPARTY_DIR)/lua-htmlparser/build/$(MACHINE) LUA_HTMLPARSER_ROCK=$(LUAROCKS_DIR)/htmlparser/$(LUA_HTMLPARSER_VER)/htmlparser-$(LUA_HTMLPARSER_VER).rockspec +LPEG_VER=1.0.2-2 +LPEG_BUILD_DIR=$(THIRDPARTY_DIR)/lpeg/build/$(MACHINE) +LPEG_DIR=$(CURDIR)/$(LPEG_BUILD_DIR)/lpeg-prefix/src/lpeg-build +LPEG_ROCK=$(LPEG_DIR)/lpeg-$(LPEG_VER).rockspec + LUA_RAPIDJSON_VER=0.7.1-1 LUA_RAPIDJSON_BUILD_DIR=$(THIRDPARTY_DIR)/lua-rapidjson/build/$(MACHINE) LUA_RAPIDJSON_ROCK=$(LUAROCKS_DIR)/rapidjson/$(LUA_RAPIDJSON_VER)/rapidjson-$(LUA_RAPIDJSON_VER).rockspec @@ -990,12 +1010,6 @@ endif # Used by our custom Lua modules, where we want to hide private symbols by default SYMVIS_FLAGS+=-fvisibility=hidden -LPEG_BUILD_DIR=$(THIRDPARTY_DIR)/lpeg/build/$(MACHINE) -LPEG_DIR=$(CURDIR)/$(LPEG_BUILD_DIR)/lpeg-prefix/src/lpeg -LPEG_RE=$(OUTPUT_DIR)/rocks/share/lua/5.1/re.lua -LPEG_DYNLIB=$(OUTPUT_DIR)/rocks/lib/lua/5.1/lpeg.so - - CMAKE_THIRDPARTY_LIBS := kpvcrlib,nanosvg,zstd CMAKE_THIRDPARTY_LIBS := $(CMAKE_THIRDPARTY_LIBS),luajit,lpeg,turbo CMAKE_THIRDPARTY_LIBS := $(CMAKE_THIRDPARTY_LIBS),zyre,czmq,filemq,libzmq diff --git a/Makefile.third b/Makefile.third index e535296be..9d72b2532 100644 --- a/Makefile.third +++ b/Makefile.third @@ -677,6 +677,7 @@ $(CZMQ_LIB): $(ZMQ_LIB) $(THIRDPARTY_DIR)/czmq/*.* cd $(CZMQ_BUILD_DIR) && \ $(CMAKE) $(CMAKE_FLAGS) -DCC="$(CC)" -DLDFLAGS="$(LDFLAGS) -Wl,-rpath,'$(ORIGIN_CMAKE_TO_AUTOCFG)'" \ -DCFLAGS="$(CFLAGS) $(if $(CLANG),-O0,) $(if $(WIN32),-DLIBCZMQ_EXPORTS)" \ + -DLDFLAGS="$(LDFLAGS) $(if $(ANDROID),$(SHARED_STL_LINK_FLAG) -lm,)" \ -DZMQ_DIR=$(ZMQ_DIR) -DHOST=$(CHOST) \ $(CURDIR)/$(THIRDPARTY_DIR)/czmq && \ $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) @@ -712,6 +713,22 @@ ifdef DARWIN $@ endif +$(LPEG_ROCK): $(THIRDPARTY_DIR)/lpeg/*.* + install -d $(LPEG_BUILD_DIR) + -rm -f $(LPEG_ROCK) + cd $(LPEG_BUILD_DIR) && \ + $(CMAKE) $(CMAKE_FLAGS) -DOUTPUT_DIR="$(CURDIR)/$(OUTPUT_DIR)" \ + -DLPEG_VER="$(LPEG_VER)" \ + -DCC="$(CC)" \ + -DCFLAGS="$(CFLAGS)" \ + -DLDFLAGS="$(LDFLAGS)" \ + -DLUAROCKS="$(LUAROCKS_BINARY)" \ + -DLUA_INCDIR="$(LUA_INCDIR)" \ + -DLUA_LIBDIR="$(LUA_LIBDIR)" \ + $(if $(USE_LUAJIT_LIB),-DLUALIB="-lluajit",) \ + $(CURDIR)/$(THIRDPARTY_DIR)/lpeg && \ + $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) + $(LUA_SPORE_ROCK): $(THIRDPARTY_DIR)/lua-Spore/*.* install -d $(LUA_SPORE_BUILD_DIR) -rm -f $(LUA_SPORE_DIR)/../lua-Spore-stamp/lua-Spore-build @@ -723,12 +740,8 @@ $(LUA_SPORE_ROCK): $(THIRDPARTY_DIR)/lua-Spore/*.* -DLUAROCKS="$(LUAROCKS_BINARY)" \ -DLUA_INCDIR="$(LUA_INCDIR)" \ -DLUA_LIBDIR="$(LUA_LIBDIR)" \ - $(if $(ANDROID),-DLIBFLAG="$(LDFLAGS) $(CURDIR)/$(LUAJIT_LIB) -nostartfiles",) \ $(CURDIR)/$(THIRDPARTY_DIR)/lua-Spore && \ $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) -ifdef ANDROID - -rm -f $(LPEG_DYNLIB) # so that LPEG can be rebuilt in our control -endif $(LUA_HTMLPARSER_ROCK): $(THIRDPARTY_DIR)/lua-htmlparser/*.* install -d $(LUA_HTMLPARSER_BUILD_DIR) @@ -740,7 +753,6 @@ $(LUA_HTMLPARSER_ROCK): $(THIRDPARTY_DIR)/lua-htmlparser/*.* -DLUAROCKS="$(LUAROCKS_BINARY)" \ -DLUA_INCDIR="$(LUA_INCDIR)" \ -DLUA_LIBDIR="$(LUA_LIBDIR)" \ - $(if $(ANDROID),-DLIBFLAG="$(LDFLAGS) $(CURDIR)/$(LUAJIT_LIB) -nostartfiles",) \ $(CURDIR)/$(THIRDPARTY_DIR)/lua-htmlparser && \ $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) @@ -763,18 +775,6 @@ $(LUA_RAPIDJSON_ROCK): $(THIRDPARTY_DIR)/lua-rapidjson/*.* $(CURDIR)/$(THIRDPARTY_DIR)/lua-rapidjson && \ $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) -# override lpeg built by luarocks, this is only necessary for Android -$(LPEG_DYNLIB) $(LPEG_RE): $(LUAJIT_LIB) $(THIRDPARTY_DIR)/lpeg/*.* - install -d $(OUTPUT_DIR)/rocks/lib/lua/5.1 - install -d $(OUTPUT_DIR)/rocks/share/lua/5.1 - install -d $(LPEG_BUILD_DIR) - cd $(LPEG_BUILD_DIR) && \ - $(CMAKE) $(CMAKE_FLAGS) -DCC="$(CC)" -DDYNLIB_CFLAGS="$(DYNLIB_CFLAGS)" \ - -DLUA_DIR="$(LUAJIT_DIR)" $(CURDIR)/$(THIRDPARTY_DIR)/lpeg && \ - $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) - cp -f $(LPEG_DIR)/lpeg.so $(OUTPUT_DIR)/rocks/lib/lua/5.1 - cp -f $(LPEG_DIR)/re.lua $(OUTPUT_DIR)/rocks/share/lua/5.1 - $(SQLITE_LIB): $(THIRDPARTY_DIR)/sqlite/*.* install -d $(SQLITE_BUILD_DIR) cd $(SQLITE_BUILD_DIR) && \ diff --git a/ffi/input_android.lua b/ffi/input_android.lua index 370d4e8bb..15fb8bf19 100644 --- a/ffi/input_android.lua +++ b/ffi/input_android.lua @@ -146,7 +146,7 @@ local function motionEventHandler(motion_event) local timev = genInputTimeval(android.lib.AMotionEvent_getEventTime(motion_event)) -- This effectively gives us the size of the current MotionEvent array... - local pointer_count = android.lib.AMotionEvent_getPointerCount(motion_event) + local pointer_count = tonumber(android.lib.AMotionEvent_getPointerCount(motion_event)) for i = 0, pointer_count - 1 do -- So, loop through the array, and if that pointer is still down, move it local slot = android.lib.AMotionEvent_getPointerId(motion_event, i) diff --git a/thirdparty/czmq/CMakeLists.txt b/thirdparty/czmq/CMakeLists.txt index d3d552315..972c3273f 100644 --- a/thirdparty/czmq/CMakeLists.txt +++ b/thirdparty/czmq/CMakeLists.txt @@ -21,7 +21,7 @@ set(CFG_ENV_VAR "CC=\"${CC}\" LDFLAGS=\"${LDFLAGS}\" CFLAGS=\"-Wno-error ${CFLAG set(CFG_OPTS "-q --prefix=${BINARY_DIR} --libdir=${BINARY_DIR}/lib --with-gnu-ld --with-libzmq=${ZMQ_DIR} --disable-static --enable-shared --host=${HOST}") set(CFG_CMD sh -c "${CFG_ENV_VAR} ${SOURCE_DIR}/configure ${CFG_OPTS}") -if($ENV{ANDROID}) +if(DEFINED ENV{ANDROID}) set(CFG_CMD "${CFG_CMD} && ${ISED} 's|version_type=none|version_type=linux|' libtool") set(CFG_CMD "${CFG_CMD} && ${ISED} 's|need_lib_prefix=no|need_lib_prefix=yes|' libtool") set(CFG_CMD "${CFG_CMD} && ${ISED} 's|need_version=no|need_version=yes|' libtool") diff --git a/thirdparty/lpeg/CMakeLists.txt b/thirdparty/lpeg/CMakeLists.txt index 87959d089..dbd48ce0f 100644 --- a/thirdparty/lpeg/CMakeLists.txt +++ b/thirdparty/lpeg/CMakeLists.txt @@ -6,23 +6,45 @@ include("koreader_thirdparty_common") enable_language(C) +assert_var_defined(LPEG_VER) assert_var_defined(CC) -assert_var_defined(DYNLIB_CFLAGS) -assert_var_defined(LUA_DIR) +assert_var_defined(CFLAGS) +assert_var_defined(LDFLAGS) +assert_var_defined(LUA_INCDIR) +assert_var_defined(LUA_LIBDIR) +assert_var_defined(OUTPUT_DIR) +assert_var_defined(LUAROCKS) -# NOTE: probably needs a similar fix as LFS: https://github.com/keplerproject/luafilesystem/commit/a84d81bc52590f930e54f108099df5d155bdc8bf -set(BUILD_CMD sh -c "${CC} ${DYNLIB_CFLAGS} -I${LUA_DIR}/src -L${LUA_DIR} -lluajit -o lpeg.so lpcap.c lpcode.c lpprint.c lptree.c lpvm.c") +ep_get_source_dir(SOURCE_DIR) + +set(LUA_LPEG_ROCKSPEC lpeg-${LPEG_VER}.rockspec) + +# Rewrite Makefile to behave sensibly w/ LuaRocks, and optionally allow linking to the lua lib... +SET(PATCH_CMD "${KO_PATCH} ${CMAKE_CURRENT_SOURCE_DIR}/lpeg-1.0.2-standard-makefile.patch") + +# Move our custom rockspec to the build dir to fullfil build deps +set(CONFIGURE_CMD ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${LUA_LPEG_ROCKSPEC} ${SOURCE_DIR}/${LUA_LPEG_ROCKSPEC}) + +set(BUILD_CMD sh -c "${LUAROCKS} make --tree=${OUTPUT_DIR}/rocks ${LUA_LPEG_ROCKSPEC}") +set(BUILD_CMD "${BUILD_CMD} CC=\"${CC}\"") +set(BUILD_CMD "${BUILD_CMD} CFLAGS=\"${CFLAGS}\" LDFLAGS=\"${LDFLAGS}\"") +set(BUILD_CMD "${BUILD_CMD} LUA_INCDIR=\"${LUA_INCDIR}\" LUA_LIBDIR=\"${LUA_LIBDIR}\"") +if(DEFINED LUALIB) + set(BUILD_CMD "${BUILD_CMD} LUALIB=\"${LUALIB}\"") +endif() +if(DEFINED LIBS) + set(BUILD_CMD "${BUILD_CMD} LIBS=\"${LIBS}\"") +endif() -set(LPEG_VER "1.0.2") include(ExternalProject) ExternalProject_Add( ${PROJECT_NAME} DOWNLOAD_DIR ${KO_DOWNLOAD_DIR} - URL http://distcache.FreeBSD.org/ports-distfiles/lpeg-${LPEG_VER}.tar.gz + URL http://distcache.FreeBSD.org/ports-distfiles/lpeg-1.0.2.tar.gz URL_MD5 d342571886f1abcb7afe6a83d024d583 BUILD_IN_SOURCE 1 - # skip configure - CONFIGURE_COMMAND "" + PATCH_COMMAND COMMAND ${PATCH_CMD} + CONFIGURE_COMMAND ${CONFIGURE_CMD} BUILD_COMMAND ${BUILD_CMD} # skip install INSTALL_COMMAND "" diff --git a/thirdparty/lpeg/lpeg-1.0.2-2.rockspec b/thirdparty/lpeg/lpeg-1.0.2-2.rockspec new file mode 100644 index 000000000..80a2e2e34 --- /dev/null +++ b/thirdparty/lpeg/lpeg-1.0.2-2.rockspec @@ -0,0 +1,46 @@ +package = "LPeg" +version = "1.0.2-2" +source = { + url = "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-1.0.2.tar.gz", + md5 = "d342571886f1abcb7afe6a83d024d583", +} +description = { + summary = "Parsing Expression Grammars For Lua", + detailed = [[ + LPeg is a new pattern-matching library for Lua, based on Parsing + Expression Grammars (PEGs). The nice thing about PEGs is that it + has a formal basis (instead of being an ad-hoc set of features), + allows an efficient and simple implementation, and does most things + we expect from a pattern-matching library (and more, as we can + define entire grammars). + ]], + homepage = "http://www.inf.puc-rio.br/~roberto/lpeg.html", + maintainer = "Gary V. Vaughan ", + license = "MIT/X11" +} +dependencies = { + "lua >= 5.1" +} +build = { + type = "make", + makefile = "makefile", + build_target = "lpeg.so", + -- This is dumb as... rocks. + variables = { + CFLAGS = "$(CFLAGS)", + LIBFLAG = "$(LIBFLAG)", + LUA_LIBDIR = "$(LUA_LIBDIR)", + LUA_BINDIR = "$(LUA_BINDIR)", + LUA_INCDIR = "$(LUA_INCDIR)", + LUA = "$(LUA)", + LUALIB = "$(LUALIB)", + LIBS = "$(LIBS)", + }, + install_variables = { + INST_PREFIX = "$(PREFIX)", + INST_BINDIR = "$(BINDIR)", + INST_LIBDIR = "$(LIBDIR)", + INST_LUADIR = "$(LUADIR)", + INST_CONFDIR = "$(CONFDIR)", + }, +} diff --git a/thirdparty/lpeg/lpeg-1.0.2-standard-makefile.patch b/thirdparty/lpeg/lpeg-1.0.2-standard-makefile.patch new file mode 100644 index 000000000..a1bb851e9 --- /dev/null +++ b/thirdparty/lpeg/lpeg-1.0.2-standard-makefile.patch @@ -0,0 +1,149 @@ +diff -Nuarp lpeg-1.0.2-orig/lptree.c lpeg-1.0.2/lptree.c +--- lpeg-1.0.2-orig/lptree.c 2019-03-11 15:08:29.000000000 +0100 ++++ lpeg-1.0.2/lptree.c 2022-10-17 05:12:24.958098423 +0200 +@@ -21,7 +21,7 @@ + /* number of siblings for each tree */ + const byte numsiblings[] = { + 0, 0, 0, /* char, set, any */ +- 0, 0, /* true, false */ ++ 0, 0, /* true, false */ + 1, /* rep */ + 2, 2, /* seq, choice */ + 1, 1, /* not, and */ +@@ -1290,13 +1290,13 @@ static struct luaL_Reg metareg[] = { + }; + + +-int luaopen_lpeg (lua_State *L); +-int luaopen_lpeg (lua_State *L) { ++LUALIB_API int luaopen_lpeg (lua_State *L); ++LUALIB_API int luaopen_lpeg (lua_State *L) { + luaL_newmetatable(L, PATTERN_T); + lua_pushnumber(L, MAXBACK); /* initialize maximum backtracking */ + lua_setfield(L, LUA_REGISTRYINDEX, MAXSTACKIDX); +- luaL_setfuncs(L, metareg, 0); +- luaL_newlib(L, pattreg); ++ luaL_register(L, NULL, metareg); ++ luaL_register(L, "lpeg", pattreg); + lua_pushvalue(L, -1); + lua_setfield(L, -3, "__index"); + return 1; +diff -Nuarp lpeg-1.0.2-orig/lptypes.h lpeg-1.0.2/lptypes.h +--- lpeg-1.0.2-orig/lptypes.h 2019-03-11 15:08:29.000000000 +0100 ++++ lpeg-1.0.2/lptypes.h 2022-10-17 05:12:24.958098423 +0200 +@@ -33,9 +33,16 @@ + #define lua_setuservalue lua_setfenv + + #define lua_rawlen lua_objlen ++#endif ++ ++/* ++** compatibility with Lua 5.2 ++*/ ++#if (LUA_VERSION_NUM == 502) + +-#define luaL_setfuncs(L,f,n) luaL_register(L,NULL,f) +-#define luaL_newlib(L,f) luaL_register(L,"lpeg",f) ++#undef luaL_register ++#define luaL_register(L,n,f) \ ++ { if ((n) == NULL) luaL_setfuncs(L,f,0); else luaL_newlib(L,f); } + + #endif + +diff -Nuarp lpeg-1.0.2-orig/makefile lpeg-1.0.2/makefile +--- lpeg-1.0.2-orig/makefile 2019-03-11 15:08:29.000000000 +0100 ++++ lpeg-1.0.2/makefile 2022-10-17 05:12:38.777097975 +0200 +@@ -1,10 +1,14 @@ +-LIBNAME = lpeg +-LUADIR = ../lua/ ++LIBNAME := lpeg ++LUADIR ?= ../lua/ + +-COPT = -O2 -DNDEBUG +-# COPT = -g ++INST_PREFIX = /usr/local ++INST_BINDIR = $(INST_PREFIX)/bin ++INST_LIBDIR = $(INST_PREFIX)/lib/lua/5.1 ++INST_LUADIR = $(INST_PREFIX)/share/lua/5.1 ++INST_CONFDIR = $(INST_PREFIX)/etc + +-CWARNS = -Wall -Wextra -pedantic \ ++PROJ_CPPFLAGS := -DNDEBUG -I$(LUADIR) ++CWARNS := -Wall -Wextra -pedantic \ + -Waggregate-return \ + -Wcast-align \ + -Wcast-qual \ +@@ -18,38 +22,54 @@ CWARNS = -Wall -Wextra -pedantic \ + -Wdeclaration-after-statement \ + -Wmissing-prototypes \ + -Wnested-externs \ +- -Wstrict-prototypes \ +-# -Wunreachable-code \ ++ -Wstrict-prototypes ++COPT := -O2 ++CSTD := -std=c99 + ++PROJ_CFLAGS := $(COPT) $(CSTD) $(CWARNS) -fPIC ++CC ?= gcc + +-CFLAGS = $(CWARNS) $(COPT) -std=c99 -I$(LUADIR) -fPIC +-CC = gcc ++PROJ_SRCS := lpcap.c lpcode.c lpprint.c lptree.c lpvm.c ++PROJ_OBJS := $(PROJ_SRCS:.c=.o) + +-FILES = lpvm.o lpcap.o lptree.o lpcode.o lpprint.o ++default: lpeg.so ++ ++%.o: %.c ++ $(CC) $(PROJ_CPPFLAGS) -I$(LUA_INCDIR) $(CPPFLAGS) $(PROJ_CFLAGS) $(CFLAGS) $(DLLFLAGS) $(LIBFLAG) $(LDFLAGS) -o $@ -c $< + + # For Linux + linux: +- $(MAKE) lpeg.so "DLLFLAGS = -shared -fPIC" ++ $(MAKE) lpeg.so "DLLFLAGS = -shared" + +-# For Mac OS ++# For macOS + macosx: + $(MAKE) lpeg.so "DLLFLAGS = -bundle -undefined dynamic_lookup" + +-lpeg.so: $(FILES) +- env $(CC) $(DLLFLAGS) $(FILES) -o lpeg.so +- +-$(FILES): makefile ++lpeg.so: $(PROJ_OBJS) ++ @echo --- build ++ @echo CFLAGS: $(CFLAGS) ++ @echo LIBFLAG: $(LIBFLAG) ++ @echo DLLFLAGS: $(DLLFLAGS) ++ @echo LUA_LIBDIR: $(LUA_LIBDIR) ++ @echo LUA_INCDIR: $(LUA_INCDIR) ++ $(CC) $(PROJ_CPPFLAGS) -I$(LUA_INCDIR) $(CPPFLAGS) $(PROJ_CFLAGS) $(CFLAGS) $(DLLFLAGS) $(LIBFLAG) $(LDFLAGS) $(PROJ_OBJS) -o lpeg.so -L$(LUA_LIBDIR) $(LUALIB) $(LIBS) ++ ++install: lpeg.so re.lua ++ @echo --- install ++ @echo INST_PREFIX: $(INST_PREFIX) ++ @echo INST_BINDIR: $(INST_BINDIR) ++ @echo INST_LIBDIR: $(INST_LIBDIR) ++ @echo INST_LUADIR: $(INST_LUADIR) ++ @echo INST_CONFDIR: $(INST_CONFDIR) ++ install -d $(INST_LIBDIR) ++ cp lpeg.so $(INST_LIBDIR) ++ install -d $(INST_LUADIR) ++ cp re.lua $(INST_LUADIR) + + test: test.lua re.lua lpeg.so + ./test.lua + + clean: +- rm -f $(FILES) lpeg.so +- +- +-lpcap.o: lpcap.c lpcap.h lptypes.h +-lpcode.o: lpcode.c lptypes.h lpcode.h lptree.h lpvm.h lpcap.h +-lpprint.o: lpprint.c lptypes.h lpprint.h lptree.h lpvm.h lpcap.h +-lptree.o: lptree.c lptypes.h lpcap.h lpcode.h lptree.h lpvm.h lpprint.h +-lpvm.o: lpvm.c lpcap.h lptypes.h lpvm.h lpprint.h lptree.h ++ rm -f $(PROJ_OBJS) lpeg.so + ++.PHONY: default diff --git a/thirdparty/lua-Spore/CMakeLists.txt b/thirdparty/lua-Spore/CMakeLists.txt index 9094e3725..b0506f125 100644 --- a/thirdparty/lua-Spore/CMakeLists.txt +++ b/thirdparty/lua-Spore/CMakeLists.txt @@ -21,9 +21,6 @@ ep_get_source_dir(SOURCE_DIR) set(LUA_SPORE_ROCKSPEC rockspec/lua-spore-${LUA_SPORE_VER}.rockspec) set(BUILD_CMD sh -c "${LUAROCKS} make --tree=${OUTPUT_DIR}/rocks ${LUA_SPORE_ROCKSPEC}") -if(DEFINED LIBFLAG) - set(BUILD_CMD "${BUILD_CMD} LIBFLAG=\"${LIBFLAG}\"") -endif() set(BUILD_CMD "${BUILD_CMD} CC=\"${CC}\" CFLAGS=\"${CFLAGS}\" LD=\"${LD}\"") set(BUILD_CMD "${BUILD_CMD} LUA_INCDIR=\"${LUA_INCDIR}\" LUA_LIBDIR=\"${LUA_LIBDIR}\"") diff --git a/thirdparty/lua-htmlparser/CMakeLists.txt b/thirdparty/lua-htmlparser/CMakeLists.txt index 1bbdba512..40d524de0 100644 --- a/thirdparty/lua-htmlparser/CMakeLists.txt +++ b/thirdparty/lua-htmlparser/CMakeLists.txt @@ -21,9 +21,6 @@ ep_get_source_dir(SOURCE_DIR) set(LUA_HTMLPARSER_ROCKSPEC rockspecs/htmlparser-${LUA_HTMLPARSER_VER}.rockspec) set(BUILD_CMD sh -c "${LUAROCKS} make --tree=${OUTPUT_DIR}/rocks ${LUA_HTMLPARSER_ROCKSPEC}") -if(DEFINED LIBFLAG) - set(BUILD_CMD "${BUILD_CMD} LIBFLAG=\"${LIBFLAG}\"") -endif() set(BUILD_CMD "${BUILD_CMD} CC=\"${CC}\" CFLAGS=\"${CFLAGS}\" LD=\"${LD}\"") set(BUILD_CMD "${BUILD_CMD} LUA_INCDIR=\"${LUA_INCDIR}\" LUA_LIBDIR=\"${LUA_LIBDIR}\"") diff --git a/thirdparty/openssl/CMakeLists.txt b/thirdparty/openssl/CMakeLists.txt index 9182edf32..672da5667 100644 --- a/thirdparty/openssl/CMakeLists.txt +++ b/thirdparty/openssl/CMakeLists.txt @@ -41,6 +41,8 @@ if($ENV{ANDROID}) # If we're on ARM, make it so if (${CHOST} MATCHES "^arm-.*") set(CFG_OPTS "android-arm ${CFG_OPTS}") + elseif (${CHOST} MATCHES "^aarch64-.*") + set(CFG_OPTS "android-arm64 ${CFG_OPTS}") else() set(CFG_OPTS "android-x86 ${CFG_OPTS}") endif()