]> granicus.if.org Git - nethack/commitdiff
One VS Makefile for Nethack that works with VS2010-VS2015
authornhmall <mjnh@persona.ca>
Tue, 10 Mar 2015 18:25:54 +0000 (14:25 -0400)
committernhmall <mjnh@persona.ca>
Tue, 10 Mar 2015 18:25:54 +0000 (14:25 -0400)
sys/winnt/Makefile.msc

index 4d2b4c066311e1eed64bd7e8a9fead276150f672..847aa3797dedbf0f3bdeb082d74ca6da835204c8 100644 (file)
@@ -1,13 +1,17 @@
-# NetHack 3.5  Makefile.msc    $NHDT-Date$  $NHDT-Branch$:$NHDT-Revision$
-# NetHack 3.5  Makefile.msc    $Date: 2012/04/14 00:38:09 $  $Revision: 1.54 $
-#       Copyright (c) NetHack PC Development Team 1993-2012
+# NetHack 3.5  Makefile.msc    $NHDT-Date$  $NHDT-Branch$:$NHDT-Revision$ */
+#       Copyright (c) NetHack PC Development Team 1993-2015
 #
-#       NetHack 3.5.x Makefile for MS Visual Studio Visual C++ compiler
+#==============================================================================
+# Build Tools Environment
+#
+#       NetHack 3.6.x Makefile for MS Visual Studio Visual C++ compiler
 #  
-#       Win32 Compilers Tested:
-#            - Microsoft Visual Studio 2010 Express
+#       Visual Studio Compilers Tested:
 #            - Microsoft Visual Studio 2010 Express, with the Platform SDK
+#            - Microsoft Visual Studio 2013 Express
+#            - Microsoft Visual Studio 2015 Express (pre-release)
 #
+#==============================================================================
 #   This is used for building two versions of NetHack:
 #   A tty port utilizing the Win32 Console I/O subsystem, Console
 #       NetHack;
 #              .y                           yacc   (such as bison)
 #              .l                           lex    (such as flex)
 #
+#   If you have any questions read the sys/winnt/Install.nt file included 
+#   with the distribution.
+#==============================================================================
+#==============================================================================
+# This section is used to determine the version of Visual Studio we are using.
+# We set VSVER to 0000 to flag any version that is too old or untested.
+#
+!IF "$(_NMAKE_VER)" == "14.00.22310.1"
+VSVER=2015
+!ELSEIF "$(_NMAKE_VER)" == "12.00.21005.1"
+VSVER=2013
+!ELSEIF "$(_NMAKE_VER)" == "10.00.40219.01"
+VSVER=2010
+!ELSE
+VSVER=0000             #untested version
+!ENDIF
 #
-#       If you have any questions read the sys/winnt/Install.nt file included 
-#       with the distribution.
 #==============================================================================
-# Do not delete the following line.
+# BUILD DECISIONS SECTION
+#
+# 1. 32-bit or 64-bit?
+#
+!IF ($(VSVER) >= 2013)
+# Set your desired target to x86 (32-bit) or x64 (64-bit) here by
+# uncommenting the appropriate target size.
+#
+# 64 bit
+#TARGET_CPU=x64
+#
+# 32 bit
+TARGET_CPU=x86
+!ELSE
+# For VS2010 use "setenv /x86" or "setenv /x64" before invoking make process
+# DO NOT DELETE THE FOLLOWING LINE
 !include <win32.mak>
-
+!ENDIF
+#
+#---------------------------------------------------------------
+# 2. Graphical version or command line version?
+#
 # Graphical interface
-# Set to Y for a graphical version
+# Uncomment below to set to Y for a graphical version
 
 #GRAPHICAL = Y
 
+#
+#---------------------------------------------------------------
+# 3. Where do you want the game to be built (which folder)?
+#
+
+GAMEDIR = ..\binary               # Game directory
+
+# This marks the end of the BUILD DECISIONS section.
+#==============================================================================
+#
+#===============================================
+#======= End of Modification Section ===========
+#===============================================
+#
+################################################
+#                                              #
+# Nothing below here should have to be changed.#
+#                                              #
+################################################
+
 #  Set the gamedir according to your preference.  
 #  If not present prior to compilation it gets created.
 
@@ -42,8 +99,6 @@ GAME    = NetHackW                # Game Name
 GAME    = NetHack                 # Game Name
 !ENDIF
 
