mirror of
https://gitcode.com/JianFeeeee/LuaCangjia_api.git
synced 2026-09-20 08:58:13 +00:00
- lib/lua 替换为完整 LuaJIT 2.1 仓库(Makefile+src+dynasm, 官方结构)
- 构建系统改造: lib/lua/CMakeLists.txt 改为调用 LuaJIT 自带 make
(BUILDMODE=static CFLAGS=-fPIC) 产出 libluajit.a; 顶层链接该静态库
并加 -Wl,-E 导出符号(静态链 LuaJIT 必需)
- 补充 lua.hpp 转发头兼容桥接层 'lua/lua.hpp' include 路径
- 桥接层沿用 5.1 方案: Registry 存 iopath / luaL_tolstring 兜底 /
typed interop 无 integer 子类型(LUA_VERSION_NUM=501)
- [关键修复] lua_remove 栈越界 bug(各版本共有, LuaJIT 下显性崩溃):
* unload_lib: ref 记录的是 gettop+1, 实际移除应用 ref-1
* clean(): 原逐个 remove 循环恒越界且多次移除后索引偏移,
属死代码(末尾 settop(L,0) 已清栈), 直接删除
该 bug 在 Lua 5.4 中被隐式容忍, 在 LuaJIT 的 GC finalizer 中
表现为 lj_gc_finalize_cdata 段错误
- 测试跨版本断言同步(自 5.1.5)
- 验证: GTest 44/44 通过
176 lines
6.3 KiB
Makefile
176 lines
6.3 KiB
Makefile
##############################################################################
|
|
# LuaJIT top level Makefile for installation. Requires GNU Make.
|
|
#
|
|
# Please read doc/install.html before changing any variables!
|
|
#
|
|
# Suitable for POSIX platforms (Linux, *BSD, OSX etc.).
|
|
# Note: src/Makefile has many more configurable options.
|
|
#
|
|
# ##### This Makefile is NOT useful for Windows! #####
|
|
# For MSVC, please follow the instructions given in src/msvcbuild.bat.
|
|
# For MinGW and Cygwin, cd to src and run make with the Makefile there.
|
|
#
|
|
# Copyright (C) 2005-2026 Mike Pall. See Copyright Notice in luajit.h
|
|
##############################################################################
|
|
|
|
MAJVER= 2
|
|
MINVER= 1
|
|
ABIVER= 5.1
|
|
|
|
# LuaJIT uses rolling releases. The release version is based on the time of
|
|
# the latest git commit. The 'git' command must be available during the build.
|
|
RELVER= $(shell cat src/luajit_relver.txt 2>/dev/null || : )
|
|
# Note: setting it with := doesn't work, since it will change during the build.
|
|
|
|
MMVERSION= $(MAJVER).$(MINVER)
|
|
VERSION= $(MMVERSION).$(RELVER)
|
|
|
|
##############################################################################
|
|
#
|
|
# Change the installation path as needed. This automatically adjusts
|
|
# the paths in src/luaconf.h, too. Note: PREFIX must be an absolute path!
|
|
#
|
|
export PREFIX= /usr/local
|
|
export MULTILIB= lib
|
|
##############################################################################
|
|
|
|
DPREFIX= $(DESTDIR)$(PREFIX)
|
|
INSTALL_BIN= $(DPREFIX)/bin
|
|
INSTALL_LIB= $(DPREFIX)/$(MULTILIB)
|
|
INSTALL_SHARE_= $(PREFIX)/share
|
|
INSTALL_SHARE= $(DESTDIR)$(INSTALL_SHARE_)
|
|
INSTALL_DEFINC= $(DPREFIX)/include/luajit-$(MMVERSION)
|
|
INSTALL_INC= $(INSTALL_DEFINC)
|
|
|
|
export INSTALL_LJLIBD= $(INSTALL_SHARE_)/luajit-$(MMVERSION)
|
|
INSTALL_JITLIB= $(DESTDIR)$(INSTALL_LJLIBD)/jit
|
|
INSTALL_LMODD= $(INSTALL_SHARE)/lua
|
|
INSTALL_LMOD= $(INSTALL_LMODD)/$(ABIVER)
|
|
INSTALL_CMODD= $(INSTALL_LIB)/lua
|
|
INSTALL_CMOD= $(INSTALL_CMODD)/$(ABIVER)
|
|
INSTALL_MAN= $(INSTALL_SHARE)/man/man1
|
|
INSTALL_PKGCONFIG= $(INSTALL_LIB)/pkgconfig
|
|
|
|
INSTALL_TNAME= luajit-$(VERSION)
|
|
INSTALL_TSYMNAME= luajit
|
|
INSTALL_ANAME= libluajit-$(ABIVER).a
|
|
INSTALL_SOSHORT1= libluajit-$(ABIVER).so
|
|
INSTALL_SOSHORT2= libluajit-$(ABIVER).so.$(MAJVER)
|
|
INSTALL_SONAME= libluajit-$(ABIVER).so.$(VERSION)
|
|
INSTALL_DYLIBSHORT1= libluajit-$(ABIVER).dylib
|
|
INSTALL_DYLIBSHORT2= libluajit-$(ABIVER).$(MAJVER).dylib
|
|
INSTALL_DYLIBNAME= libluajit-$(ABIVER).$(VERSION).dylib
|
|
INSTALL_PCNAME= luajit.pc
|
|
|
|
INSTALL_STATIC= $(INSTALL_LIB)/$(INSTALL_ANAME)
|
|
INSTALL_DYN= $(INSTALL_LIB)/$(INSTALL_SONAME)
|
|
INSTALL_SHORT1= $(INSTALL_LIB)/$(INSTALL_SOSHORT1)
|
|
INSTALL_SHORT2= $(INSTALL_LIB)/$(INSTALL_SOSHORT2)
|
|
INSTALL_T= $(INSTALL_BIN)/$(INSTALL_TNAME)
|
|
INSTALL_TSYM= $(INSTALL_BIN)/$(INSTALL_TSYMNAME)
|
|
INSTALL_PC= $(INSTALL_PKGCONFIG)/$(INSTALL_PCNAME)
|
|
|
|
INSTALL_DIRS= $(INSTALL_BIN) $(INSTALL_LIB) $(INSTALL_INC) $(INSTALL_MAN) \
|
|
$(INSTALL_PKGCONFIG) $(INSTALL_JITLIB) $(INSTALL_LMOD) $(INSTALL_CMOD)
|
|
UNINSTALL_DIRS= $(INSTALL_JITLIB) $(DESTDIR)$(INSTALL_LJLIBD) $(INSTALL_INC) \
|
|
$(INSTALL_LMOD) $(INSTALL_LMODD) $(INSTALL_CMOD) $(INSTALL_CMODD)
|
|
|
|
RM= rm -f
|
|
MKDIR= mkdir -p
|
|
RMDIR= rmdir 2>/dev/null
|
|
SYMLINK= ln -sf
|
|
INSTALL_X= install -m 0755
|
|
INSTALL_F= install -m 0644
|
|
UNINSTALL= $(RM)
|
|
LDCONFIG= ldconfig -n 2>/dev/null
|
|
SED_PC= sed -e "s|^prefix=.*|prefix=$(PREFIX)|" \
|
|
-e "s|^multilib=.*|multilib=$(MULTILIB)|" \
|
|
-e "s|^relver=.*|relver=$(RELVER)|"
|
|
ifneq ($(INSTALL_DEFINC),$(INSTALL_INC))
|
|
SED_PC+= -e "s|^includedir=.*|includedir=$(INSTALL_INC)|"
|
|
endif
|
|
|
|
FILE_T= luajit
|
|
FILE_A= libluajit.a
|
|
FILE_SO= libluajit.so
|
|
FILE_MAN= luajit.1
|
|
FILE_PC= luajit.pc
|
|
FILES_INC= lua.h lualib.h lauxlib.h luaconf.h lua.hpp luajit.h
|
|
FILES_JITLIB= bc.lua bcsave.lua dump.lua p.lua v.lua zone.lua \
|
|
dis_x86.lua dis_x64.lua dis_arm.lua dis_arm64.lua \
|
|
dis_arm64be.lua dis_ppc.lua dis_mips.lua dis_mipsel.lua \
|
|
dis_mips64.lua dis_mips64el.lua \
|
|
dis_mips64r6.lua dis_mips64r6el.lua \
|
|
vmdef.lua
|
|
|
|
ifeq (,$(findstring Windows,$(OS)))
|
|
HOST_SYS:= $(shell uname -s)
|
|
else
|
|
HOST_SYS= Windows
|
|
endif
|
|
TARGET_SYS?= $(HOST_SYS)
|
|
|
|
ifneq (,$(filter $(TARGET_SYS),Darwin iOS))
|
|
INSTALL_SONAME= $(INSTALL_DYLIBNAME)
|
|
INSTALL_SOSHORT1= $(INSTALL_DYLIBSHORT1)
|
|
INSTALL_SOSHORT2= $(INSTALL_DYLIBSHORT2)
|
|
LDCONFIG= :
|
|
SED_PC+= -e "s| -Wl,-E||"
|
|
endif
|
|
|
|
##############################################################################
|
|
|
|
INSTALL_DEP= src/luajit
|
|
|
|
default all $(INSTALL_DEP):
|
|
@echo "==== Building LuaJIT $(MMVERSION) ===="
|
|
$(MAKE) -C src
|
|
@echo "==== Successfully built LuaJIT $(MMVERSION) ===="
|
|
|
|
install: $(INSTALL_DEP)
|
|
@echo "==== Installing LuaJIT $(VERSION) to $(PREFIX) ===="
|
|
$(MKDIR) $(INSTALL_DIRS)
|
|
cd src && $(INSTALL_X) $(FILE_T) $(INSTALL_T)
|
|
cd src && test -f $(FILE_A) && $(INSTALL_F) $(FILE_A) $(INSTALL_STATIC) || :
|
|
$(RM) $(INSTALL_DYN) $(INSTALL_SHORT1) $(INSTALL_SHORT2)
|
|
cd src && test -f $(FILE_SO) && \
|
|
$(INSTALL_X) $(FILE_SO) $(INSTALL_DYN) && \
|
|
( $(LDCONFIG) $(INSTALL_LIB) || : ) && \
|
|
$(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT1) && \
|
|
$(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT2) || :
|
|
cd etc && $(INSTALL_F) $(FILE_MAN) $(INSTALL_MAN)
|
|
cd etc && $(SED_PC) $(FILE_PC) > $(FILE_PC).tmp && \
|
|
$(INSTALL_F) $(FILE_PC).tmp $(INSTALL_PC) && \
|
|
$(RM) $(FILE_PC).tmp
|
|
cd src && $(INSTALL_F) $(FILES_INC) $(INSTALL_INC)
|
|
cd src/jit && $(INSTALL_F) $(FILES_JITLIB) $(INSTALL_JITLIB)
|
|
$(SYMLINK) $(INSTALL_TNAME) $(INSTALL_TSYM)
|
|
@echo "==== Successfully installed LuaJIT $(VERSION) to $(PREFIX) ===="
|
|
|
|
uninstall:
|
|
@echo "==== Uninstalling LuaJIT $(VERSION) from $(PREFIX) ===="
|
|
$(UNINSTALL) $(INSTALL_TSYM) $(INSTALL_T) $(INSTALL_STATIC) $(INSTALL_DYN) $(INSTALL_SHORT1) $(INSTALL_SHORT2) $(INSTALL_MAN)/$(FILE_MAN) $(INSTALL_PC)
|
|
for file in $(FILES_JITLIB); do \
|
|
$(UNINSTALL) $(INSTALL_JITLIB)/$$file; \
|
|
done
|
|
for file in $(FILES_INC); do \
|
|
$(UNINSTALL) $(INSTALL_INC)/$$file; \
|
|
done
|
|
$(LDCONFIG) $(INSTALL_LIB)
|
|
$(RMDIR) $(UNINSTALL_DIRS) || :
|
|
@echo "==== Successfully uninstalled LuaJIT $(VERSION) from $(PREFIX) ===="
|
|
|
|
##############################################################################
|
|
|
|
amalg:
|
|
@echo "==== Building LuaJIT $(MMVERSION) (amalgamation) ===="
|
|
$(MAKE) -C src amalg
|
|
@echo "==== Successfully built LuaJIT $(MMVERSION) (amalgamation) ===="
|
|
|
|
clean:
|
|
$(MAKE) -C src clean
|
|
|
|
.PHONY: all install amalg clean
|
|
|
|
##############################################################################
|