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