From 69600c3f380ff50dc7ee72efba1da46e04e316c0 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 15 Dec 2024 10:26:49 -0500 Subject: [PATCH] add an optional deploy-to-dosbox target for msdos cross-compile The WANT_DEBUG=1 will cause the cross-compile to include line number information in the NetHack executable, useful for backtraces and gdb debugging sessions. How a developer can use the optional deploy-to-dosbox target: make CROSS_TO_MSDOS=1 WANT_DEBUG=1 dosbox=/mnt/c/dosbox deploy-to-dosbox where dosbox= points to the directory which will be mounted for your drive in dosbox THe deploy-to-dosbox recipe ensures that a target copy of gdb.exe ends up alongside nethack.exe at the target, including: - placing the source code that gdb requires on the target in the nhsrc subfolder. - an nhgdb.bat that supplies the right switches to gdb for locating the NetHack sources. --- sys/unix/hints/include/cross-post.370 | 59 +++++++++++++++++++++++++++ sys/unix/hints/include/cross-pre2.370 | 20 +++++++++ 2 files changed, 79 insertions(+) diff --git a/sys/unix/hints/include/cross-post.370 b/sys/unix/hints/include/cross-post.370 index a509aae6f..70968d145 100644 --- a/sys/unix/hints/include/cross-post.370 +++ b/sys/unix/hints/include/cross-post.370 @@ -79,6 +79,65 @@ $(LUABIN): dodata: ( cd .. && make dlb && cd src) +ifdef dosbox +# make CROSS_TO_MSDOS=1 dosbox=~/dosbox deploy-to-dosbox +ifdef MAKEFILE_TOP +deploy-to-dosbox: + ( cd src; make $(DEPLOY); cd .. ) +endif +.PHONY: deploytodosbox + +deploytodosbox: ../targets/msdos/NH370DOS.ZIP $(dosboxnhfolder) $(dosboxnhsrc) \ + $(dosboxnhsrc)/src $(dosboxnhsrc)/include \ + $(dosboxnhsrc)/sys/msdos $(dosboxnhsrc)/sys/share \ + $(dosboxnhsrc)/win/share $(dosboxnhsrc)/win/curses \ + $(dosboxnhsrc)/win/tty $(dosboxnhsrc)/util \ + $(dosboxnhfolder)/NETHACK.EXE \ + $(dosboxnhfolder)/GDB.EXE $(dosboxnhfolder)/nhgdb.bat + @echo DOS NetHack deployed to dosbox at $(dosboxnhfolder) + +$(dosboxnhfolder): + mkdir -p $@ +$(dosboxnhsrc): $(dosboxnhfolder) + mkdir -p $@ +$(dosboxnhsrc)/src: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)src/*.c $(dosboxnhsrc)/src +$(dosboxnhsrc)/include: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)include/*.h $(dosboxnhsrc)/include +$(dosboxnhsrc)/sys/msdos: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)sys/msdos/*.c $(dosboxnhsrc)/sys/msdos + cp --preserve=timestamps $(FLDR)sys/msdos/*.h $(dosboxnhsrc)/sys/msdos +$(dosboxnhsrc)/sys/share: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)sys/share/*.c $(dosboxnhsrc)/sys/share +$(dosboxnhsrc)/win/share: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)win/share/*.c $(dosboxnhsrc)/win/share +$(dosboxnhsrc)/win/curses: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)win/curses/*.c $(dosboxnhsrc)/win/curses + cp --preserve=timestamps $(FLDR)win/curses/*.h $(dosboxnhsrc)/win/curses +$(dosboxnhsrc)/win/tty: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)win/tty/*.c $(dosboxnhsrc)/win/tty +$(dosboxnhsrc)/util: $(dosboxnhsrc) + mkdir -p $@ + cp --preserve=timestamps $(FLDR)util/*.c $(dosboxnhsrc)/util + cp --preserve=timestamps $(FLDR)util/*.h $(dosboxnhsrc)/util +$(dosboxnhfolder)/NETHACK.EXE: $(TARGETPFX)NH370DOS.ZIP + unzip -o $(TARGETPFX)NH370DOS.ZIP -d $(dosboxnhfolder) + find $(dosboxnhfolder) -type f -name "$(dosboxconfigfile)" \ + | xargs sed -i 's/#OPTIONS=video:autodetect/OPTIONS=video:autodetect/g' +$(dosboxnhfolder)/GDB.EXE: $(dosboxnhfolder) + curl --output gdb801b.zip $(dosgdburl) + unzip -p gdb801b.zip bin/gdb.exe >$@ + rm gdb801b.zip +$(dosboxnhfolder)/nhgdb.bat: $(FLDR)src/Makefile + echo "gdb -ex 'directory nhsrc/src nhsrc/include nhsrc/sys/msdos nhsrc/sys/share nhsrc/win/share nhsrc/win/curses nhsrc/win/tty nhsrc/util' NETHACK.EXE"> $@ +endif # dosbox endif # CROSS_TO_MSDOS ifdef CROSS_TO_WASM diff --git a/sys/unix/hints/include/cross-pre2.370 b/sys/unix/hints/include/cross-pre2.370 index 8d4fff0b2..5b80f887a 100644 --- a/sys/unix/hints/include/cross-pre2.370 +++ b/sys/unix/hints/include/cross-pre2.370 @@ -134,6 +134,26 @@ override TARGET_CXX = $(TOOLTOP1)/i586-pc-msdosdjgpp-g++ override TARGET_AR = $(TOOLTOP1)/i586-pc-msdosdjgpp-gcc-ar override TARGET_STUBEDIT = ../lib/djgpp/i586-pc-msdosdjgpp/bin/stubedit # +ifdef DOSBOX +dosbox=$(DOSBOX) +endif +ifdef dosbox +dosboxgameid=NH370 +dosboxtop=$(dosbox) +dosboxnhfolder=$(dosboxtop)/$(dosboxgameid) +dosboxnhsrc=$(dosboxnhfolder)/NHSRC +dosboxconfigfile=NETHACK.CNF +dosgdburl=http://www.mirrorservice.org/sites/ftp.delorie.com/pub/djgpp/current/v2gnu/gdb801b.zip +ifdef MAKEFILE_SRC +FLDR=../ +endif +ifdef MAKEFILE_TOP +FLDR= +endif +WANT_DEBUG=1 +DEPLOY=deploytodosbox +endif # dosbox +# ifeq "$(WANT_DEBUG)" "1" DBGFLAGS = -g else