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