* src/lread.c (syms_of_lread): Initialize Vlexical_binding.
[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 MWINDOWS = -subsystem:windows -entry:mainCRTStartup
149
150 CFLAGS = -I. $(ARCH_CFLAGS) \
151 $(DEBUG_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS)
152 ESC_CFLAGS = -I. $(ARCH_CFLAGS) \
153 $(DEBUG_CFLAGS) $(ESC_USER_CFLAGS) $(LOCAL_FLAGS)
154
155 #SYS_LDFLAGS = -nologo -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
156 !ifdef NOOPT
157 SYS_LDFLAGS = -nologo -manifest -dynamicbase:no -debug -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
158 !else
159 SYS_LDFLAGS = -nologo -manifest -dynamicbase:no -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj
160 !endif
161
162 # see comments in allocate_heap in w32heap.c before changing any of the
163 # -stack, -heap, or -base settings.
164 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)
165
166 !ifdef NOOPT
167 OBJDIR = obj
168 !else
169 OBJDIR = obj-spd
170 !endif
171 $(OBJDIR):; -mkdir $(OBJDIR)
172 BLD = $(OBJDIR)/$(ARCH)
173 stamp_BLD: $(OBJDIR)
174 -mkdir "$(BLD)"
175 echo $(BLD) > $@
176
177 COMPILER_TEMP_FILES = *.pdb
178
179 CP = cp -f
180 CP_DIR = cp -rf
181 IFNOTSAMEDIR = if not exist ..\$(DIRNAME)_same-dir.tst
182 ENDIF =
183 FOREACH = for %%f in (
184 FORVAR = %%f
185 FORDO = ) do
186 ENDFOR =
187 ARGQUOTE = "
188 # "
189 DQUOTE = \"
190 DEL = rm
191 DEL_TREE = rm -r
192
193 !ifdef NODEBUG
194 DEBUG_FLAG =
195 DEBUG_LINK =
196 D =
197 !else
198 DEBUG_FLAG = -Zi
199 DEBUG_LINK = -debug
200 D = d
201 !endif
202
203 # gcc-specific pragma (ignore for MSVC)
204 PRAGMA_SYSTEM_HEADER =
205
206 !if "$(ARCH)" == "i386"
207 !ifdef NOOPT
208 #ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)
209 ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zl -Zp8 -W2 -Od -Gd $(DEBUG_FLAG)
210 !else
211 #ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)
212 ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zl -Zp8 -W2 -Oi -Ot -Oy- -Ob2 -GF -Gy -Gd $(DEBUG_FLAG)
213 !endif
214 ARCH_LDFLAGS = $(SYS_LDFLAGS)
215
216 !else
217 !if "$(ARCH)" == "mips"
218 ARCH_CFLAGS = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
219 ARCH_LDFLAGS = $(SYS_LDFLAGS)
220
221 !else
222 !if "$(ARCH)" == "alpha"
223 !if "$(BUILD_TYPE)" == "spd"
224 ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
225 !else
226 ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
227 !endif
228 ARCH_LDFLAGS = $(SYS_LDFLAGS)
229
230 !else
231 !if "$(ARCH)" == "ppc"
232 # These flags are a guess...if they don't work, please send me mail.
233 ARCH_CFLAGS = -D_PPC_=1 -c -Ze -Zi -W2 -Od
234 ARCH_LDFLAGS = $(SYS_LDFLAGS)
235
236 !else
237 !ERROR Unknown architecture type "$(ARCH)".
238 !endif
239 !endif
240 !endif
241 !endif
242
243 LINK_FLAGS = $(ARCH_LDFLAGS) $(DEBUG_LINK) $(USER_LDFLAGS)
244
245 # From MSVC 5.0 onwards, it seem base relocation information is not included,
246 # at least in release builds. We need to ensure the reloc info is included
247 # in order to use the MSVC profiler.
248 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
249 EXTRA_LINK =
250 !ELSE
251 EXTRA_LINK = -profile
252 !ENDIF
253
254 #
255 # If the compiler supports compiling multiple .c files to .o files at
256 # one time, use this feature.
257 #
258 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
259 .c{$(BLD)}.obj:
260 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
261 !ELSE
262 .c{$(BLD)}.obj::
263 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
264 !ENDIF
265