2001-02-24 Michael Kifer <kifer@cs.sunysb.edu>
[emacs.git] / nt / nmake.defs
blobfb6dfdae282d160ffef00696861e79ade73c9c08
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.
20 # Ensure 'all' is the default target
21 all:
23 THE_SHELL = $(COMSPEC)
24 SHELLTYPE=CMD
26 MAKETYPE=nmake
28 CURDIR          = $(MAKEDIR:\=/)
29 THISDIR         = $(MAKEDIR)
31 ALL_DEPS        = $**
33 SUBSYSTEM_WINDOWS=-subsystem:windows
34 SUBSYSTEM_CONSOLE=-subsystem:console
36 # INSTALL_DIR is the directory into which emacs will be installed.
38 !ifndef INSTALL_DIR
39 INSTALL_DIR     = $(CURDIR)/..
40 !endif
42 # Allow detection of builds with MSVC 5 or later, so we can
43 # speed up compiles (see rule at end).
45 _NMAKE_VER_5=162
46 _NMAKE_VER_4=0
48 !IFNDEF _NMAKE_VER
49 _NMAKE_VER=$(_NMAKE_VER_4)
50 !ENDIF
52 # Check that the INCLUDE and LIB environment variables are set.
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
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;
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
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
107 libc            = libc.lib
108 baselibs        = 
109 O               = obj
110 A               = lib
112 BASE_LIBS       = $(libc) $(baselibs) oldnames.lib
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
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 =
131 SYS_LDFLAGS     = -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net
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)
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)"
147 COMPILER_TEMP_FILES = *.pdb
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
162 !ifdef NODEBUG
163 DEBUG_FLAG = 
164 !else
165 DEBUG_FLAG = -Zi
166 !endif
168 !if "$(ARCH)" == "i386"
169 !ifdef NOOPT
170 ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)
171 !else
172 ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)
173 !endif
174 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
176 !else
177 !if "$(ARCH)" == "mips"
178 ARCH_CFLAGS     = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
179 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
181 !else
182 !if "$(ARCH)" == "alpha"
183 !if "$(BUILD_TYPE)" == "spd"
184 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
185 !else
186 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
187 !endif
188 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
190 !else
191 !if "$(ARCH)" == "ppc"
192 # These flags are a guess...if they don't work, please send me mail.
193 ARCH_CFLAGS     = -D_PPC_=1 -c -Ze -Zi -W2 -Od
194 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
196 !else
197 !ERROR Unknown architecture type "$(ARCH)".
198 !endif
199 !endif
200 !endif
201 !endif
203 LINK_FLAGS      = $(ARCH_LDFLAGS) $(USER_LDFLAGS)
205 # From MSVC 5.0 onwards, it seem base relocation information is not included,
206 # at least in release builds.  We need to ensure the reloc info is included
207 # in order to use the MSVC profiler.
208 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
209 EXTRA_LINK      =
210 !ELSE
211 EXTRA_LINK      = -profile
212 !ENDIF
215 # If the compiler supports compiling multiple .c files to .o files at
216 # one time, use this feature.
218 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
219 .c{$(BLD)}.obj:
220                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
221 !ELSE
222 .c{$(BLD)}.obj::
223                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
224 !ENDIF