It looks like the Windows API call for PlaySound using SND_RESOURCE, from a mingw32 built program, cannot find the resources that are embeded into the .exe by the mingw32 resource compiler. That works fine from visual studio. For now, fall back to not using the SND_RESOURCE flag, use an ordinary wav file name in the filesystem. Makefile.mingw32 has been modified to copy the wav files to the binary directory along with the exe. This probably won't be the final approach, but it will get things working for now.
1141 lines
32 KiB
Makefile
1141 lines
32 KiB
Makefile
# NetHack 3.7 Makefile.mingw32
|
|
# Copyright (c) 2022 by Feiyun Wang
|
|
#-Copyright (c) 2022 by Michael Allison
|
|
# NetHack may be freely redistributed. See license for details.
|
|
#
|
|
#==============================================================================
|
|
#
|
|
# Win32 Compilers Tested with this Makefile.mingw32:
|
|
# mingw-w64
|
|
# from:
|
|
# https://sourceforge.net/p/mingw-w64/wiki2/GeneralUsageInstructions/
|
|
# Toolchain for 32 and 64 bit Windows target
|
|
#
|
|
#==============================================================================
|
|
# This is used for building two versions of NetHack:
|
|
#
|
|
# A tty port utilizing the Win32 Console I/O subsystem, Console
|
|
# NetHack.
|
|
#
|
|
# A Win32 native port built on the Windows API, Graphical NetHack or
|
|
# NetHackW.
|
|
#
|
|
# If you have any questions read the sys/windows/Install.windows file included
|
|
# with the distribution.
|
|
#
|
|
#==============================================================================
|
|
#
|
|
# The default make target (so just typing 'mingw32-make').
|
|
#
|
|
|
|
default: install
|
|
|
|
#---------------------------------------------------------------
|
|
# Where do you want the game to be built (which folder)?
|
|
# If not present prior to compilation it gets created.
|
|
#
|
|
|
|
GAMEDIR = ../binary
|
|
|
|
#
|
|
#---------------------------------------------------------------
|
|
# Do you want to include integration with any sound libraries that work with
|
|
# this Makefile? Add the list below. If you change the list do 'nmake clean'.
|
|
#
|
|
# There is glue in here for the following: windsound fmod
|
|
# Obtaining the 3rd party library, including its .h files, is up to you.
|
|
#
|
|
# windsound uses built-in Microsoft API's, no 3rd party download is required.
|
|
|
|
SOUND_LIBRARIES = windsound
|
|
|
|
#
|
|
#---------------------------------------------------------------
|
|
# Do you want debug information in the executable?
|
|
#
|
|
|
|
DEBUGINFO = N
|
|
|
|
#
|
|
#---------------------------------------------------------------
|
|
# Do you have a connection to the internet available that you want
|
|
# to utilize for obtaining prerequisite Lua source code and pdcurses source code
|
|
#
|
|
|
|
INTERNET_AVAILABLE = N
|
|
|
|
#
|
|
#---------------------------------------------------------------
|
|
# Do you have git commands available and NetHack in a git repository?
|
|
#
|
|
|
|
GIT_AVAILABLE = N
|
|
|
|
#
|
|
#---------------------------------------------------------------
|
|
# Do you want to turn on the same gcc warnings as on Unix builds?
|
|
#
|
|
|
|
GCC_EXTRA_WARNINGS = N
|
|
|
|
#
|
|
#===============================================
|
|
#======= End of Modification Section ===========
|
|
#===============================================
|
|
#
|
|
################################################
|
|
# #
|
|
# Nothing below here should have to be changed.#
|
|
# #
|
|
################################################
|
|
#
|
|
#==============================================================================
|
|
|
|
SKIP_NETHACKW = N
|
|
USE_LUADLL = Y
|
|
WANT_LUAC = N
|
|
|
|
ifndef LUA_VERSION
|
|
LUAVER=5.4.4
|
|
else
|
|
LUAVER=$(LUA_VERSION)
|
|
endif
|
|
|
|
# if GIT=1 is passed on the make command, allow use of git and internet
|
|
ifeq "$(GIT)" "1"
|
|
INTERNET_AVAILABLE=Y
|
|
GIT_AVAILABLE=Y
|
|
endif
|
|
ifeq "$(git)" "1"
|
|
INTERNET_AVAILABLE=Y
|
|
GIT_AVAILABLE=Y
|
|
endif
|
|
|
|
#
|
|
#==============================================================================
|
|
# Sanity checks for prerequisite Lua and pdcurses
|
|
#
|
|
LUA_MAY_PROCEED=N
|
|
ADD_CURSES=N
|
|
PDCURSES_TOP=
|
|
|
|
# First, Lua
|
|
ifeq "$(INTERNET_AVAILABLE)" "Y"
|
|
ifeq "$(GIT_AVAILABLE)" "Y"
|
|
LUATOP=../submodules/lua
|
|
LUASRC=$(LUATOP)
|
|
LUA_MAY_PROCEED=Y
|
|
else # GIT_AVAILABLE
|
|
LUATOP = ../lib/lua-$(LUAVER)
|
|
LUASRC = $(LUATOP)/src
|
|
LUA_MAY_PROCEED=Y
|
|
endif # GIT_AVAILABLE
|
|
else # INTERNET_AVAILABLE not
|
|
# The internet is not available for obtaining Lua using either
|
|
# method (git or download). Check to see if it is available already, with
|
|
# precedence given to ../submodules, then ../lib.
|
|
#
|
|
ifneq ("$(wildcard ../submodules/lua/lua.h)", "")
|
|
LUATOP=../submodules/lua
|
|
LUASRC=$(LUATOP)
|
|
LUA_MAY_PROCEED=Y
|
|
else ifneq ("$(wildcard ../lib/lua-$(LUAVER)/src/lua.h)", "")
|
|
LUATOP = ../lib/lua-$(LUAVER)
|
|
LUASRC = $(LUATOP)/src
|
|
LUA_MAY_PROCEED=Y
|
|
else
|
|
endif # Lua sources
|
|
ifeq "$(LUA_MAY_PROCEED)" "Y"
|
|
$(info No internet connection was authorized in the Makefile,)
|
|
$(info but a copy of lua-$(LUAVER) was found in $(LUASRC), so that will be used.)
|
|
endif # LUA_MAY_PROCEED
|
|
endif # INTERNET_AVAILABLE
|
|
|
|
ifneq "$(LUA_MAY_PROCEED)" "Y"
|
|
ifneq "$(INTERNET_AVAILABLE)" "Y"
|
|
$(info Your Makefile settings do not allow use of the internet to obtain Lua)
|
|
endif # INTERNET_AVAILABLE
|
|
$(info and no copy of Lua was found in either ../submodules/lua or ../lib/lua-$(LUAVER).)
|
|
$(info Change your make command line to include:)
|
|
$(info GIT=1)
|
|
$(info or modify your Makefile to set the following:)
|
|
$(info INTERNET_AVAILABLE=Y)
|
|
$(info GIT_AVAILABLE=Y)
|
|
$(error Stopping because NetHack 3.7 requires Lua for its build.)
|
|
endif # LUA_MAY_PROCEED
|
|
|
|
# Now, pdcurses
|
|
ifeq "$(INTERNET_AVAILABLE)" "Y"
|
|
ifeq "$(GIT_AVAILABLE)" "Y"
|
|
PDCURSES_TOP=../submodules/pdcurses
|
|
ADD_CURSES=Y
|
|
else # GIT_AVAILABLE
|
|
PDCURSES_TOP=../lib/pdcurses
|
|
ADD_CURSES=Y
|
|
endif # GIT_AVAILABLE
|
|
else # INTERNET_AVAILABLE is not Y below
|
|
# Your Makefile settings to not allow pdcurses to be obtained by
|
|
# git or by download). Check to see if it is available at one of
|
|
# the expected locations already, with precedence given to ../submodules,
|
|
# then ../lib.
|
|
#
|
|
ifneq ("$(wildcard ../submodules/pdcurses/curses.h)", "")
|
|
PDCURSES_TOP=../submodules/pdcurses
|
|
ADD_CURSES=Y
|
|
else ifneq ("$(wildcard ../lib/pdcurses/curses.h)", "")
|
|
PDCURSES_TOP=../lib/pdcurses
|
|
ADD_CURSES=Y
|
|
endif # pdcurses sources available somewhere
|
|
|
|
ifeq "$(ADD_CURSES)" "Y"
|
|
$(info Your Makefile settings do not allow pdcurses to be obtained by)
|
|
$(info git or by download, but a copy of pdcurses was found in $(PDCURSES_TOP),)
|
|
$(info so that will be used.)
|
|
endif # ADD_CURSES == Y
|
|
endif # INTERNET_AVAILABLE
|
|
|
|
ifneq "$(ADD_CURSES)" "Y"
|
|
$(info NetHack 3.7 will be built without support for the curses window-port.)
|
|
endif
|
|
|
|
ifeq "$(INTERNET_AVAILABLE)" "Y"
|
|
ifeq "$(GIT_AVAILABLE)" "Y"
|
|
GIT_HASH := $(shell echo `git rev-parse --verify HEAD` 2>&1)
|
|
GIT_BRANCH := $(shell echo `git rev-parse --abbrev-ref HEAD` 2>&1)
|
|
ifdef GIT_HASH
|
|
GITHASH = -DNETHACK_GIT_SHA=\"$(GIT_HASH)\"
|
|
endif
|
|
ifdef GIT_BRANCH
|
|
GITBRANCH = -DNETHACK_GIT_BRANCH=\"$(GIT_BRANCH)\"
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
#==============================================================================
|
|
|
|
# The version of the game this Makefile was designed for
|
|
NETHACK_VERSION="3.7.0"
|
|
|
|
# A brief version for use in macros
|
|
NHV1=$(subst .,,$(NETHACK_VERSION))
|
|
NHV=$(subst ",,$(NHV1))
|
|
|
|
#
|
|
# Source directories. Makedefs hardcodes these, don't change them.
|
|
#
|
|
|
|
# INCL - NetHack include files
|
|
# DAT - NetHack data files
|
|
# DOC - NetHack documentation files
|
|
# UTIL - Utility source
|
|
# SRC - Main source
|
|
# SSYS - Shared system files
|
|
# MSWSYS - mswin specific files
|
|
# TTY - window port files (tty)
|
|
# MSWIN - window port files (win32)
|
|
# WCURSES - window port files (curses)
|
|
# WSHR - Tile support files
|
|
# SNDSYS - sound suppport files for win32
|
|
# QT - QT window support files
|
|
|
|
INCL =../include
|
|
DAT =../dat
|
|
DOC =../doc
|
|
UTIL =../util
|
|
SRC =../src
|
|
SSYS =../sys/share
|
|
SNDSYS =../sound/windsound
|
|
MSWSYS =../sys/windows
|
|
TTY =../win/tty
|
|
MSWIN =../win/win32
|
|
WCURSES =../win/curses
|
|
WSHR =../win/share
|
|
QT =../win/Qt
|
|
SNDWAVDIR = ../sound/wav
|
|
|
|
#
|
|
# Object directory.
|
|
#
|
|
|
|
OBJ = o
|
|
|
|
#
|
|
# Shorten up the location for some files
|
|
#
|
|
|
|
O = $(OBJ)/
|
|
|
|
U = $(UTIL)/
|
|
|
|
# To store all the level files,
|
|
# help files, etc. in a single library file.
|
|
# USE_DLB = Y is left uncommented
|
|
|
|
USE_DLB = Y
|
|
|
|
#==========================================
|
|
#==========================================
|
|
# Setting up the compiler and linker
|
|
# macros. All builds include the base ones.
|
|
#==========================================
|
|
#==========================================
|
|
|
|
ifdef CI_COMPILER
|
|
cc = gcc -c
|
|
ld = gcc
|
|
else
|
|
cc = gcc -c
|
|
ld = gcc
|
|
endif
|
|
ifeq "$(MSYSTEM)" "MINGW32"
|
|
rc = windres --target=pe-i386
|
|
else # MINGW64
|
|
rc = windres --target=pe-x86-64
|
|
endif
|
|
|
|
ifeq "$(MSYSTEM)" "MINGW32"
|
|
arch = x86
|
|
else # MINGW64
|
|
arch = x64
|
|
endif
|
|
|
|
#
|
|
# Handle user settings
|
|
#
|
|
CFLAGS = -mms-bitfields -I../include -I../sys/windows
|
|
LDFLAGS =
|
|
ifeq "$(DEBUGINFO)" "Y"
|
|
CFLAGS += -g -D_DEBUG
|
|
else
|
|
CFLAGS += -DNDEBUG
|
|
LDFLAGS += -s
|
|
endif
|
|
|
|
ifeq "$(USE_DLB)" "Y"
|
|
DLBFLG = -DDLB
|
|
else
|
|
DLBFLG =
|
|
endif
|
|
|
|
ifeq "$(GCC_EXTRA_WARNINGS)" "Y"
|
|
#
|
|
# These match the warnings enabled on the linux.370 and macOS.370 hints builds
|
|
#
|
|
CFLAGSXTRA = -Wall -Wextra -Wno-missing-field-initializers -Wreturn-type \
|
|
-Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings -pedantic \
|
|
-Wmissing-declarations -Wformat-nonliteral -Wunreachable-code \
|
|
-Wimplicit -Wimplicit-function-declaration -Wimplicit-int \
|
|
-Wmissing-prototypes -Wold-style-definition -Wstrict-prototypes
|
|
CPPFLAGSXTRA = -Wall -Wextra -Wno-missing-field-initializers -Wreturn-type \
|
|
-Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings -pedantic \
|
|
-Wmissing-declarations -Wformat-nonliteral -Wunreachable-code
|
|
endif
|
|
|
|
COMMONDEF = -DWIN32 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601
|
|
DLLDEF = $(COMMONDEF) -D_WINDOWS -D_USRDLL -D_WINDLL
|
|
CONSOLEDEF = $(COMMONDEF) -D_CONSOLE
|
|
|
|
# To build util targets
|
|
CFLAGSU = $(CFLAGS) $(CONSOLEDEF) $(DLBFLG)
|
|
|
|
LIBS = -lcomctl32 -lgdi32 -lole32 -lshell32 -luuid -lwinmm -lbcrypt
|
|
|
|
$(GAMEDIR):
|
|
@mkdir -p $@
|
|
|
|
$(OBJ):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR = $(GAMEDIR) $(OBJ)
|
|
|
|
#===============-=================================================
|
|
# LUA library
|
|
# Source from http://www.lua.org/ftp/lua-5.4.4.tar.gz
|
|
#=================================================================
|
|
|
|
OLUA = $(O)lua
|
|
LUAOBJS = $(addprefix $(OLUA)/, $(addsuffix .o, lapi lauxlib lbaselib lcode lcorolib lctype \
|
|
ldblib ldebug ldo ldump lfunc lgc linit liolib llex lmathlib lmem \
|
|
loadlib lobject lopcodes loslib lparser lstate lstring lstrlib ltable ltablib ltm \
|
|
lundump lutf8lib lvm lzio))
|
|
LUADLL = $(GAMEDIR)/lua-$(LUAVER).dll
|
|
LUAIMP = $(OLUA)/lua-$(LUAVER).dll.a
|
|
ULUADLL = $(U)$(notdir $(LUADLL))
|
|
LUASTATIC = $(OLUA)/lua-$(LUAVER).a
|
|
LUATARGETS = $(U)lua.exe
|
|
|
|
ifeq "$(USE_LUADLL)" "Y"
|
|
LUALIB = $(LUAIMP)
|
|
LUATARGETS += $(LUADLL) $(ULUADLL) $(LUAIMP)
|
|
else
|
|
LUALIB = $(LUASTATIC)
|
|
LUATARGETS += $(LUASTATIC)
|
|
endif
|
|
|
|
ifeq "$(WANT_LUAC)" "Y"
|
|
LUATARGETS += $(U)luac.exe
|
|
endif
|
|
|
|
lua: $(LUATARGETS)
|
|
|
|
$(U)lua.exe: $(OLUA)/lua.o $(LUALIB)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(LUADLL): $(ULUADLL)
|
|
cp $< $@
|
|
|
|
$(ULUADLL) $(LUAIMP): $(LUAOBJS) | $(OLUA)
|
|
$(ld) $(LDFLAGS) -fPIC -shared -Wl,--export-all-symbols -Wl,--add-stdcall-alias \
|
|
-Wl,--out-implib=$(LUAIMP) $^ -o$(ULUADLL)
|
|
|
|
$(LUASTATIC): $(LUAOBJS) | $(OLUA)
|
|
ar rcs $@ $^
|
|
|
|
$(OLUA)/%.o: $(LUASRC)/%.c | $(OLUA)
|
|
$(cc) $(CFLAGS) $< -o$@
|
|
|
|
$(U)luac.exe: $(OLUA)/luac.o $(LUALIB)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OLUA):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(OLUA)
|
|
CLEAN_FILE += $(LUATARGETS) $(LUAOBJS) $(OLUA)/lua.o $(OLUA)/luac.o
|
|
|
|
#==========================================
|
|
# nhlua.h
|
|
#==========================================
|
|
NHLUAH = $(INCL)/nhlua.h
|
|
|
|
$(NHLUAH):
|
|
echo "/* nhlua.h - generated by Makefile.mingw32 */" > $@
|
|
@echo "#include \"$(LUASRC)/lua.h\"" >> $@
|
|
@echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@
|
|
@echo "#include \"$(LUASRC)/lualib.h\"" >> $@
|
|
@echo "#include \"$(LUASRC)/lauxlib.h\"" >> $@
|
|
@echo "/*nhlua.h*/" >> $@
|
|
|
|
CLEAN_FILE += $(NHLUAH)
|
|
|
|
#==========================================
|
|
# Makedefs
|
|
#==========================================
|
|
OM = $(O)makedefs
|
|
MOBJS = $(addprefix $(OM)/, alloc.o date.o makedefs.o monst.o objects.o panic.o)
|
|
MTARGETS = $(U)makedefs.exe
|
|
|
|
makedefs: $(MTARGETS)
|
|
|
|
$(U)makedefs.exe: $(MOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OM)/%.o: $(SRC)/%.c $(NHLUAH) | $(OM)
|
|
$(cc) $(CFLAGSU) -DENUM_PM $< -o$@
|
|
|
|
$(OM)/%.o: $(U)%.c $(NHLUAH) | $(OM)
|
|
$(cc) $(CFLAGSU) -DENUM_PM $< -o$@
|
|
|
|
$(OM):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(OM)
|
|
CLEAN_FILE += $(MTARGETS) $(MOBJS)
|
|
|
|
#==========================================
|
|
# Recover
|
|
#==========================================
|
|
OR = $(OBJ)
|
|
ROBJS = $(OR)/recover.o
|
|
RTARGETS = $(GAMEDIR)/recover.txt $(GAMEDIR)/recover.exe
|
|
|
|
recover: $(RTARGETS)
|
|
|
|
$(GAMEDIR)/recover.txt: $(DOC)/recover.txt | $(GAMEDIR)
|
|
cp $< $@
|
|
|
|
$(GAMEDIR)/recover.exe: $(ROBJS) | $(GAMEDIR)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OR)/recover.o: $(U)recover.c | $(OR)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
# $(OR):
|
|
# @mkdir -p $@
|
|
|
|
CLEAN_FILE += $(RTARGETS) $(ROBJS)
|
|
|
|
#==========================================
|
|
# PDCurses
|
|
#==========================================
|
|
ifeq "$(ADD_CURSES)" "Y"
|
|
OP = $(O)pdcurses
|
|
PDCOBJS = $(addprefix $(OP)/, addch.o addchstr.o addstr.o attr.o beep.o bkgd.o border.o \
|
|
clear.o color.o debug.o delch.o deleteln.o getch.o getstr.o getyx.o \
|
|
inch.o inchstr.o initscr.o inopts.o insch.o insstr.o \
|
|
kernel.o keyname.o mouse.o move.o outopts.o overlay.o \
|
|
pad.o panel.o pdcclip.o pdcdisp.o pdcgetsc.o pdckbd.o pdcscrn.o pdcsetsc.o pdcutil.o printw.o \
|
|
refresh.o scanw.o scr_dump.o scroll.o slk.o termattr.o touch.o util.o window.o)
|
|
PDCSRC = $(PDCURSES_TOP)/pdcurses
|
|
PDCWINCON = $(PDCURSES_TOP)/wincon
|
|
PDCINCL = -I$(PDCURSES_TOP) -I$(PDCSRC) -I$(PDCWINCON)
|
|
PDCLIB = $(O)pdcurses.a
|
|
PDCDEP = $(PDCURSES_TOP)/curses.h
|
|
|
|
pdcurses: $(PDCLIB)
|
|
|
|
$(PDCLIB): $(PDCOBJS)
|
|
ar rcs $@ $^
|
|
|
|
$(OP)/%.o: $(PDCSRC)/%.c | $(OP)
|
|
$(cc) $(CFLAGS) $(PDCINCL) -D_LIB $< -o$@
|
|
|
|
$(OP)/%.o: $(PDCWINCON)/%.c | $(OP)
|
|
$(cc) $(CFLAGS) $(PDCINCL) -D_LIB $< -o$@
|
|
|
|
$(OP):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(OP)
|
|
CLEAN_FILE += $(PDCLIB) $(PDCOBJS)
|
|
endif
|
|
|
|
#==========================================
|
|
# tile2bmp
|
|
#==========================================
|
|
OT = $(O)tile2bmp
|
|
TOBJS = $(addprefix $(OT)/, drawing.o monst.o objects.o tile2bmp.o tiletext.o tiletxt.o)
|
|
TTARGETS = $(U)tile2bmp.exe
|
|
|
|
tile2bmp: $(TTARGETS)
|
|
|
|
$(U)tile2bmp.exe: $(TOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OT)/tiletxt.o: $(WSHR)/tilemap.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) -DTILETEXT $< -o$@
|
|
|
|
$(OT)/%.o: $(WSHR)/%.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(OT)/%.o: $(SRC)/%.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(OT):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(OT)
|
|
CLEAN_FILE += $(TTARGETS) $(TOBJS)
|
|
|
|
#==========================================
|
|
# Optional Tile Utilities
|
|
#==========================================
|
|
TEXT_IO = $(addprefix $(OT)/, drawing.o monst.o objects.o tiletext.o tiletxt.o)
|
|
TUCOMMON = $(OT)/alloc.o $(OT)/panic.o
|
|
TUOBJS = $(TUCOMMON) $(TEXT_IO)
|
|
|
|
T32OBJS = $(OT)/tilete32.o $(OT)/tiletx32.o
|
|
TEXT_IO32 = $(addprefix $(OT)/, drawing.o monst.o objects.o) $(T32OBJS)
|
|
TU32OBJS = $(TUCOMMON) $(TEXT_IO32)
|
|
|
|
GIFOBJ = $(OT)/gifread.o
|
|
GIF32OBJ = $(OT)/gifrd32.o
|
|
PPMOBJ = $(OT)/ppmwrite.o
|
|
BMP32OBJ = $(OT)/til2bm32.o
|
|
TILEFILES32 = $(addprefix $(WSHR)/, mon32.txt obj32.txt oth32.txt)
|
|
TUTARGETS = $(U)gif2txt.exe $(U)gif2tx32.exe $(U)txt2ppm.exe $(U)til2bm32.exe
|
|
|
|
tileutil: $(TUTARGETS)
|
|
|
|
$(U)gif2txt.exe: $(GIFOBJ) $(TUOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(U)gif2tx32.exe: $(GIF32OBJ) $(TU32OBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(U)txt2ppm.exe: $(PPMOBJ) $(TUOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(U)til2bm32.exe: $(BMP32OBJ) $(TEXT_IO32)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OT)/tilete32.o: $(WSHR)/tiletext.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
|
|
|
|
$(OT)/tiletx32.o: $(WSHR)/tilemap.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) -DTILETEXT -DTILE_X=32 -DTILE_Y=32 $< -o$@
|
|
|
|
$(GIF32OBJ): $(WSHR)/gifread.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
|
|
|
|
$(BMP32OBJ): $(WSHR)/tile2bmp.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
|
|
|
|
$(OT)/panic.o: $(UTIL)/panic.c $(NHLUAH) | $(OT)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(MSWIN)/tiles32.bmp: $(U)til2bm32.exe $(TILEFILES32)
|
|
$< $@
|
|
|
|
CLEAN_FILE += $(TUTARGETS) $(GIFOBJ) $(GIF32OBJ) $(PPMOBJ) $(BMP32OBJ) \
|
|
$(T32OBJS) $(TUCOMMON)
|
|
|
|
#==========================================
|
|
# tilemap
|
|
#==========================================
|
|
OTM = $(OBJ)/tilemap
|
|
TMOBJS = $(addprefix $(OTM)/, drawing.o monst.o objects.o tilemap.o)
|
|
TMTARGETS = $(SRC)/tile.c $(U)tilemap.exe
|
|
|
|
tilemap: $(SRC)/tile.c
|
|
|
|
$(SRC)/tile.c: $(U)tilemap.exe
|
|
$<
|
|
|
|
$(U)tilemap.exe: $(TMOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OTM)/tilemap.o: $(WSHR)/tilemap.c $(NHLUAH) | $(OTM)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(OTM)/%.o: $(SRC)/%.c $(NHLUAH) | $(OTM)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(OTM):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(OTM)
|
|
# tilemap.exe will create tilemappings.lst
|
|
CLEAN_FILE += $(TMTARGETS) $(TMOBJS) $(SRC)/tilemappings.lst
|
|
|
|
#==========================================
|
|
# uudecode
|
|
#==========================================
|
|
OU = $(OBJ)
|
|
UOBJS = $(OU)/uudecode.o
|
|
UTARGETS = $(U)uudecode.exe $(MSWIN)/NetHack.ico
|
|
|
|
uudecode: $(UTARGETS)
|
|
|
|
$(U)uudecode.exe: $(UOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(OU)/uudecode.o: $(SSYS)/uudecode.c | $(OU)
|
|
$(cc) $(CFLAGS) $(CONSOLEDEF) $< -o$@
|
|
|
|
# $(OU):
|
|
# @mkdir -p $@
|
|
|
|
$(MSWIN)/NetHack.ico: $(U)uudecode.exe $(MSWSYS)/nhico.uu
|
|
$^
|
|
mv nethack.ico $@
|
|
|
|
CLEAN_FILE += $(UTARGETS) $(UOBJS)
|
|
|
|
#==========================================
|
|
# Data librarian
|
|
#==========================================
|
|
ODLB = $(O)dlb
|
|
DLBOBJS = $(addprefix $(ODLB)/, alloc.o dlb.o dlb_main.o panic.o)
|
|
DAT_CLEAN = $(addprefix $(DAT)/, data oracles options porthelp rumors engrave epitaph bogusmon)
|
|
DAT_NOCLEAN = $(addprefix $(DAT)/, help hh cmdhelp keyhelp history opthelp optmenu \
|
|
wizhelp license engrave epitaph bogusmon tribute)
|
|
DLBLST = $(DAT)/dlb.lst
|
|
DLB = $(GAMEDIR)/nhdat$(NHV)
|
|
DTARGETS = $(U)dlb.exe $(DAT_CLEAN) $(DLBLST) $(DLB)
|
|
|
|
dlb: $(DTARGETS)
|
|
|
|
$(U)dlb.exe: $(DLBOBJS)
|
|
$(ld) $(LDFLAGS) $^ -o$@
|
|
|
|
$(ODLB)/%.o: $(SRC)/%.c $(NHLUAH) | $(ODLB)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(ODLB)/%.o: $(U)%.c $(NHLUAH) | $(ODLB)
|
|
$(cc) $(CFLAGSU) $< -o$@
|
|
|
|
$(ODLB):
|
|
@mkdir -p $@
|
|
|
|
$(DAT)/data: $(U)makedefs.exe $(DAT)/data.base
|
|
$< -d
|
|
|
|
$(DAT)/oracles: $(U)makedefs.exe $(DAT)/oracles.txt
|
|
$< -h
|
|
|
|
$(DAT)/options $(INCL)/date.h: $(U)makedefs.exe
|
|
$< -v
|
|
|
|
$(DAT)/porthelp: $(MSWSYS)/porthelp
|
|
cp $< $@
|
|
|
|
$(DAT)/rumors: $(U)makedefs.exe $(DAT)/rumors.tru $(DAT)/rumors.fal
|
|
$< -r
|
|
|
|
$(DAT)/engrave: $(DAT)/bogusmon
|
|
|
|
$(DAT)/epitaph: $(DAT)/bogusmon
|
|
|
|
$(DAT)/bogusmon: $(U)makedefs.exe $(DAT)/bogusmon.txt $(DAT)/engrave.txt $(DAT)/epitaph.txt
|
|
$< -s
|
|
|
|
$(DLBLST): | $(DAT_CLEAN) $(DAT_NOCLEAN)
|
|
echo data > $(DLBLST)
|
|
echo oracles >> $(DLBLST)
|
|
echo options >> $(DLBLST)
|
|
if [ -f $(DAT)/ttyoptions ] ; then echo ttyoptions >> $(DLBLST) ; fi
|
|
if [ -f $(DAT)/guioptions ] ; then echo guioptions >> $(DLBLST) ; fi
|
|
echo porthelp >> $(DLBLST)
|
|
echo rumors >> $(DLBLST)
|
|
echo help >> $(DLBLST)
|
|
echo hh >> $(DLBLST)
|
|
echo cmdhelp >> $(DLBLST)
|
|
echo keyhelp >> $(DLBLST)
|
|
echo history >> $(DLBLST)
|
|
echo opthelp >> $(DLBLST)
|
|
echo optmenu >> $(DLBLST)
|
|
echo wizhelp >> $(DLBLST)
|
|
echo license >> $(DLBLST)
|
|
echo engrave >> $(DLBLST)
|
|
echo epitaph >> $(DLBLST)
|
|
echo bogusmon >> $(DLBLST)
|
|
echo tribute >> $(DLBLST)
|
|
cd $(DAT) ; ls -1 *.lua >> $(DLBLST)
|
|
|
|
$(DLB): $(U)dlb.exe $(DLBLST) | $(GAMEDIR)
|
|
$(U)dlb.exe CcIf $(dir $(DLBLST)) $(notdir $(DLBLST)) $(SRC)/nhdat
|
|
mv $(SRC)/nhdat$(NHV) $@
|
|
|
|
CLEAN_DIR += $(ODLB)
|
|
CLEAN_FILE += $(DTARGETS) $(DLBOBJS) $(INCL)/date.h
|
|
|
|
#============================================
|
|
# Fetching other source files that are needed
|
|
#============================================
|
|
|
|
ifeq "$(INTERNET_AVAILABLE)" "Y"
|
|
ifeq "$(GIT_AVAILABLE)" "Y"
|
|
|
|
fetchlua:
|
|
@if [ ! -f $(LUASRC)/lua.h ] ; then \
|
|
git submodule init ../submodules/lua && \
|
|
git submodule update --remote ../submodules/lua ; fi
|
|
fetchpdcurses:
|
|
@if [ ! -f $(PDCURSES_TOP)/curses.h ] ; then \
|
|
git submodule init ../submodules/pdcurses && \
|
|
git submodule update --remote ../submodules/pdcurses ; fi
|
|
else # GIT_AVAILABLE no
|
|
CURLLUASRC=http://www.lua.org/ftp/lua-5.4.4.tar.gz
|
|
CURLLUADST=lua-5.4.4.tar.gz
|
|
|
|
CURLPDCSRC=https://github.com/wmcbrine/PDCurses/archive/refs/tags/3.9.zip
|
|
CURLPDCDST=pdcurses.zip
|
|
|
|
fetchlua:
|
|
@if [ ! -f $(LUASRC)/lua.h ] ; then \
|
|
mkdir -p ../lib ; \
|
|
cd ../lib ; \
|
|
curl -L $(CURLLUASRC) -o $(CURLLUADST) ; \
|
|
/c/Windows/System32/tar -xvf $(CURLLUADST) ; \
|
|
cd ../src ; \
|
|
fi
|
|
fetchpdcurses:
|
|
mkdir -p ../lib
|
|
@if [ ! -f $(PDCURSES_TOP)/curses.h ] ; then \
|
|
cd ../lib ; \
|
|
curl -L $(CURLPDCSRC) -o $(CURLPDCDST) ; \
|
|
mkdir -p pdcurses ; \
|
|
/c/Windows/System32/tar -C pdcurses --strip-components=1 -xvf $(CURLPDCDST) ; \
|
|
cd ../src ; \
|
|
fi
|
|
endif # GIT_AVAILABLE
|
|
endif # INTERNET_AVAILABLE
|
|
|
|
#==========================================
|
|
# Soundlib Choices
|
|
#==========================================
|
|
|
|
SNDLIBCHOICES = $(strip $(SOUND_LIBRARIES))
|
|
|
|
#
|
|
# windsound
|
|
#
|
|
WINDSOUND = $(findstring windsound, $(SNDLIBCHOICES))
|
|
ifeq "$(WINDSOUND)" "windsound"
|
|
$(info Including windsound integration)
|
|
SOUND_WINDSOUND=Y
|
|
HAVE_SOUNDLIB=Y
|
|
NEED_USERSOUNDS=Y
|
|
NEED_SEAUTOMAP=Y
|
|
NEED_WAV=Y
|
|
#SOUNDLIBINCL +=
|
|
SOUNDLIBDEFS += -DSND_LIB_WINDSOUND
|
|
SOUNDLIBOBJS += windsound
|
|
#WINDSOUNDLIBDIR =
|
|
#SOUNDLIBLIBS +=
|
|
#WINDSOUNDLIBDLL =
|
|
#GAMEDIRDLLS +=
|
|
endif
|
|
|
|
#
|
|
# fmod
|
|
#
|
|
FMOD = $(findstring fmod, $(SNDLIBCHOICES))
|
|
ifeq "$(FMOD)" "fmod"
|
|
$(info Including fmod integration)
|
|
SOUND_FMOD=Y
|
|
HAVE_SOUNDLIB=Y
|
|
NEED_USERSOUNDS=Y
|
|
NEED_SEAUTOMAP=Y
|
|
NEED_WAV=Y
|
|
FMODROOT = ../lib/fmod/api/core
|
|
SOUNDLIBINCL += -I$(FMODROOT)/inc
|
|
SOUNDLIBDEFS += -DSND_LIB_FMOD
|
|
SOUNDLIBOBJS += fmod
|
|
FMODLIBDIR = $(FMODROOT)/lib/$(arch)
|
|
ifeq "$(arch)" "x86"
|
|
SOUNDLIBLIBS += -L $(FMODLIBDIR)
|
|
FMODLIBDLL = fmod_vc.dll
|
|
SOUNDLIBLIBS += -lfmod
|
|
else
|
|
SOUNDLIBLIBS += -L $(FMODLIBDIR)
|
|
FMODLIBDLL = fmod_vc.dll
|
|
SOUNDLIBLIBS += $(FMODLIBDIR)/$(FMODLIBDLL)
|
|
endif
|
|
FMODDIR = ../sound/fmod
|
|
GAMEDIRDLLS += $(GAMEDIR)/$(FMODLIBDLL)
|
|
ifeq "$(arch)" "x86"
|
|
FMODLINKLIB = $(FMODLIBDIR)/fmod_vc.lib
|
|
else
|
|
#x64 mingw32-x64 builds supposedly can link right with the DLL, no import lib
|
|
FMODLINKLIB = $(FMODLIBDIR)/$(FMODLIBDLL)
|
|
endif
|
|
$(info ---------------------------------------------------------------------)
|
|
$(info ** NOTES for fmod sound library integration **)
|
|
$(info For fmod integration, this Makefile expects:)
|
|
$(info fmod include directory : $(FMODROOT)/inc)
|
|
$(info fmod library directory : $(FMODLIBDIR))
|
|
$(info fmod library to link with : $(FMODLINKLIB))
|
|
$(info fmod library dll : $(FMODLIBDIR)/$(FMODLIBDLL))
|
|
$(info ---------------------------------------------------------------------)
|
|
FMOD_MISSING=
|
|
ifeq (,$(wildcard $(FMODROOT)/inc))
|
|
FMOD_MISSING += $(FMODROOT)\inc
|
|
$(info Error: missing $(FMODROOT)/inc)
|
|
endif
|
|
ifeq (,$(wildcard $(FMODLIBDIR)))
|
|
FMOD_MISSING += $(FMODLIBDIR)
|
|
$(info Error: missing $(FMODLIBDIR))
|
|
endif
|
|
ifeq (,$(wildcard $(FMODLINKLIB)))
|
|
FMOD_MISSING += $(FMODLINKLIB)
|
|
$(info Error: missing $(FMODLINKLIB))
|
|
endif
|
|
ifeq (,$(wildcard $(FMODLIBDIR)/$(FMODLIBDLL)))
|
|
FMOD_MISSING += $(FMODLIBDIR)/$(FMODLIBDLL)
|
|
$(info Error: missing $(FMODLIBDIR)/$(FMODLIBDLL))
|
|
endif
|
|
ifneq "$(FMOD_MISSING)" ""
|
|
$(error Error: Cannot proceed with fmod integration included)
|
|
endif
|
|
endif
|
|
|
|
#==========================================
|
|
# Soundlib Support
|
|
#==========================================
|
|
|
|
WAVLIST = se_squeak_A se_squeak_B se_squeak_B_flat se_squeak_C \
|
|
se_squeak_D se_squeak_D_flat se_squeak_E \
|
|
se_squeak_E_flat se_squeak_F se_squeak_F_sharp \
|
|
se_squeak_G se_squeak_G_sharp sound_Bell sound_Bugle_A \
|
|
sound_Bugle_B sound_Bugle_C sound_Bugle_D sound_Bugle_E \
|
|
sound_Bugle_F sound_Bugle_G sound_Drum_Of_Earthquake \
|
|
sound_Fire_Horn sound_Frost_Horn sound_Leather_Drum \
|
|
sound_Magic_Harp_A sound_Magic_Harp_B sound_Magic_Harp_C \
|
|
sound_Magic_Harp_D sound_Magic_Harp_E sound_Magic_Harp_F \
|
|
sound_Magic_Harp_G sound_Magic_Flute_A sound_Magic_Flute_B \
|
|
sound_Magic_Flute_C sound_Magic_Flute_D sound_Magic_Flute_E \
|
|
sound_Magic_Flute_F sound_Magic_Flute_G sound_Tooled_Horn_A \
|
|
sound_Tooled_Horn_B sound_Tooled_Horn_C sound_Tooled_Horn_D \
|
|
sound_Tooled_Horn_E sound_Tooled_Horn_F sound_Tooled_Horn_G \
|
|
sound_Wooden_Flute_A sound_Wooden_Flute_B sound_Wooden_Flute_C \
|
|
sound_Wooden_Flute_D sound_Wooden_Flute_E \
|
|
sound_Wooden_Flute_F sound_Wooden_Flute_G \
|
|
sound_Wooden_Harp_A sound_Wooden_Harp_B \
|
|
sound_Wooden_Harp_C sound_Wooden_Harp_D \
|
|
sound_Wooden_Harp_E sound_Wooden_Harp_F \
|
|
sound_Wooden_Harp_G
|
|
WAVS = $(addprefix $(SNDWAVDIR)/, $(addsuffix .wav, $(WAVLIST)))
|
|
|
|
ifeq "$(HAVE_SOUNDLIB)" "Y"
|
|
ifeq "$(NEED_USERSOUNDS)" "Y"
|
|
SOUNDLIBDEFS += -DUSER_SOUNDS
|
|
endif
|
|
ifeq "$(NEED_SEAUTOMAP)" "Y"
|
|
SOUNDLIBDEFS += -DSND_SOUNDEFFECTS_AUTOMAP
|
|
endif
|
|
ifeq "$(NEED_WAV)" "Y"
|
|
$(info Built-in sound file integration included)
|
|
#RCFLAGS = --include-dir=$(SNDWAVDIR) --define RCWAV
|
|
WAV = $(WAVS)
|
|
endif # NEED_WAV
|
|
else
|
|
$(info No soundlib integration)
|
|
endif # HAVE_SOUNDLIB
|
|
|
|
#==========================================
|
|
# nethackw
|
|
#==========================================
|
|
COREOBJS = $(addsuffix .o, allmain alloc apply artifact attrib ball bones botl cmd cppregex \
|
|
dbridge decl detect dig display dlb do do_name do_wear \
|
|
dog dogmove dokick dothrow drawing dungeon \
|
|
eat end engrave exper explode extralev files fountain \
|
|
hack hacklib insight invent isaac64 light lock \
|
|
mail makemon mcastu mdlib mhitm mhitu minion mklev mkmap mkmaze mkobj mkroom \
|
|
mon mondata monmove monst mplayer mthrowu muse music \
|
|
nhlobj nhlsel nhlua windsound o_init objects objnam options \
|
|
pager pickup pline polyself potion pray priest quest questpgr \
|
|
random read rect region restore rip rnd role rumors \
|
|
safeproc save sfstruct shk shknam sit sounds sp_lev spell steal steed \
|
|
symbols sys teleport timeout topten track trap u_init uhitm utf8map \
|
|
vault version vision weapon were wield windmain windows windsys wizard \
|
|
worm worn write zap $(SOUNDLIBOBJS))
|
|
|
|
CFLAGSW = $(CFLAGS) $(CFLAGSXTRA) $(SOUNDLIBINCL) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRAPHICS $(SOUNDLIBDEFS)
|
|
CPPFLAGSW = $(CFLAGS) $(CPPFLAGSXTRA) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRAPHICS $(SOUNDLIBDEFS)
|
|
|
|
ONHW = $(O)nethackw
|
|
NHWONLY = $(addsuffix .o, mhaskyn mhdlg mhfont mhinput mhmain mhmap mhmenu \
|
|
mhmsgwnd mhrip mhsplash mhstatus mhtext mswproc tile NetHackW win10)
|
|
NHWOBJS = $(addprefix $(ONHW)/, $(COREOBJS) $(NHWONLY))
|
|
DATEW_O = $(addsuffix .o, $(addprefix $(ONHW)/, date))
|
|
TILEFILES = $(addprefix $(WSHR)/, monsters.txt objects.txt other.txt)
|
|
BMPS = $(addprefix $(MSWIN)/, $(addsuffix .bmp, mnsel mnselcnt mnunsel petmark pilemark rip splash tiles))
|
|
NHWRES = $(ONHW)/winres.o
|
|
NHWTARGETS = $(GAMEDIR)/NetHackW.exe
|
|
|
|
nethackw: $(NHWTARGETS)
|
|
|
|
$(GAMEDIR)/NetHackW.exe: $(NHWOBJS) $(NHWRES) $(DATEW_O) $(LUALIB) | $(GAMEDIR)
|
|
$(ld) $(LDFLAGS) -mwindows $^ $(LIBS) -static -lstdc++ $(SOUNDLIBLIBS) -o$@
|
|
|
|
$(ONHW)/%.o: $(SRC)/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
|
|
# In NetHack 3.7, date.c must be recompiled after any other file is compiled,
|
|
# otherwise the game internal build timestamp (and potentially git hash)
|
|
# will not be accurate.
|
|
# Therefore, date must not be included in COREOBJS (and by extension
|
|
# NHWOBJS, NHWONLY). That allows those to be listed as explicit dependencies
|
|
# to ensure that date.c is always recompiled again after anything else that
|
|
# was just recompiled. date.h is not used in the build of NetHack 3.7.
|
|
#
|
|
$(ONHW)/date.o: $(SRC)/date.c $(NHWOBJS) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $(GITHASH) $(GITBRANCH) $< -o$@
|
|
|
|
$(ONHW)/cppregex.o: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CPPFLAGSW) $< -o$@
|
|
|
|
$(ONHW)/%.o: $(SSYS)/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
|
|
ifeq "$(SOUND_WINDSOUND)" "Y"
|
|
$(ONHW)/%.o: ../sound/windsound/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
endif
|
|
|
|
ifeq "$(SOUND_FMOD)" "Y"
|
|
$(ONHW)/%.o: ../sound/fmod/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
endif
|
|
|
|
$(ONHW)/%.o: $(MSWSYS)/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
|
|
$(ONHW)/%.o: $(MSWIN)/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
|
|
$(ONHW)/%.o: $(WSHR)/%.c $(NHLUAH) | $(ONHW)
|
|
$(cc) $(CFLAGSW) $< -o$@
|
|
|
|
$(NHWRES): $(MSWIN)/NetHackW.rc $(BMPS) $(WAV) $(MSWIN)/NetHack.ico | $(ONHW)
|
|
$(rc) --include-dir=$(MSWIN) $(RCFLAGS) --input=$< -o$@
|
|
|
|
$(MSWIN)/tiles.bmp: $(U)tile2bmp.exe $(TILEFILES)
|
|
$< $@
|
|
|
|
$(MSWIN)/%.bmp: $(U)uudecode.exe $(MSWIN)/%.uu
|
|
$^
|
|
mv $(notdir $@) $@
|
|
|
|
$(SNDWAVDIR)/%.wav: $(U)uudecode.exe $(SNDWAVDIR)/%.uu
|
|
$^
|
|
mv $(notdir $@) $@
|
|
|
|
$(ONHW):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(ONHW)
|
|
CLEAN_FILE += $(NHWTARGETS) $(NHWOBJS) $(NHWRES) $(BMPS) $(WAV)
|
|
|
|
#==========================================
|
|
# nethack
|
|
#==========================================
|
|
CFLAGSNH = $(CFLAGSU) $(CFLAGSXTRA) $(SOUNDLIBINCL) -DNO_TILE_C -DSAFEPROCS -D_LIB -DWIN32CON $(SOUNDLIBDEFS)
|
|
CPPFLAGSNH = $(CFLAGSU) $(CPPFLAGSXTRA) -DNO_TILE_C -DSAFEPROCS -D_LIB -DWIN32CON $(SOUNDLIBDEFS)
|
|
|
|
ONH = $(O)nethack
|
|
|
|
NHONLY = consoletty.o getline.o topl.o wintty.o
|
|
ifeq "$(ADD_CURSES)" "Y"
|
|
CFLAGSNH += -DCURSES_GRAPHICS -DCHTYPE_32 -DPDC_NCMOUSE
|
|
NHONLY += $(addsuffix .o, cursdial cursinit cursinvt cursmain cursmesg cursmisc cursstat curswins)
|
|
endif
|
|
DATE_O = $(addsuffix .o, $(addprefix $(ONH)/, date))
|
|
|
|
NHOBJS = $(addprefix $(ONH)/, $(COREOBJS) $(NHONLY))
|
|
NHRES = $(ONH)/conres.o
|
|
NHTARGET = $(GAMEDIR)/NetHack.exe
|
|
|
|
nethack: $(NHTARGET)
|
|
|
|
$(GAMEDIR)/NetHack.exe: $(NHOBJS) $(NHRES) $(DATE_O) $(LUALIB) $(PDCLIB) $(SOUNDLIBLIBS) | $(GAMEDIR)
|
|
$(ld) $(LDFLAGS) -mconsole $^ $(LIBS) -static -lstdc++ -o$@
|
|
|
|
$(ONH)/%.o: $(SRC)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
|
|
# In NetHack 3.7, date.c must be recompiled after any other file is compiled,
|
|
# otherwise the game internal build timestamp (and potentially git hash)
|
|
# will not be accurate.
|
|
# Therefore, date must not be included in COREOBJS (and by extension
|
|
# NHOBJS). That allows those to be listed as explicit dependencies of date.o
|
|
# to ensure that date.c is always recompiled again after anything else that
|
|
# was just recompiled. date.h is not used in the build of NetHack 3.7.
|
|
#
|
|
$(ONH)/date.o: $(SRC)/date.c $(NHOBJS) $(NHRES) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $(GITHASH) $(GITBRANCH) $< -o$@
|
|
|
|
$(ONH)/cppregex.o: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONH)
|
|
$(cc) $(CPPFLAGSNH) $< -o$@
|
|
|
|
$(ONH)/%.o: $(SSYS)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
|
|
ifeq "$(SOUND_WINDSOUND)" "Y"
|
|
$(ONH)/%.o: ../sound/windsound/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
endif
|
|
|
|
ifeq "$(SOUND_FMOD)" "Y"
|
|
$(ONH)/%.o: ../sound/fmod/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
endif
|
|
|
|
$(ONH)/%.o: $(MSWSYS)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
|
|
$(ONH)/%.o: $(MSWIN)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
|
|
$(ONH)/%.o: $(WSHR)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
|
|
$(ONH)/%.o: $(TTY)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $< -o$@
|
|
|
|
$(ONH)/%.o: $(WCURSES)/%.c $(NHLUAH) | $(ONH)
|
|
$(cc) $(CFLAGSNH) $(PDCINCL) $< -o$@
|
|
|
|
$(NHRES): $(MSWIN)/NetHack.rc $(WAV) $(MSWIN)/NetHack.ico | $(ONH)
|
|
$(rc) --include-dir=$(MSWIN) $(RCFLAGS) --input=$< -o$@
|
|
|
|
$(ONH):
|
|
@mkdir -p $@
|
|
|
|
CLEAN_DIR += $(ONH)
|
|
CLEAN_FILE += $(NHTARGET) $(NHOBJS) $(NHRES)
|
|
|
|
#==========================================
|
|
#=============== TARGETS ==================
|
|
#==========================================
|
|
|
|
.PHONY: all clean default install lua makedefs recover pdcurses \
|
|
tile2bmp tilemap uudecode dlb nethackw nethack tileutil \
|
|
fetchlua fetchpdcurses
|
|
|
|
#
|
|
# Everything
|
|
#
|
|
|
|
all: install
|
|
|
|
TO_INSTALL = $(GAMEDIR)/NetHack.exe $(RTARGETS) $(GAMEDIRDLLS) \
|
|
$(addprefix $(GAMEDIR)/, $(addsuffix .template, sysconf .nethackrc) \
|
|
Guidebook.txt NetHack.txt license opthelp record symbols)
|
|
|
|
ifeq "$(HAVE_SOUNDLIB)" "Y"
|
|
TO_INSTALL += $(addprefix $(GAMEDIR)/, $(addsuffix .wav, $(WAVLIST)))
|
|
endif
|
|
|
|
ifeq "$(USE_LUADLL)" "Y"
|
|
TO_INSTALL += $(LUADLL)
|
|
endif
|
|
|
|
ifneq "$(SKIP_NETHACKW)" "Y"
|
|
TO_INSTALL += $(GAMEDIR)/NetHackW.exe
|
|
endif
|
|
|
|
ifeq "$(USE_DLB)" "Y"
|
|
TO_INSTALL += $(DLB)
|
|
endif
|
|
|
|
install: fetchlua fetchpdcurses $(TO_INSTALL)
|
|
ifdef CI_COMPILER
|
|
ls -l $(SRC)
|
|
ls -l $(DAT)
|
|
ls -l $(UTIL)
|
|
endif
|
|
ifneq "$(USE_DLB)" "Y"
|
|
cp $(DAT)/*.dat $(GAMEDIR)/
|
|
endif
|
|
@echo NetHack is up to date.
|
|
|
|
ifdef SOUND_FMOD
|
|
$(GAMEDIR)/$(FMODLIBDLL): $(FMODLIBDIR)/$(FMODLIBDLL)
|
|
cp $< $@
|
|
endif
|
|
|
|
$(GAMEDIR)/symbols: $(DAT)/symbols
|
|
cp $< $@
|
|
|
|
$(GAMEDIR)/NetHack.txt: $(DOC)/nethack.txt
|
|
cp $< $@
|
|
|
|
$(GAMEDIR)/record:
|
|
touch $@
|
|
|
|
$(GAMEDIR)/%: $(DAT)/%
|
|
cp $< $@
|
|
|
|
$(GAMEDIR)/%: $(DOC)/%
|
|
cp $< $@
|
|
|
|
$(GAMEDIR)/%: $(MSWSYS)/%
|
|
cp $< $@
|
|
|
|
$(GAMEDIR)/%: $(SNDWAVDIR)/%
|
|
cp $< $@
|
|
|
|
CLEAN_FILE += $(TO_INSTALL)
|
|
|
|
clean:
|
|
@-rm -f $(CLEAN_FILE)
|
|
@$(foreach dir, $(CLEAN_DIR), \
|
|
if [ -d $(dir) ] ; then rmdir -p --ignore $(dir) ; fi ; )
|
|
|
|
-include Makefile.mingw32.depend
|
|
-include .depend
|
|
# end of file
|