-GAMEDIR = ..\binary               # Game directory
-
 #
 #  Source directories.    Makedefs hardcodes these, don't change them.
 #
@@ -65,6 +120,66 @@ WSHR  = ..\win\share # Tile support files
 
 OBJ     = o
 
+cc=cl
+link=link
+rc=Rc
+
+#
+#=============================================
+# Visual Studio versions >= 2013 specific stuff
+#=============================================
+
+!IF "$(TARGET_CPU)" == ""
+TARGET_CPU=x86
+!ENDIF
+
+# Common compiler flags:
+#   -c   - compile without linking
+#   -W3  - Set warning level to level 3    (-W4 for 64-bit compilations)
+#   -Zi  - generate debugging information
+#   -Od  - disable all optimizations
+#   -Ox  - use maximum optimizations
+#   -Zd  - generate only public symbols and line numbers for debugging
+#   -GS  - enable security checks
+#
+ccommon=-c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -c
+lflags=/INCREMENTAL:NO /NOLOGO
+
+!IF "$(TARGET_CPU)" == "x86"
+cflags = $(ccommon) -D_X86_=1  -DWIN32 -D_WIN32 -W3
+scall  = -Gz
+
+!ELSEIF "$(TARGET_CPU)" == "x64"
+cflags = $(ccommon) -D_AMD64_=1 -DWIN64 -D_WIN64  -DWIN32 -D_WIN32
+cflags = $(cflags) -W4
+scall  =
+!ENDIF
+
+# declarations for use on Intel x86 systems
+!IF "$(TARGET_CPU)" == "x86"
+DLLENTRY = @12
+!ENDIF
+
+# declarations for use on AMD64 systems
+!IF "$(TARGET_CPU)" == "x64"
+DLLENTRY =
+!ENDIF
+
+# for Windows applications
+conlflags = $(lflags) -subsystem:console,$(EXEVER)
+guilflags = $(lflags) -subsystem:windows,$(EXEVER)
+dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll
+
+# basic subsystem specific libraries, less the C Run-Time
+baselibs    = kernel32.lib $(optlibs) $(winsocklibs) advapi32.lib
+winlibs     = $(baselibs) user32.lib gdi32.lib comdlg32.lib winspool.lib
+
+# for Windows applications that use the C Run-Time libraries
+conlibs     = $(baselibs)
+guilibs     = $(winlibs)
+#
+# End of VS2013 and greater stuff
+#=============================================
 
 #
 #==========================================
@@ -134,15 +249,6 @@ PRECOMPHEAD = N                    # set to Y if you want to use precomp. headers
 
 #ZLIB = zlib.lib
 
-#===============================================
-#======= End of Modification Section ===========
-#===============================================
-################################################
-#                                              #
-# Nothing below here should have to be changed.#
-#                                              #
-################################################
-
 !IF "$(GRAPHICAL)" == "Y"
 WINPORT        = $(O)tile.o $(O)mhaskyn.o $(O)mhdlg.o \
        $(O)mhfont.o $(O)mhinput.o $(O)mhmain.o $(O)mhmap.o \
@@ -420,7 +526,7 @@ OBJS   = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
          $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
          $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
          $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
-         $(VOBJ26) $(VOBJ27)
+         $(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29)
 
 WINPOBJ = $(WINPORT)
 
@@ -483,10 +589,10 @@ GAMEFILE = $(GAMEDIR)\$(GAME).exe
 #
 #  The default make target (so just typing 'nmake' is useful).
 #
-default : $(GAMEFILE)
+default : install
 
 #
-#  The main target.
+#  The game target.
 #
 
 $(GAME): $(O)obj.tag $(O)utility.tag envchk $(GAMEFILE)
@@ -920,10 +1026,12 @@ $(O)obj.tag:
 #==========================================
 
 envchk:
+!      IF ($(VSVER) < 2010)
+       @echo Your Visual Studio version is too old or untested ($(_NMAKE_VER))
+!ERROR Your Visual Studio version is too old or untested ($(_NMAKE_VER))
+!      ENDIF
 !      IF "$(TARGET_CPU)"=="x64"
        @echo Windows x64 64-bit build
-!      ELSEIF "$(TARGET_CPU)"=="IA64"
-       @echo Windows x64 64-bit build
 !      ELSE
        @echo Windows x86 32-bit build
 !      ENDIF