mirror of
https://github.com/lua/lua
synced 2026-09-27 00:28:25 +03:00
wasm build
This commit is contained in:
parent
bbf76c45c3
commit
67b2a5eef2
3 changed files with 143 additions and 65 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -3,6 +3,8 @@
|
|||
*.so
|
||||
*.o
|
||||
*.a
|
||||
*.o.wasm
|
||||
*.a.wasm
|
||||
|
||||
manual/manual.html
|
||||
|
||||
|
|
|
|||
2
linit.c
2
linit.c
|
|
@ -44,8 +44,10 @@ static const luaL_Reg loadedlibs[] = {
|
|||
{LUA_LOADLIBNAME, luaopen_package},
|
||||
{LUA_COLIBNAME, luaopen_coroutine},
|
||||
{LUA_TABLIBNAME, luaopen_table},
|
||||
#ifndef LUA_WASM
|
||||
{LUA_IOLIBNAME, luaopen_io},
|
||||
{LUA_OSLIBNAME, luaopen_os},
|
||||
#endif
|
||||
{LUA_STRLIBNAME, luaopen_string},
|
||||
{LUA_MATHLIBNAME, luaopen_math},
|
||||
{LUA_UTF8LIBNAME, luaopen_utf8},
|
||||
|
|
|
|||
204
makefile
204
makefile
|
|
@ -2,6 +2,30 @@
|
|||
# see luaconf.h for further customization
|
||||
|
||||
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
|
||||
PLATFORM ?= linux
|
||||
RM= rm -f
|
||||
|
||||
ifeq ($(PLATFORM), wasm)
|
||||
# Wasm settings
|
||||
|
||||
# Path to the WASI SDK
|
||||
WASI_SDK_PATH ?= /opt/wasi-sdk-24
|
||||
CC = $(WASI_SDK_PATH)/bin/clang
|
||||
AR = $(WASI_SDK_PATH)/bin/llvm-ar
|
||||
AR_OPT=rcs
|
||||
RANLIB = $(WASI_SDK_PATH)/bin/llvm-ranlib
|
||||
CFLAGS =\
|
||||
-mllvm -wasm-enable-sjlj\
|
||||
--target=wasm32-wasi\
|
||||
--sysroot=$(WASI_SDK_PATH)/share/wasi-sysroot\
|
||||
-I$(WASI_SDK_PATH)/share/wasi-sysroot/include\
|
||||
-D_WASI_EMULATED_SIGNAL\
|
||||
-D_WASI_EMULATED_PROCESS_CLOCKS\
|
||||
-DLUA_USE_C89\
|
||||
-DLUA_WASM\
|
||||
|
||||
else
|
||||
# Native settings
|
||||
|
||||
# Warnings valid for both C and C++
|
||||
CWARNSCPP= \
|
||||
|
|
@ -13,16 +37,7 @@ CWARNSCPP= \
|
|||
-Wredundant-decls \
|
||||
-Wdisabled-optimization \
|
||||
-Wdouble-promotion \
|
||||
-Wmissing-declarations \
|
||||
# the next warnings might be useful sometimes,
|
||||
# but usually they generate too much noise
|
||||
# -Werror \
|
||||
# -pedantic # warns if we use jump tables \
|
||||
# -Wconversion \
|
||||
# -Wsign-conversion \
|
||||
# -Wstrict-overflow=2 \
|
||||
# -Wformat=2 \
|
||||
# -Wcast-qual \
|
||||
-Wmissing-declarations
|
||||
|
||||
|
||||
# Warnings for gcc, not valid for clang
|
||||
|
|
@ -39,53 +54,21 @@ CWARNSC= -Wdeclaration-after-statement \
|
|||
-Wc++-compat \
|
||||
-Wold-style-definition \
|
||||
|
||||
|
||||
CWARNS= $(CWARNSCPP) $(CWARNSC) $(CWARNGCC)
|
||||
|
||||
# Some useful compiler options for internal tests:
|
||||
# -DLUAI_ASSERT turns on all assertions inside Lua.
|
||||
# -DHARDSTACKTESTS forces a reallocation of the stack at every point where
|
||||
# the stack can be reallocated.
|
||||
# -DHARDMEMTESTS forces a full collection at all points where the collector
|
||||
# can run.
|
||||
# -DEMERGENCYGCTESTS forces an emergency collection at every single allocation.
|
||||
# -DEXTERNMEMCHECK removes internal consistency checking of blocks being
|
||||
# deallocated (useful when an external tool like valgrind does the check).
|
||||
# -DMAXINDEXRK=k limits range of constants in RK instruction operands.
|
||||
# -DLUA_COMPAT_5_3
|
||||
|
||||
# -pg -malign-double
|
||||
# -DLUA_USE_CTYPE -DLUA_USE_APICHECK
|
||||
|
||||
# The following options help detect "undefined behavior"s that seldom
|
||||
# create problems; some are only available in newer gcc versions. To
|
||||
# use some of them, we also have to define an environment variable
|
||||
# ASAN_OPTIONS="detect_invalid_pointer_pairs=2".
|
||||
# -fsanitize=undefined
|
||||
# -fsanitize=pointer-subtract -fsanitize=address -fsanitize=pointer-compare
|
||||
# TESTS= -DLUA_USER_H='"ltests.h"' -O0 -g
|
||||
|
||||
|
||||
LOCAL = $(TESTS) $(CWARNS)
|
||||
|
||||
|
||||
# enable Linux goodies
|
||||
MYCFLAGS= $(LOCAL) -std=c99 -DLUA_USE_LINUX -DLUA_USE_READLINE
|
||||
MYLDFLAGS= $(LOCAL) -Wl,-E
|
||||
MYCFLAGS= $(CWARNS) -std=c99 -DLUA_USE_LINUX -DLUA_USE_READLINE
|
||||
MYLDFLAGS= $(CWARNS) -Wl,-E
|
||||
MYLIBS= -ldl -lreadline
|
||||
|
||||
|
||||
CC= gcc
|
||||
CFLAGS= -Wall -O2 $(MYCFLAGS) -fno-stack-protector -fno-common -march=native
|
||||
AR= ar rc
|
||||
AR= ar
|
||||
AR_OPT=rc
|
||||
RANLIB= ranlib
|
||||
RM= rm -f
|
||||
|
||||
|
||||
endif
|
||||
|
||||
# == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
|
||||
|
||||
|
||||
LIBS = -lm
|
||||
|
||||
CORE_T= liblua.a
|
||||
|
|
@ -93,54 +76,144 @@ 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 ltests.o
|
||||
AUX_O= lauxlib.o
|
||||
LIB_O= lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o \
|
||||
LIB_O= lbaselib.o ldblib.o lmathlib.o ltablib.o lstrlib.o \
|
||||
lutf8lib.o loadlib.o lcorolib.o linit.o
|
||||
|
||||
LUA_T= lua
|
||||
LUA_O= lua.o
|
||||
ifeq ($(PLATFORM), wasm)
|
||||
|
||||
# Append .wasm extention to objects
|
||||
CORE_O := $(CORE_O:.o=.o.wasm)
|
||||
AUX_O := $(AUX_O:.o=.o.wasm)
|
||||
LIB_O := $(LIB_O:.o=.o.wasm)
|
||||
CORE_T := $(CORE_T:.a=.a.wasm)
|
||||
|
||||
ALL_T= $(CORE_T) $(LUA_T)
|
||||
ALL_O= $(CORE_O) $(LUA_O) $(AUX_O) $(LIB_O)
|
||||
# implicit rule for .wasm objects
|
||||
%.o.wasm: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.wat: %.o.wasm
|
||||
wasm2wat --enable-all $^ -o $@
|
||||
|
||||
else
|
||||
|
||||
# Add os related libs
|
||||
LIB_O += liolib.o loslib.o
|
||||
|
||||
endif
|
||||
|
||||
ALL_O= $(CORE_O) $(AUX_O) $(LIB_O)
|
||||
ALL_WAT=$(ALL_O:.o.wasm=.wat)
|
||||
ALL_A= $(CORE_T)
|
||||
|
||||
all: $(ALL_T)
|
||||
|
||||
all: $(ALL_A)
|
||||
touch all
|
||||
|
||||
o: $(ALL_O)
|
||||
@echo $(ALL_O)
|
||||
|
||||
a: $(ALL_A)
|
||||
@echo $(ALL_A)
|
||||
|
||||
$(CORE_T): $(CORE_O) $(AUX_O) $(LIB_O)
|
||||
$(AR) $@ $?
|
||||
$(CORE_T): $(ALL_O)
|
||||
$(AR) $(AR_OPT) $@ $?
|
||||
$(RANLIB) $@
|
||||
|
||||
$(LUA_T): $(LUA_O) $(CORE_T)
|
||||
$(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(CORE_T) $(LIBS) $(MYLIBS) $(DL)
|
||||
|
||||
|
||||
clean:
|
||||
$(RM) $(ALL_T) $(ALL_O)
|
||||
$(RM) $(ALL_O) $(ALL_WAT) $(ALL_A)
|
||||
|
||||
ifeq ($(PLATFORM), wasm)
|
||||
|
||||
wat: $(ALL_WAT)
|
||||
@echo $(ALL_WAT)
|
||||
|
||||
depend:
|
||||
@$(CC) $(CFLAGS) -MM *.c > .d
|
||||
@sed -e 's/\.o:/.o.wasm:/' .d
|
||||
else
|
||||
depend:
|
||||
@$(CC) $(CFLAGS) -MM *.c
|
||||
endif
|
||||
|
||||
echo:
|
||||
@echo "CC = $(CC)"
|
||||
@echo "CFLAGS = $(CFLAGS)"
|
||||
@echo "AR = $(AR)"
|
||||
@echo "AR_OPT = $(AR_OPT)"
|
||||
@echo "RANLIB = $(RANLIB)"
|
||||
@echo "RM = $(RM)"
|
||||
@echo "MYCFLAGS = $(MYCFLAGS)"
|
||||
@echo "MYLDFLAGS = $(MYLDFLAGS)"
|
||||
@echo "MYLIBS = $(MYLIBS)"
|
||||
@echo "DL = $(DL)"
|
||||
|
||||
$(ALL_O): makefile ltests.h
|
||||
|
||||
# DO NOT EDIT
|
||||
# automatically made with 'gcc -MM l*.c'
|
||||
|
||||
ifeq ($(PLATFORM), wasm)
|
||||
lapi.o.wasm: 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.wasm: lauxlib.c lprefix.h lua.h luaconf.h lauxlib.h
|
||||
lbaselib.o.wasm: lbaselib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lcode.o.wasm: 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.wasm: lcorolib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lctype.o.wasm: lctype.c lprefix.h lctype.h lua.h luaconf.h llimits.h
|
||||
ldblib.o.wasm: ldblib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
ldebug.o.wasm: 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.wasm: 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.wasm: ldump.c lprefix.h lua.h luaconf.h lobject.h llimits.h lstate.h \
|
||||
ltm.h lzio.h lmem.h lundump.h
|
||||
lfunc.o.wasm: 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.wasm: 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.wasm: linit.c lprefix.h lua.h luaconf.h lualib.h lauxlib.h
|
||||
liolib.o.wasm: liolib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
llex.o.wasm: 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.wasm: lmathlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lmem.o.wasm: 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.wasm: loadlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lobject.o.wasm: 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.wasm: lopcodes.c lprefix.h lopcodes.h llimits.h lua.h luaconf.h
|
||||
loslib.o.wasm: loslib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lparser.o.wasm: 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.wasm: 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.wasm: 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.wasm: lstrlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
ltable.o.wasm: 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.wasm: ltablib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
ltests.o.wasm: ltests.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
|
||||
lobject.h ltm.h lzio.h lmem.h lauxlib.h lcode.h llex.h lopcodes.h \
|
||||
lparser.h lctype.h ldebug.h ldo.h lfunc.h lopnames.h lstring.h lgc.h \
|
||||
ltable.h lualib.h
|
||||
ltm.o.wasm: 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.wasm: lua.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lundump.o.wasm: 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.wasm: lutf8lib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
|
||||
lvm.o.wasm: 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.wasm: lzio.c lprefix.h lua.h luaconf.h llimits.h lmem.h lstate.h \
|
||||
lobject.h ltm.h lzio.h
|
||||
else
|
||||
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
|
||||
|
|
@ -206,5 +279,6 @@ lvm.o: lvm.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.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
|
||||
endif
|
||||
|
||||
# (end of Makefile)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue