Merge from pending; try to fix-up suboptimal ses ChangeLog.
[bpt/emacs.git] / nt / nmake.defs
1 # -*- Makefile -*- definition file for building GNU Emacs on Windows NT.
2 # Copyright (C) 2000-2012 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 ! error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"
91 ! endif
92 ! endif
93 ! endif
94 ! endif
95 !else
96 # We're on Windows 95
97 ARCH = i386
98 CPU = i386
99 CONFIG_H = config.nt
100 OS_TYPE = windows95
101 !endif
102
103 AR = lib
104 AR_OUT = -out:
105 CC = cl
106 CC_OUT = -Fo
107 LINK = link
108 LINK_OUT = -out:
109 RC = rc
110 RC_OUT = -Fo
111 RC_INCLUDE = -i
112
113 USE_CRT_DLL = 1
114
115 !ifdef USE_CRT_DLL
116 libc = msvcrt$(D).lib
117 EMACS_EXTRA_C_FLAGS= -D_DLL -D_MT -DUSE_CRT_DLL=1
118 !else
119 libc = libcmt$(D).lib
120 EMACS_EXTRA_C_FLAGS= -D_MT
121 !endif
122 baselibs =
123 O = obj
124 A = lib
125
126 BASE_LIBS = $(libc) $(baselibs) oldnames.lib
127
128 ADVAPI32 = advapi32.lib
129 COMCTL32 = comctl32.lib
130 COMDLG32 = comdlg32.lib
131 GDI32 = gdi32.lib
132 MPR = mpr.lib
133 SHELL32 = shell32.lib
134 USER32 = user32.lib
135 WSOCK32 = wsock32.lib
136 WINMM = winmm.lib
137 WINSPOOL = winspool.lib
138 OLE32 = ole32.lib
139 UNISCRIBE = usp10.lib
140 UUID = uuid.lib
141
142 !ifdef NOOPT
143 DEBUG_CFLAGS = -DEMACSDEBUG
144 !else
145 DEBUG_CFLAGS =
146 !endif
147
148 !ifdef ENABLECHECKS
149 CHECKING_CFLAGS = -DENABLE_CHECKING -DXASSERTS
150 !else
151 CHECKING_CFLAGS =
152 !endif
153
154 CFLAGS = -I. $(ARCH_CFLAGS) \
155 $(DEBUG_CFLAGS) $(CHECKING_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS)
156 ESC_CFLAGS = -I. $(ARCH_CFLAGS) \
157 $(DEBUG_CFLAGS) $(CHECKING_CFLAGS) $(ESC_USER_CFLAGS) $(LOCAL_FLAGS)
158
159 #SYS_LDFLAGS = -nologo -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
160 !ifdef NOOPT
161 SYS_LDFLAGS = -nologo -manifest -dynamicbase:no -debug -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
162 !else
163 SYS_LDFLAGS = -nologo -manifest -dynamicbase:no -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
164 !endif
165
166 # see comments in allocate_heap in w32heap.c before changing any of the
167 # -stack, -heap, or -base settings.
168 TEMACS_EXTRA_LINK = -stack:0x00800000 -heap:0x00100000 -base:0x01000000 -pdb:$(BLD)\temacs.pdb -machine:$(ARCH) $(SUBSYSTEM_CONSOLE) -entry:_start -map:$(BLD)\temacs.map $(EXTRA_LINK)
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
220 !else
221 !if "$(ARCH)" == "mips"
222 ARCH_CFLAGS = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
223 ARCH_LDFLAGS = $(SYS_LDFLAGS)
224
225 !else
226 !if "$(ARCH)" == "alpha"
227 !if "$(BUILD_TYPE)" == "spd"
228 ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
229 !else
230 ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
231 !endif
232 ARCH_LDFLAGS = $(SYS_LDFLAGS)
233
234 !else
235 !if "$(ARCH)" == "ppc"
236 # These flags are a guess...if they don't work, please send me mail.
237 ARCH_CFLAGS = -D_PPC_=1 -c -Ze -Zi -W2 -Od
238 ARCH_LDFLAGS = $(SYS_LDFLAGS)
239
240 !else
241 !ERROR Unknown architecture type "$(ARCH)".
242 !endif
243 !endif
244 !endif
245 !endif
246
247 LINK_FLAGS = $(ARCH_LDFLAGS) $(DEBUG_LINK) $(USER_LDFLAGS)
248
249 # From MSVC 5.0 onwards, it seem base relocation information is not included,
250 # at least in release builds. We need to ensure the reloc info is included
251 # in order to use the MSVC profiler.
252 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
253 EXTRA_LINK =
254 !ELSE
255 EXTRA_LINK = -profile
256 !ENDIF
257
258 #
259 # If the compiler supports compiling multiple .c files to .o files at
260 # one time, use this feature.
261 #
262 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
263 .c{$(BLD)}.obj:
264 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
265 !ELSE
266 .c{$(BLD)}.obj::
267 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
268 !ENDIF
269