mirror of
https://github.com/holub/mame
synced 2025-05-28 08:33:05 +03:00

Compile Lua as C++. When Lua is compiled as C, it uses setjmp/longjmp for error handling, resulting in failure to unwind intermediate stack frames. Trying to ensure no objects with non-trivial destructors are in scope when raising a Lua error is error-prone. In particular, converting an exception to a Lua error becomes convoluted, and raising a Lua error from a constructor is effectively impossible. Updated Lua to 5.4.4 - this includes a brand-new garbage collector implementation with better performance. The main thing removed is the deprecated bitlib. Updated sol2 to version 3.3.0 - this adds support for Lua 5.4 and fixes a number of issues, including not correctly handling errors when Lua is built as C++. Updated LuaFileSystem to version 1.8.0 - this adds support for symbolic links on Windows, as well as Lua 5.4 compatibility. Updated LuaSQLite3 to version 0.9.5 - this fixes issues in multi-threaded environments, as well as Lua 5.4 compatibility. Fixed double-free after attempting to construct a debugger expression from Lua with an invalid string, and exposed expression error to Lua in a better way. Added warning level print function to Lua. Fixed saving cheats with shift operators in expressions, although this code isn't actually used as there's no cheat editor.
223 lines
7.5 KiB
Makefile
223 lines
7.5 KiB
Makefile
# Makefile for building Lua
|
|
# See ../doc/readme.html for installation and customization instructions.
|
|
|
|
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
|
|
|
|
# Your platform. See PLATS for possible values.
|
|
PLAT= guess
|
|
|
|
CC= gcc -std=gnu99
|
|
CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS)
|
|
LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
|
|
LIBS= -lm $(SYSLIBS) $(MYLIBS)
|
|
|
|
AR= ar rcu
|
|
RANLIB= ranlib
|
|
RM= rm -f
|
|
UNAME= uname
|
|
|
|
SYSCFLAGS=
|
|
SYSLDFLAGS=
|
|
SYSLIBS=
|
|
|
|
MYCFLAGS=
|
|
MYLDFLAGS=
|
|
MYLIBS=
|
|
MYOBJS=
|
|
|
|
# Special flags for compiler modules; -Os reduces code size.
|
|
CMCFLAGS=
|
|
|
|
# == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE =======
|
|
|
|
PLATS= guess aix bsd c89 freebsd generic linux linux-readline macosx mingw posix solaris
|
|
|
|
LUA_A= liblua.a
|
|
CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o
|
|
LIB_O= lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o
|
|
BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
|
|
|
|
LUA_T= lua
|
|
LUA_O= lua.o
|
|
|
|
LUAC_T= luac
|
|
LUAC_O= luac.o
|
|
|
|
ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
|
|
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
|
|
ALL_A= $(LUA_A)
|
|
|
|
# Targets start here.
|
|
default: $(PLAT)
|
|
|
|
all: $(ALL_T)
|
|
|
|
o: $(ALL_O)
|
|
|
|
a: $(ALL_A)
|
|
|
|
$(LUA_A): $(BASE_O)
|
|
$(AR) $@ $(BASE_O)
|
|
$(RANLIB) $@
|
|
|
|
$(LUA_T): $(LUA_O) $(LUA_A)
|
|
$(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
|
|
|
|
$(LUAC_T): $(LUAC_O) $(LUA_A)
|
|
$(CC) -o $@ $(LDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS)
|
|
|
|
test:
|
|
./$(LUA_T) -v
|
|
|
|
clean:
|
|
$(RM) $(ALL_T) $(ALL_O)
|
|
|
|
depend:
|
|
@$(CC) $(CFLAGS) -MM l*.c
|
|
|
|
echo:
|
|
@echo "PLAT= $(PLAT)"
|
|
@echo "CC= $(CC)"
|
|
@echo "CFLAGS= $(CFLAGS)"
|
|
@echo "LDFLAGS= $(LDFLAGS)"
|
|
@echo "LIBS= $(LIBS)"
|
|
@echo "AR= $(AR)"
|
|
@echo "RANLIB= $(RANLIB)"
|
|
@echo "RM= $(RM)"
|
|
@echo "UNAME= $(UNAME)"
|
|
|
|
# Convenience targets for popular platforms.
|
|
ALL= all
|
|
|
|
help:
|
|
@echo "Do 'make PLATFORM' where PLATFORM is one of these:"
|
|
@echo " $(PLATS)"
|
|
@echo "See doc/readme.html for complete instructions."
|
|
|
|
guess:
|
|
@echo Guessing `$(UNAME)`
|
|
@$(MAKE) `$(UNAME)`
|
|
|
|
AIX aix:
|
|
$(MAKE) $(ALL) CC="xlc" CFLAGS="-O2 -DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-ldl" SYSLDFLAGS="-brtl -bexpall"
|
|
|
|
bsd:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-Wl,-E"
|
|
|
|
c89:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_C89" CC="gcc -std=c89"
|
|
@echo ''
|
|
@echo '*** C89 does not guarantee 64-bit integers for Lua.'
|
|
@echo '*** Make sure to compile all external Lua libraries'
|
|
@echo '*** with LUA_USE_C89 to ensure consistency'
|
|
@echo ''
|
|
|
|
FreeBSD NetBSD OpenBSD freebsd:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX -DLUA_USE_READLINE -I/usr/include/edit" SYSLIBS="-Wl,-E -ledit" CC="cc"
|
|
|
|
generic: $(ALL)
|
|
|
|
Linux linux: linux-noreadline
|
|
|
|
linux-noreadline:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
|
|
|
|
linux-readline:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX -DLUA_USE_READLINE" SYSLIBS="-Wl,-E -ldl -lreadline"
|
|
|
|
Darwin macos macosx:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX -DLUA_USE_READLINE" SYSLIBS="-lreadline"
|
|
|
|
mingw:
|
|
$(MAKE) "LUA_A=lua54.dll" "LUA_T=lua.exe" \
|
|
"AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \
|
|
"SYSCFLAGS=-DLUA_BUILD_AS_DLL" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe
|
|
$(MAKE) "LUAC_T=luac.exe" luac.exe
|
|
|
|
posix:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX"
|
|
|
|
SunOS solaris:
|
|
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN -D_REENTRANT" SYSLIBS="-ldl"
|
|
|
|
# Targets that do not create files (not all makes understand .PHONY).
|
|
.PHONY: all $(PLATS) help test clean default o a depend echo
|
|
|
|
# Compiler modules may use special flags.
|
|
llex.o:
|
|
$(CC) $(CFLAGS) $(CMCFLAGS) -c llex.c
|
|
|
|
lparser.o:
|
|
$(CC) $(CFLAGS) $(CMCFLAGS) -c lparser.c
|
|
|
|
lcode.o:
|
|
$(CC) $(CFLAGS) $(CMCFLAGS) -c lcode.c
|
|
|
|
# DO NOT DELETE
|
|
|
|
lapi.o: lapi.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
|
|
lobject.h ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lstring.h \
|
|
ltable.h lundump.h lvm.h
|
|
lauxlib.o: lauxlib.c lprefix.h lua.h luaconf.h lauxlib.h
|
|
lbaselib.o: lbaselib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
lcode.o: lcode.c lprefix.h lua.h luaconf.h lcode.h llex.h lobject.h \
|
|
llimits.h lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h \
|
|
ldo.h lgc.h lstring.h ltable.h lvm.h
|
|
lcorolib.o: lcorolib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
lctype.o: lctype.c lprefix.h lctype.h lua.h luaconf.h llimits.h
|
|
ldblib.o: ldblib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
ldebug.o: ldebug.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
|
|
lobject.h ltm.h lzio.h lmem.h lcode.h llex.h lopcodes.h lparser.h \
|
|
ldebug.h ldo.h lfunc.h lstring.h lgc.h ltable.h lvm.h
|
|
ldo.o: ldo.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
|
|
lobject.h ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lopcodes.h \
|
|
lparser.h lstring.h ltable.h lundump.h lvm.h
|
|
ldump.o: ldump.c lprefix.h lua.h luaconf.h lobject.h llimits.h lstate.h \
|
|
ltm.h lzio.h lmem.h lundump.h
|
|
lfunc.o: lfunc.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
|
|
llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h
|
|
lgc.o: lgc.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
|
|
llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h
|
|
linit.o: linit.c lprefix.h lua.h luaconf.h lualib.h lauxlib.h
|
|
liolib.o: liolib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
llex.o: llex.c lprefix.h lua.h luaconf.h lctype.h llimits.h ldebug.h \
|
|
lstate.h lobject.h ltm.h lzio.h lmem.h ldo.h lgc.h llex.h lparser.h \
|
|
lstring.h ltable.h
|
|
lmathlib.o: lmathlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
lmem.o: lmem.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
|
|
llimits.h ltm.h lzio.h lmem.h ldo.h lgc.h
|
|
loadlib.o: loadlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
lobject.o: lobject.c lprefix.h lua.h luaconf.h lctype.h llimits.h \
|
|
ldebug.h lstate.h lobject.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h \
|
|
lvm.h
|
|
lopcodes.o: lopcodes.c lprefix.h lopcodes.h llimits.h lua.h luaconf.h
|
|
loslib.o: loslib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
lparser.o: lparser.c lprefix.h lua.h luaconf.h lcode.h llex.h lobject.h \
|
|
llimits.h lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h \
|
|
ldo.h lfunc.h lstring.h lgc.h ltable.h
|
|
lstate.o: lstate.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
|
|
lobject.h ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h llex.h \
|
|
lstring.h ltable.h
|
|
lstring.o: lstring.c lprefix.h lua.h luaconf.h ldebug.h lstate.h \
|
|
lobject.h llimits.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h
|
|
lstrlib.o: lstrlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
ltable.o: ltable.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
|
|
llimits.h ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h
|
|
ltablib.o: ltablib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
ltm.o: ltm.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
|
|
llimits.h ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h
|
|
lua.o: lua.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
luac.o: luac.c lprefix.h lua.h luaconf.h lauxlib.h ldebug.h lstate.h \
|
|
lobject.h llimits.h ltm.h lzio.h lmem.h lopcodes.h lopnames.h lundump.h
|
|
lundump.o: lundump.c lprefix.h lua.h luaconf.h ldebug.h lstate.h \
|
|
lobject.h llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h \
|
|
lundump.h
|
|
lutf8lib.o: lutf8lib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
|
lvm.o: lvm.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
|
|
llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h \
|
|
ltable.h lvm.h ljumptab.h
|
|
lzio.o: lzio.c lprefix.h lua.h luaconf.h llimits.h lmem.h lstate.h \
|
|
lobject.h ltm.h lzio.h
|
|
|
|
# (end of Makefile)
|