*** empty log message ***
[emacs.git] / nt / nmake.defs
blob66291c0a9e3c55ce3d57bb26e2012d24963b4323
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)
24 ALL_DEPS        = $**
26 SUBSYSTEM_WINDOWS=-subsystem:windows
27 SUBSYSTEM_CONSOLE=-subsystem:console
29 # INSTALL_DIR is the directory into which emacs will be installed.
31 !ifndef INSTALL_DIR
32 INSTALL_DIR     = $(MAKEDIR)/..
33 !endif
35 # Allow detection of builds with MSVC 5 or later, so we can
36 # speed up compiles (see rule at end).
38 _NMAKE_VER_5=162
39 _NMAKE_VER_4=0
41 !IFNDEF _NMAKE_VER
42 _NMAKE_VER=$(_NMAKE_VER_4)
43 !ENDIF
45 # Check that the INCLUDE and LIB environment variables are set.
47 !ifndef INCLUDE
48 !error The INCLUDE environment variable needs to be set.
49 !endif
50 !ifndef LIB
51 !error The LIB environment variable needs to be set.
52 !endif
54 # Determine the architecture we're running on.
55 # Define ARCH for our purposes; 
56 # Define CPU for use by ntwin32.mak;
57 # Define CONFIG_H to the appropriate config.h for the system;
59 !ifdef PROCESSOR_ARCHITECTURE
60 # We're on Windows NT
61 CPU             = $(PROCESSOR_ARCHITECTURE)
62 CONFIG_H        = config.nt
63 OS_TYPE         = windowsnt
64 ! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
65 ARCH            = i386
66 CPU             = i386
67 ! else
68 !  if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
69 ARCH            = mips
70 !  else
71 !   if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
72 ARCH            = alpha
73 !   else
74 !    if "$(PROCESSOR_ARCHITECTURE)" == "PPC"
75 ARCH            = ppc
76 !    else
77 !     error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"
78 !    endif
79 !   endif
80 !  endif
81 ! endif
82 !else
83 # We're on Windows 95
84 ARCH            = i386
85 CPU             = i386
86 CONFIG_H        = config.nt
87 OS_TYPE         = windows95
88 !endif
90 AR              = lib
91 AR_OUT          = -out:
92 CC              = cl
93 CC_OUT          = -Fo
94 LINK            = link
95 LINK_OUT        = -out:
96 RC              = rc
97 RC_OUT          = -Fo
98 RC_INCLUDE      = -i
100 libc            = libc.lib
101 baselibs        = 
102 O               = obj
103 A               = lib
105 BASE_LIBS       = $(libc) $(baselibs) oldnames.lib
107 ADVAPI32        = advapi32.lib
108 COMDLG32        = comdlg32.lib
109 GDI32           = gdi32.lib
110 MPR             = mpr.lib
111 SHELL32         = shell32.lib
112 USER32          = user32.lib
113 WSOCK32         = wsock32.lib
115 !ifdef NOOPT
116 DEBUG_CFLAGS    = -DEMACSDEBUG
117 !else
118 DEBUG_CFLAGS    = 
119 !endif
120 CFLAGS          = -I. -DWIN32_LEAN_AND_MEAN $(ARCH_CFLAGS) -D$(ARCH) \
121                   -D_CRTAPI1=_cdecl -D_ANONYMOUS_UNION -D_ANONYMOUS_STRUCT \
122                   $(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 DEL             = rm
146 DEL_TREE        = rm -r
148 # The location of the icon file
149 EMACS_ICON_PATH = ../nt/emacs.ico
151 !ifdef NODEBUG
152 DEBUG_FLAG = 
153 !else
154 DEBUG_FLAG = -Zi
155 !endif
157 !if "$(ARCH)" == "i386"
158 !ifdef NOOPT
159 ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)
160 !else
161 ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)
162 !endif
163 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
165 !else
166 !if "$(ARCH)" == "mips"
167 ARCH_CFLAGS     = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
168 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
170 !else
171 !if "$(ARCH)" == "alpha"
172 !if "$(BUILD_TYPE)" == "spd"
173 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
174 !else
175 ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
176 !endif
177 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
179 !else
180 !if "$(ARCH)" == "ppc"
181 # These flags are a guess...if they don't work, please send me mail.
182 ARCH_CFLAGS     = -D_PPC_=1 -c -Ze -Zi -W2 -Od
183 ARCH_LDFLAGS    = $(SYS_LDFLAGS)
185 !else
186 !ERROR Unknown architecture type "$(ARCH)".
187 !endif
188 !endif
189 !endif
190 !endif
192 LINK_FLAGS      = $(ARCH_LDFLAGS) $(USER_LDFLAGS)
194 # From MSVC 5.0 onwards, it seem base relocation information is not included,
195 # at least in release builds.  We need to ensure the reloc info is included
196 # in order to use the MSVC profiler.
197 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
198 EXTRA_LINK      =
199 !ELSE
200 EXTRA_LINK      = -profile
201 !ENDIF
204 # If the compiler supports compiling multiple .c files to .o files at
205 # one time, use this feature.
207 !IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
208 .c{$(BLD)}.obj:
209                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
210 !ELSE
211 .c{$(BLD)}.obj::
212                 $(CC) $(CFLAGS) -Fo$(BLD)\ $<
213 !ENDIF