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