#===============-================================================= # NetHack 3.7 include/cross-pre $NHDT-Date: 1597332785 2020/08/13 15:33:05 $ $NHDT-Branch: NetHack-3.7 $ # # Cross-compiling -PRE section # ifdef CROSS_TO_MSDOS CROSS=1 BUILD_TARGET_LUA=1 BUILD_PDCURSES=1 CROSS_SHARED=1 override TARGET = msdos override TARGETDIR=../targets/$(TARGET) override TARGETPFX = $(TARGETDIR)/ override TARGET_LIBS= endif ifdef CROSS_TO_WASM CROSS=1 BUILD_TARGET_LUA=1 HACKDIR=/ PREFIX= override TARGET = wasm override TARGETDIR=../targets/$(TARGET) override TARGETPFX = $(TARGETDIR)/ override TARGET_LIBS= endif ifdef CROSS override PREGAME= override BUILDMORE= override CLEANMORE= override PACKAGE= endif ifdef BUILD_TARGET_LUA #===============-================================================= # LUA library # Source from http://www.lua.org/ftp/lua-5.4.4.tar.gz #================================================================= LUA_VERSION ?=5.4.4 LUATOP ?= ../lib/lua-$(LUA_VERSION) LUASRCDIR ?= $(LUATOP)/src LUAOBJFILES1 = $(TARGETPFX)lapi.o $(TARGETPFX)lauxlib.o \ $(TARGETPFX)lbaselib.o $(TARGETPFX)lcode.o \ $(TARGETPFX)lcorolib.o $(TARGETPFX)lctype.o \ $(TARGETPFX)ldblib.o ifeq "$(LUA_VERSION)" "5.3.5" LUAOBJFILES1 += $(TARGETPFX)lbitlib.o endif LUAOBJFILES2 = $(TARGETPFX)ldebug.o $(TARGETPFX)ldo.o $(TARGETPFX)ldump.o \ $(TARGETPFX)lfunc.o $(TARGETPFX)lgc.o $(TARGETPFX)linit.o \ $(TARGETPFX)liolib.o $(TARGETPFX)llex.o LUAOBJFILES3 = $(TARGETPFX)lmathlib.o $(TARGETPFX)lmem.o \ $(TARGETPFX)loadlib.o $(TARGETPFX)lobject.o \ $(TARGETPFX)lopcodes.o $(TARGETPFX)loslib.o \ $(TARGETPFX)lparser.o $(TARGETPFX)lstate.o LUAOBJFILES4 = $(TARGETPFX)lstring.o $(TARGETPFX)lstrlib.o \ $(TARGETPFX)ltable.o $(TARGETPFX)ltablib.o \ $(TARGETPFX)ltm.o $(TARGETPFX)lundump.o \ $(TARGETPFX)lutf8lib.o $(TARGETPFX)lvm.o $(TARGETPFX)lzio.o LUALIBOBJS = $(LUAOBJFILES1) $(LUAOBJFILES2) $(LUAOBJFILES3) $(LUAOBJFILES4) LUACROSSLIB = $(TARGETPFX)lua$(subst .,,$(LUA_VERSION)).a LUAINCL = -I$(LUASRCDIR) override BUILDMORE += $(LUACROSSLIB) override CLEANMORE += rm -f $(LUACROSSLIB) ; override TARGET_LIBS += $(LUACROSSLIB) -lm else LUAINCL= endif # BUILD_TARGET_LUA ifdef BUILD_PDCURSES #===============-================================================= # PD Curses library #===============-================================================= ifdef WANT_WIN_CURSES PDCTOP = ../lib/pdcurses PDCURSESDEF= -I../lib/pdcurses -I../lib/pdcurses/dos \ -D"CURSES_GRAPHICS" -D"CURSES_BRIEF_INCLUDE" PDCLIBOBJ1= $(TARGETPFX)addch.o $(TARGETPFX)addchstr.o \ $(TARGETPFX)addstr.o $(TARGETPFX)attr.o \ $(TARGETPFX)beep.o $(TARGETPFX)bkgd.o \ $(TARGETPFX)border.o $(TARGETPFX)clear.o \ $(TARGETPFX)color.o $(TARGETPFX)delch.o \ $(TARGETPFX)deleteln.o $(TARGETPFX)getch.o \ $(TARGETPFX)getstr.o $(TARGETPFX)getyx.o \ $(TARGETPFX)inch.o PDCLIBOBJ2= $(TARGETPFX)inchstr.o $(TARGETPFX)initscr.o \ $(TARGETPFX)inopts.o $(TARGETPFX)insch.o \ $(TARGETPFX)insstr.o $(TARGETPFX)instr.o \ $(TARGETPFX)kernel.o $(TARGETPFX)keyname.o \ $(TARGETPFX)mouse.o $(TARGETPFX)move.o \ $(TARGETPFX)outopts.o $(TARGETPFX)overlay.o PDCLIBOBJ3= $(TARGETPFX)pad.o $(TARGETPFX)panel.o $(TARGETPFX)printw.o \ $(TARGETPFX)refresh.o $(TARGETPFX)scanw.o \ $(TARGETPFX)scr_dump.o $(TARGETPFX)scroll.o \ $(TARGETPFX)slk.o $(TARGETPFX)termattr.o PDCLIBOBJ4= $(TARGETPFX)touch.o $(TARGETPFX)util.o $(TARGETPFX)window.o \ $(TARGETPFX)debug.o PDCLIBOBJS = $(PDCLIBOBJ1) $(PDCLIBOBJ2) $(PDCLIBOBJ3) $(PDCLIBOBJ4) PDCLIB = $(TARGETPFX)pdclib.a PDCINCL = -I$(PDCTOP) -I$(PDCTOP)/pdcurses PDCOBJS = $(TARGETPFX)pdcclip.o $(TARGETPFX)pdcdisp.o \ $(TARGETPFX)pdcgetsc.o $(TARGETPFX)pdckbd.o \ $(TARGETPFX)pdcscrn.o $(TARGETPFX)pdcsetsc.o \ $(TARGETPFX)pdcutil.o override TARGET_LIBS += $(PDCLIB) ifdef CROSS_TO_MSDOS endif override BUILDMORE += $(PDCLIB) override CLEANMORE += rm -f $(PDCLIB) ; else #WANT_WIN_CURSES PDCURSESDEF= PDCLIBOBJS= PDCOBJS= PDCLIB= PDCINCL= endif # WANT_WIN_CURSES endif # BUILD_PDCURSES ifdef CROSS_TO_MSDOS #===============-================================================= # MSDOS cross-compile recipe #===============-================================================= # Uses an MSDOS djgpp cross-compiler on linux or macos. # # 1. You can obtain the cross-compiler for your system via: # sys/msdos/fetch-cross.sh # 2. Then # make CROSS_TO_MSDOS=1 WANT_WIN_TTY=1 WANT_WIN_CURSES=1 all # # Source from http://www.lua.org/ftp/lua-5.4.4.tar.gz #================================================================= CFLAGS += -DCROSSCOMPILE # # Override the build tools and some obj files to # reflect the msdos djgpp cross-compiler. # TOOLTOP1 = ../lib/djgpp/bin TOOLTOP2 = ../lib/djgpp/i586-pc-msdosdjgpp/bin override TARGET_CC = $(TOOLTOP1)/i586-pc-msdosdjgpp-gcc override TARGET_CXX = $(TOOLTOP2)/g++ override TARGET_AR = $(TOOLTOP1)/i586-pc-msdosdjgpp-gcc-ar override TARGET_STUBEDIT = ../lib/djgpp/i586-pc-msdosdjgpp/bin/stubedit MSDOS_TARGET_CFLAGS = -c -O -I../include -I../sys/msdos -I../win/share \ $(LUAINCL) -DDLB $(PDCURSESDEF) \ -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_TARGET -DCROSS_TO_MSDOS \ -Wall -Wextra -Wno-missing-field-initializers -Wreturn-type -Wunused \ -Wformat -Wswitch -Wshadow -Wwrite-strings \ -Wimplicit -Wimplicit-function-declaration -Wimplicit-int \ -Wmissing-parameter-type -Wold-style-definition -Wstrict-prototypes \ -DGCC_WARN PDCINCL += -I$(PDCTOP)/dos PDC_TARGET_CFLAGS = $(MSDOS_TARGET_CFLAGS) -Wno-unused-parameter \ -Wno-missing-prototypes LUA_TARGET_CFLAGS = $(MSDOS_TARGET_CFLAGS) override TARGET_CFLAGS = $(MSDOS_TARGET_CFLAGS) -Wmissing-declarations \ -Wmissing-prototypes -pedantic -Wmissing-declarations \ -Wformat-nonliteral override TARGET_CXXFLAGS = $(TARGET_CFLAGS) override TARGET_LINK = $(TOOLTOP1)/i586-pc-msdosdjgpp-gcc override TARGET_LFLAGS= override TARGET_LIBS += -lpc override SYSSRC = ../sys/share/pcmain.c ../sys/msdos/msdos.c \ ../sys/share/pcsys.c ../sys/share/pctty.c \ ../sys/share/pcunix.c ../sys/msdos/video.c \ ../sys/msdos/vidtxt.c ../sys/msdos/pckeys.c \ ../sys/msdos/vidvga.c ../sys/msdos/vidvesa.c \ ../win/share/bmptiles.c ../win/share/giftiles.c \ ../win/share/tileset.c override SYSOBJ= $(TARGETPFX)pcmain.o $(TARGETPFX)msdos.o \ $(TARGETPFX)pcsys.o $(TARGETPFX)pctty.o \ $(TARGETPFX)pcunix.o $(TARGETPFX)video.o \ $(TARGETPFX)vidtxt.o $(TARGETPFX)pckeys.o \ $(TARGETPFX)vidvga.o $(TARGETPFX)vidvesa.o \ $(TARGETPFX)bmptiles.o $(TARGETPFX)giftiles.o \ $(TARGETPFX)tileset.o $(TARGETPFX)tile.o override WINLIB= override LUALIB= override LUALIBS= override TOPLUALIB= override GAMEBIN = $(TARGETPFX)nethack.exe override PACKAGE = dospkg override PREGAME += mkdir -p $(TARGETDIR) ; override CLEANMORE += rm -f -r $(TARGETDIR) ; VARDATND += nhtiles.bmp # ifdef WANT_WIN_CURSES # rules for pdcurses dos-specific files $(TARGETPFX)%.o : $(PDCTOP)/dos/%.c $(TARGET_CC) $(PDCINCL) $(PDC_TARGET_CFLAGS) -o$@ $< endif # WANT_WIN_CURSES # # Rule for files in sys/msdos $(TARGETPFX)%.o : ../sys/msdos/%.c $(TARGET_CC) $(TARGET_CFLAGS) -o$@ $< endif # CROSS_TO_MSDOS #================================================================= ifdef CROSS_TO_WASM #===============-================================================= # WASM # originally from https://github.com/NetHack/NetHack/pull/385 #===============-================================================= # WASM_DEBUG = 1 WASM_DATA_DIR = $(TARGETPFX)wasm-data WASM_TARGET = $(TARGETPFX)nethack.js EMCC_LFLAGS = #EMCC_LFLAGS += -s SINGLE_FILE=1 EMCC_LFLAGS += -DHACKDIR=\"$(HACKDIR)\" 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", "_display_inventory"]' EMCC_LFLAGS += -s EXPORTED_RUNTIME_METHODS='["cwrap", "ccall", "addFunction", \ "removeFunction", "UTF8ToString", "getValue", "setValue"]' EMCC_LFLAGS += -s ERROR_ON_UNDEFINED_SYMBOLS=0 # XXX: the "@/" at the end of "--embed-file" tells emscripten to embed the files # in the root directory, otherwise they will end up in the $(WASM_DATA_DIR) path 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 += -DNO_SIGNAL #EMCC_CFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 EMCC_DEBUG_LFLAGS += -s ASSERTIONS=1 EMCC_DEBUG_LFLAGS += -s ASSERTIONS=2 EMCC_DEBUG_LFLAGS += -s STACK_OVERFLOW_CHECK=2 EMCC_DEBUG_LFLAGS += -s SAFE_HEAP=1 EMCC_DEBUG_LFLAGS += -s LLD_REPORT_UNDEFINED=1 EMCC_DEBUG_LFLAGS += -s EXCEPTION_DEBUG=1 #EMCC_DEBUG_CFLAGS += -fsanitize=undefined -fsanitize=address -fsanitize=leak EMCC_DEBUG_LFLAGS += -s NO_EXIT_RUNTIME # XXX: if --profiling isn't included then any error dumps 10MB of WASM to the screen rather than a useful message EMCC_DEBUG_LFLAGS += --profiling EMCC_PROD_CFLAGS += -O3 ifdef WASM_DEBUG EMCC_CFLAGS += $(EMCC_DEBUG_CFLAGS) EMCC_LFLAGS += $(EMCC_DEBUG_LFLAGS) else EMCC_CFLAGS += $(EMCC_PROD_CFLAGS) EMCC_LFLAGS += $(EMCC_PROD_LFLAGS) endif # # Override the build tools and some obj files to # reflect emscripten override TARGET_CC = emcc override TARGET_CXX = emcc override TARGET_AR = emar WASM_CFLAGS = -Wall -Wextra -Wno-missing-field-initializers WASM_CFLAGS += -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch WASM_CFLAGS += -Wshadow # WASM_CFLAGS += -Wwrite-strings # WASM_CFLAGS += -Werror # Nethack C flags WASM_CFLAGS += $(WINCFLAGS) #WINCFLAGS set from multiw-2.370 WASM_CFLAGS += -DSYSCF -DSYSCF_FILE=\"/sysconf\" -DSECURE WASM_CFLAGS += -g -I../include -DNOTPARMDECL WASM_CFLAGS += -DGCC_WARN # NetHack sources control WASM_CFLAGS += -DDLB WASM_CFLAGS += -DHACKDIR=\"$(HACKDIR)\" WASM_CFLAGS += -DDEFAULT_WINDOW_SYS=\"shim\" \ #override TARGET_CFLAGS += -DGREPPATH=\"/usr/bin/grep\" WASM_CFLAGS += -DNOMAIL WASM_CFLAGS += $(LUAINCL) WASM_CFLAGS += -DNOTTYGRAPHICS -DSHIM_GRAPHICS -DLIBNH WASM_CFLAGS += -DCROSSCOMPILE WASM_TARGET_CFLAGS = -DCROSSCOMPILE_TARGET -DCROSS_TO_WASM # For src Makefile override CFLAGS = $(WASM_CFLAGS) override TARGET_CFLAGS = $(EMCC_CFLAGS) $(WASM_CFLAGS) $(WASM_TARGET_CFLAGS) # LUA_TARGET_CFLAGS = $(TARGET_CFLAGS) override TARGET_CXXFLAGS = $(TARGET_CFLAGS) override TARGET_LINK = $(TARGET_CC) override TARGET_LFLAGS= $(EMCC_LFLAGS) override SYSSRC = ../sys/libnh/libnhmain.c \ ../sys/share/ioctl.c ../sys/share/unixtty.c \ ../sys/unix/unixunix.c ../sys/unix/unixres.c \ ../win/shim/winshim.c override SYSOBJ= $(TARGETPFX)libnhmain.o \ $(TARGETPFX)ioctl.o $(TARGETPFX)unixtty.o \ $(TARGETPFX)unixunix.o $(TARGETPFX)unixres.o \ $(TARGETPFX)winshim.o override WINLIB = emranlib override LUALIB= override TOPLUALIB= override REGEXOBJ = $(TARGETPFX)posixregex.o override WINOBJ= # don't bother Making regular NetHack executable override GAME= # the real VARDAT hasn't been defined yet for use in ALLDEP override WASM_DAT = bogusmon data engrave epitaph oracles options quest.lua rumors WASMDEP = include/nhlua.h $(WASM_DAT) spec_levs check-dlb override ALLDEP = $(WASMDEP) wasm override PREGAME += mkdir -p $(TARGETDIR)/wasm-data ; override CLEANMORE += rm -rf $(TARGETDIR) ; RANLIB=$(EMRANLIB) #VARDATND += nhtiles.bmp # Rule for file in sys/unix $(TARGETPFX)%.o : ../sys/unix/%.c $(TARGET_CC) $(TARGET_CFLAGS) -c -o$@ $< # Rule for file in sys/libnh $(TARGETPFX)%.o : ../sys/libnh/%.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) $(PDC_TARGET_CFLAGS) -c -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) -c -o$@ $< # Rules for util files heading for target $(TARGETPFX)%.o : ../util/%.c $(TARGET_CC) $(TARGET_CFLAGS) -c -o$@ $< endif # CROSS_SHARED ifdef BUILD_TARGET_LUA # Rule for LUA files $(TARGETPFX)%.o : $(LUATOP)/src/%.c $(TARGET_CC) $(LUA_TARGET_CFLAGS) -c $(LUA_FLAGS) -o$@ $< endif # BUILD_TARGET_LUA # # End of cross-compiling -PRE section #===============-=================================================