Update copyright notices for 2013.
[bpt/emacs.git] / nt / nmake.defs
1 # -*- Makefile -*- definition file for building GNU Emacs on Windows NT.
2 # Copyright (C) 2000-2013 Free Software Foundation, Inc.
3
4 # This file is part of GNU Emacs.
5
6 # GNU Emacs is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10
11 # GNU Emacs is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
18
19
20 # Ensure 'all' is the default target
21 all:
22
23 THE_SHELL = $(COMSPEC)
24 SHELLTYPE=CMD
25
26 MAKETYPE=nmake
27
28 CURDIR = $(MAKEDIR:\=/)
29 THISDIR = $(MAKEDIR)
30 DIRNAME =
31
32 ALL_DEPS = $**
33
34 SUBSYSTEM_WINDOWS=-subsystem:windows
35 SUBSYSTEM_CONSOLE=-subsystem:console
36
37 # INSTALL_DIR is the directory into which emacs will be installed.
38 #
39 !ifndef INSTALL_DIR
40 INSTALL_DIR = $(CURDIR)/..
41 !endif
42
43 # Ensure EMACSLOADPATH is defined in the environment.
44 #
45 !if [set EMACSLOADPATH=foo]
46 !endif
47
48 # Allow detection of builds with MSVC 5 or later, so we can
49 # speed up compiles (see rule at end).
50 #
51 _NMAKE_VER_5=162
52 _NMAKE_VER_4=0
53
54 !IFNDEF _NMAKE_VER
55 _NMAKE_VER=$(_NMAKE_VER_4)
56 !ENDIF
57
58 # Check that the INCLUDE and LIB environment variables are set.
59 #
60 !ifndef INCLUDE
61 !error The INCLUDE environment variable needs to be set.
62 !endif
63 !ifndef LIB
64 !error The LIB environment variable needs to be set.
65 !endif
66
67 # Determine the architecture we're running on.
68 # Define ARCH for our purposes;
69 # Define CPU for use by ntwin32.mak;
70 # Define CONFIG_H to the appropriate config.h for the system;
71 #
72 !ifdef PROCESSOR_ARCHITECTURE
73 # We're on Windows NT
74 CPU = $(PROCESSOR_ARCHITECTURE)
75 CONFIG_H = config.nt
76 OS_TYPE = windowsnt
77 ! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
78 ARCH = i386
79 CPU = i386
80 ! else
81 ! if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
82 ARCH = mips
83 ! else
84 ! if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
85 ARCH = alpha
86 ! else
87 ! if "$(PROCESSOR_ARCHITECTURE)" == "PPC"
88 ARCH = ppc
89 ! else
90 ! if "$(PROCESSOR_ARCHITECTURE)" == "AMD64"
91 ARCH = AMD64
92 ! else
93 ! error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"
94 ! endif
95 ! endif
96 ! endif
97 ! endif
98 ! endif
99 !else
100 # We're on Windows 95
101 ARCH = i386
102 CPU = i386
103 CONFIG_H = config.nt
104 OS_TYPE = windows95
105 !endif
106
107 AR = lib
108 AR_OUT = -out:
109 CC = cl
110 CC_OUT = -Fo
111 LINK = link
112 LINK_OUT = -out:
113 RC = rc $(ARCH_RCFLAGS)
114 RC_OUT = -Fo
115 RC_INCLUDE = -i
116
117 USE_CRT_DLL = 1
118
119 !if USE_CRT_DLL
120 libc = msvcrt$(D).lib
121 EMACS_EXTRA_C_FLAGS= -D_DLL -D_MT -DUSE_CRT_DLL=1
122 !else
123 libc = libcmt$(D).lib
124 EMACS_EXTRA_C_FLAGS= -D_MT
125 !endif
126 baselibs =
127 O = obj
128 A = lib
129
130 BASE_LIBS = $(libc) $(baselibs) oldnames.lib
131
132 ADVAPI32 = advapi32.lib
133 COMCTL32 = comctl32.lib
134 COMDLG32 = comdlg32.lib
135 GDI32 = gdi32.lib
136 MPR = mpr.lib
137 SHELL32 = shell32.lib
138 USER32 = user32.lib
139 WSOCK32 = wsock32.lib
140 WINMM = winmm.lib
141 WINSPOOL = winspool.lib
142 OLE32 = ole32.lib
143 UNISCRIBE = usp10.lib
144 UUID = uuid.lib
145
146 !ifdef NOOPT
147 DEBUG_CFLAGS = -DEMACSDEBUG
148 !else
149 DEBUG_CFLAGS =
150 !endif
151
152 MWINDOWS = -subsystem:windows -entry:mainCRTStartup
153
154 CFLAGS = -I. $(ARCH_CFLAGS) -D_CRT_SECURE_NO_WARNINGS \
155 $(DEBUG_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS)
156 ESC_CFLAGS = -I. $(ARCH_CFLAGS) -D_CRT_SECURE_NO_WARNINGS \
157 $(DEBUG_CFLAGS) $(ESC_USER_CFLAGS) $(LOCAL_FLAGS)
158
159 #SYS_LDFLAGS = -nologo -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
160 SYS_LDFLAGS = -nologo -manifest -dynamicbase:no -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
161
162 # see comments in allocate_heap in w32heap.c before changing any of the
163 # -stack, -heap, or -base settings.
164 !if "$(ARCH)" == "i386"
165 TEMACS_EXTRA_LINK = -stack:0x00800000 -heap:0x00100000 -base:0x01000000 -pdb:$(BLD)\temacs.pdb -machine:x86 $(SUBSYSTEM_CONSOLE) -entry:_start -map:$(BLD)\temacs.map $(EXTRA_LINK)
166 !elseif "$(ARCH)" == "AMD64"
167 TEMACS_EXTRA_LINK = -stack:0x00800000 -heap:0x00100000 -base:0x400000000 -pdb:$(BLD)\temacs.pdb -machine:x64 $(SUBSYSTEM_CONSOLE) -entry:_start -map:$(BLD)\temacs.map $(EXTRA_LINK)
168 !endif
169
170 !ifdef NOOPT
171 OBJDIR = obj
172 !else
173 OBJDIR = obj-spd
174 !endif
175 $(OBJDIR):; -mkdir $(OBJDIR)
176 BLD = $(OBJDIR)/$(ARCH)
177 stamp_BLD: $(OBJDIR)
178 -mkdir "$(BLD)"
179 echo $(BLD) > $@
180
181 COMPILER_TEMP_FILES = *.pdb
182
183 CP = cp -f
184 CP_DIR = cp -rf
185 IFNOTSAMEDIR = if not exist ..\$(DIRNAME)_same-dir.tst
186 ENDIF =
187 FOREACH = for %%f in (
188 FORVAR = %%f
189 FORDO = ) do
190 ENDFOR =
191 ARGQUOTE = "
192 # "
193 DQUOTE = \"
194 DEL = rm
195 DEL_TREE = rm -r
196
197 !ifdef NODEBUG
198 DEBUG_FLAG =
199 DEBUG_LINK =
200 D =
201 !else
202 DEBUG_FLAG = -Zi
203 DEBUG_LINK = -debug
204 D = d
205 !endif
206
207 # gcc-specific pragma (ignore for MSVC)
208 PRAGMA_SYSTEM_HEADER =
209
210 !if "$(ARCH)" == "i386"
211 !ifdef NOOPT
212 #ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)
213 ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zl -Zp8 -W2 -Od -Gd $(DEBUG_FLAG)
214 !else
215 #ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)
216 ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zl -Zp8 -W2 -Oi -Ot -Oy- -Ob2 -GF -Gy -Gd $(DEBUG_FLAG)
217 !endif
218 ARCH_LDFLAGS = $(SYS_LDFLAGS)
219 EMACS_HEAPSIZE = 27
220 EMACS_PURESIZE = 5000000
221 EMACS_MANIFEST = emacs-x86.manifest
222
223 !else
224 !if "$(ARCH)" == "mips"
225 ARCH_CFLAGS = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
226 ARCH_LDFLAGS = $(SYS_LDFLAGS)
227 EMACS_HEAPSIZE = 27
228 EMACS_PURESIZE = 5000000
229 EMACS_MANIFEST = emacs-mips.manifest
230
231 !else
232 !if "$(ARCH)" == "alpha"
233 !if "$(BUILD_TYPE)" == "spd"
234 ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
235 !else
236 ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
237 !endif
238 ARCH_LDFLAGS = $(SYS_LDFLAGS)
239 EMACS_HEAPSIZE = 27
240 EMACS_PURESIZE = 5000000
241 EMACS_MANIFEST = emacs-alpha.manifest
242
243 !else
244 !if "$(ARCH)" == "ppc"
245 # These flags are a guess...if they don't work, please send me mail.
246 ARCH_LDFLAGS = $(SYS_LDFLAGS)
247 EMACS_HEAPSIZE = 27
248 EMACS_PURESIZE = 5000000
249 EMACS_MANIFEST = emacs-ppc.manifest
250
251 !else
252 !if "$(ARCH)" == "AMD64"
253 !ifdef NOOPT
254 ARCH_CFLAGS = -nologo -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -c -Zl -Zp8 -W2 -Od -Gd -Wp64 $(DEBUG_FLAG)
255 !else
256 ARCH_CFLAGS = -nologo -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -c -Zl -Zp8 -W2 -O2x -GF -Gy -Gd $(DEBUG_FLAG)
257 !endif
258 ARCH_LDFLAGS = $(SYS_LDFLAGS) -machine:x64
259 ARCH_RCFLAGS = -DWIN64
260 EMACS_HEAPSIZE = 42
261 EMACS_PURESIZE = 10000000
262 EMACS_MANIFEST = emacs-x64.manifest
263
264 !else
265 !ERROR Unknown architecture type "$(ARCH)".
266 !endif
267 !endif
268 !endif
269 !endif
270 !endif
271
272 LINK_FLAGS = $(ARCH_LDFLAGS) $(DEBUG_LINK) $(USER_LDFLAGS)
273
274 # From MSVC 5.0 onwards, it seem base relocation information is not included,
275 # at least in release builds. We need to ensure the reloc info is included
276 # in order to use the MSVC profiler.
277 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
278 EXTRA_LINK =
279 !ELSE
280 EXTRA_LINK = -profile
281 !ENDIF
282
283 #
284 # If the compiler supports compiling multiple .c files to .o files at
285 # one time, use this feature.
286 #
287 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
288 .c{$(BLD)}.obj:
289 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
290 !ELSE
291 .c{$(BLD)}.obj::
292 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
293 !ENDIF