cross-compile update

Update the cross-compiling doc at the top.

Remove sys/msdos/Makefile1.cross, sys/msdos/Makefile2.cross, and
sys/msdos/msdos-cross-compile.sh as they are no longer required.

Remove occurrences of CROSSCOMPILE_HOST as the host-side of a
cross-compile can be determined from:
    defined(CROSSCOMPILE) && !defined(CROSSCOMPILE_TARGET)
without the additional macro.
This commit is contained in:
nhmall
2020-09-29 15:01:37 -04:00
parent 476990b303
commit 945d10cfbc
8 changed files with 206 additions and 1972 deletions

View File

@@ -1,4 +1,4 @@
Cross-compiling NetHack 3.7 Last edit: May 31, 2020
Cross-compiling NetHack 3.7 Last edit: September 29, 2020
The NetHack 3.7 build process differs from the build process of previous
versions in some important ways that make it possible to use a cross-compiler
@@ -17,6 +17,7 @@ Part B Contents:
B2. What needs to be built and executed on the HOST?
B3. What needs to be built for the TARGET?
B4. Case sample: msdos
B5. Case sample: amiga (started but incomplete)
--------------------------------------------------------------------------------
Part A - Cross-compiling NetHack
@@ -45,7 +46,7 @@ may include, but not necessarily be limited to, any of the following:
o Compilers: Some of the native compilers on historical platforms may only
support the particular dialect of C that was popular when the platform and
compiler were in their prime.
compiler were in their prime.
Another useful potential result of cross-compiling, is that it paves the way
for carrying out test and production builds of NetHack for multiple target
@@ -65,27 +66,27 @@ steps to be carried out:
(a) additional build steps to follow, including some header
files: pm.h, onames.h, date.h.
(b) creation of files, containing information required by,
or about the game during its execution, that are stored in a
or about the game during its execution, that are stored in a
portable, platform-independent way, that need to be inserted
into the game package.
(c) creation of files containing information required by, or about
the game during its execution, that are stored in an architecture
and/or platform and/or operating system dependent way, that need
to be inserted into the game package (the quest text format is
to be inserted into the game package (the quest text format is
one example).
3. Compile and link the level compiler. This step needs to execute
3. Compile and link the level compiler. This step needs to execute
work-alike tools to lex and yacc, or needs to build pre-built lex and
yacc output (.c, .h files) that are provided in the sys/share part of
the NetHack source code tree.
4. Execute the level compiler to read dat/*.des files and create
a set of binary output files that are architecture and/or operating
a set of binary output files that are architecture and/or operating
system dependent on the build platform, for use by the game during
its execution.
5. Compile and link the dungeon compiler. Like the level compiler, this
step needs to execute work-alike tools to lex and yacc, or needs to
step needs to execute work-alike tools to lex and yacc, or needs to
build pre-built lex and yacc output (.c, .h files) that are provided
in the sys/share part of the NetHack source code tree.
6. Execute the dungeon compiler to read dat/dungeon.def and create
6. Execute the dungeon compiler to read dat/dungeon.def and create
a set of binary output files that are architecture and/or operating
system dependent on the build platform, for use by the game during
its execution.
@@ -126,7 +127,7 @@ steps to be carried out:
(a) additional build steps to follow, including some header
files: pm.h, onames.h, date.h.
(b) creation of files, containing information required by,
or about the game during its execution, that are stored in a
or about the game during its execution, that are stored in a
portable, platform-independent way, that need to be inserted
into the game package.
3. Compile and link several less critical utilities such as uudecode,
@@ -143,7 +144,7 @@ steps to be carried out:
previous steps 2b, 3 and 4 above.
Step 4 is now the only impediment to cross-compiling NetHack, and is resolved
by executing step 4 using a cross-compiler that runs on the build (host)
by executing step 4 using a cross-compiler that runs on the build (host)
platform to produce a resulting binary for the target platform, instead of
executing the native compiler.
@@ -158,18 +159,15 @@ cross-compiling possible:
o There is no creation of platform-dependent files, such as the quest
text files, by makedefs during the build process. Instead, the quest
text files have been converted to Lua and are inserted into the game
package for processing by the embedded Lua <fixme: interpreter?>
during execution of NetHack.
package for processing by the embedded Lua during execution of NetHack.
o There is no build-time level compiler involved. Instead, the level
descriptions have been converted to Lua and are inserted into the game
package for processing by the embeded Lua <fixme: interpreter?>
during execution of NetHack.
package for processing by the embeded Lua during execution of NetHack.
o There is no build-time dungeon compiler involved. Instead, the dungeon
description has been converted to Lua and is inserted into the game
package for processing by the embeded Lua <fixme: interpreter?>
during execution of NetHack.
package for processing by the embeded Lua during execution of NetHack.
o Some of the build and option information that was formerly produced
during build time by makedefs, and contained information about the
@@ -182,7 +180,7 @@ cross-compiling possible:
+------------------------------------------------------------+
o If you have a favourite target platform (let's call it XX-Platform for
example purposes) that you'd like to see NetHack be able to run on, do
example purposes) that you'd like to see NetHack be able to run on, do
some research to find out if a cross-compiler exists that:
- produces output for XX-Platform.
- executes on a platform that you use and love (Linux, Windows,
@@ -191,9 +189,9 @@ cross-compiling possible:
o Then, make the community, devteam, and others aware that you're starting
a cross-compile of NetHack for XX-Platform. You might need to ask some
"starting out" questions initially, and as you get deeper into it, you
"starting out" questions initially, and as you get deeper into it, you
might need to ask some tougher questions.
o Perhaps consider forking from NetHack on GitHub, and do the
cross-compiler work there in your fork. Strive to get it to a point where
it's ready to play-test on XX-Platform, or perhaps even use an emulator
@@ -205,9 +203,9 @@ cross-compiling possible:
- It will make it possible and straightforward to merge upstream
NetHack changes into your work for the XX-Platform cross-compile
so that it stays current with the game as it evolves.
- You may get help from others in the form of suggestions, or
- You may get help from others in the form of suggestions, or
pull-requests, or offers to join the development. Chances are,
you aren't the only person out there that would like to
you aren't the only person out there that would like to
establish/resurrect/maintain NetHack on XX-Platform.
Have fun!
@@ -258,7 +256,7 @@ On the HOST, here are the mandatory things that have to be built.
a) Using the HOST native compiler, build HOST native utility makedefs
Compile and link the following with these compiler switches:
-DCROSSCOMPILE and -DCROSSCOMPILE_HOST
-DCROSSCOMPILE
from sources: util/makedefs.c, src/mdlib.c, src/monst.c, src/objects.c
b) Execute HOST native makedefs utility, util/makedefs, as follows:
@@ -307,7 +305,7 @@ On the HOST, here are the mandatory things that have to be built.
util/uudecode
from sources: sys/share/uudecode.c
purpose: convert some binary files, that are
purpose: convert some binary files, that are
distributed in the NetHack sources in
uuencoded format, back into their
original binary state
@@ -452,67 +450,166 @@ Using the cross-compiler, build the following targets:
Cross-compiler used: Andrew Wu's djgpp cross-compiler
Cross-compiler url: https://github.com/andrewwutw/build-djgpp
Cross-compiler pre-built binary downloads:
https://github.com/andrewwutw/build-djgpp/releases/download/v2.9/
Mac OS X pre-built binary: djgpp-osx-gcc550.tar.bz2 (tested)
Linux pre-built binary : djgpp-linux64-gcc550.tar.bz2 (tested)
mingw pre-built binary : djgpp-mingw-gcc550-standalone.zip (untested)
https://github.com/andrewwutw/build-djgpp/releases/download/v3.0/
Cross-compiler bits tested:
https://github.com/andrewwutw/build-djgpp
and the pre-built binary for your platform from:
https://github.com/andrewwutw/build-djgpp/releases/download/v3.0/
and a DOS-extender (for including in msdos packaging) from
http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip
and pdcurses from:
https://github.com/wmcbrine/PDCurses.git
The msdos cross-compile for NetHack 3.7 uses two phases of compiles:
Phase1 is the host-side prerequisite stuff that needs to be done first.
Phase2 is the cross-compile pieces using the djgpp cross-compiler hosted on
Linux, Mac OS X, or Windows mingw.
- A shell script to download that djgpp cross-compiler and associated
pieces for either linux or macOS is available:
First, on the host platform, you need to set up for a native Unix NetHack
build in the usual way. For example, on linux:
cd sys/unix
sh setup.sh hints/linux
cd ../..
make fetch-lua
sh sys/msdos/fetch-cross-compiler.sh
Now, you could proceed to go ahead and issue
make all
to build a native NetHack at that point if you wish, but it is not needed
for the msdos cross-compile.
That script won't install anything, it just does file fetches and stores
them in subfolders of lib. The linux.2020 and macOS.2020 hints files are
configured to find the cross-compiler there if you add
CROSS_TO_MSDOS=1
on your make command line.
Instead, a test shell script has been put together that will next accomplish
each of the following tasks when it is executed. The shell script can be
invoked by:
sh sys/msdos/msdos-cross-compile.sh
but before you do that, please read the paragraphs below.
Note: Both the fetch-cross-compiler.sh script and and the msdos
cross-compile and package procedures require unzip and zip to be available
on your host build system.
The shell script is meant to accomplish the following things:
On your linux host:
Prep : the script downloads the djgpp cross-compiler for the host
platform into lib/djgpp (it doesn't install anything on the
system, nor does it need to, it just downloads them into the
identified directories), it downloads a copy of the msdos
dos-extender into lib/djgpp/cwsdpmi for later packaging up with
the msdos game, and it downloads pdcurses into lib/pdcurses
for cross-compiling during the TARGET build.
cd sys/unix ; sh setup.sh hints/linux.2020 ; cd ../..
make fetch-lua
Be certain to ensure the right products are at the url's
identified above *before* you execute the Case sample msdos
cross-compile script. The correct products were at those url's
at the time this was written in Dec 2019, but we don't assume
any responsibility for what is at those url's now or in the
future. You need to check before executing the script.
On your macOS host:
Phase1 : the script uses the Makefile sys/msdos/Makefile1.cross
to complete the host-side build steps using the native gcc
compiler for the host platform. During phase1 the host obj
files are put in subfolder src/host_o to keep them separated
and distinguishable from the target obj files that will be
built in phase2.
cd sys/unix ; sh setup.sh hints/macOS.2020 ; cd ../..
make fetch-lua
Phase2 : the script uses the Makefile sys/msdos/Makefile2.cross
to complete the target-side build steps using the
cross-compiler that was obtained during the prep step of the
script described above. During phase2 the target obj files
are put in src/msdos_o to keep them separated and
distinguishable from the host obj files
The MSDOS cross-compile can then be carried out by specifying
CROSS_TO_MSDOS=1 on the make command line:
Package: the script then packages up the results that reside in
msdos-binary into a zip file which it places in lib called
nh370dos.zip.
make CROSS_TO_MSDOS=1 all
make CROSS_TO_MSDOS=1 package
You can explicitly include tty and curses support if desired. The default
you'll end up with is a tty-only cross-compile build:
make WANT_WIN_TTY=1 WANT_WIN_CURSES=1 CROSS_TO_MSDOS=1 all
make WANT_WIN_TTY=1 WANT_WIN_CURSES=1 CROSS_TO_MSDOS=1 package
Result: The "make package" target will bundle all of the necessary
components to run NetHack on msdos into a folder:
targets/msdos/pkg
and then it zips the contents of that folder into:
targets/msdos/nh370dos.zip
Also note that building the msdos targets using the make command
above, does not preclude you from building local linux or macOS
targets as well. Just drop the CROSS_TO_MSDOS=1 from the make
command line. That's because the cross-compiler hints additions are
enclosed inside ifdef sections and won't interfere with the
non-cross-compile build in that case.
+-------------------------+
| B5. Case sample: amiga |
+-------------------------+
Disclaimer: This is a minimal recipe, just to help someone else get
started if they have a desire to get a full cross-compile of
NetHack going for the Amiga.
See CAVEATS below.
Cross-compiler used: bebbo's amiga-gcc
Cross-compiler url: https://github.com/bebbo/amiga-gcc
To our knowledge, a pre-built copy of the cross-compiler isn't available,
so you will likely have to obtain the cross-compiler sources via git and
build it on your system.
The build prerequisite packages for building the compiler on Ubuntu can be
easily obtained:
sudo apt install make wget git gcc g++ lhasa libgmp-dev \
libmpfr-dev libmpc-dev flex bison gettext texinfo ncurses-dev \
autoconf rsync
The build prerequisite packages for macOS via homebrew are documented but
not tested by us any of us to date.
brew install bash wget make lhasa gmp mpfr libmpc flex gettext \
texinfo gcc make autoconf
After installing the prerequite packages and the cross-compiler
it was a straightforward build:
git clone https://github.com/bebbo/amiga-gcc.git
cd amiga-gcc
make update
[Note that you may have to take ownership of the files in the bebbo
repo via chown before succesfully carrying out the next steps]
make clean
make clean-prefix
date; make all -j3 >&b.log; date
The compiler pieces are installed in /opt/amiga by default. If you prefer,
you can alter the prefix before you build if you want. The instructions
for doing so were spelled out at the time of this writing at:
https://github.com/bebbo/amiga-gcc
On your linux host:
cd sys/unix ; sh setup.sh hints/linux.2020 ; cd ../..
make fetch-lua
On your macOS host:
cd sys/unix ; sh setup.sh hints/macOS.2020 ; cd ../..
make fetch-lua
The Amiga cross-compile can then be carried out by specifying
CROSS_TO_AMIGA=1 on the make command line:
make CROSS_TO_AMIGA=1 all
make CROSS_TO_AMIGA=1 package
You can explicitly include tty and curses support if desired, otherwise
you'll end up with a tty-only cross-compile build. The SDL1 pdcurses
support has not been tested.
make WANT_WIN_TTY=1 WANT_WIN_CURSES=1 CROSS_TO_AMIGA=1 all
Result: The "make package" target will bundle the (hopefully) necessary
components to run NetHack on msdos into a folder:
targets/amiga/pkg
and then it zips the contents of that folder into:
targets/amiga/nh370ami.zip
Also note that building the amiga targets using the make command
above, does not preclude you from building local linux or macOS
targets as well. Just drop the CROSS_TO_AMIGA=1 from the make
command line.
The cross-compiler hints additions are enclosed inside ifdef sections
and won't interfere with the non-cross-compile build in that case.
CAVEATS: The original NetHack Amiga build steps included the source for
some utilities that were built and executed on the amiga:
txt2iff and xpm2iff
as part of the NetHack build procedure on amiga.
Those did not compile out-of-the-box on the linux host. They
will either have to be:
- ported to build and run on the linux or macOS cross-compile
host
or
- their functionality will have to be rolled into amiga NetHack
itself and executed on the target Amiga the first time the game
is run, perhaps.
If you make headway, or are successful getting a working copy of
NetHack going on the amiga, drop us a note at devteam@nethack.org.
---

View File

@@ -29,7 +29,7 @@ struct cross_target_s cross_target = {
#if defined(NETHACK_GIT_SHA)
const char *NetHack_git_sha
#if !defined(CROSSCOMPILE) || (defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST))
#if !defined(CROSSCOMPILE) || !defined(CROSSCOMPILE_TARGET)
= NETHACK_GIT_SHA
#else
#ifdef NETHACK_HOST_GIT_SHA
@@ -41,7 +41,7 @@ const char *NetHack_git_sha
#if defined(NETHACK_GIT_BRANCH)
const char *NetHack_git_branch
#if !defined(CROSSCOMPILE) || (defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST))
#if !defined(CROSSCOMPILE) || !defined(CROSSCOMPILE_TARGET)
= NETHACK_GIT_BRANCH
#else
#ifdef NETHACK_HOST_GIT_BRANCH
@@ -429,7 +429,7 @@ void
store_version(nhfp)
NHFILE *nhfp;
{
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_HOST)
#if !defined(CROSSCOMPILE) || !defined(CROSSCOMPILE_TARGET)
static const struct version_info version_data = {
VERSION_NUMBER, VERSION_FEATURES,
VERSION_SANITY1, VERSION_SANITY2, VERSION_SANITY3
@@ -439,7 +439,7 @@ NHFILE *nhfp;
#endif
};
#if defined(CROSSCOMPILE) && !defined(CROSSCOMPILE_HOST)
#if defined(CROSSCOMPILE) && defined(CROSSCOMPILE_TARGET)
version_data.incarnation = VERSION_NUMBER; /* actual version number */
version_data.feature_set = VERSION_FEATURES; /* bitmask of config settings */
version_data.entity_count = VERSION_SANITY1; /* # of monsters and objects */

View File

@@ -1,641 +0,0 @@
# NetHack 3.7 Makefile1.cross
# Cross-compile msdos version of NetHack using a
# linux-hosted djgpp cross-compiler.
#
# Makefile1.cross (this file) is for the host-side obj files and
# utilities that will run on the host platform only.
#
# Makefile2.cross is for the target platform obj files
# and utilities.
#
# Makefile2 utilizes the djgpp cross-compiler from Andrew Wu:
# https://github.com/andrewwutw/build-djgpp
#
# Currently, in NetHack 3.7, it is now feasible to cross-compile
# the game in a 2-stage process. Makefile1.cross (this file) carries
# out the 1st stage.
#
# The GNU Make has a problem if you include a drive spec below.
GAMEDIR =../msdos-binary
#
#==============================================================================
# This marks the end of the BUILD DECISIONS section.
#==============================================================================
#
# Directories, gcc likes unix style directory specs
#
OBJ = o
HOBJ = host_o
DAT = ../dat
DOC = ../doc
INCL = ../include
LIB = ../lib
MSYS = ../sys/msdos
SRC = ../src
SSHR = ../sys/share
UTIL = ../util
WIN = ../win/tty
WCURSES = ../win/curses
WSHR = ../win/share
#
# Executables.
#
HOST_CC = gcc
HOST_LINK = gcc
MAKEBIN = make
#
# Special libraries and how to link them in.
#
LIBS = -lpc
LIBRARIES = $(LIBS)
#
# Yacc/Lex off
#
YACC_LEX = N
#
# Uncomment the line below if you want to store all the level files,
# help files, etc. in a single library file.
#
USE_DLB = Y
#===============================================
#======= End of Modification Section ===========
#===============================================
################################################
# #
# Nothing below here should have to be changed.#
# #
################################################
# Changing this conditional block is not recommended
ifeq "$(USE_DLB)" "Y"
DLBFLG = -DDLB
else
DLBFLG =
endif
TERMLIB =
#==========================================
#================ MACROS ==================
#==========================================
# This section creates shorthand macros for many objects
# referenced later on in the Makefile.
#
# Have windows path styles available for use in commands
#
W_OBJ =$(subst /,\, $(OBJ))
W_INCL =$(subst /,\, $(INCL))
W_DAT =$(subst /,\, $(DAT))
W_DOC =$(subst /,\, $(DOC))
W_UTIL =$(subst /,\, $(UTIL))
W_SRC =$(subst /,\, $(SRC))
W_SSYS =$(subst /,\, $(SSYS))
W_MSWSYS =$(subst /,\, $(MSWSYS))
W_TTY =$(subst /,\, $(TTY))
W_MSWIN =$(subst /,\, $(MSWIN))
ifeq "$(ADD_CURSES)" "Y"
W_WCURSES =$(subst /,\, $(WCURSES))
endif
W_WSHR =$(subst /,\, $(WSHR))
W_GAMEDIR =$(subst /,\, $(GAMEDIR))
#
# Shorten up the location for some files
#
O = $(OBJ)/
HOST_O = $(HOBJ)/
U = $(UTIL)/
#==========================================
# Utility Objects.
#==========================================
MAKESRC = makedefs.c
MAKEDEFSOBJS = $(HOST_O)makedefs.o $(HOST_O)monst.o $(HOST_O)objects.o
LUA_QTEXT_FILE = "quest.lua"
#==========================================
# Tile related object files.
#==========================================
TILOBJ2 = $(HOST_O)tileset.o $(HOST_O)bmptiles.o $(HOST_O)giftiles.o
TEXTIO = $(HOST_O)tiletext.o $(HOST_O)tiletxt.o $(HOST_O)drawing.o $(HOST_O)monst.o \
$(HOST_O)objects.o
TEXTIO2 = $(HOST_O)tiletex2.o $(HOST_O)tiletxt2.o $(HOST_O)drawing.o $(HOST_O)monst.o \
$(HOST_O)objects.o
TILE_BMP = $(DAT)/NHTILES.BMP
TILEUTIL = $(TILE_BMP)
TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt
TILEFILES2 = $(WSHR)/monthin.txt $(WSHR)/objthin.txt $(WSHR)/oththin.txt
GIFREADERS = $(HOST_O)gifread.o $(HOST_O)alloc.o $(HOST_O)panic.o
GIFREAD2 = $(HOST_O)gifread2.o $(HOST_O)alloc.o $(HOST_O)panic.o
PPMWRITERS = $(HOST_O)ppmwrite.o $(HOST_O)alloc.o $(HOST_O)panic.o
PPMWRIT2 = $(HOST_O)ppmwrit2.o $(HOST_O)alloc.o $(HOST_O)panic.o
#==========================================
# Object files.
#==========================================
DLBOBJ = $(HOST_O)dlb.o
ALLOBJ = $(MAKEDEFSOBJS) $(TILOBJ) $(TILOBJ2) $(TEXTIO) $(TEXTIO2)
#==========================================
# Header file macros
#==========================================
PATCHLEV_H = $(INCL)/patchlev.h
DGN_FILE_H = $(INCL)/align.h $(INCL)/dgn_file.h
DUNGEON_H = $(INCL)/align.h $(INCL)/dungeon.h
MONDATA_H = $(INCL)/align.h $(INCL)/mondata.h
MONST_H = $(INCL)/align.h $(INCL)/monst.h $(INCL)/mextra.h
PERMONST_H = $(INCL)/monattk.h $(INCL)/monflag.h $(INCL)/align.h \
$(INCL)/permonst.h
REGION_H = $(INCL)/region.h
RM_H = $(INCL)/align.h $(INCL)/rm.h
SKILLS_H = $(INCL)/skills.h
SP_LEV_H = $(INCL)/align.h $(INCL)/sp_lev.h
YOUPROP_H = $(PERMONST_H) $(MONDATA_H) $(INCL)/prop.h \
$(INCL)/pm.h $(INCL)/youprop.h
YOU_H = $(MONST_H) $(YOUPROP_H) $(INCL)/align.h \
$(INCL)/attrib.h $(INCL)/you.h
DISPLAY_H = $(MONDATA_H) $(INCL)/vision.h $(INCL)/display.h
PCCONF_H = $(INCL)/micro.h $(INCL)/system.h $(INCL)/pcconf.h \
$(MSYS)/pcvideo.h
DECL_H = $(YOU_H) $(INCL)/spell.h $(INCL)/color.h \
$(INCL)/obj.h $(INCL)/onames.h $(INCL)/pm.h \
$(INCL)/decl.h
GLOBAL_H = $(PCCONF_H) $(INCL)/coord.h $(INCL)/global.h
CONFIG_H = $(INCL)/config.h $(INCL)/config1.h $(INCL)/tradstdc.h \
$(INCL)/global.h $(INCL)/coord.h $(INCL)/vmsconf.h \
$(INCL)/system.h $(INCL)/nhlua.h $(INCL)/unixconf.h \
$(INCL)/micro.h $(INCL)/pcconf.h $(INCL)/ntconf.h
HACK_H = $(INCL)/hack.h $(CONFIG_H) $(INCL)/lint.h $(INCL)/align.h \
$(INCL)/dungeon.h $(INCL)/monsym.h $(INCL)/mkroom.h \
$(INCL)/objclass.h $(INCL)/youprop.h $(INCL)/prop.h \
$(INCL)/permonst.h $(INCL)/monattk.h \
$(INCL)/monflag.h $(INCL)/mondata.h $(INCL)/pm.h \
$(INCL)/wintype.h $(INCL)/context.h $(INCL)/rm.h \
$(INCL)/botl.h $(INCL)/rect.h \
$(INCL)/region.h $(INCL)/decl.h $(INCL)/quest.h \
$(INCL)/spell.h $(INCL)/color.h $(INCL)/obj.h \
$(INCL)/you.h $(INCL)/attrib.h $(INCL)/monst.h \
$(INCL)/mextra.h $(INCL)/skills.h $(INCL)/onames.h \
$(INCL)/timeout.h $(INCL)/trap.h $(INCL)/flag.h \
$(INCL)/vision.h $(INCL)/display.h $(INCL)/engrave.h \
$(INCL)/winprocs.h $(INCL)/sys.h $(INCL)/wintty.h \
$(INCL)/trampoli.h
DLB_H = $(INCL)/dlb.h
ifeq ($(SUPPRESS_GRAPHICS),Y)
TILE_H =
else
TILE_H = $(WSHR)/tile.h $(INCL)/tileset.h
endif
ifeq ($(USE_DLB),Y)
DLB = dlb
DLBOBJS = $(HOST_O)dlb_main.o $(HOST_O)dlb.o $(HOST_O)alloc.o $(HOST_O)panic.o
else
DLB =
DLBOBJS =
endif
#==========================================
# More compiler setup macros
#==========================================
#
CURSESDEF=
CURSESLIB=
INCLDIR=-I../include -I../sys/msdos
# Debugging
#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -CROSSCOMPILE_HOST
#LFLAGS = -pg
#
#cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -DCROSSCOMPILE_HOST
#LFLAGS =
#
# Debugging
#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_HOST
#LFLAGS = -g
#
# Normal
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_HOST
LFLAGS =
#==========================================
#================ RULES ==================
#==========================================
.SUFFIXES: .o .til .uu .c .y .l
#==========================================
# Rules for host files in src
#==========================================
$(HOST_O)%.o : $(SRC)/%.c
$(HOST_CC) $(cflags) -o$@ $<
#==========================================
# Rules for host files in sys/msdos
#==========================================
$(HOST_O)%.o : $(MSYS)/%.c
$(HOST_CC) $(cflags) -I../sys/msdos -o$@ $<
#==========================================
# Rules for host files in util
#==========================================
$(HOST_O)%.o : $(SRC)/%.c
$(HOST_CC) $(cflags) -o$@ $<
$(HOST_O)%.o : $(UTIL)/%.c
$(HOST_CC) $(cflags) -o$@ $<
$(HOST_O)%.o : %.c
$(HOST_CC) $(cflags) -o$@ $<
#==========================================
# Rules for host files in win/share
#==========================================
$(HOST_O)%.o : $(WSHR)/%.c
$(HOST_CC) $(cflags) -I../win/share -o$@ $<
#==========================================
# Primary Targets.
#==========================================
# The default target.
all : prereq
prereq: $(HOST_O)prereq.tag
@echo Done.
default: prereq
util: $(HOST_O)utility.tag
$(HOST_O)utility.tag: $(INCL)/date.h $(INCL)/trap.h $(INCL)/onames.h \
$(INCL)/pm.h vis_tab.c $(TILEUTIL) $(SRC)/tile.c
echo host utilities made > $@
tileutil: $(U)gif2txt $(U)txt2ppm
@echo Optional tile development utilities are up to date.
$(HOST_O)prereq.tag: $(INCL)/nhlua.h hobj.tag $(U)makedefs \
$(HOST_O)utility.tag $(DAT)/nhdat
echo prereq done >$@
ifeq "$(LUA_VERSION)" "5.3.5"
LUAVER=5.3.5
else
LUAVER=5.4.0
endif
$(INCL)/nhlua.h:
cd $(INCL); \
echo '/* nhlua.h - generated by Makefile1.cross */' > $@; \
echo '#include "../lib/lua-$(LUAVER)/src/lua.h"' >> $@; \
sed -e '/(lua_error)/!d' -e '/(lua_error)/s/;/ NORETURN;/1' < $(LIB)/lua-$(LUAVER)/src/lua.h >> $@; \
echo '#include "../lib/lua-$(LUAVER)/src/lualib.h"' >> $@; \
echo '#include "../lib/lua-$(LUAVER)/src/lauxlib.h"' >> $@; \
echo '/*nhlua.h*/' >> $@; \
cd $(SRC)
#==========================================
# Other host targets.
#==========================================
#note that dir below assumes bin/dir from djgpp distribution
#
$(DAT)/nhdat: $(U)dlb_main $(DAT)/data $(DAT)/rumors \
$(DAT)/oracles \
$(DAT)/bogusmon $(DAT)/engrave $(DAT)/epitaph $(DAT)/tribute
cd $(DAT); \
pwd; \
cp $(MSYS)/msdoshlp.txt .; \
ls -1 data oracles options rumors help hh >dlb.lst; \
ls -1 cmdhelp history opthelp wizhelp license >>dlb.lst; \
ls -1 bogusmon engrave epitaph tribute msdoshlp.txt >>dlb.lst; \
ls -1 *.lua >>dlb.lst; \
$(U)dlb_main cvIf dlb.lst nhdat; \
cd $(SRC)
$(U)dlb_main: $(DLBOBJS)
$(HOST_LINK) $(LFLAGS) -o$@ $(DLBOBJS)
$(HOST_O)dlb_main.o: $(U)dlb_main.c $(INCL)/config.h $(DLB_H)
$(HOST_CC) $(cflags) -o$@ $(U)dlb_main.c
$(INCL)/date.h : $(U)makedefs
-$(U)makedefs -v
$(INCL)/onames.h: $(U)makedefs
-$(U)makedefs -o
$(INCL)/pm.h: $(U)makedefs
-$(U)makedefs -p
#monstr.c: $(U)makedefs
# -$(U)makedefs -m
$(INCL)/vis_tab.h: $(U)makedefs
-$(U)makedefs -z
vis_tab.c: $(U)makedefs
-$(U)makedefs -z
# make data.base an 8.3 filename to prevent an make warning
DATABASE = $(DAT)/data.bas
$(DAT)/data: $(HOST_O)utility.tag $(DATABASE)
$(U)makedefs -d
$(DAT)/rumors: $(HOST_O)utility.tag $(DAT)/rumors.tru $(DAT)/rumors.fal
$(U)makedefs -r
$(DAT)/oracles: $(HOST_O)utility.tag $(DAT)/oracles.txt
$(U)makedefs -h
$(DAT)/bogusmon: $(HOST_O)utility.tag $(DAT)/bogusmon.txt
$(U)makedefs -s
$(DAT)/engrave: $(HOST_O)utility.tag $(DAT)/engrave.txt
$(U)makedefs -s
$(DAT)/epitaph: $(HOST_O)utility.tag $(DAT)/epitaph.txt
$(U)makedefs -s
#===============================================
# Create directory for holding host object files
#===============================================
hobj.tag:
mkdir -p ./$(HOBJ)
echo directory ready ./$(HOBJ)
#==========================================
# Makedefs Stuff
#==========================================
$(U)makedefs: $(MAKEDEFSOBJS)
$(HOST_LINK) $(LFLAGS) -o$@ $(MAKEDEFSOBJS)
$(HOST_O)makedefs.o: $(U)makedefs.c $(SRC)/mdlib.c $(CONFIG_H) $(INCL)/permonst.h \
$(INCL)/objclass.h $(INCL)/monsym.h \
$(INCL)/artilist.h $(INCL)/dungeon.h $(INCL)/obj.h \
$(INCL)/monst.h $(INCL)/you.h $(INCL)/flag.h \
$(INCL)/dlb.h $(INCL)/patchlevel.h
#=============================================
# Header file moves required for tile support
#=============================================
ifeq ($(SUPPRESS_GRAPHICS),Y)
else
#
# Tile Mapping
#
$(SRC)/tile.c: $(U)tilemap
@$(U)tilemap
@echo A new $@ has been created
$(U)tilemap: $(HOST_O)tilemap.o
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tilemap.o
$(HOST_O)tilemap.o: $(WSHR)/tilemap.c $(HACK_H) $(TILE_H)
$(HOST_CC) $(cflags) -I$(WSHR) -I$(MSYS) -DSTATUES_LOOK_LIKE_MONSTERS -o$@ $(WSHR)/tilemap.c
#==========================================
# Tile Utilities
# Required for tile support
#==========================================
#$(DAT)/NetHack1.tib: $(TILEFILES) $(U)tile2bin
# @echo Creating binary tile files
# cd $(DAT)
# $(U)tile2bin
# cd $(SRC)
#$(DAT)/NetHacko.tib: $(HOST_O)thintile.tag $(TILEFILES2) $(U)til2bin2
# @echo Creating overview binary tile files
# cd $(DAT)
# $(U)til2bin2
# cd $(SRC)
$(DAT)/NHTILES.BMP: $(TILEFILES) $(U)tile2bmp
@echo Creating binary tile files which may take some time
@cd $(DAT)
@$(U)tile2bmp $@
@cd $(SRC)
$(U)tile2bmp: $(HOST_O)tile2bmp.o $(TEXTIO)
-rm -f temp.a
ar r temp.a $(TEXTIO)
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tile2bmp.o temp.a
#$(U)tile2bin: $(HOST_O)tile2bin.o $(TEXTIO)
# -rm -f temp.a
# ar r temp.a $(TEXTIO)
# $(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tile2bin.o temp.a
#$(U)til2bin2: $(HOST_O)til2bin2.o $(TEXTIO2)
# -rm -f temp.a
# ar r temp.a $(TEXTIO2)
# $(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)til2bin2.o temp.a
#$(U)thintile: $(HOST_O)thintile.o
# $(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)thintile.o
#$(HOST_O)thintile.o: $(HACK_H) $(WSHR)/tile.h $(WSHR)/thintile.c
# -rm -f temp.a
# ar r temp.a $(TEXTIO)
# $(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tile2bmp.o temp.a
#$(HOST_O)thintile.o: $(HACK_H) $(WSHR)/tile.h $(WSHR)/thintile.c
# $(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILE -DOVERVIEW_FILE -o$@ $(WSHR)/thintile.c
#$(HOST_O)thintile.tag: $(U)thintile $(TILEFILES)
# $(U)thintile
# echo thintiles created >$@
$(HOST_O)tile2bmp.o: $(HACK_H) $(TILE_H) $(WSHR)/tile2bmp.c
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -o$@ $(WSHR)/tile2bmp.c
#$(HOST_O)tile2bin.o: $(HACK_H) $(TILE_H) $(MSYS)/pctiles.h $(MSYS)/pcvideo.h $(MSYS)/tile2bin.c
# $(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -o$@ $(MSYS)/tile2bin.c
#$(HOST_O)til2bin2.o: $(HACK_H) $(TILE_H) $(MSYS)/pctiles.h $(MSYS)/pcvideo.h $(MSYS)/tile2bin.c
# $(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILE_X=8 -DOVERVIEW_FILE -o$@ $(MSYS)/tile2bin.c
$(HOST_O)tiletext.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tiletext.c
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -o$@ $(WSHR)/tiletext.c
$(HOST_O)tiletex2.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tiletext.c
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILE_X=8 -o$@ $(WSHR)/tiletext.c
$(HOST_O)tiletxt.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tilemap.c
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILETEXT -o$@ $(WSHR)/tilemap.c
$(HOST_O)tiletxt2.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tilemap.c
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILETEXT -DTILE_X=8 -o$@ $(WSHR)/tilemap.c
#
# Optional GIF Utilities (for development)
#
$(U)gif2txt: $(GIFREADERS) $(TEXTIO)
$(HOST_LINK) $(LFLAGS) -o$@ $(GIFREADERS) $(TEXTIO)
$(U)gif2txt2: $(GIFREAD2) $(TEXTIO2)
$(HOST_LINK) $(LFLAGS) -o$@ $(GIFREAD2) $(TEXTIO2)
$(U)txt2ppm: $(PPMWRITERS) $(TEXTIO)
$(HOST_LINK) $(LFLAGS) -o$@ $(PPMWRITERS) $(TEXTIO)
$(U)txt2ppm2: $(PPMWRIT2) $(TEXTIO2)
$(HOST_LINK) $(LFLAGS) -o$@ $(PPMWRIT2) $(TEXTIO2)
$(HOST_O)gifread.o: $(CONFIG_H) $(WSHR)/tile.h $(WSHR)/gifread.c
$(HOST_O)gifread2.o: $(CONFIG_H) $(WSHR)/tile.h $(WSHR)/gifread.c
$(HOST_CC) $(cflags) -DTILE_X=8 -o$@ $(WSHR)/gifread.c
ppmwrite.c: $(WSHR)/ppmwrite.c
cp $(WSHR)/ppmwrite.c .
$(HOST_O)ppmwrite.o: $(CONFIG_H) $(WSHR)/tile.h
$(HOST_O)ppmwrit2.o: $(CONFIG_H) $(WSHR)/tile.h ppmwrite.c
$(HOST_CC) $(cflags) -DTILE_X=8 -o$@ ppmwrite.c
#
# Optional tile viewer (development sources only)
#
$(U)viewtib: $(HOST_O)viewtib.o
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)viewtib.o $(LIBRARIES)
$(HOST_O)viewtib.o: $(MSYS)/viewtib.c
endif
#==========================================
# Other host Util Dependencies.
#==========================================
$(HOST_O)monst.o: $(CONFIG_H) $(PERMONST_H) $(INCL)/monsym.h \
$(INCL)/color.h monst.c
$(HOST_CC) $(cflags) -o$@ monst.c
$(HOST_O)objects.o: $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \
$(INCL)/prop.h $(INCL)/color.h objects.c
$(HOST_CC) $(cflags) -o$@ objects.c
$(HOST_O)panic.o: $(CONFIG_H) $(U)panic.c
$(HOST_CC) $(cflags) -o$@ $(U)panic.c
#==========================================
# Housekeeping for host side.
#==========================================
clean:
-rm $(HOBJ)/*.o
-rm ./msdos_o/*.o
if [ -f $(HOST_O)prereq.tag ]; then rm $(HOST_O)prereq.tag; fi;
if [ -f hobj.tag ]; then rm hobj.tag; fi;
if [ -f $(HOST_O)utility.tag ]; then rm $(HOST_O)utility.tag; fi;
if [ -f temp.a ]; then rm temp.a; fi;
spotless: clean
if [ -f $(INCL)/pm.h ]; then rm $(INCL)/pm.h; fi;
## if [ -f $(U)dgn_flex.c ]; then rm $(U)dgn_flex.c; fi;
## if [ -f $(U)dgn_lex.c ]; then rm $(U)dgn_lex.c; fi;
# if [ -f $(U)makedefs ]; then rm $(U)makedefs; fi;
## if [ -f $(U)dgn_comp ]; then rm $(U)dgn_comp; fi;
# if [ -f $(U)recover.exe ]; then rm $(U)recover.exe; fi;
# if [ -f $(U)tilemap ]; then rm $(U)tilemap; fi;
# if [ -f $(U)tile2bmp ]; then rm $(U)tile2bmp; fi;
## if [ -f $(U)tile2bin ]; then rm $(U)tile2bin; fi;
## if [ -f $(U)til2bin2 ]; then rm $(U)til2bin2; fi;
## if [ -f $(U)thintile ]; then rm $(U)thintile; fi;
# if [ -f $(U)dlb_main ]; then rm $(U)dlb_main; fi;
# if [ -f $(INCL)/vis_tab.h ]; then rm $(INCL)/vis_tab.h; fi;
# if [ -f $(INCL)/onames.h ]; then rm $(INCL)/onames.h; fi;
# if [ -f $(INCL)/pm.h ]; then rm $(INCL)/pm.h; fi;
# if [ -f $(INCL)/date.h ]; then rm $(INCL)/date.h; fi;
## if [ -f $(INCL)/dgn_comp.h ]; then rm $(INCL)/dgn_comp.h; fi;
## if [ -f $(INCL)/lev_comp.h ]; then rm $(INCL)/lev_comp.h; fi;
# if [ -f $(SRC)/vis_tab.c ]; then rm $(SRC)/vis_tab.c; fi;
# if [ -f $(SRC)/tile.c ]; then rm $(SRC)/tile.c; fi;
# if [ -f $(DAT)/options ]; then rm $(DAT)/options; fi;
# if [ -f $(DAT)/data ]; then rm $(DAT)/data; fi;
# if [ -f $(DAT)/rumors ]; then rm $(DAT)/rumors; fi;
## if [ -f $(DAT)/dungeon.pdf ]; then rm $(DAT)/dungeon.pdf; fi;
## if [ -f $(DAT)/dungeon ]; then rm $(DAT)/dungeon; fi;
# if [ -f $(DAT)/oracles ]; then rm $(DAT)/oracles; fi;
## if [ -f $(DAT)/quest.dat ]; then rm $(DAT)/quest.dat; fi;
# if [ -f $(DAT)/bogusmon ]; then rm $(DAT)/bogusmon; fi;
# if [ -f $(DAT)/engrave ]; then rm $(DAT)/engrave; fi;
# if [ -f $(DAT)/epitaph ]; then rm $(DAT)/epitaph; fi;
# if [ -f $(DAT)/dlb.lst ]; then rm $(DAT)/dlb.lst; fi;
# if [ -f $(DAT)/nhdat ]; then rm $(DAT)/nhdat; fi;
# if [ -f $(DAT)/*.lev ]; then rm $(DAT)/*.lev; fi;
# if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); fi;
# if [ -f $(WSHR)/monthin.txt ]; then rm $(WSHR)/monthin.txt; fi;
# if [ -f $(WSHR)/objthin.txt ]; then rm $(WSHR)/objthin.txt; fi;
# if [ -f $(WSHR)/oththin.txt ]; then rm $(WSHR)/oththin.txt; fi;
#==========================================
# Host Utility Dependencies
#==========================================
# src dependencies
$(HOST_O)drawing.o: $(CONFIG_H) $(INCL)/color.h $(INCL)/rm.h \
$(INCL)/objclass.h $(INCL)/monsym.h
$(HOST_O)vis_tab.o: vis_tab.c $(CONFIG_H) $(INCL)/vis_tab.h
$(HOST_O)alloc.o: alloc.c $(CONFIG_H)
$(HOST_O)dlb.o: dlb.c $(CONFIG_H) $(INCL)/dlb.h
$(HOST_CC) $(cflags) -I../sys/msdos -o$@ dlb.c
$(HOST_O)monst.o: monst.c $(CONFIG_H) $(INCL)/permonst.h $(INCL)/align.h \
$(INCL)/monattk.h $(INCL)/monflag.h $(INCL)/monsym.h \
$(INCL)/color.h
$(HOST_O)objects.o: objects.c $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \
$(INCL)/prop.h $(INCL)/skills.h $(INCL)/color.h
$(HOST_O)tileset.o: $(WSHR)/tileset.c $(HACK_H)
$(HOST_O)bmptiles.o: $(WSHR)/bmptiles.c $(INCL)/config.h $(INCL)/tileset.h $(INCL)/integer.h
$(HOST_O)giftiles.o: $(WSHR)/giftiles.c $(INCL)/config.h $(INCL)/tileset.h $(INCL)/integer.h
# end of file

File diff suppressed because it is too large Load Diff

View File

@@ -1,129 +0,0 @@
#!/bin/sh
#set -x
if [ -z "$TRAVIS_BUILD_DIR" ]; then
export DJGPP_TOP=$(pwd)/lib/djgpp
else
export DJGPP_TOP="$TRAVIS_BUILD_DIR/lib/djgpp"
fi
if [ -z "$GCCVER" ]; then
export GCCVER=gcc1010
fi
if [ -z "$LUA_VERSION" ]; then
export LUA_VERSION=5.4.0
fi
if [ ! -d "$(pwd)/lib" ]; then
echo "Set up for Unix build and 'make fetch-lua' first."
exit 1
fi
#DJGPP_URL="https://github.com/andrewwutw/build-djgpp/releases/download/v2.9/"
DJGPP_URL="https://github.com/andrewwutw/build-djgpp/releases/download/v3.0/"
if [ "$(uname)" = "Darwin" ]; then
#Mac
DJGPP_FILE="djgpp-osx-$GCCVER.tar.bz2"
if [ -z "HINTS" ]; then
export HINTS=macOS.2020
fi
elif [ "$(expr substr $(uname -s) 1 5)" = "Linux" ]; then
#Linux
DJGPP_FILE="djgpp-linux64-$GCCVER.tar.bz2"
if [ -z "$HINTS" ]; then
export HINTS=linux.2020
fi
elif [ "$(expr substr $(uname -s) 1 10)" = "MINGW32_NT" ]; then
#mingw
DJGPP_FILE="djgpp-mingw-$GCCVER-standalone.zip"
else
echo "No DJGPP release for you, sorry."
exit 1
fi
DJGPP_URL="$DJGPP_URL$DJGPP_FILE"
# export
if [ ! -d lib ]; then
mkdir -p lib
fi
cd lib
if [ ! -f "$DJGPP_FILE" ]; then
if [ "$(uname)" = "Darwin" ]; then
#Mac
curl -L $DJGPP_URL -o $DJGPP_FILE
else
wget --no-hsts "$DJGPP_URL"
fi
fi
if [ ! -d djgpp/i586-pc-msdosdjgpp ]; then
tar xjf "$DJGPP_FILE"
rm -f $DJGPP_FILE
fi
# DOS-extender for use with djgpp
if [ ! -d djgpp/cwsdpmi ]; then
if [ "$(uname)" = "Darwin" ]; then
#Mac
curl http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip -o csdpmi7b.zip
else
wget --no-hsts http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip
fi
cd djgpp
mkdir -p cwsdpmi
cd cwsdpmi
unzip ../../csdpmi7b.zip
cd ../../
rm csdpmi7b.zip
fi
# PDCurses
if [ ! -d "pdcurses" ]; then
echo "Getting ../pdcurses from https://github.com/wmcbrine/PDCurses.git" ; \
git clone --depth 1 https://github.com/wmcbrine/PDCurses.git pdcurses
fi
cd ../
# Don't fail the build if lua fetch failed because we cannot do anything about it
# but don't bother proceeding forward either
if [ ! -d "lib/lua-$LUA_VERSION/src" ]; then
exit 0
fi
#echo after dos extender
cd src
mkdir -p ../msdos-binary
cp ../dat/data.base ../dat/data.bas
cp ../include/patchlevel.h ../include/patchlev.h
cp ../doc/Guidebook.txt ../doc/guidebk.txt
cp ../sys/share/posixregex.c ../sys/share/posixreg.c
#cp ../sys/msdos/Makefile1.cross ../src/Makefile1
#cp ../sys/msdos/Makefile2.cross ../src/Makefile2
make -f ../sys/msdos/Makefile1.cross
#cat ../include/date.h
export GCC_EXEC_PREFIX=$DJGPP_TOP/lib/gcc/
# export
#pwd
make -f ../sys/msdos/Makefile2.cross
unset GCC_EXEC_PREFIX
#pwd
if [ -f ../lib/djgpp/cwsdpmi/bin/CWSDPMI.EXE ]; then
cp ../lib/djgpp/cwsdpmi/bin/CWSDPMI.EXE ../msdos-binary/CWSDPMI.EXE;
fi
# ls -l ../msdos-binary
cd ../msdos-binary
zip -9 ../lib/NH370DOS.ZIP *
cd ../
ls -l lib/NH370DOS.ZIP

View File

@@ -127,7 +127,7 @@ ifdef CROSS_TO_MSDOS
# Source from http://www.lua.org/ftp/lua-5.4.0.tar.gz
#=================================================================
CFLAGS += -DCROSSCOMPILE -DCROSSCOMPILE_HOST
CFLAGS += -DCROSSCOMPILE
#
# Override the build tools and some obj files to
@@ -195,7 +195,7 @@ ifdef CROSS_TO_AMIGA
# Amiga m68k from https://github.com/bebbo/amiga-gcc
#=================================================================
CFLAGS += -DCROSSCOMPILE -DCROSSCOMPILE_HOST
CFLAGS += -DCROSSCOMPILE
#
# Override the build tools and some obj files to

View File

@@ -253,12 +253,10 @@ U = $(UTIL)^\
!IFDEF TEST_CROSSCOMPILE
HOST=_host
CROSSCOMPILE_TARGET= -DCROSSCOMPILE_TARGET
CROSSCOMPILE_HOST= -DCROSSCOMPILE_HOST
CROSSCOMPILE= -DCROSSCOMPILE
!ELSE
HOST=
CROSSCOMPILE_TARGET=
CROSSCOMPILE_HOST=
CROSSCOMPILE=
!ENDIF
@@ -1064,7 +1062,7 @@ $(U)nhsizes3.exe: $(O)nhsizes3.o
$(link) $(lflagsBuild) -out:$@ $(O)nhsizes.o $(O)panic$(HOST).o $(O)alloc$(HOST).o
$(O)nhsizes3.o: $(CONFIG_H) nhsizes3.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -Fo$@ nhsizes3.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -Fo$@ nhsizes3.c
$(U)makedefs.exe: $(MAKEDEFSOBJS)
@echo Linking $(@:\=/)
@@ -1077,8 +1075,8 @@ $(O)makedefs.o: $(U)makedefs.c $(SRC)\mdlib.c $(CONFIG_H) $(INCL)\permonst.h \
$(INCL)\dlb.h
@if not exist $(OBJ)\*.* echo creating directory $(OBJ:\=/)
@if not exist $(OBJ)\*.* mkdir $(OBJ)
@$(cc) -DENUM_PM $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -Fo$@ $(U)makedefs.c
# @$(cc) -DENUM_PM $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) /EP -Fo$@ $(U)makedefs.c >makedefs.c.preprocessed
@$(cc) -DENUM_PM $(cflagsBuild) $(CROSSCOMPILE) -Fo$@ $(U)makedefs.c
# @$(cc) -DENUM_PM $(cflagsBuild) $(CROSSCOMPILE) /EP -Fo$@ $(U)makedefs.c >makedefs.c.preprocessed
#
# date.h should be remade every time any of the source or include
@@ -1109,7 +1107,7 @@ $(U)uudecode.exe: $(O)uudecode.o
@$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)uudecode.o
$(O)uudecode.o: $(SSYS)\uudecode.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) /D_CRT_SECURE_NO_DEPRECATE -Fo$@ $(SSYS)\uudecode.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) /D_CRT_SECURE_NO_DEPRECATE -Fo$@ $(SSYS)\uudecode.c
$(MSWSYS)\NetHack.ico : $(U)uudecode.exe $(MSWSYS)\nhico.uu
chdir $(MSWSYS)
@@ -1208,7 +1206,7 @@ $(U)dlb.exe: $(DLBOBJ_HOST) $(O)dlb$(HOST).o
!IFDEF TEST_CROSSCOMPILE
$(O)dlb$(HOST).o: $(O)dlb_main$(HOST).o $(O)alloc$(HOST).o $(O)panic$(HOST).o $(INCL)\dlb.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) /Fo$@ $(SRC)\dlb.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) /Fo$@ $(SRC)\dlb.c
!ENDIF
$(O)dlb.o: $(O)dlb_main.o $(O)alloc.o $(O)panic.o $(INCL)\dlb.h
@@ -1216,11 +1214,11 @@ $(O)dlb.o: $(O)dlb_main.o $(O)alloc.o $(O)panic.o $(INCL)\dlb.h
!IFDEF TEST_CROSSCOMPILE
$(O)dlb_main$(HOST).o: $(UTIL)\dlb_main.c $(INCL)\config.h $(INCL)\dlb.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) /Fo$@ $(UTIL)\dlb_main.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) /Fo$@ $(UTIL)\dlb_main.c
!ENDIF
$(O)dlb_main.o: $(UTIL)\dlb_main.c $(INCL)\config.h $(INCL)\dlb.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_TARGET) /Fo$@ $(UTIL)\dlb_main.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) /Fo$@ $(UTIL)\dlb_main.c
$(DAT)\porthelp: $(MSWSYS)\porthelp
@copy $(MSWSYS)\porthelp $@ >nul
@@ -1277,28 +1275,28 @@ $(U)tilemap.exe: $(O)tilemap.o
@$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)tilemap.o
$(O)tilemap.o: $(WSHR)\tilemap.c $(HACK_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -Fo$@ $(WSHR)\tilemap.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -Fo$@ $(WSHR)\tilemap.c
$(O)tiletx32.o: $(WSHR)\tilemap.c $(HACK_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) /DTILETEXT /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tilemap.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) /DTILETEXT /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tilemap.c
$(O)tiletxt.o: $(WSHR)\tilemap.c $(HACK_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) /DTILETEXT -Fo$@ $(WSHR)\tilemap.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) /DTILETEXT -Fo$@ $(WSHR)\tilemap.c
$(O)gifread.o: $(WSHR)\gifread.c $(CONFIG_H) $(TILE_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) -Fo$@ $(WSHR)\gifread.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) -Fo$@ $(WSHR)\gifread.c
$(O)gifrd32.o: $(WSHR)\gifread.c $(CONFIG_H) $(TILE_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\gifread.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\gifread.c
$(O)ppmwrite.o: $(WSHR)\ppmwrite.c $(CONFIG_H) $(TILE_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) -Fo$@ $(WSHR)\ppmwrite.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) -Fo$@ $(WSHR)\ppmwrite.c
$(O)tiletext.o: $(WSHR)\tiletext.c $(CONFIG_H) $(TILE_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) -Fo$@ $(WSHR)\tiletext.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) -Fo$@ $(WSHR)\tiletext.c
$(O)tilete32.o: $(WSHR)\tiletext.c $(CONFIG_H) $(TILE_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tiletext.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tiletext.c
#==========================================
# Optional Tile Utilities
@@ -1357,10 +1355,10 @@ $(U)til2bm32.exe: $(O)til2bm32.o $(TEXT_IO32)
<<
$(O)tile2bmp.o: $(WSHR)\tile2bmp.c $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) /DPACKED_FILE /Fo$@ $(WSHR)\tile2bmp.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) /DPACKED_FILE /Fo$@ $(WSHR)\tile2bmp.c
$(O)til2bm32.o: $(WSHR)\tile2bmp.c $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) /DPACKED_FILE /DTILE_X=32 /DTILE_Y=32 /Fo$@ $(WSHR)\tile2bmp.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) /DPACKED_FILE /DTILE_X=32 /DTILE_Y=32 /Fo$@ $(WSHR)\tile2bmp.c
$(U)tile2x11.exe: $(O)tile2x11.o $(O)tiletext.o $(O)tiletxt.o $(O)alloc.o \
$(O)panic.o $(O)monst.o $(O)objects.o
@@ -1377,7 +1375,7 @@ $(U)tile2x11.exe: $(O)tile2x11.o $(O)tiletext.o $(O)tiletxt.o $(O)alloc.o \
<<
$(O)tile2x11.o: $(X11)\tile2x11.c $(HACK_H) $(TILE_H) $(INCL)\tile2x11.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -I$(WSHR) /DPACKED_FILE /Fo$@ $(X11)\tile2x11.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -I$(WSHR) /DPACKED_FILE /Fo$@ $(X11)\tile2x11.c
$(SRC)\x11tiles: $(U)tile2x11.exe $(WSHR)\monsters.txt $(WSHR)\objects.txt \
$(WSHR)\other.txt \
@@ -1509,7 +1507,7 @@ $(O)sfstruct.o: $(HACK_H) $(SRC)\sfstruct.c
!IFDEF TEST_CROSSCOMPILE
$(O)mdlib$(HOST).o: $(SRC)\mdlib.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -Fo$@ $(SRC)\mdlib.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -Fo$@ $(SRC)\mdlib.c
!ENDIF
$(O)mdlib.o: $(SRC)\mdlib.c
@@ -1523,13 +1521,13 @@ $(O)mdlib.o: $(SRC)\mdlib.c
# These have dual-roles and need to be build for host and target platforms.
#
$(O)panic_host.o: $(U)panic.c $(CONFIG_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -Fo$@ $(U)panic.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -Fo$@ $(U)panic.c
$(O)panic.o: $(U)panic.c $(CONFIG_H)
@$(cc) $(cflagsBuild) -Fo$@ $(U)panic.c
$(O)drawing_host.o: drawing.c $(CONFIG_H)
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSCOMPILE_HOST) -Fo$@ drawing.c
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) -Fo$@ drawing.c
$(O)drawing.o: drawing.c $(CONFIG_H) $(INCL)\color.h $(INCL)\rm.h \
$(INCL)\objclass.h $(INCL)\monsym.h

View File

@@ -1135,13 +1135,13 @@ do_date()
char githash[BUFSZ], gitbranch[BUFSZ];
char *c, cbuf[60], buf[BUFSZ];
const char *ul_sfx;
#if defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST)
#if defined(CROSSCOMPILE) && !defined(CROSSCOMPILE_TARGET)
int steps = 0;
const char ind[] = " ";
const char *xpref = "HOST_";
#else
const char *xpref = (const char *) 0;
#endif /* CROSSCOMPILE && CROSSCOMPILE_HOST */
#endif /* CROSSCOMPILE && !CROSSCOMPILE_TARGET */
/* before creating date.h, make sure that xxx_GRAPHICS and
DEFAULT_WINDOW_SYS have been set up in a viable fashion */
@@ -1243,10 +1243,10 @@ do_date()
ul_sfx = "L";
#endif
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_HOST)
#if !defined(CROSSCOMPILE) || !defined(CROSSCOMPILE_TARGET)
Fprintf(ofp,
"\n#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_HOST)\n");
#endif /* CROSSCOMPILE || CROSSCOMPILE_HOST */
"\n#if !defined(CROSSCOMPILE) || !defined(CROSSCOMPILE_TARGET)\n");
#endif /* CROSSCOMPILE || !CROSSCOMPILE_TARGET */
if (date_via_env)
Fprintf(ofp, "#define SOURCE_DATE_EPOCH (%lu%s) /* via getenv() */\n",
(unsigned long) clocktim, ul_sfx);
@@ -1282,13 +1282,13 @@ do_date()
Fprintf(ofp, "#define NETHACK_GIT_BRANCH \"%s\"\n", gitbranch);
}
if (xpref && get_gitinfo(githash, gitbranch)) {
Fprintf(ofp, "#else /* !CROSSCOMPILE || CROSSCOMPILE_HOST */\n");
Fprintf(ofp, "#else /* !CROSSCOMPILE || !CROSSCOMPILE_TARGET */\n");
Fprintf(ofp, "#define NETHACK_%sGIT_SHA \"%s\"\n",
xpref, githash);
Fprintf(ofp, "#define NETHACK_%sGIT_BRANCH \"%s\"\n",
xpref, gitbranch);
}
Fprintf(ofp, "#endif /* !CROSSCOMPILE || CROSSCOMPILE_HOST */\n");
Fprintf(ofp, "#endif /* !CROSSCOMPILE || !CROSSCOMPILE_TARGET */\n");
Fprintf(ofp, "\n");
#ifdef AMIGA
{