Commit | Line | Data |
---|---|---|
805e021f CE |
1 | # Copyright 2000, International Business Machines Corporation and others. |
2 | # All Rights Reserved. | |
3 | # | |
4 | # This software has been released under the terms of the IBM Public | |
5 | # License. For details, see the LICENSE file in the top-level source | |
6 | # directory or online at http://www.openafs.org/dl/license10.html | |
7 | ||
8 | # Common nmake file to be included in each NTMakfile. | |
9 | # | |
10 | # Required definitions: | |
11 | # AFSDEV_BUILDTYPE = [ CHECKED | FREE ] | |
12 | # | |
13 | # Optional definitions: | |
14 | # AFSDEV_WARNLEVEL = [0 | 1 | 2 | 3 | 4] (default is 3) | |
15 | # AFSDEV_AUXCDEFINES = <auxiliary C preprocessor defs> (default is null) | |
16 | # AFSDEV_AUXRCFLAGS = <auxiliary resource compiler flags> (default is null) | |
17 | # AFSDEV_AUXMIDLFLAGS = auxiliary midl flags | |
18 | # AFSDEV_TEXTMODE = <text mode is default if defined> (default is null) | |
19 | # DEBUG_VERBOSE = optional debug statements for testing | |
20 | # AFS_OBJDIR - Location of object directory, either absolute or relative | |
21 | # AFSROOT - ROOT Directory so that $(AFSROOT)\scr is location of source | |
22 | # | |
23 | ############################################################################ | |
24 | # Optional compliation flags | |
25 | # NO_CRTDBG - used to disable some builds for CFTDBG allocate mapping | |
26 | # _CRTDBG_MAP_ALLOC = <utilize crt debug C runtime if define> (default is null) | |
27 | # VADUMP - define VADUMP=1 if you are going to use the vadump utility and you are using V6.0 | |
28 | # | |
29 | ####### Special optional defines | |
30 | ||
31 | !IFNDEF NO_CRTDBG | |
32 | #don't set _CRTDBG_MAP_ALLOC flag for some module compliations | |
33 | #_CRTDBG_MAP_ALLOC=1 | |
34 | !ENDIF | |
35 | ||
36 | ####### | |
37 | ||
38 | #sanity checks | |
39 | ||
40 | !IF ("$(CPU)" != "i386") | |
41 | !ERROR Platform SDK not configured for i386 | |
42 | !ENDIF | |
43 | ||
44 | !IF EXISTS("TOOLS.INI") | |
45 | !MESSAGE ************CAUTION TOOLS.INI IN EFFECT********** | |
46 | !ENDIF | |
47 | !IF ("$(AFSROOT)"=="") | |
48 | !ERROR AFSROOT is not set | |
49 | !ENDIF | |
50 | !IF (DEFINED(PROFILE) || DEFINED(TUNE)) | |
51 | AFSDEV_BUILDTYPE = NONE | |
52 | !ELSE | |
53 | !IF ("$(AFSDEV_BUILDTYPE)" != "CHECKED" && "$(AFSDEV_BUILDTYPE)" != "FREE") | |
54 | !ERROR Must define AFSDEV_BUILDTYPE to be CHECKED or FREE. | |
55 | !ENDIF | |
56 | !ENDIF | |
57 | !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") | |
58 | !UNDEF _CRTDBG_MAP_ALLOC | |
59 | !ENDIF | |
60 | ||
61 | # Limit default include and library directories to those specified for build. | |
62 | ||
63 | !IFNDEF AFSDEV_INCLUDE | |
64 | !ERROR Must define AFSDEV_INCLUDE to be the default include directories. | |
65 | !ENDIF | |
66 | ||
67 | !IF ((!DEFINED(INCLUDE)) && ([set INCLUDE=$(AFSDEV_INCLUDE)] != 0)) | |
68 | # If env. var. INCLUDE not defined then macro assignment won't set it. | |
69 | !ERROR Failed setting environment variable INCLUDE. | |
70 | !ENDIF | |
71 | INCLUDE = $(AFSDEV_INCLUDE) | |
72 | ||
73 | !IFNDEF AFSDEV_LIB | |
74 | !ERROR Must define AFSDEV_LIB to be the default library directories. | |
75 | !ENDIF | |
76 | ||
77 | !IF ((!DEFINED(LIB)) && ([set LIB=$(AFSDEV_LIB)] != 0)) | |
78 | # If env. var. LIB not defined then macro assignment won't set it. | |
79 | !ERROR Failed setting environment variable LIB. | |
80 | !ENDIF | |
81 | LIB = $(AFSDEV_LIB) | |
82 | ||
83 | #define used in WinNT/2000 installation and program version display | |
84 | !IF !DEFINED(AFSPRODUCT_VER_MAJOR) | |
85 | AFSPRODUCT_VER_MAJOR=1 | |
86 | !ENDIF | |
87 | !IF !DEFINED(AFSPRODUCT_VER_MINOR) | |
88 | AFSPRODUCT_VER_MINOR=8 | |
89 | !ENDIF | |
90 | !IF !DEFINED(AFSPRODUCT_VER_PATCH) | |
91 | AFSPRODUCT_VER_PATCH=0500 | |
92 | !ENDIF | |
93 | !IF !DEFINED(AFSPRODUCT_VER_BUILD) | |
94 | AFSPRODUCT_VER_BUILD=0 | |
95 | !ENDIF | |
96 | ||
97 | AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH) | |
98 | AFSPRODUCT_FILE_VERSION=$(AFSPRODUCT_VER_MAJOR),$(AFSPRODUCT_VER_MINOR),$(AFSPRODUCT_VER_PATCH),$(AFSPRODUCT_VER_BUILD) | |
99 | # Set CELLNAME_DEFAULT to "your cell name" | |
100 | !IF !DEFINED(CELLNAME_DEFAULT) | |
101 | CELLNAME_DEFAULT=grand.central.org | |
102 | !ENDIF | |
103 | CELLSERVDB_INSTALL=CellServDB.GrandCentral | |
104 | CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB | |
105 | TARGETOS = WINNT | |
106 | ||
107 | # Define defaults folder locations | |
108 | !if !defined(DEST) | |
109 | DEST=$(AFSROOT)\dest | |
110 | !endif | |
111 | !if !defined(SRC) | |
112 | SRC=$(AFSROOT)\src | |
113 | !endif | |
114 | !if !defined(OBJ) | |
115 | OBJ=$(AFSROOT)\obj | |
116 | !endif | |
117 | !if !defined(DOC) | |
118 | DOC=$(AFSROOT)\doc | |
119 | !endif | |
120 | ||
121 | !IF ("$(AFS_OBJDIR)"=="") | |
122 | ######### AFS_OBJDIR is NOT used use default locations | |
123 | ! IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED") | |
124 | DESTDIR=$(DEST)\$(SYS_NAME)\checked | |
125 | OJT=$(OBJ)\$(SYS_NAME)\checked | |
126 | ! ELSE | |
127 | DESTDIR=$(AFSROOT)\$(DEST)\$(SYS_NAME)\free | |
128 | OJT=$(OBJ)\$(SYS_NAME)\free | |
129 | ! ENDIF | |
130 | UTIL_CR = $(DESTDIR)\bin\util_cr.exe | |
131 | !ELSE | |
132 | ######### AFS_OBJDIR is defined, use specific locations for obj and dest | |
133 | # there is a special case for config because util_cr is not defined yet! | |
134 | ! IF (EXIST($(AFSROOT)\$(AFS_OBJDIR))) | |
135 | # AFS_OBJDIR is relative path | |
136 | ! IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED") | |
137 | DESTDIR=$(AFSROOT)\$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\checked | |
138 | OJT=$(AFSROOT)\$(AFS_OBJDIR)\$(SYS_NAME)\checked\config | |
139 | ! ELSE | |
140 | OJT=$(AFSROOT)\$(AFS_OBJDIR)\$(SYS_NAME)\free\config | |
141 | DESTDIR=$(AFSROOT)\$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\free | |
142 | ! ENDIF | |
143 | ! ELSE | |
144 | ! IF (EXIST($(AFS_OBJDIR))) | |
145 | # AFS_OBJDIR is full path | |
146 | ! IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED") | |
147 | DESTDIR=$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\checked | |
148 | OJT=$(AFS_OBJDIR)\$(SYS_NAME)\checked\config | |
149 | ! ELSE | |
150 | DESTDIR=$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\free | |
151 | OJT=$(AFS_OBJDIR)\$(SYS_NAME)\free\config | |
152 | ! ENDIF | |
153 | ! ELSE | |
154 | !ERROR Can't find location of DEST directory! | |
155 | ! ENDIF | |
156 | ! ENDIF | |
157 | UTIL_CR = $(DESTDIR)\bin\util_cr.exe | |
158 | ||
159 | ! IF ("$(MAKEDIR:\config=)"=="$(MAKEDIR)") | |
160 | # we are NOT doing a config make, use util_cr to generate object directory | |
161 | ! IF ( !EXIST($(UTIL_CR)) || (!EXIST($(TMP)\home) && !EXIST($(TEMP)\home)) || (([$(UTIL_CR) _dir "!$(AFSDEV_BUILDTYPE)!src!$(AFS_OBJDIR)!"])!=0)) | |
162 | !ERROR Can't produce object paths, util_cr not working , TMP or TEMP environment variables not defined | |
163 | ! ENDIF | |
164 | ||
165 | ! IF EXIST($(TMP)\home) | |
166 | !INCLUDE $(TMP)\home | |
167 | ! ELSE | |
168 | !INCLUDE $(TEMP)\home | |
169 | ! ENDIF | |
170 | ! ENDIF | |
171 | !ENDIF #AFS_OBJDIR | |
172 | ||
173 | !IF ("$(RELDIR)"=="") | |
174 | OUT=$(OJT) | |
175 | !ELSE | |
176 | OUT=$(OJT)\$(RELDIR) | |
177 | !ENDIF | |
178 | ||
179 | !MESSAGE Directory assignments: | |
180 | !MESSAGE OJT=[$(OJT)] | |
181 | !MESSAGE OUT=[$(OUT)] | |
182 | !MESSAGE DESTDIR=[$(DESTDIR)] | |
183 | ||
184 | # Definitions provided here are based on WIN32.MAK, a common nmake | |
185 | # file included with the MS SDK and MS VC distributions. | |
186 | # WIN32.MAK, and this nmake file, are targeted to the MSVC compiler; | |
187 | # port this nmake file if additional compiler support is required. | |
188 | ||
189 | # !IF ("$(AFSVER_CL)"=="1300") | |
190 | # afslflags = $(afslflags) /DEBUG | |
191 | # !ENDIF | |
192 | ||
193 | !IF ("$(APPVER)" == "") | |
194 | APPVER=5.0 | |
195 | !ENDIF | |
196 | ||
197 | PATH = $(AFSDEV_BIN);$(DESTDIR)\lib;$(PATH) | |
198 | ||
199 | !INCLUDE <WIN32.MAK> | |
200 | ||
201 | # Extend and/or supplement definitions in WIN32.MAK. | |
202 | ||
203 | # Command macros. | |
204 | !IF !DEFINED(COPY) | |
205 | COPY = -copy | |
206 | !ENDIF | |
207 | !IF !DEFINED(DEL) | |
208 | DEL = -del | |
209 | !ENDIF | |
210 | !IF !DEFINED(MKDIR) | |
211 | MKDIR = -md | |
212 | !ENDIF | |
213 | !IF !DEFINED(REN) | |
214 | REN = ren | |
215 | !ENDIF | |
216 | !IF !DEFINED(ECHO) | |
217 | ECHO = echo | |
218 | !ENDIF | |
219 | !IF !DEFINED(CD) | |
220 | CD = cd | |
221 | !ENDIF | |
222 | !IF !DEFINED(MC) | |
223 | MC = mc -vcsU | |
224 | !ENDIF | |
225 | !IF !DEFINED(MAKECMD) | |
226 | MAKECMD = nmake.exe | |
227 | !ENDIF | |
228 | !IF !DEFINED(MIDL) | |
229 | MIDL = midl | |
230 | !ENDIF | |
231 | !IF !DEFINED(PERL) | |
232 | PERL = perl | |
233 | !ENDIF | |
234 | ||
235 | COMPILE_ET = $(DESTDIR)\bin\compile_et | |
236 | RXGEN = $(DESTDIR)\bin\rxgen | |
237 | ||
238 | # Common clean target. | |
239 | clean:: | |
240 | $(DEL) /q $(OUT)\*.obj $(OUT)\*.lib $(OUT)\*.dll $(OUT)\*.exe $(OUT)\*.pdb $(OUT)\*.res $(OUT)\*.manifest $(OUT)\*.exp | |
241 | $(DEL) /q $(OUT)\*_component_version_number.* *_component_version_number.* | |
242 | ||
243 | # Common lang target. | |
244 | lang:: | |
245 | ||
246 | ||
247 | #################### Compile optional build flags set ########### | |
248 | ||
249 | afscdefs =\ | |
250 | -I. \ | |
251 | -I$(DESTDIR)\include \ | |
252 | -DWIN32_LEAN_AND_MEAN \ | |
253 | -DSTRICT \ | |
254 | -D_WIN32_IE=0x0500 \ | |
255 | -D_WIN32_WINNT=0x0500 \ | |
256 | -DWINVER=0x0500 \ | |
257 | -DNTDDI_VERSION=0x05000000 \ | |
258 | -DREGISTER_POWER_NOTIFICATIONS \ | |
259 | -DAFS_FREELANCE_CLIENT \ | |
260 | -DAFS_64BIT_CLIENT \ | |
261 | $(AFSDEV_AUXCDEFINES) | |
262 | ||
263 | # Compiler switches (except include paths and preprocessor defines) | |
264 | # | |
265 | # Note: if conflicting options are specified, rightmost option applies. | |
266 | # | |
267 | # /Oy- specifies no frame-pointer omission | |
268 | # /GF pool strings and place in read-only memory | |
269 | # /Gd use cdecl calling convention by default | |
270 | # /Gy enable function-level linking | |
271 | # /GX enable C++ exceptions (assumes extern C funcs never throw exceptions) | |
272 | # /Os favor small (over fast) code; seems to avoid 64-bit bugs in VC compiler | |
273 | ||
274 | afscflags =\ | |
275 | /Oy- \ | |
276 | /GF \ | |
277 | /Gd \ | |
278 | /Gy \ | |
279 | /Os | |
280 | ||
281 | !IF ("$(AFSVER_CL)"=="1400") | |
282 | afscflags = $(afscflags) /EHsc /wd4996 | |
283 | !ELSE | |
284 | afscflags = $(afscflags) /GX | |
285 | !ENDIF | |
286 | ||
287 | !IF ("$(AFSVER_CL)"!="1200") | |
288 | afscdefs = $(afscdefs) /GT /GS | |
289 | #/Wp64 | |
290 | !IF ("$(AFSVER_CL)"!="1400") | |
291 | afscdefs = $(afscdefs) /G7 | |
292 | !ENDIF | |
293 | !ENDIF | |
294 | ||
295 | !IF ("$(AFSIFS)" == "TRUE") | |
296 | afscdefs = $(afscdefs) -DAFSIFS | |
297 | !ENDIF | |
298 | ||
299 | !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") | |
300 | ||
301 | afscflags = $(afscflags) /Ox /Zi | |
302 | cdebug = $(cdebug:-Od=) # avoid annoying override warning (D4025) | |
303 | cvarsdll = $(cvarsdll:-MDd=-MD) | |
304 | NODEBUG=1 | |
305 | ||
306 | !ELSE # CHECKED BUILD | |
307 | cdebug = $(cdebug:-Z7=-Zi) # avoid annoying override warning (D4025) | |
308 | ||
309 | !IF ("$(AFSVER_CL)"=="1200") | |
310 | afscdefs = $(afscdefs) -DDEBUG | |
311 | afscflags = $(afscflags) /GZ | |
312 | !ELSE | |
313 | afscdefs = $(afscdefs) -DDEBUG | |
314 | afscflags = $(afscflags) /RTCs /RTCu | |
315 | !ENDIF | |
316 | ||
317 | !IFDEF _CRTDBG_MAP_ALLOC | |
318 | afscdefs = $(afscdefs) -D_DEBUG -D_CRTDBG_MAP_ALLOC | |
319 | !ENDIF | |
320 | ||
321 | !UNDEF NODEBUG | |
322 | !ENDIF | |
323 | ||
324 | # Set compiler warning level | |
325 | ||
326 | !IFNDEF AFSDEV_WARNLEVEL | |
327 | AFSDEV_WARNLEVEL = 3 | |
328 | !ELSE | |
329 | !IF ("$(AFSDEV_WARNLEVEL)" != "0" && \ | |
330 | "$(AFSDEV_WARNLEVEL)" != "1" && \ | |
331 | "$(AFSDEV_WARNLEVEL)" != "2" && \ | |
332 | "$(AFSDEV_WARNLEVEL)" != "3" && \ | |
333 | "$(AFSDEV_WARNLEVEL)" != "4") | |
334 | !ERROR Must define AFSDEV_WARNLEVEL to be one of 0 through 4. | |
335 | !ENDIF | |
336 | !ENDIF | |
337 | ||
338 | afscflags = $(afscflags) /W$(AFSDEV_WARNLEVEL) | |
339 | ||
340 | # C/C++ compilation macros | |
341 | C2OBJ = $(cc) /Fo$@ /Fd$*.pdb $(cflags) $(cdebug) $(dafsifs) $(cvarsdll) $(afscflags) $(afscdefs) /c | |
342 | CPP2OBJ = $(C2OBJ) | |
343 | # Inference rules for building and installing targets | |
344 | # Compile .c files, from current directory to defined by OUT | |
345 | ||
346 | .SUFFIXES: .c .rc | |
347 | ||
348 | .c{$(OUT)\}.obj: | |
349 | $(C2OBJ) $< | |
350 | ||
351 | .c.obj: | |
352 | $(C2OBJ) $< | |
353 | ||
354 | .cpp{$(OUT)\}.obj: | |
355 | $(CPP2OBJ) $< | |
356 | ||
357 | .rc{$(OUT)\}.res: | |
358 | $(RC) /fo$(OUT)\$(<B).res $< | |
359 | ||
360 | # Compile .rc (resource) files | |
361 | #.rc.res: | |
362 | # $(RC) $*.rc | |
363 | ||
364 | .SUFFIXES: .h | |
365 | ||
366 | .h.{$(DESTDIR)\include\afs}.h: | |
367 | $(COPY) $< $(DESTDIR)\include\afs | |
368 | ||
369 | .h.{$(DESTDIR)\include\rx}.h: | |
370 | $(COPY) $< $(DESTDIR)\include\rx | |
371 | ||
372 | .h.{$(DESTDIR)\include\opr}.h: | |
373 | $(COPY) $< $(DESTDIR)\include\opr | |
374 | ||
375 | .h.{$(DESTDIR)\include\des}.h: | |
376 | $(COPY) $< $(DESTDIR)\include | |
377 | ||
378 | .h.{$(DESTDIR)\include\hcrypto}.h: | |
379 | $(COPY) $< $(DESTDIR)\include\hcrypto | |
380 | ||
381 | .h.{$(DESTDIR)\include}.h: | |
382 | $(COPY) $< $(DESTDIR)\include | |
383 | ||
384 | .h.{$(DESTDIR)\include\WINNT}.h: | |
385 | $(COPY) $< $(DESTDIR)\include\WINNT | |
386 | ||
387 | .h.{$(DESTDIR)\include}.h: | |
388 | $(COPY) $(*B).h $(DESTDIR)\include | |
389 | ||
390 | .h.{$(DESTDIR)\include\afs}.h: | |
391 | $(COPY) $(*B).h $(DESTDIR)\include\afs | |
392 | ||
393 | .h.{$(DESTDIR)\include\rx}.h: | |
394 | $(COPY) $(*B).h $(DESTDIR)\include\rx | |
395 | ||
396 | .h.{$(DESTDIR)\include\opr}.h: | |
397 | $(COPY) $(*B).h $(DESTDIR)\include\opr | |
398 | ||
399 | .h.{$(DESTDIR)\include\des}.h: | |
400 | $(COPY) $(*B).h $(DESTDIR)\include | |
401 | ||
402 | .h.{$(DESTDIR)\include\hcrypto}.h: | |
403 | $(COPY) $(*B).h $(DESTDIR)\include\hcrypto | |
404 | ||
405 | .h.{$(DESTDIR)\include\WINNT}.h: | |
406 | $(COPY) $(*B).h $(DESTDIR)\include\WINNT | |
407 | ||
408 | # Resource compiler macro | |
409 | RC = $(rc) $(rcvars) $(rcflags) $(AFSDEV_AUXRCFLAGS) /d "AFSPRODUCT_VERSION=\"$(AFSPRODUCT_VERSION)\"" | |
410 | ||
411 | #################### Link optional build flags set ########### | |
412 | ||
413 | afslflags =\ | |
414 | /FIXED:NO /VERBOSE:LIB | |
415 | ||
416 | mfclflags = $(guilflags) | |
417 | mfclflags = $(mfclflags:/NODEFAULTLIB=) | |
418 | ||
419 | mfcdlllflags = $(dlllflags) | |
420 | mfcdlllflags = $(mfcdlllflags:/NODEFAULTLIB=) | |
421 | ||
422 | mfclibsdll = $(guilibsdll) | |
423 | mfclibsdll = $(mfclibsdll:msvcrtd.lib=) | |
424 | mfclibsdll = $(mfclibsdll:msvcrt.lib=) | |
425 | ||
426 | # Link with binmode.obj; files will be opened in binary mode by default. | |
427 | !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") | |
428 | ||
429 | ldebug=/DEBUG /PDB:$*.pdb | |
430 | EXEPREP = rebase -b 0x00400000 -x $(@D) -q $@ | |
431 | DLLPREP = rebase -i $(DESTDIR)\NTDllmap.txt -x $(@D) -q $@ | |
432 | ||
433 | !ELSE #CHECKED BUILD | |
434 | ||
435 | # Generate debug information and pdb files | |
436 | ldebug = /DEBUG /PDB:$*.pdb /NODEFAULTLIB:LIBC | |
437 | ||
438 | #!IF ("AFSVER_CL"=="1200") | |
439 | #ldebug = $(ldebug) -debugtype:cv | |
440 | #!ENDIF | |
441 | ||
442 | # Disable optimization; generate full debug info in obj. | |
443 | afscflags = $(afscflags) /Od /Zi | |
444 | ||
445 | !IFDEF VADUMP | |
446 | !IF ("AFSVER_CL"=="1200") | |
447 | ldebug = $(ldebug) -debugtype:both | |
448 | ldebug = $(ldebug:-debugtype:cv=) | |
449 | !ENDIF #AFSVER_CL == 1200 | |
450 | !ENDIF #VADUMPT | |
451 | ||
452 | !IFNDEF _CRTDBG_MAP_ALLOC | |
453 | mfclflags = $(mfclflags) /NODEFAULTLIB:msvcrtd.lib | |
454 | mfcdlllflags = $(mfcdlllflags) /NODEFAULTLIB:msvcrtd.lib | |
455 | ||
456 | #v6.0 doesn't work using msvcrtd.lib unless _CRTDBG_MAP_ALLOC is defined, v7.0 requires it | |
457 | !IF ("$(AFSVER_CL)"=="1200") | |
458 | EXEMFCLINK=$(EXEMFCLINK:/NODEFAULTLIB:msvcrtd.lib=) | |
459 | DLLMFCLINK=$(DLLMFCLINK:/NODEFAULTLIB:msvcrtd.lib=) | |
460 | !ENDIF #AFSVER_CL == 1200 | |
461 | ||
462 | !ELSE #_CRTDBG_MAP_ALLOC | |
463 | mfclflags = $(mfclflags) /NODEFAULTLIB:msvcrtd.lib | |
464 | mfcdlllflags = $(mfcdlllflags) /NODEFAULTLIB:msvcrtd.lib | |
465 | conlibsdll = $(conlibsdll:msvcrt.lib=msvcrtd.lib) | |
466 | guilibsdll = $(guilibsdll:msvcrt.lib=msvcrtd.lib) | |
467 | !ENDIF #_CRTDBG_MAP_ALLOC | |
468 | ||
469 | EXEPREP = rebase -b 0x00400000 -q $@ | |
470 | DLLPREP = rebase -i $(DESTDIR)\NTDllmap.txt -q $@ | |
471 | ||
472 | !ENDIF #CHECKED BUILD | |
473 | ||
474 | ||
475 | # EXE link macro for console applications | |
476 | EXECONLINK = $(link) /OUT:$@ $(ldebug) $(conlflags) $(afslflags) $(conlibsdll) user32.lib version.lib $** | |
477 | ||
478 | # EXE link macro for GUI applications | |
479 | EXEGUILINK = $(link) /OUT:$@ $(ldebug) $(guilflags) $(afslflags) $(guilibsdll) $** | |
480 | ||
481 | # EXE link macro for MFC applications | |
482 | EXEMFCLINK = $(link) /OUT:$@ $(ldebug) $(mfclflags) $(afslflags) $(mfclibsdll) $** | |
483 | ||
484 | # DLL link macro for console applications | |
485 | DLLCONLINK = $(link) /OUT:$@ $(ldebug) $(dlllflags) $(afslflags) $(conlibsdll) $** | |
486 | ||
487 | # DLL link macro for GUI applications | |
488 | DLLGUILINK = $(link) /OUT:$@ $(ldebug) $(dlllflags) $(afslflags) $(guilibsdll) $** | |
489 | EXECONLINK = $(link) /OUT:$@ $(ldebug) $(conlflags) $(afslflags) $(conlibsdll) user32.lib version.lib $** | |
490 | DLLMFCLINK = $(link) /OUT:$@ $(ldebug) $(mfcdlllflags) $(afslflags) $(mfclibsdll) $** | |
491 | ||
492 | # DLL link macro for resource-only DLLs | |
493 | DLLRESLINK = $(link) /OUT:$@ $(dlllflags:-entry:_DllMainCRTStartup@12=-noentry) $(afslflags) $** | |
494 | ||
495 | # Library archive macro | |
496 | LIBARCH = $(implib) /NOLOGO /OUT:$@ $** | |
497 | ||
498 | # Language selection macro | |
499 | NTLANG = $(DESTDIR)\bin\NTLang.bat | |
500 | ||
501 | ######### MIDL FLAGS | |
502 | ||
503 | AFSDEV_AUXMIDLFLAGS=/env win32 /win32 /no_robust | |
504 | !IFDEF OSISXP | |
505 | AFSDEV_AUXMIDLFLAGS=$(AFSDEV_AUXMIDLFLAGS) /Oi | |
506 | !ENDIF | |
507 | ||
508 | # Lex/Yacc macros | |
509 | LEX = flex -l | |
510 | YACC = bison | |
511 | ||
512 | ######### Create Cygwin .a files | |
513 | # This macro should be invoked as a build step for a DLL target. | |
514 | !IFNDEF NOCYGWIN | |
515 | MAKECYGLIB=\ | |
516 | for %%C in (as.exe) do \ | |
517 | if exist %%~$$PATH:C \ | |
518 | dlltool --dllname $(@B).dll --output-lib $(@R).a --temp-prefix $(OUT) -S %%~$$PATH:C | |
519 | !ELSE | |
520 | MAKECYGLIB=echo Skipping Cygwin archive | |
521 | !ENDIF | |
522 | ||
523 | ||
524 | ######### Heimdal compatibility support | |
525 | ||
526 | !IFNDEF HEIMDALSDKDIR | |
527 | !IFDEF KERBEROSCOMPATSDKROOT | |
528 | HEIMDALSDKDIR=$(KERBEROSCOMPATSDKROOT)\1.0 | |
529 | !ELSE | |
530 | !ERROR HEIMDALSDKDIR or KERBEROSCOMPATSDKROOT needs to be defined | |
531 | !ENDIF | |
532 | !ENDIF | |
533 | ||
534 | HEIMINC=$(HEIMDALSDKDIR)\inc | |
535 | HEIMLIB=$(HEIMDALSDKDIR)\lib\$(CPU) | |
536 | ||
537 | afscdefs=$(afscdefs) -I$(HEIMINC) -I$(HEIMINC)\krb5 | |
538 | ||
539 | HEIMDEPS=$(HEIMLIB)\heimdal.lib $(DESTDIR)\lib\krbcompat_delayload.obj | |
540 | HEIMLINKOPTS=/DELAYLOAD:heimdal.dll |