*** empty log message ***
[emacs.git] / nt / nmake.defs
blob27c1ca342a04b8b924e00c3abf9161c7c0bc0de1
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 MAKETYPE=nmake
27 ALL_DEPS        = $**
29 SUBSYSTEM_WINDOWS=-subsystem:windows
30 SUBSYSTEM_CONSOLE=-subsystem:console
32 CURDIR          = $(MAKEDIR:\=/)
34 # INSTALL_DIR is the directory into which emacs will be installed.
36 !ifndef INSTALL_DIR
37 INSTALL_DIR     = $(CURDIR)/..
38 !endif
40 # Allow detection of builds with MSVC 5 or later, so we can
41 # speed up compiles (see rule at end).
43 _NMAKE_VER_5=162
44 _NMAKE_VER_4=0
46 !IFNDEF _NMAKE_VER
47 _NMAKE_VER=$(_NMAKE_VER_4)
48 !ENDIF
50 # Check that the INCLUDE and LIB environment variables are set.
52 !ifndef INCLUDE
53 !error The INCLUDE environment variable needs to be set.
54 !endif
55 !ifndef LIB
56 !error The LIB environment variable needs to be set.
57 !endif
59 # Determine the architecture we're running on.
60 # Define ARCH for our purposes; 
61 # Define CPU for use by ntwin32.mak;
62 # Define CONFIG_H to the appropriate config.h for the system;
64 !ifdef PROCESSOR_ARCHITECTURE
65 # We're on Windows NT
66 CPU             = $(PROCESSOR_ARCHITECTURE)
67 CONFIG_H        = config.nt
68 OS_TYPE         = windowsnt
69 ! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
70 ARCH            = i386
71 CPU             = i386
72 ! else
73 !  if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
74 ARCH            = mips
75 !  else
76 !   if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
77 ARCH            = alpha
78 !   else
79 !    if "$(PROCESSOR_ARCHITECTURE)" == "PPC"
80 ARCH            = ppc
81 !    else
82 !     error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"
83 !    endif
84 !   endif
85 !  endif
86 ! endif
87 !else
88 # We're on Windows 95
89 ARCH            = i386
90 CPU             = i386
91 CONFIG_H        = config.nt
92 OS_TYPE         = windows95
93 !endif
95 AR              = lib
96 AR_OUT          = -out:
97 CC              = cl
98 CC_OUT          = -Fo
99 LINK            = link
100 LINK_OUT        = -out:
101 RC              = rc
102 RC_OUT          = -Fo
103 RC_INCLUDE      = -i
105 libc            = libc.lib
106 baselibs        = 
107 O               = obj
108 A               = lib
110 BASE_LIBS       = $(libc) $(baselibs) oldnames.lib
112 ADVAPI32        = advapi32.lib
113 COMDLG32        = comdlg32.lib
114 GDI32           = gdi32.lib
115 MPR             = mpr.lib
116 SHELL32         = shell32.lib
117 USER32          = user32.lib
118 WSOCK32         = wsock32.lib
120 !ifdef NOOPT
121 DEBUG_CFLAGS    = -DEMACSDEBUG
122 !else
123 DEBUG_CFLAGS    = 
124 !endif
125 CFLAGS          = -I. -DWIN32_LEAN_AND_MEAN $(ARCH_CFLAGS) -D$(ARCH) \
126                   -D_CRTAPI1=_cdecl $(DEBUG_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS)
127 EMACS_EXTRA_C_FLAGS =
129 SYS_LDFLAGS     = -release -incremental:no -version:3.10 -swaprun:cd -swaprun:net
131 # see comments in allocate_heap in w32heap.c before changing any of the
132 # -stack, -heap, or -base settings.
133 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)
135 !ifdef NOOPT
136 OBJDIR          = obj
137 !else
138 OBJDIR          = obj-spd
139 !endif
140 $(OBJDIR):;     -mkdir $(OBJDIR)
141 BLD             = $(OBJDIR)/$(ARCH)
142 $(BLD):         $(OBJDIR)
143                 -mkdir "$(BLD)"
145 COMPILER_TEMP_FILES = *.pdb
147 CP              = cp -f
148 CP_DIR          = cp -rf
149 IFNOTSAMEDIR    = if not exist ..\same-dir.tst
150 ENDIF           =
151 FOREACH         = for %%f in (
152 FORVAR          = %%f
153 FORDO           = ) do
154 ENDFOR          =
155 ARGQUOTE        = "
156 DQUOTE          = \"
157 DEL             = rm
158 DEL_TREE        = rm -r
160 !ifdef NODEBUG
161 DEBUG_FLAG = 
162 !else
163 DEBUG_FLAG = -Zi
164 !endif
166 !if "$(ARCH)" == "i386"
167 !ifdef NOOPT
168 ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)
169 !else
170 ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)
171 !endif
172 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
174 !else
175 !if "$(ARCH)" == "mips"
176 ARCH_CFLAGS     = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
177 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
179 !else
180 !if "$(ARCH)" == "alpha"
181 !if "$(BUILD_TYPE)" == "spd"
182 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
183 !else
184 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
185 !endif
186 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
188 !else
189 !if "$(ARCH)" == "ppc"
190 # These flags are a guess...if they don't work, please send me mail.
191 ARCH_CFLAGS     = -D_PPC_=1 -c -Ze -Zi -W2 -Od
192 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
194 !else
195 !ERROR Unknown architecture type "$(ARCH)".
196 !endif
197 !endif
198 !endif
199 !endif
201 LINK_FLAGS      = $(ARCH_LDFLAGS) $(USER_LDFLAGS)
203 # From MSVC 5.0 onwards, it seem base relocation information is not included,
204 # at least in release builds.  We need to ensure the reloc info is included
205 # in order to use the MSVC profiler.
206 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
207 EXTRA_LINK      =
208 !ELSE
209 EXTRA_LINK      = -profile
210 !ENDIF
213 # If the compiler supports compiling multiple .c files to .o files at
214 # one time, use this feature.
216 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
217 .c{$(BLD)}.obj:
218                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
219 !ELSE
220 .c{$(BLD)}.obj::
221                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
222 !ENDIF