Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

498 lines
13 KiB

  1. !IF 0
  2. Copyright (c) 1994-1996 Microsoft Corporation
  3. Module Name:
  4. i386mk.inc
  5. Abstract:
  6. This module contains the x86 specific build controls. It is included
  7. by makefile.def.
  8. Revision History:
  9. !ENDIF
  10. DELAYLOAD_SUPPORTED=1
  11. !ifndef DELAYLOAD_VERSION
  12. ! if $(_NT_TOOLS_VERSION) >= 0x700
  13. DELAYLOAD_VERSION=0x0200
  14. ! elseif $(_NT_TOOLS_VERSION) == 0x600
  15. DELAYLOAD_VERSION=0x0100
  16. ! else
  17. DELAYLOAD_SUPPORTED=0
  18. ! endif
  19. !endif
  20. #
  21. # x86 option control
  22. #
  23. UMBASE=$(UMBASE:*=i386)
  24. UMLIBS=$(UMLIBS:*=i386)
  25. NTRES=$(NTRES:*=i386)
  26. UMRES=$(UMRES:*=i386)
  27. UMOBJS=$(UMOBJS:*=i386)
  28. LINKLIBS=$(LINKLIBS:*=i386)
  29. GDI_DRIVER_LIBS=$(GDI_DRIVER_LIBS:*=i386)
  30. DLLBASE=$(DLLBASE:*=i386)
  31. DLLDEF=$(DLLDEF:*=i386)
  32. MACHINE_TARGETLIBS=$(MACHINE_TARGETLIBS:*=i386)
  33. !ifdef USE_MSHTML_PDB_RULES
  34. MACHINE_TARGETLIBS=$(MACHINE_TARGETLIBS:????????=*)
  35. !endif
  36. TARGET=$(TARGET:*=i386)
  37. DYNLINK_LIB=$(DYNLINK_LIB:*=i386)
  38. TARGETEXEFILES=$(TARGETEXEFILES:*=i386)
  39. TARGETLIBFILES=$(TARGETLIBFILES:*=i386)
  40. TARGETOBJFILES=$(TARGETOBJFILES:*=i386)
  41. UMOBJFILES=$(UMOBJFILES:*=i386)
  42. UMEXEFILES=$(UMEXEFILES:*=i386)
  43. HEADERFILE=$(HEADERFILE:*=i386)
  44. HEADEROBJNAME=$(HEADEROBJNAME:*=i386)
  45. HEADEROBJ=$(HEADEROBJ:*=i386)
  46. PRECOMPILED=$(PRECOMPILED:*=i386)
  47. PRECOMPILED_CXX=$(PRECOMPILED_CXX:*=i386)
  48. PRECOMPILED_TARGET=$(PRECOMPILED_TARGET:*=i386)
  49. MFC_STATIC_LIB=$(MFC_STATIC_LIB:*=i386)
  50. CRT_LIB_PATH=$(CRT_LIB_PATH:*=i386)
  51. SDK_LIB_PATH=$(SDK_LIB_PATH:*=i386)
  52. DDK_LIB_PATH=$(DDK_LIB_PATH:*=i386)
  53. IFSKIT_LIB_PATH=$(IFSKIT_LIB_PATH:*=i386)
  54. HALKIT_LIB_PATH=$(HALKIT_LIB_PATH:*=i386)
  55. PROCESSOR_LIB_PATH=$(PROCESSOR_LIB_PATH:*=i386)
  56. ORDER=$(ORDER:*=i386)
  57. OBJLIBFILES=$(OBJLIBFILES:*=i386)
  58. MISCFILES=$(MISCFILES) $(I386_MISCFILES)
  59. SOURCES=$(SOURCES) $(I386_SOURCES)
  60. !ifdef CHICAGO_PRODUCT
  61. USE_MAPSYM=1
  62. !endif
  63. # "$(TARGETTYPE)"=="DRIVER" ||
  64. # "$(TARGETTYPE)" == "HAL" ||
  65. # "$(TARGETTYPE)" == "EXPORT_DRIVER" ||
  66. !IF "$(TARGETTYPE)"=="GDI_DRIVER" || \
  67. "$(TARGETTYPE)"=="MINIPORT"
  68. #
  69. #Drivers don't link with link libs.
  70. #
  71. MACHINE_TARGETLIBS=$(SDK_LIB_PATH)\int64.lib $(MACHINE_TARGETLIBS)
  72. !ELSE
  73. !IF defined(USE_NTDLL) || defined (USE_NOLIBS)
  74. MACHINE_TARGETLIBS=$(SDK_LIB_PATH)\int64.lib $(MACHINE_TARGETLIBS)
  75. !ENDIF
  76. !ENDIF
  77. !ifdef NTTARGETFILES
  78. NTTARGETFILES=$(NTTARGETFILES:*=i386)
  79. !endif
  80. !ifdef NTTARGETFILE0
  81. NTTARGETFILE0=$(NTTARGETFILE0:*=i386)
  82. !endif
  83. !ifdef NTTARGETFILE1
  84. NTTARGETFILE1=$(NTTARGETFILE1:*=i386)
  85. !endif
  86. !ifdef PROJECT_LIB_PATH
  87. PROJECT_LIB_PATH=$(PROJECT_LIB_PATH:*=i386)
  88. !endif
  89. !IF "$(DLLENTRY)" != "-noentry"
  90. ! IF "$(DLLENTRY:@12=)" == "$(DLLENTRY)"
  91. DLLENTRY=$(DLLENTRY)@12
  92. ! ENDIF
  93. !ENDIF
  94. !IFDEF STD_CALL_ENTRY
  95. UMENTRY=$(UMENTRY)@4
  96. !ENDIF
  97. ENTRY_SUFFIX=@8
  98. GDI_ENTRY_SUFFIX=@12
  99. DEFAULT_STACKRESERVE=0x40000
  100. DEFAULT_STACKCOMMIT=0x2000
  101. !IFDEF 386_WARNING_LEVEL
  102. MSC_WARNING_LEVEL=$(386_WARNING_LEVEL)
  103. !ENDIF
  104. MSC_WARNING_LEVEL=$(MSC_WARNING_LEVEL) $(COMPILER_WX_SWITCH)
  105. !ifdef 386_PERFFLAGS
  106. PERFFLAGS = $(386_PERFFLAGS)
  107. !endif
  108. # Set MSC_OPTIMIZATION.
  109. # Order of precedence:
  110. # Platform specific override
  111. # Environment variable
  112. # System Default
  113. !if defined(386_OPTIMIZATION)
  114. MSC_OPTIMIZATION=$(386_OPTIMIZATION)
  115. !elseif !defined(MSC_OPTIMIZATION)
  116. MSC_OPTIMIZATION=$(DEFAULT_MSC_OPT)
  117. !endif
  118. LINK_TIME_CODE_GENERATION_MSC_FLAG=
  119. !if defined(LINK_TIME_CODE_GENERATION) && !defined(FORCENATIVEOBJECT)
  120. # Some objects must be built native, so turn off GL for those
  121. LINK_TIME_CODE_GENERATION_MSC_FLAG=/GL
  122. !endif
  123. DBGFLAGS=$(DBGFLAGS) $(MSC_OPTIMIZATION) $(LINK_TIME_CODE_GENERATION_MSC_FLAG)
  124. !IFDEF 386_CPPFLAGS
  125. MSC_CPPFLAGS=$(386_CPPFLAGS)
  126. !ENDIF
  127. !ifdef NO_STRING_POOLING
  128. STRING_POOLING =
  129. !else
  130. !ifdef NO_READONLY_STRINGS
  131. STRING_POOLING = /Gf
  132. !else
  133. STRING_POOLING = /GF
  134. !endif
  135. !endif
  136. !ifdef USE_NATIVE_EH
  137. EH_FLAGS=/GX
  138. !if "$(USE_NATIVE_EH)" == "ASYNC"
  139. EH_FLAGS=$(EH_FLAGS) /EHa
  140. !endif
  141. !else
  142. EH_FLAGS=/GX-
  143. !endif
  144. !ifdef USE_RTTI
  145. RTTI_FLAGS=/GR
  146. !else
  147. RTTI_FLAGS=/GR-
  148. !endif
  149. !if "$(BUFFER_OVERFLOW_CHECKS)" == "1" || \
  150. ("$(BUFFER_OVERFLOW_CHECKS)" == "CHK" && !$(FREEBUILD))
  151. ! if "$(TARGETTYPE)" == "DRIVER" || \
  152. "$(TARGETTYPE)" == "EXPORT_DRIVER" || \
  153. "$(TARGETTYPE)" == "DRIVER_LIBRARY"
  154. ! if "$(DRIVERTYPE)" == "WDM" || "$(DRIVERTYPE)" == "wdm"
  155. BO_FLAGS=/GS
  156. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowK.lib $(DDK_LIB_PATH)\wdm.lib
  157. DRIVER_ENTRY=GsDriverEntry
  158. ! else
  159. ! if "$(DRIVERTYPE)" != "VXD"
  160. BO_FLAGS=/GS
  161. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowK.lib $(DDK_LIB_PATH)\ntoskrnl.lib
  162. DRIVER_ENTRY=GsDriverEntry
  163. ! endif
  164. ! endif
  165. ! else
  166. ! if "$(TARGETTYPE)" == "GDI_DRIVER"
  167. BO_FLAGS=/GS
  168. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowGDI.lib
  169. GDI_DRIVER_ENTRY=GsDrvEnableDriver
  170. ! else
  171. ! if "$(TARGETTYPE)" == "MINIPORT"
  172. # Nothing for now
  173. ! else
  174. ! if "$(TARGETTYPE)" == "DYNLINK"
  175. ! if !(("$(UMTYPE)"== "nt") || ("$(UMTYPE)"=="ntss"))
  176. BO_FLAGS=/GS
  177. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowU.lib $(SDK_LIB_PATH)\kernel32.lib
  178. ! if !defined(RESOURCE_ONLY_DLL) && "$(DLLENTRY)" == "-noentry"
  179. DLLENTRY=-entry:_DllMainCRTStartupForGS@12
  180. ! endif
  181. ! endif
  182. ! else
  183. ! if ("$(UMTYPE)"== "nt") || ("$(UMTYPE)"=="ntss")
  184. BO_FLAGS=/GS
  185. BO_LIB=$(SDK_LIB_PATH)\BufferOverflow.lib
  186. ! else
  187. BO_FLAGS=/GS
  188. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowU.lib $(SDK_LIB_PATH)\kernel32.lib
  189. ! endif
  190. ! endif
  191. ! endif
  192. ! endif
  193. ! endif
  194. !else
  195. !if "$(BUFFER_OVERFLOW_CHECKS)" == "NTDLL"
  196. # Needed for EXEs that can't link to kernel32.dll (smss.exe, sprestrt.exe, etc)
  197. BO_FLAGS=/GS
  198. BO_LIB=$(SDK_LIB_PATH)\BufferOverflow.lib
  199. !else
  200. !if "$(BUFFER_OVERFLOW_CHECKS)" == "GDI"
  201. # Needed for LIBs linked into drivers of type GDI_DRIVER
  202. BO_FLAGS=/GS
  203. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowGDI.lib
  204. !else
  205. !if "$(BUFFER_OVERFLOW_CHECKS)" == "NO_NTDLL"
  206. BO_FLAGS=/GS
  207. BO_LIB=$(SDK_LIB_PATH)\BufferOverflowU.lib
  208. !endif
  209. !endif
  210. !endif
  211. !endif # Overflow checks
  212. !ifndef X86_CPU_OPTIMIZATION
  213. X86_CPU_OPTIMIZATION=/G6
  214. !endif
  215. # Undocumented switch definitions
  216. # /QIfdiv- : Don't emit code to test for bad pentiums
  217. # /QIf : Emit FPO records for every function (only if !vc7 symbols)
  218. !if defined(VC7_SYMBOLS) || ("$(TARGETTYPE)" == "GDI_DRIVER") || ("$(TARGETTYPE)" == "DRIVER") || ("$(TARGETTYPE)" == "EXPORT_DRIVER")
  219. ERATTA_FLAGS=/QIfdiv-
  220. !if [set _CL_=]
  221. !endif
  222. !if [set _LINK_=]
  223. !endif
  224. !if [set _ML_=]
  225. !endif
  226. !else
  227. ERATTA_FLAGS=/QIfdiv- /QIf
  228. # Make sure _ML_ is set to /Ztmp, not /Zvc6
  229. _ML_=$(_ML_:Zvc6=Ztmp)
  230. !if [set _ML_=$(_ML_)]
  231. !endif
  232. !endif
  233. STDFLAGS= /c /Zel /Zp8 /Gy /Gi- /Gm- $(CBSTRING) $(MSC_WARNING_LEVEL) $(MSC_CALL_TYPE) \
  234. $(ERATTA_FLAGS) $(X86_CPU_OPTIMIZATION) $(EH_FLAGS) \
  235. $(RTTI_FLAGS) $(STRING_POOLING) $(BO_FLAGS)
  236. !IF "$(386_STDCALL)" == "0"
  237. MSC_CALL_TYPE=/Gd
  238. MSC_CALL_DEFINE=
  239. !ELSE
  240. ! IF "$(386_STDCALL)" == "2"
  241. MSC_CALL_TYPE=/Gr
  242. MSC_CALL_DEFINE=
  243. ! ELSE
  244. MSC_CALL_TYPE=/Gz
  245. MSC_CALL_DEFINE=-DSTD_CALL
  246. ! ENDIF
  247. !ENDIF
  248. !IF $(FREEBUILD)
  249. ASM_DBG_DEFINES=-DDBG=0
  250. ! IFDEF NTNOFPO
  251. !MESSAGE $(NTMAKEENV)\i386mk.inc(1) - Overriding FPO default with NTNOFPO
  252. TARGET_DBG_DEFINES= $(TARGET_DBG_DEFINES) -DFPO=0
  253. DBGFLAGS=$(DBGFLAGS) /Oy-
  254. ! ELSE
  255. TARGET_DBG_DEFINES= $(TARGET_DBG_DEFINES) -DFPO=1
  256. DBGFLAGS=$(DBGFLAGS) /Oy
  257. ! ENDIF
  258. !ELSE
  259. TARGET_DBG_DEFINES= $(TARGET_DBG_DEFINES) -DFPO=0
  260. DBGFLAGS=$(DBGFLAGS) /Oy-
  261. 386_ADBGFLAGS=$(386_ADBGFLAGS) /Zi
  262. !ENDIF
  263. # @@BEGIN_DDKSPLIT
  264. !IFDEF NTBBT
  265. DBGFLAGS=$(DBGFLAGS) /Zi
  266. 386_ADBGFLAGS=$(386_ADBGFLAGS) /Zi
  267. LINKER_FLAGS=$(LINKER_FLAGS) -debug:full -debugtype:cv,fixup
  268. !ENDIF
  269. # @@END_DDKSPLIT
  270. !ifndef USE_PDB_TO_COMPILE
  271. DBGFLAGS=$(DBGFLAGS:/Zi=-Z7)
  272. DBGFLAGS=$(DBGFLAGS:-Zi=-Z7)
  273. !else
  274. ! ifndef USE_MSHTML_PDB_RULES
  275. ! if "$(TARGETTYPE)" == "LIBRARY"
  276. DBGFLAGS=$(DBGFLAGS) /Fd$(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).pdb
  277. ! else
  278. DBGFLAGS=$(DBGFLAGS) /Fd$(MAKEDIR)\$(_OBJ_DIR)\i386^\
  279. ! endif
  280. ! else
  281. ! ifndef TARGETPDB
  282. TARGETPDB=$(TARGETNAME)
  283. ! endif
  284. ! ifndef ROOT
  285. ROOT=$(MAKEDIR)
  286. ! endif
  287. DBGFLAGS=$(DBGFLAGS) /Fd$(ROOT)\$(_OBJ_DIR)\i386\$(TARGETPDB).pdb
  288. ! endif
  289. !endif
  290. !ifndef NO_BROWSER_INFO
  291. ! ifdef BROWSER_INFO
  292. DBGFLAGS=$(DBGFLAGS) /FR$(MAKEDIR)\$(_OBJ_DIR)\i386^\
  293. ! endif
  294. !endif
  295. #
  296. # 386 option control
  297. #
  298. !IF "$(HALTYPE)" == ""
  299. HALDEF=
  300. !ELSE
  301. HALDEF=-D$(HALTYPE)=1
  302. !ENDIF
  303. STD_DEFINES= -D_X86_=1 -Di386=1 $(HALDEF) $(MSC_CALL_DEFINE) $(STD_DEFINES)
  304. CDEFINES=$(STD_DEFINES) $(TARGET_DBG_DEFINES) \
  305. $(LIBC_DEFINES) $(C_DEFINES) $(NET_C_DEFINES) $(MFC_DEFINES)
  306. CFLAGS=$(386_FLAGS) $(NT386FLAGS) $(STDFLAGS) $(DBGFLAGS) $(PERFFLAGS) $(USER_C_FLAGS)
  307. !ifdef MANAGED_CXX
  308. CFLAGS=/clr $(CFLAGS)
  309. !endif
  310. 386_ASMFLAGS=$(386_ADBGFLAGS) $(STD_DEFINES) $(ASM_DBG_DEFINES)\
  311. $(TARGET_DBG_DEFINES) $(ASM_DEFINES)
  312. 386_CDEFINES=$(CDEFINES)
  313. 386_CFLAGS=$(CFLAGS)
  314. !if "$(SUBSTITUTE_386_CC)" != ""
  315. CC_NAME = $(SUBSTITUTE_386_CC) -nologo
  316. !else
  317. ! if defined(RAZZLETOOLPATH) && !defined( PREFAST_ADD_PATH )
  318. CC_NAME = $(RAZZLETOOLPATH)\x86\cl -nologo
  319. ! else
  320. CC_NAME=cl -nologo
  321. ! endif
  322. CC_NAME=cl -nologo
  323. !endif
  324. C_COMPILER_NAME = $(CC_NAME)
  325. CXX_COMPILER_NAME = $(CC_NAME)
  326. C_PREPROCESSOR_NAME = $(CC_NAME)
  327. CS_COMPILER_NAME = csc.exe -nologo
  328. VB_NET_COMPILER_NAME = vbc.exe -nologo
  329. !if "$(UNSAFE_CODE_SWITCH)" == ""
  330. ! if defined(MANAGED_VB)
  331. UNSAFE_CODE_SWITCH=
  332. ! else
  333. ! if "$(UNSAFE_CODE)" == "1"
  334. UNSAFE_CODE_SWITCH=/unsafe+
  335. ! else
  336. UNSAFE_CODE_SWITCH=/unsafe-
  337. ! endif
  338. ! endif
  339. !endif
  340. MANAGED_STD_FLAGS = $(MANAGED_DBG_FLAGS) /warnaserror+ $(UNSAFE_CODE_SWITCH)
  341. !if defined(MANAGED_VB)
  342. MANAGED_STD_FLAGS = $(MANAGED_STD_FLAGS) $(USER_VB_NET_FLAGS)
  343. !else
  344. MANAGED_STD_FLAGS = $(MANAGED_STD_FLAGS) $(USER_CS_FLAGS)
  345. !endif
  346. !if defined(PERF_INSTRUMENTATION)
  347. MANAGED_STD_FLAGS=$(MANAGED_STD_FLAGS) /define:PROFILE
  348. !endif
  349. !ifndef 386_ASSEMBLER_NAME
  350. 386_ASSEMBLER_NAME = ml.exe /safeseh
  351. !endif
  352. GLOBAL_C_FLAGS = -Ii386\ -I. $(INCPATH1) $(CDEFINES) $(CFLAGS)
  353. NP_COMPILER_FLAGS = $(GLOBAL_C_FLAGS) $(COMPILER_WARNINGS)
  354. C_COMPILER_FLAGS = $(NP_COMPILER_FLAGS) $(PRECOMPILED)
  355. CXX_COMPILER_FLAGS = $(NP_COMPILER_FLAGS) $(PRECOMPILED_CXX) $(MSC_CPPFLAGS) $(NTCPPFLAGS)
  356. C_PREPROCESSOR_FLAGS = $(GLOBAL_C_FLAGS) -EP -Tc
  357. C_PREPROCESSOR = $(C_PREPROCESSOR_NAME) $(C_PREPROCESSOR_FLAGS)
  358. C_COMPILER = $(C_COMPILER_NAME) $(C_COMPILER_FLAGS)
  359. NP_C_COMPILER = $(C_COMPILER_NAME) $(NP_COMPILER_FLAGS)
  360. CXX_COMPILER = $(CXX_COMPILER_NAME) $(CXX_COMPILER_FLAGS)
  361. !if defined(NOMASMCOMPATIBILITY)
  362. 386_ASSEMBLER=$(386_ASSEMBLER_NAME) -c -coff -Cx -nologo -Ii386\ -I. $(INCPATH1) $(386_ASMFLAGS)
  363. !else
  364. 386_ASSEMBLER=$(386_ASSEMBLER_NAME) -c -coff -Cx -nologo -Ii386\ -I. $(INCPATH1) -Zm $(386_ASMFLAGS)
  365. !endif
  366. ECHO_MSG=$(C_COMPILER) $<
  367. ECHO_MSG_P=$(NP_C_COMPILER) $**
  368. ECHO_CXX_MSG=$(CXX_COMPILER) $<
  369. ECHO_PRECOMPILED_MSG1=$(C_COMPILER_NAME) $(C_COMPILER_FLAGS) /Yl$(TARGETNAME) /Yc$(?F) $(HEADERFILE) \
  370. $(HEADEROBJ) $(PRECOMPILED_FLAG) $(PRECOMPILED_SOURCEFILE)
  371. ECHO_PRECOMPILED_MSG2=$(C_COMPILER_NAME) $(C_COMPILER_FLAGS) /Yl$(TARGETNAME) /Yc$(?F) $(HEADERFILE) \
  372. $(HEADEROBJ) $(PRECOMPILED_FLAG)
  373. {}.c{}.asm:
  374. $(C_COMPILER_NAME) @<< /Fa $(MAKEDIR)\$(<F)
  375. $(C_COMPILER_FLAGS: =
  376. )
  377. $(C_COMPILER_FLAGS:##= )
  378. <<NOKEEP
  379. {..\i386\}.asm{}.lst:
  380. $(386_ASSEMBLER) /Fl$@ /Fo$(_OBJ_DIR)\i386\$(@B).obj $(MAKEDIR)\$<
  381. {i386\}.asm{}.lst:
  382. $(386_ASSEMBLER) /Fl$@ /Fo$(MAKEDIR)\$(_OBJ_DIR)\i386\$(@B).obj $(MAKEDIR)\$<
  383. {..\i386\}.asm{$(_OBJ_DIR)\i386\}.obj:
  384. $(386_ASSEMBLER) -Fo$(MAKEDIR)\$@ $(MAKEDIR)\$<
  385. {$(_OBJ_DIR)\i386\}.asm{$(_OBJ_DIR)\i386\}.obj:
  386. $(386_ASSEMBLER) -Fo$(MAKEDIR)\$@ $(MAKEDIR)\$<
  387. {i386\}.asm{$(_OBJ_DIR)\i386\}.obj:
  388. $(386_ASSEMBLER) -Fo$(MAKEDIR)\$@ $(MAKEDIR)\$<
  389. !IFDEF _NT386LIBS
  390. _NTLIBS=$(_NT386LIBS)
  391. !ENDIF
  392. COPYDST=$(386COPYDST)
  393. LIB_COPY=nti386cp.cmd
  394. !IF "$(NTDEBUGTYPE)" == "windbg" || "$(NTDEBUGTYPE)" == "both"
  395. NTTEST_LINK_OPTIONS=-entry:KiSystemStartup@4
  396. !ELSE
  397. NTTEST_LINK_OPTIONS=-base:0x80100000 -entry:KiSystemStartup@4
  398. !ENDIF
  399. !if "$(TARGETTYPE)" != "DRIVER" && \
  400. "$(TARGETTYPE)" != "DRIVER_LIBRARY" && \
  401. "$(TARGETTYPE)" != "EXPORT_DRIVER" && \
  402. "$(TARGETTYPE)" != "HAL" && \
  403. "$(TARGETTYPE)" != "GDI_DRIVER" && \
  404. "$(TARGETTYPE)" != "MINIPORT"
  405. ! if defined(LINKER_WIN98OPT) || defined (CHICAGO_PRODUCT)
  406. LINKER_FLAGS=$(LINKER_FLAGS) /opt:win98
  407. ! else
  408. LINKER_FLAGS=$(LINKER_FLAGS) /opt:nowin98
  409. ! endif
  410. !endif
  411. # SEH support for libs built with an older compiler
  412. # @@BEGIN_DDKSPLIT
  413. !if 0
  414. # @@END_DDKSPLIT
  415. !if defined(_NT_TARGET_VERSION)
  416. ! if $(_NT_TARGET_VERSION) < 0x502 && $(_NT_TOOLS_VERSION) >= 0x700
  417. TARGETLIBS=$(TARGETLIBS) $(DDK_LIB_PATH)\sehupd.lib
  418. ! endif
  419. !endif
  420. # @@BEGIN_DDKSPLIT
  421. !endif
  422. # @@END_DDKSPLIT