-
Notifications
You must be signed in to change notification settings - Fork 920
/
MakefileVC
117 lines (93 loc) · 3.16 KB
/
MakefileVC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# The $(VC5_DIR)/.. and $(VS6_DIR) directories are copies "Microsoft Visual Studio".
#
# To get a working setup on Linux or other "portable" copies of VS,
# the following DLLs have to be copied to the
# $(VS6_DIR)/VC98/Bin directory.
#
# - $(VS6_DIR)/Common/MSDev98/Bin/MSPDB60.DLL
#
# And to the $(VC5_DIR)/bin directory.
#
# - $(VC5_DIR)/SharedIDE/bin/MSDIS100.DLL
# - $(VC5_DIR)/SharedIDE/bin/MSPDB50.DLL
VS6_DIR ?= $(HOME)/VS6
VC6_DIR = $(VS6_DIR)/VC98
VC6_BIN_DIR = $(VC6_DIR)/Bin
VC6_INC_DIR = $(VC6_DIR)/Include
VC6_LIB_DIR = $(VC6_DIR)/Lib
VC5_DIR ?= $(HOME)/DevStudio_5.10/VC
VC5_BIN_DIR = $(VC5_DIR)/bin
VC5_INC_DIR = $(VC5_DIR)/include
VC5_LIB_DIR = $(VC5_DIR)/lib
IDE_DIR ?= $(VS6_DIR)/Common/MSDev98
IDE_BIN_DIR = $(IDE_DIR)/bin
ifeq ($(OS),Windows_NT)
CL5 = $(VC5_BIN_DIR)/CL.EXE
CL6 = $(VC6_BIN_DIR)/CL.EXE
RC = $(IDE_BIN_DIR)/RC.EXE
VC5_LINK = $(VC5_BIN_DIR)/link.exe
VC6_LINK = $(VC6_BIN_DIR)/link.exe
else
CL5 = wine $(VC5_BIN_DIR)/CL.EXE
CL6 = wine $(VC6_BIN_DIR)/CL.EXE
RC = wine $(IDE_BIN_DIR)/RC.EXE
VC5_LINK = wine $(VC5_BIN_DIR)/link.exe
VC6_LINK = wine $(VC6_BIN_DIR)/link.exe
endif
ifeq ($(HELLFIRE),1)
CL = $(CL5)
VC_INC_DIR = $(VC5_INC_DIR)
else
CL = $(CL6)
VC_INC_DIR = $(VC6_INC_DIR)
endif
CFLAGS=/nologo /c /GX /W3 /O1 /I $(VC_INC_DIR) /FD /Gr /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fp"Diablo.pch" /YX /G5 /Zi /FAs
LINKFLAGS=/nologo /subsystem:windows /machine:I386 /incremental:no
VERSION := 109
CFLAGS += /D "VERSION=$(VERSION)"
ifeq ($(HELLFIRE),1)
CFLAGS += /D "HELLFIRE"
endif
ifeq ($(SPAWN),1)
CFLAGS += /D "SPAWN"
endif
ifeq ($(MAKE_BUILD),pdb)
ifeq ($(HELLFIRE),1)
VC_LINK = $(VC5_LINK)
LINKFLAGS += /pdb:"hellfire.pdb" /LIBPATH:$(VC5_LIB_DIR) /debug
else
VC_LINK = $(VC6_LINK)
LINKFLAGS += /pdb:"Diablo.pdb" /LIBPATH:$(VC6_LIB_DIR) /debug
endif
else
VC_LINK = $(VC5_LINK)
LINKFLAGS += /LIBPATH:$(VC5_LIB_DIR)
endif
all: Diablo.exe
debug: CFLAGS += /D "_DEBUG"
debug: Diablo.exe
# fix compilation order to match the VC6 workspace files and exclude local assembly functions
DIABLO_SRC=$(sort $(filter-out Source/_asm.cpp Source/_render.cpp Source/render.cpp, $(wildcard Source/*.cpp)))
DIABLO_SRC += Source/render.cpp
OBJS=$(DIABLO_SRC:.cpp=.obj)
Diablo.exe: main_files diablo.res DiabloUI/diabloui.lib 3rdParty/Storm/storm.lib 3rdParty/PKWare/pkware.lib
$(VC_LINK) /OUT:$@ $(LINKFLAGS) $(OBJS) diablo.res DiabloUI/diabloui.lib 3rdParty/Storm/storm.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib version.lib 3rdParty/PKWare/pkware.lib
DiabloUI/diabloui.lib:
make -C DiabloUI
3rdParty/Storm/storm.lib:
make -C 3rdParty/Storm
3rdParty/PKWare/pkware.lib:
make -C 3rdParty/PKWare
# compiles all main source files with once compiler call
main_files:
$(CL) $(CFLAGS) /FoSource/ $(DIABLO_SRC)
%.obj: %.cpp
$(CL) $(CFLAGS) /Fo$@ $<
diablo.res: Diablo.rc
$(RC) /i $(VC_INC_DIR) /l 0x409 /fo $@ $<
clean:
@$(RM) -v $(OBJS) vc60.idb vc60.pdb Diablo.pdb Diablo.pch vc50.idb vc50.pdb hellfire.pdb
make -C DiabloUI clean
make -C 3rdParty/Storm clean
make -C 3rdParty/PKWare clean
.PHONY: clean all