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