Nuke arch-tags.
[emacs.git] / nt / nmake.defs
blob4e23aab2c7d33f16d0f01e9f312198b9fa3298da
1 #  -*- Makefile -*- definition file for building GNU Emacs on Windows NT.\r
2 #  Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,\r
3 #    2008, 2009, 2010, 2011 Free Software Foundation, Inc.\r
4 \r
5 # This file is part of GNU Emacs.\r
6 \r
7 # GNU Emacs is free software: you can redistribute it and/or modify\r
8 # it under the terms of the GNU General Public License as published by\r
9 # the Free Software Foundation, either version 3 of the License, or\r
10 # (at your option) any later version.\r
12 # GNU Emacs is distributed in the hope that it will be useful,\r
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 # GNU General Public License for more details.\r
17 # You should have received a copy of the GNU General Public License\r
18 # along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.\r
21 # Ensure 'all' is the default target\r
22 all:\r
24 THE_SHELL = $(COMSPEC)\r
25 SHELLTYPE=CMD\r
27 MAKETYPE=nmake\r
29 CURDIR          = $(MAKEDIR:\=/)\r
30 THISDIR         = $(MAKEDIR)\r
32 ALL_DEPS        = $**\r
34 SUBSYSTEM_WINDOWS=-subsystem:windows\r
35 SUBSYSTEM_CONSOLE=-subsystem:console\r
37 # INSTALL_DIR is the directory into which emacs will be installed.\r
38 #\r
39 !ifndef INSTALL_DIR\r
40 INSTALL_DIR     = $(CURDIR)/..\r
41 !endif\r
43 # Ensure EMACSLOADPATH is defined in the environment.\r
44 #\r
45 !if [set EMACSLOADPATH=foo]\r
46 !endif\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
54 !IFNDEF _NMAKE_VER\r
55 _NMAKE_VER=$(_NMAKE_VER_4)\r
56 !ENDIF\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
67 # Determine the architecture we're running on.\r
68 # Define ARCH for our purposes;\r
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
74 CPU             = $(PROCESSOR_ARCHITECTURE)\r
75 CONFIG_H        = config.nt\r
76 OS_TYPE         = windowsnt\r
77 ! if "$(PROCESSOR_ARCHITECTURE)" == "x86"\r
78 ARCH            = i386\r
79 CPU             = i386\r
80 ! else\r
81 !  if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"\r
82 ARCH            = mips\r
83 !  else\r
84 !   if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"\r
85 ARCH            = alpha\r
86 !   else\r
87 !    if "$(PROCESSOR_ARCHITECTURE)" == "PPC"\r
88 ARCH            = ppc\r
89 !    else\r
90 !     error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"\r
91 !    endif\r
92 !   endif\r
93 !  endif\r
94 ! endif\r
95 !else\r
96 # We're on Windows 95\r
97 ARCH            = i386\r
98 CPU             = i386\r
99 CONFIG_H        = config.nt\r
100 OS_TYPE         = windows95\r
101 !endif\r
103 AR              = lib\r
104 AR_OUT          = -out:\r
105 CC              = cl\r
106 CC_OUT          = -Fo\r
107 LINK            = link\r
108 LINK_OUT        = -out:\r
109 RC              = rc\r
110 RC_OUT          = -Fo\r
111 RC_INCLUDE      = -i\r
113 libc            = libc.lib\r
114 baselibs        =\r
115 O               = obj\r
116 A               = lib\r
118 BASE_LIBS       = $(libc) $(baselibs) oldnames.lib\r
120 ADVAPI32        = advapi32.lib\r
121 COMCTL32        = comctl32.lib\r
122 COMDLG32        = comdlg32.lib\r
123 GDI32           = gdi32.lib\r
124 MPR             = mpr.lib\r
125 SHELL32         = shell32.lib\r
126 USER32          = user32.lib\r
127 WSOCK32         = wsock32.lib\r
128 WINMM           = winmm.lib\r
129 WINSPOOL        = winspool.lib\r
130 OLE32           = ole32.lib\r
131 UNISCRIBE       = usp10.lib\r
132 UUID            = uuid.lib\r
134 !ifdef NOOPT\r
135 DEBUG_CFLAGS    = -DEMACSDEBUG\r
136 !else\r
137 DEBUG_CFLAGS    =\r
138 !endif\r
140 !ifdef ENABLECHECKS\r
141 CHECKING_CFLAGS = -DENABLE_CHECKING -DXASSERTS\r
142 !else\r
143 CHECKING_CFLAGS =\r
144 !endif\r
146 CFLAGS          = -I. $(ARCH_CFLAGS) \\r
147                   $(DEBUG_CFLAGS) $(CHECKING_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS)\r
148 EMACS_EXTRA_C_FLAGS =\r
150 SYS_LDFLAGS     = -nologo -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net setargv.obj\r
152 # see comments in allocate_heap in w32heap.c before changing any of the\r
153 # -stack, -heap, or -base settings.\r
154 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)\r
156 !ifdef NOOPT\r
157 OBJDIR          = obj\r
158 !else\r
159 OBJDIR          = obj-spd\r
160 !endif\r
161 $(OBJDIR):;     -mkdir $(OBJDIR)\r
162 BLD             = $(OBJDIR)/$(ARCH)\r
163 stamp_BLD:      $(OBJDIR)\r
164                 -mkdir "$(BLD)"\r
165                 echo $(BLD) > $@\r
167 COMPILER_TEMP_FILES = *.pdb\r
169 CP              = cp -f\r
170 CP_DIR          = cp -rf\r
171 IFNOTSAMEDIR    = if not exist ..\same-dir.tst\r
172 ENDIF           =\r
173 FOREACH         = for %%f in (\r
174 FORVAR          = %%f\r
175 FORDO           = ) do\r
176 ENDFOR          =\r
177 ARGQUOTE        = "\r
178 # "\r
179 DQUOTE          = \"\r
180 DEL             = rm\r
181 DEL_TREE        = rm -r\r
183 !ifdef NODEBUG\r
184 DEBUG_FLAG =\r
185 DEBUG_LINK =\r
186 !else\r
187 DEBUG_FLAG = -Zi\r
188 DEBUG_LINK = -debug:full\r
189 !endif\r
191 !if "$(ARCH)" == "i386"\r
192 !ifdef NOOPT\r
193 ARCH_CFLAGS     = -nologo -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)\r
194 !else\r
195 ARCH_CFLAGS     = -nologo -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)\r
196 !endif\r
197 ARCH_LDFLAGS    = $(SYS_LDFLAGS)\r
199 !else\r
200 !if "$(ARCH)" == "mips"\r
201 ARCH_CFLAGS     = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0\r
202 ARCH_LDFLAGS    = $(SYS_LDFLAGS)\r
204 !else\r
205 !if "$(ARCH)" == "alpha"\r
206 !if "$(BUILD_TYPE)" == "spd"\r
207 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=\r
208 !else\r
209 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=\r
210 !endif\r
211 ARCH_LDFLAGS    = $(SYS_LDFLAGS)\r
213 !else\r
214 !if "$(ARCH)" == "ppc"\r
215 # These flags are a guess...if they don't work, please send me mail.\r
216 ARCH_CFLAGS     = -D_PPC_=1 -c -Ze -Zi -W2 -Od\r
217 ARCH_LDFLAGS    = $(SYS_LDFLAGS)\r
219 !else\r
220 !ERROR Unknown architecture type "$(ARCH)".\r
221 !endif\r
222 !endif\r
223 !endif\r
224 !endif\r
226 LINK_FLAGS      = $(ARCH_LDFLAGS) $(DEBUG_LINK) $(USER_LDFLAGS)\r
228 # From MSVC 5.0 onwards, it seem base relocation information is not included,\r
229 # at least in release builds.  We need to ensure the reloc info is included\r
230 # in order to use the MSVC profiler.\r
231 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")\r
232 EXTRA_LINK      =\r
233 !ELSE\r
234 EXTRA_LINK      = -profile\r
235 !ENDIF\r
238 # If the compiler supports compiling multiple .c files to .o files at\r
239 # one time, use this feature.\r
241 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")\r
242 .c{$(BLD)}.obj:\r
243                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<\r
244 !ELSE\r
245 .c{$(BLD)}.obj::\r
246                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<\r
247 !ENDIF\r