libnethack pr385
roll parts of pr385 into source tree
This does not take the PR as is.
Unlike the PR, this streamlines and minimizes the integration somewhat:
- use hints/include mechanism instead of creating alternative
Makefile.dat, Makefile.src, Makefile.top, Makefile.utl in sys/lib;
those would have been a maintenance nightmare.
- don't have alternative mkmkfile.sh and setup.sh in sys/lib.
- sys/lib/libnethackmain.c differed from sys/unix/unixmain.c by
very little, so just place a small bit of conditional code at the
top of sys/unix/unixmain.c instead.
- changed the conditional code bits from __EMSCRIPTEN__ to
CROSS_TO_WASM.
- You should be able to build the wasm result by:
cd sys/unix ; sh setup.sh hints/linux.2020 ; cd ../..
make fetch-lua (<-one time)
make WANT_LIBNH all
- You should be able to build LIBNBH by:
cd sys/unix ; sh setup.sh hints/linux.2020 ; cd ../..
make fetch-lua (<-one time)
make CROSS_TO_WASM=1 all
As it is currently coded, winshim.c requires C99.
This commit is contained in:
@@ -18,9 +18,9 @@ $(TARGETPFX)vidvesa.o : ../sys/msdos/vidvesa.c ../sys/msdos/portio.h \
|
||||
$(TARGETPFX)vidstub.o : ../sys/msdos/vidvesa.c ../sys/msdos/portio.h \
|
||||
$(HACK_H)
|
||||
$(TARGETPFX)tile.o : tile.c
|
||||
$(GAMEBIN) : $(HOBJ)
|
||||
$(GAMEBIN) : $(HOBJ) $(LUACROSSLIB)
|
||||
$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAMEBIN) \
|
||||
$(HOBJ) $(WINLIB) $(TARGET_LIBS) $(LUALIB)
|
||||
$(HOBJ) $(WINLIB) $(TARGET_LIBS)
|
||||
#
|
||||
.PHONY: dospkg
|
||||
dospkg: $(GAMEBIN) $(TARGETPFX)recover.exe ../dat/nhtiles.bmp
|
||||
@@ -81,9 +81,9 @@ $(TARGETPFX)monsters.iff: ../win/share/monsters.txt ../util/txt2iff
|
||||
../util/txt2iff ../win/share/monsters.txt $@
|
||||
$(TARGETPFX)other.iff: ../win/share/other.txt ../util/txt2iff
|
||||
../util/txt2iff ../win/share/other.txt $@
|
||||
$(GAMEBIN) : $(HOBJ)
|
||||
$(GAMEBIN) : $(HOBJ) $(LUACROSSLIB)
|
||||
$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAMEBIN) \
|
||||
$(HOBJ) $(WINLIB) $(TARGET_LIBS) $(LUALIB)
|
||||
$(HOBJ) $(WINLIB) $(TARGET_LIBS)
|
||||
#
|
||||
.PHONY: amigapkg
|
||||
amigapkg: $(GAMEBIN) $(TARGETPFX)recover.exe ../dat/nhtiles.bmp
|
||||
@@ -119,6 +119,34 @@ amigapkg: $(GAMEBIN) $(TARGETPFX)recover.exe ../dat/nhtiles.bmp
|
||||
@echo amiga package zip file $(TARGETPFX)NH370AMI.ZIP
|
||||
endif # CROSS_TO_AMIGA
|
||||
|
||||
ifdef CROSS_TO_WASM
|
||||
$(WASM_TARGET): $(HOBJ) $(LUACROSSLIB) Makefile $(WASM_DATA_DIR)
|
||||
-rm $@
|
||||
$(TARGET_CC) $(EMCC_LFLAGS) $(EMCC_CFLAGS) -o $@ \
|
||||
$(HOBJ) $(TARGET_LIBS)
|
||||
|
||||
$(WASM_DATA_DIR):
|
||||
-mkdir -p $(WASM_DATA_DIR)
|
||||
touch $(WASM_DATA_DIR)/perm
|
||||
touch $(WASM_DATA_DIR)/record
|
||||
touch $(WASM_DATA_DIR)/logfile
|
||||
touch $(WASM_DATA_DIR)/xlogfile
|
||||
( cd ..; $(MAKE) dlb )
|
||||
( cd ..; $(MAKE) dofiles-dlb )
|
||||
cp ../sys/lib/sysconf $(WASM_DATA_DIR)/sysconf
|
||||
#
|
||||
.PHONY: wasmpkg
|
||||
wasmpkg:
|
||||
@echo "$(WASM_TARGET) done."
|
||||
$(TARGETPFX)unixmain.o : ../sys/unix/unixmain.c $(HACK_H)
|
||||
$(TARGETPFX)unixres.o : ../sys/unix/unixres.c $(HACK_H)
|
||||
$(TARGETPFX)unixunix.o : ../sys/unix/unixunix.c $(HACK_H)
|
||||
$(TARGETPFX)ioctl.o : ../sys/share/ioctl.c $(HACK_H)
|
||||
$(TARGETPFX)unixtty.o : ../sys/share/unixtty.c $(HACK_H)
|
||||
$(TARGETPFX)winshim.o : ../win/shim/winshim.c $(HACK_H)
|
||||
endif # CROSS_TO_WASM
|
||||
#
|
||||
|
||||
ifdef CROSS_SHARED
|
||||
# shared file dependencies
|
||||
$(TARGETPFX)pcmain.o : ../sys/share/pcmain.c $(HACK_H)
|
||||
@@ -141,12 +169,9 @@ $(LUACROSSLIB): $(LUALIBOBJS)
|
||||
$(TARGET_AR) rcS $@ $(LUAOBJFILES2)
|
||||
$(TARGET_AR) rcS $@ $(LUAOBJFILES3)
|
||||
$(TARGET_AR) rcs $@ $(LUAOBJFILES4)
|
||||
ifdef WANT_WIN_CURSES
|
||||
$(TARGETPFX)pdclib.a : $(PDCLIBOBJS) $(PDCOBJS)
|
||||
if [ -f $@ ]; then rm $@; fi;
|
||||
$(TARGET_AR) rcs $@ $(PDCLIBOBJS) $(PDCOBJS)
|
||||
endif
|
||||
#
|
||||
|
||||
# $(TARGET_AR) rcs $@ $(LUALIBOBJS)
|
||||
|
||||
# Lua src
|
||||
$(TARGETPFX)lapi.o : $(LUATOP)/src/lapi.c
|
||||
$(TARGETPFX)lauxlib.o : $(LUATOP)/src/lauxlib.c
|
||||
@@ -184,6 +209,11 @@ $(TARGETPFX)lzio.o : $(LUATOP)/src/lzio.c
|
||||
endif # BUILD_LUA
|
||||
|
||||
ifdef BUILD_PDCURSES
|
||||
ifdef WANT_WIN_CURSES
|
||||
$(TARGETPFX)pdclib.a : $(PDCLIBOBJS) $(PDCOBJS)
|
||||
if [ -f $@ ]; then rm $@; fi;
|
||||
$(TARGET_AR) rcs $@ $(PDCLIBOBJS) $(PDCOBJS)
|
||||
endif
|
||||
# PDCurses src
|
||||
$(TARGETPFX)addch.o : $(PDCTOP)/pdcurses/addch.c
|
||||
$(TARGETPFX)addchstr.o : $(PDCTOP)/pdcurses/addchstr.c
|
||||
|
||||
@@ -24,6 +24,14 @@ override TARGETPFX = $(TARGETDIR)/
|
||||
override TARGET_LIBS=
|
||||
endif
|
||||
|
||||
ifdef CROSS_TO_WASM
|
||||
BUILD_LUA=1
|
||||
override TARGET = wasm
|
||||
override TARGETDIR=../targets/$(TARGET)
|
||||
override TARGETPFX = $(TARGETDIR)/
|
||||
override TARGET_LIBS=
|
||||
endif
|
||||
|
||||
ifdef BUILD_LUA
|
||||
#===============-=================================================
|
||||
# LUA library
|
||||
@@ -51,7 +59,7 @@ LUAOBJFILES4 = $(TARGETPFX)lstring.o $(TARGETPFX)lstrlib.o \
|
||||
$(TARGETPFX)ltm.o $(TARGETPFX)lundump.o \
|
||||
$(TARGETPFX)lutf8lib.o $(TARGETPFX)lvm.o $(TARGETPFX)lzio.o
|
||||
LUALIBOBJS = $(LUAOBJFILES1) $(LUAOBJFILES2) $(LUAOBJFILES3) $(LUAOBJFILES4)
|
||||
LUACROSSLIB = $(TARGETPFX)$(O)lua$(subst .,,$(LUA_VERSION)).a
|
||||
LUACROSSLIB = $(TARGETPFX)lua$(subst .,,$(LUA_VERSION)).a
|
||||
LUAINCL = -I$(LUASRCDIR)
|
||||
BUILDMORE += $(LUACROSSLIB)
|
||||
override TARGET_LIBS += $(LUACROSSLIB) -lm
|
||||
@@ -255,8 +263,8 @@ override WINLIB=
|
||||
override LUALIB=
|
||||
override GAMEBIN = $(TARGETPFX)nethack
|
||||
override PACKAGE= amigapkg
|
||||
PREGAME = mkdir -p ../targets/amiga
|
||||
CLEANMORE += rm -r ../targets/amiga
|
||||
PREGAME = mkdir -p $(TARGETDIR)
|
||||
CLEANMORE += rm -r $(TARGETDIR)
|
||||
# ../util/txt2iff
|
||||
#
|
||||
ifdef WANT_WIN_CURSES
|
||||
@@ -269,20 +277,98 @@ $(TARGETPFX)%.o : ../outdated/sys/amiga/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) -o$@ $<
|
||||
endif # CROSS_TO_AMIGA
|
||||
#=================================================================
|
||||
ifdef CROSS_SHARED
|
||||
ifdef WANT_WIN_CURSES
|
||||
# rules for pdcurses dos-specific files
|
||||
$(TARGETPFX)%.o : $(PDCTOP)/sdl1/%.c
|
||||
$(TARGET_CC) $(PDCINCL) $(TARGET_CFLAGS) -o$@ $<
|
||||
endif # WANT_WIN_CURSES
|
||||
# Rule for LUA files
|
||||
$(TARGETPFX)%.o : $(LUATOP)/src/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(LUA_FLAGS) -o$@ $<
|
||||
|
||||
ifdef CROSS_TO_WASM
|
||||
#===============-=================================================
|
||||
# WASM
|
||||
# originally from https://github.com/NetHack/NetHack/pull/385
|
||||
#===============-=================================================
|
||||
#
|
||||
WASM_DATA_DIR = $(TARGETPFX)wasm-data/
|
||||
WASM_TARGET = $(TARGETPFX)nethack.js
|
||||
EMCC_LFLAGS = -s SINGLE_FILE=1
|
||||
EMCC_LFLAGS += -s WASM=1
|
||||
EMCC_LFLAGS += -s ALLOW_TABLE_GROWTH
|
||||
EMCC_LFLAGS += -s ASYNCIFY -s ASYNCIFY_IMPORTS='["local_callback"]'
|
||||
EMCC_LFLAGS += -O3
|
||||
EMCC_LFLAGS += -s MODULARIZE
|
||||
EMCC_LFLAGS += -s EXPORTED_FUNCTIONS='["_main", "_shim_graphics_set_callback"]'
|
||||
EMCC_LFLAGS += -s EXPORTED_RUNTIME_METHODS='["cwrap", "ccall", "addFunction", \
|
||||
"removeFunction", "UTF8ToString", "getValue", "setValue"]'
|
||||
EMCC_LFLAGS += -s ERROR_ON_UNDEFINED_SYMBOLS=0
|
||||
EMCC_LFLAGS += --embed-file $(WASM_DATA_DIR)
|
||||
# For a list of EMCC settings:
|
||||
# https://github.com/emscripten-core/emscripten/blob/master/src/settings.js
|
||||
#
|
||||
# WASM C flags
|
||||
EMCC_CFLAGS=
|
||||
EMCC_CFLAGS += -Wall
|
||||
EMCC_CFLAGS += -Werror
|
||||
#EMCC_CFLAGS += -s DISABLE_EXCEPTION_CATCHING=0
|
||||
EMCC_DEBUG_CFLAGS += -s ASSERTIONS=1
|
||||
#EMCC_DEBUG_CFLAGS += -s ASSERTIONS=2
|
||||
EMCC_DEBUG_CFLAGS += -s STACK_OVERFLOW_CHECK=2
|
||||
EMCC_DEBUG_CFLAGS += -s SAFE_HEAP=1
|
||||
EMCC_DEBUG_CFLAGS += -s LLD_REPORT_UNDEFINED=1
|
||||
#EMCC_DEBUG_CFLAGS += -s EXCEPTION_DEBUG=1
|
||||
#EMCC_DEBUG_CFLAGS += -fsanitize=undefined -fsanitize=address -fsanitize=leak
|
||||
#EMCC_DEBUG_CFLAGS += -s EXIT_RUNTIME
|
||||
EMCC_PROD_CFLAGS += -O3
|
||||
ifdef WASM_DEBUG
|
||||
EMCC_CFLAGS += $(EMCC_DEBUG_CFLAGS)
|
||||
else
|
||||
EMCC_CFLAGS += $(EMCC_PROD_CFLAGS)
|
||||
endif
|
||||
#
|
||||
# Override the build tools and some obj files to
|
||||
# reflect emscripten
|
||||
override TARGET_CC = emcc
|
||||
override TARGET_CXX = emcc
|
||||
override TARGET_AR = emar
|
||||
override TARGET_CFLAGS = $(EMCC_CFLAGS) -c \
|
||||
-I../include \
|
||||
$(LUAINCL) -DDLB $(PDCURSESDEF) \
|
||||
-DNOTTYGRAPHICS -DSHIM_GRAPHICS -DDEFAULT_WINDOW_SYS=\"shim\" \
|
||||
-DCROSSCOMPILE -DCROSSCOMPILE_TARGET -DCROSS_TO_WASM -DLIBNH
|
||||
override TARGET_CXXFLAGS = $(TARGET_CFLAGS)
|
||||
override TARGET_LINK = $(TARGET_CC)
|
||||
override TARGET_LFLAGS= $(EMCC_LFLAGS)
|
||||
override SYSSRC = ../sys/unix/unixmain.c \
|
||||
../sys/share/ioctl.c ../sys/share/unixtty.c \
|
||||
../sys/unix/unixunix.c ../sys/unix/unixres.c \
|
||||
../win/shim/winshim.c
|
||||
override SYSOBJ= $(TARGETPFX)unixmain.o \
|
||||
$(TARGETPFX)ioctl.o $(TARGETPFX)unixtty.o \
|
||||
$(TARGETPFX)unixunix.o $(TARGETPFX)unixres.o \
|
||||
$(TARGETPFX)winshim.o
|
||||
override WINLIB = emranlib
|
||||
override LUALIB=
|
||||
override PACKAGE= wasmpkg
|
||||
override REGEXOBJ = $(TARGETPFX)posixregex.o
|
||||
RANLIB=$(EMRANLIB)
|
||||
#VARDATND += nhtiles.bmp
|
||||
override GAME=
|
||||
MOREALL += ( cd src ; $(MAKE) pregame ; $(MAKE) $(WASM_TARGET) )
|
||||
PREGAME = mkdir -p $(TARGETDIR)
|
||||
CLEANMORE += rm -f -r $(TARGETDIR)
|
||||
# Rule for file in sys/unix
|
||||
$(TARGETPFX)%.o : ../sys/unix/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) -c -o$@ $<
|
||||
# Rule for files in win/shim
|
||||
$(TARGETPFX)%.o : ../win/shim/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) -c -o$@ $<
|
||||
endif # CROSS_TO_WASM
|
||||
#=================================================================
|
||||
|
||||
ifdef WANT_WIN_CURSES
|
||||
ifdef BUILD_PDCURSES
|
||||
# Rules for PDCurses files
|
||||
$(TARGETPFX)%.o : $(PDCTOP)/pdcurses/%.c
|
||||
$(TARGET_CC) $(PDCINCL) $(TARGET_CFLAGS) -o$@ $<
|
||||
endif # BUILD_PDCURSES
|
||||
endif # WANT_WIN_CURSES
|
||||
|
||||
ifdef CROSS_SHARED
|
||||
# Rules for win/share files
|
||||
$(TARGETPFX)%.o : ../win/share/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) -o$@ $<
|
||||
@@ -290,6 +376,12 @@ $(TARGETPFX)%.o : ../win/share/%.c
|
||||
$(TARGETPFX)%.o : ../util/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) -o$@ $<
|
||||
endif # CROSS_SHARED
|
||||
|
||||
ifdef BUILD_LUA
|
||||
# Rule for LUA files
|
||||
$(TARGETPFX)%.o : $(LUATOP)/src/%.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(LUA_FLAGS) -o$@ $<
|
||||
endif # BUILD_LUA
|
||||
#
|
||||
# End of cross-compiling -PRE section
|
||||
#===============-=================================================
|
||||
|
||||
@@ -47,6 +47,10 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef WANT_LIBNH
|
||||
WANT_DEFAULT=shim
|
||||
endif
|
||||
|
||||
# Make sure that a default interface is specified; this doesn't guarantee
|
||||
# sanity for something like 'make WANT_WIN_CURSES=1 WANT_DEFAULT=X11' but
|
||||
# 'makedefs -v' would notice, complain, and quit causing 'make' to quit.
|
||||
|
||||
Reference in New Issue
Block a user