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