(FONT_CFLAGS): New optional compiler flag.
[bpt/emacs.git] / nt / nmake.defs
CommitLineData
bd6766d3 1# -*- Makefile -*- definition file for building GNU Emacs on Windows NT.\r
b65d8176 2# Copyright (C) 2000, 2001, 2002, 2003, 2004,\r
6d344054 3# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.\r
177c0ea7 4#\r
039f725c
AI
5# GNU Emacs is free software; you can redistribute it and/or modify\r
6# it under the terms of the GNU General Public License as published by\r
4a9f99bd 7# the Free Software Foundation; either version 3, or (at your option)\r
039f725c 8# any later version.\r
177c0ea7 9#\r
039f725c
AI
10# GNU Emacs is distributed in the hope that it will be useful,\r
11# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
13# GNU General Public License for more details.\r
177c0ea7 14#\r
039f725c
AI
15# You should have received a copy of the GNU General Public License\r
16# along with GNU Emacs; see the file COPYING. If not, write to\r
364c38d3
LK
17# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\r
18# Boston, MA 02110-1301, USA.\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
30\r
31ALL_DEPS = $**\r
32\r
33SUBSYSTEM_WINDOWS=-subsystem:windows\r
34SUBSYSTEM_CONSOLE=-subsystem:console\r
35\r
36# INSTALL_DIR is the directory into which emacs will be installed.\r
37#\r
38!ifndef INSTALL_DIR\r
39INSTALL_DIR = $(CURDIR)/..\r
40!endif\r
41\r
42# Ensure EMACSLOADPATH is defined in the environment.\r
43#\r
44!if [set EMACSLOADPATH=foo]\r
45!endif\r
46\r
47# Allow detection of builds with MSVC 5 or later, so we can\r
48# speed up compiles (see rule at end).\r
49#\r
50_NMAKE_VER_5=162\r
51_NMAKE_VER_4=0\r
52\r
53!IFNDEF _NMAKE_VER\r
54_NMAKE_VER=$(_NMAKE_VER_4)\r
55!ENDIF\r
56\r
57# Check that the INCLUDE and LIB environment variables are set.\r
58#\r
59!ifndef INCLUDE\r
60!error The INCLUDE environment variable needs to be set.\r
61!endif\r
62!ifndef LIB\r
63!error The LIB environment variable needs to be set.\r
64!endif\r
65\r
66# Determine the architecture we're running on.\r
177c0ea7 67# Define ARCH for our purposes;\r
039f725c
AI
68# Define CPU for use by ntwin32.mak;\r
69# Define CONFIG_H to the appropriate config.h for the system;\r
70#\r
71!ifdef PROCESSOR_ARCHITECTURE\r
72# We're on Windows NT\r
73CPU = $(PROCESSOR_ARCHITECTURE)\r
74CONFIG_H = config.nt\r
75OS_TYPE = windowsnt\r
76! if "$(PROCESSOR_ARCHITECTURE)" == "x86"\r
77ARCH = i386\r
78CPU = i386\r
79! else\r
80! if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"\r
81ARCH = mips\r
82! else\r
83! if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"\r
84ARCH = alpha\r
85! else\r
86! if "$(PROCESSOR_ARCHITECTURE)" == "PPC"\r
87ARCH = ppc\r
88! else\r
89! error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"\r
90! endif\r
91! endif\r
92! endif\r
93! endif\r
94!else\r
95# We're on Windows 95\r
96ARCH = i386\r
97CPU = i386\r
98CONFIG_H = config.nt\r
99OS_TYPE = windows95\r
100!endif\r
101\r
102AR = lib\r
103AR_OUT = -out:\r
104CC = cl\r
105CC_OUT = -Fo\r
106LINK = link\r
107LINK_OUT = -out:\r
108RC = rc\r
109RC_OUT = -Fo\r
110RC_INCLUDE = -i\r
111\r
112libc = libc.lib\r
177c0ea7 113baselibs =\r
039f725c
AI
114O = obj\r
115A = lib\r
116\r
117BASE_LIBS = $(libc) $(baselibs) oldnames.lib\r
118\r
119ADVAPI32 = advapi32.lib\r
fc2554aa 120COMCTL32 = comctl32.lib\r
039f725c
AI
121COMDLG32 = comdlg32.lib\r
122GDI32 = gdi32.lib\r
123MPR = mpr.lib\r
124SHELL32 = shell32.lib\r
125USER32 = user32.lib\r
126WSOCK32 = wsock32.lib\r
a71f59c1 127WINMM = winmm.lib\r
0e664bca 128WINSPOOL = winspool.lib\r
a71f59c1 129OLE32 = ole32.lib\r
039f725c 130\r
12cc4d8f
JR
131!ifdef USE_FONTBACKEND\r
132FONT_CFLAGS = -DUSE_FONT_BACKEND=1\r
133!else\r
134FONT_CFLAGS =\r
135!endif\r
136\r
039f725c
AI
137!ifdef NOOPT\r
138DEBUG_CFLAGS = -DEMACSDEBUG\r
139!else\r
177c0ea7 140DEBUG_CFLAGS =\r
039f725c 141!endif\r
12cc4d8f
JR
142CFLAGS = -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 \\r
143 $(ARCH_CFLAGS) -D$(ARCH) -D_CRTAPI1=_cdecl \\r
144 $(DEBUG_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS)\r
145EMACS_EXTRA_C_FLAGS = $(FONT_CFLAGS)\r
039f725c 146\r
238add5e 147SYS_LDFLAGS = -nologo -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj\r
039f725c
AI
148\r
149# see comments in allocate_heap in w32heap.c before changing any of the\r
150# -stack, -heap, or -base settings.\r
53b9fd77 151TEMACS_EXTRA_LINK = -stack:0x00800000 -heap:0x00100000 -base:0x01000000 -pdb:$(BLD)\temacs.pdb -machine:$(ARCH) $(SUBSYSTEM_CONSOLE) -entry:_start -map:$(BLD)\temacs.map $(EXTRA_LINK)\r
039f725c
AI
152\r
153!ifdef NOOPT\r
154OBJDIR = obj\r
155!else\r
156OBJDIR = obj-spd\r
157!endif\r
158$(OBJDIR):; -mkdir $(OBJDIR)\r
159BLD = $(OBJDIR)/$(ARCH)\r
596cbf7e 160stamp_BLD: $(OBJDIR)\r
039f725c 161 -mkdir "$(BLD)"\r
596cbf7e 162 echo $(BLD) > $@\r
039f725c
AI
163\r
164COMPILER_TEMP_FILES = *.pdb\r
165\r
166CP = cp -f\r
167CP_DIR = cp -rf\r
168IFNOTSAMEDIR = if not exist ..\same-dir.tst\r
169ENDIF =\r
170FOREACH = for %%f in (\r
171FORVAR = %%f\r
172FORDO = ) do\r
173ENDFOR =\r
174ARGQUOTE = "\r
33d786f9 175# "\r
039f725c
AI
176DQUOTE = \"\r
177DEL = rm\r
178DEL_TREE = rm -r\r
179\r
180!ifdef NODEBUG\r
177c0ea7
JB
181DEBUG_FLAG =\r
182DEBUG_LINK =\r
039f725c
AI
183!else\r
184DEBUG_FLAG = -Zi\r
53b9fd77 185DEBUG_LINK = -debug:full\r
039f725c
AI
186!endif\r
187\r
188!if "$(ARCH)" == "i386"\r
189!ifdef NOOPT\r
190ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)\r
191!else\r
192ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)\r
193!endif\r
194ARCH_LDFLAGS = $(SYS_LDFLAGS)\r
195\r
196!else\r
197!if "$(ARCH)" == "mips"\r
198ARCH_CFLAGS = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0\r
199ARCH_LDFLAGS = $(SYS_LDFLAGS)\r
200\r
201!else\r
202!if "$(ARCH)" == "alpha"\r
203!if "$(BUILD_TYPE)" == "spd"\r
204ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=\r
205!else\r
206ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=\r
207!endif\r
208ARCH_LDFLAGS = $(SYS_LDFLAGS)\r
209\r
210!else\r
211!if "$(ARCH)" == "ppc"\r
212# These flags are a guess...if they don't work, please send me mail.\r
213ARCH_CFLAGS = -D_PPC_=1 -c -Ze -Zi -W2 -Od\r
214ARCH_LDFLAGS = $(SYS_LDFLAGS)\r
215\r
216!else\r
217!ERROR Unknown architecture type "$(ARCH)".\r
218!endif\r
219!endif\r
220!endif\r
221!endif\r
222\r
223LINK_FLAGS = $(ARCH_LDFLAGS) $(DEBUG_LINK) $(USER_LDFLAGS)\r
224\r
225# From MSVC 5.0 onwards, it seem base relocation information is not included,\r
226# at least in release builds. We need to ensure the reloc info is included\r
227# in order to use the MSVC profiler.\r
228!IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")\r
229EXTRA_LINK =\r
230!ELSE\r
231EXTRA_LINK = -profile\r
232!ENDIF\r
233\r
234#\r
235# If the compiler supports compiling multiple .c files to .o files at\r
236# one time, use this feature.\r
237#\r
238!IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")\r
239.c{$(BLD)}.obj:\r
240 $(CC) $(CFLAGS) -Fo$(BLD)\ $<\r
241!ELSE\r
242.c{$(BLD)}.obj::\r
243 $(CC) $(CFLAGS) -Fo$(BLD)\ $<\r
244!ENDIF\r
a2fcf029
MB
245\r
246# arch-tag: fefa49b0-c23c-46c7-9094-cab2a405058e\r