!IF 0 Copyright (c) 1989 Microsoft Corporation Module Name: makefile.def Abstract: This is the standard makefile for the components of the NT project. It includes the following files: .\sources. - developer supplies this file. It defines the required TARGETNAME, TARGETPATH, TARGETTYPE and SOURCES as well as optional macros that control the behavior of the compiler and linker: obj\_objects.mac - built by BUILD.EXE from .\sources. Targets: all - Builds all targets in this make file clean - Erase all targets that can be produced by this make file, ignoring errors. Also rebuilds the depend target. depend - Rebuilts source file dependencies, using BUILD.EXE tool Author: Steve Wood (stevewo) 28-Feb-1989 Revision History: Reza Baghai (rezab) 25-Jan-1993 Added -order:*.prf switch for building EXEs Added $(PERFLIBS) to *_LINKLIBS lines to allow linking with optional performance tuning libraries Sudeep Bharati (sudeepb) 10-Dec-1991 Added PROGLIB target type, so that NTVDM can export interfaces from an EXE. Roger Lanser (a-rlansr) 27-Apr-1993 Added MIPS C8 compiler and attempted to generalize variables between the MIPS and INTEL version of C8. Oh yes, removed last remnants of DECSTATION. Useful Variables Set: CPUTYPE={I386|MIPS|ALPHA|PPC} Optional Controls Variables (partial list), these are environment variables, remember they can be set with env=value on the command line as well: NOTE: xxx_... is {MSC|386|mips|alpha|PPC} where MSC_ applies to the C8 compiler independent of the cpu type. Specific cpu_ will take precedence over the equivalent MSC_ variable. EXAMPLE: To compile with codeview symbols for windbg: set NTDEBUG=ntsd set NTDEBUGTYPE=windbg set MSC_OPTIMIZATION=/Od nttest=filename umtest=filename umappl=filename NT_UP Define as 0 in environment to turn on MP. If undefined or equal to 1, you get UP. xxx_warning_level xxx_optimization xxx_STDCALL = 1 use _stdcall calling convention 0 use _cdecl calling convention ntdebug browser_info xxx_cppflags ntcppflags NT_INST - set to turn on instrumentation BASEDIR - \nt or \ntrel (default \nt) PRECOMPILED_CXX=1 - do precompiled headers for CXX instead of C files note: precompiled headers can not be used on both c and cxx files in a single directory. pnp_power=1 | 0 | !ENDIF !if 0 !message You must use nmake version 1.30 or greater... !endif # # IDL/RDL/TDL build rules. # !ifdef IDL_RULES IDL_OUT_DIR =. IDL_HDR_OUT_DIR =. RDL_OUT_DIR =. RDL_HDR_OUT_DIR =. !ifndef MIDL_INCS MIDL_INCS = obj\$(TARGET_DIRECTORY) !endif !ifndef MC_OUT_DIR MC_OUT_DIR = obj\$(TARGET_DIRECTORY) !endif !endif # # Select build target and set platform specific variables. # !INCLUDE makefile.plt # # Include the developer supplied file that defines the TARGETNAME, TARGETPATH, # TARGETTYPE and SOURCES macros. Make sure it defines them. # !INCLUDE .\sources. SOURCES_USED=$(SOURCES_USED) .\sources # # Attempt to include the sources file from the target subdirectory. # !IF EXIST(.\$(TARGET_DIRECTORY)\sources.) !INCLUDE .\$(TARGET_DIRECTORY)\sources. SOURCES_USED=$(SOURCES_USED) .\$(TARGET_DIRECTORY)\sources. !ENDIF # # Attempt to include the sources file from the parent target subdirectory. # !IF EXIST(..\$(TARGET_DIRECTORY)\sources.) !INCLUDE ..\$(TARGET_DIRECTORY)\sources. SOURCES_USED=$(SOURCES_USED) ..\$(TARGET_DIRECTORY)\sources. !ENDIF !IF "$(_NT_LEGO_ON_THIS_MACHINE)" == "" !UNDEF NTLEGO !ENDIF !IFNDEF TARGETPATH !ERROR Your .\sources. file must define the TARGETPATH= macro !ENDIF !IFNDEF TARGETTYPE !ERROR Your .\sources. file must define the TARGETTYPE= macro !ENDIF !IFNDEF TARGETNAME ! IF "$(TARGETTYPE)" != "NOTARGET" !ERROR Your .\sources. file must define the TARGETNAME= macro ! ELSE TARGETNAME= ! ENDIF !ENDIF !IFNDEF SOURCES !ERROR Your .\sources. file must define the SOURCES= macro !ENDIF !IFNDEF UMTYPE UMTYPE=nt !ENDIF !IFNDEF UMBASE ! IFDEF COFFBASE UMBASE=@..\exchange\build\coffbase.txt,$(COFFBASE) ! ELSE UMBASE=@..\exchange\build\coffbase.txt,usermode ! ENDIF !ENDIF LINKLIBS=$(LINKLIBS) $(PERFLIBS) !IF DEFINED(USE_MFC) || DEFINED(USE_MFCUNICODE) #---------------------------------------------------------# # this set of defines establishes the "correct" build # # environment for an app that needs to use MFC. the # # app's sources file only needs to specify USE_MFC=1 # # and this makefile will set the enviroment up correctly. # #---------------------------------------------------------# UMENTRY=winmain UMENTRYABS= USE_CRTDLL=1 # CRTDLL s/b used if MFC is. MFC_FLAGS=$(MFC_FLAGS) -D_AFXDLL -D_AFX_NOFORCE_LIBS !IF "$(NTDEBUG)" == "retail" || "$(NTDEBUG)" == "" || "$(NTDEBUG)" == "ntsdnodbg" !IFDEF USE_MFCUNICODE MFC_LIBS=$(BASEDIR)\public\sdk\lib\*\cfm30u.lib $(BASEDIR)\public\sdk\lib\*\cfmo30u.lib !ELSE MFC_LIBS=$(BASEDIR)\public\sdk\lib\*\cfm30.lib $(BASEDIR)\public\sdk\lib\*\cfmo30.lib !ENDIF MFC_FLAGS=$(MFC_FLAGS) -DNDEBUG !ELSE !IFDEF USE_MFCUNICODE MFC_LIBS=$(BASEDIR)\public\sdk\lib\*\cfm30ud.lib $(BASEDIR)\public\sdk\lib\*\cfmo30ud.lib !ELSE MFC_LIBS=$(BASEDIR)\public\sdk\lib\*\cfm30d.lib $(BASEDIR)\public\sdk\lib\*\cfmo30d.lib !ENDIF MFC_FLAGS=$(MFC_FLAGS) -D_DEBUG USE_PDB=1 !ENDIF !IFDEF USE_MFCUNICODE UNICODE=1 MFC_FLAGS=$(MFC_FLAGS) -DUNICODE -D_UNICODE !ENDIF MFC_INCLUDES=$(BASEDIR)\public\sdk\inc\mfc30 LINKLIBS=$(LINKLIBS) $(MFC_LIBS) !ENDIF # USE_MFC || USE_MFCUNICODE !IFDEF USE_CRTDLL LIBC_LIB=crtdll.lib LIBC_DEFINES=-D_DLL=1 -D_MT=1 !ELSE ! IFDEF USE_MSVCRT LIBC_LIB=msvcrt.lib LIBC_DEFINES=-D_DLL=1 -D_MT=1 !ELSE ! IFDEF USE_LIBCMT LIBC_LIB=libcmt.lib LIBC_DEFINES=-D_MT=1 ! ELSE LIBC_LIB=libc.lib LIBC_DEFINES= ! ENDIF ! ENDIF !ENDIF !IFNDEF GPSIZE GPSIZE= 0 !ENDIF !IFDEF CAIRO_PRODUCT CAIRO_LIB_PATH=$(BASEDIR)\public\sdk\lib\cairo\* !ENDIF # CAIRO_PRODUCT !ifdef NTLIBPATH LIBRARY_PATH = $(NTLIBPATH)\*\lib !else !ifdef CHICAGO_PRODUCT LIBRARY_PATH = $(BASEDIR)\public\sdk\lib\chicago\* !else LIBRARY_PATH = $(BASEDIR)\public\sdk\lib\* !endif !endif !ifndef NTLIBCPATH NTLIBCPATH=$(LIBRARY_PATH) !endif LIBC_LIB = $(NTLIBCPATH)\$(LIBC_LIB) NT_LIBS=$(LIBRARY_PATH)\ntdll.lib GUI32_LIBS=$(LIBRARY_PATH)\gdi32.lib \ $(LIBRARY_PATH)\user32.lib !IFDEF CAIRO_PRODUCT !IFNDEF TUKWILA NT_LIBS=$(NT_LIBS:lib\*\ntdll.lib=lib\cairo\*\ntdll.lib) !ENDIF GUI32_LIBS=$(GUI32_LIBS:lib\*\user32.lib=lib\cairo\*\user32.lib) !ENDIF CRT_LIBS= NT_CRT=$(LIBRARY_PATH)\nt.lib WIN32_LIBS=$(LIBC_LIB) \ $(LIBRARY_PATH)\advapi32.lib \ $(LIBRARY_PATH)\kernel32.lib NTSS_LIBS=$(NT_LIBS) $(NT_CRT) $(BASEDIR)\public\sdk\lib\*\smdll.lib OS2_LIBS=$(NT_LIBS) $(BASEDIR)\public\sdk\lib\*\os2dll.lib \ $(CRT_LIBS) POSIX_LIBS=$(NT_LIBS) $(BASEDIR)\public\sdk\lib\*\libcpsx.lib \ $(BASEDIR)\public\sdk\lib\*\psxdll.lib \ $(BASEDIR)\public\sdk\lib\*\psxrtl.lib !ifndef SUBSYSTEM_VERSION ! ifndef EXPECTED_WINVER ! ifdef CAIRO_PRODUCT SUBSYSTEM_WINVER = ,4.00 ! else SUBSYSTEM_WINVER = ,3.51 ! endif ! else SUBSYSTEM_WINVER = ,$(EXPECTED_WINVER) ! endif SUBSYSTEM_CONVER = ,3.51 SUBSYSTEM_OS2VER = SUBSYSTEM_POSIXVER = SUBSYSTEM_NATVER = ,3.51 !else SUBSYSTEM_WINVER = ,$(SUBSYSTEM_VERSION) SUBSYSTEM_CONVER = ,$(SUBSYSTEM_VERSION) SUBSYSTEM_OS2VER = ,$(SUBSYSTEM_VERSION) SUBSYSTEM_POSIXVER = ,$(SUBSYSTEM_VERSION) SUBSYSTEM_NATVER = ,$(SUBSYSTEM_VERSION) !endif !IF "$(UMTYPE)" == "nt" SUBSYSTEM=native$(SUBSYSTEM_NATVER) UMINCL=$(BASEDIR)\public\sdk\inc\crt STD_CALL_ENTRY=1 UMENTRY=-entry:NtProcessStartup UMLIBS=$(UMLIBS) $(NT_LIBS) $(NT_CRT) $(CRT_LIBS) !ELSE ! IF "$(UMTYPE)" == "windows" SUBSYSTEM=windows$(SUBSYSTEM_WINVER) UMINCL=$(BASEDIR)\public\sdk\inc\crt ! IF "$(UMENTRY)" == "winmain" UMENTRY=-entry:WinMainCRTStartup ! ELSE ! IF "$(UMENTRYABS)" == "" UMENTRY=-entry:mainCRTStartup ! ELSE UMENTRY=-entry:$(UMENTRYABS) ! ENDIF ! ENDIF #UMLIBS=$(UMLIBS) $(WIN32_LIBS) $(GUI32_LIBS) ! ELSE ! IF "$(UMTYPE)" == "console" SUBSYSTEM=console$(SUBSYSTEM_CONVER) UMINCL=$(BASEDIR)\public\sdk\inc\crt ! IF "$(UMENTRY)" == "winmain" UMENTRY=-entry:WinMainCRTStartup ! ELSE UMENTRY=-entry:mainCRTStartup ! ENDIF UMLIBS=$(UMLIBS) $(WIN32_LIBS) ! ELSE ! IF "$(UMTYPE)" == "ntss" SUBSYSTEM=native$(SUBSYSTEM_NATVER) UMINCL=$(BASEDIR)\public\sdk\inc\crt STD_CALL_ENTRY=1 UMENTRY=-entry:NtProcessStartup UMLIBS=$(UMLIBS) $(NTSS_LIBS) $(CRT_LIBS) ! ELSE ! IF "$(UMTYPE)" == "os2" SUBSYSTEM=os2$(SUBSYSTEM_OS2VER) UMINCL=$(BASEDIR)\public\sdk\inc\os2;$(BASEDIR)\public\sdk\inc\crt STD_CALL_ENTRY=1 UMENTRY=-entry:NtProcessStartup UMLIBS=$(UMLIBS) $(OS2_LIBS) ! ELSE ! IF "$(UMTYPE)" == "posix" SUBSYSTEM=posix$(SUBSYSTEM_POSIXVER) UMINCL=$(BASEDIR)\public\sdk\inc\posix;$(BASEDIR)\public\sdk\inc\crt UMENTRY=-entry:__PosixProcessStartup UMLIBS=$(UMLIBS) $(POSIX_LIBS) ! ELSE ! ERROR Invalid UMTYPE value - $(UMTYPE) ! ENDIF # UMTYPE == posix ! ENDIF # UMTYPE == os2 ! ENDIF # UMTYPE == ntss ! ENDIF # UMTYPE == console ! ENDIF # UMTYPE == windows !ENDIF # UMTYPE == nt # # If you edit this line you need to modify $(BASEDIR)\private\sdktools\build\build.c # !IFDEF NTINCPATH NTINCLUDES=$(BASEDIR)\public\oak\inc;$(NTINCPATH)\$(TARGET_DIRECTORY)\inc !ELSE NTINCLUDES=$(BASEDIR)\public\oak\inc;$(BASEDIR)\public\sdk\inc !ENDIF !IFNDEF COMPILER_WARNINGS COMPILER_WARNINGS=-FI$(BASEDIR)\public\sdk\inc\warning.h !ENDIF !IFDEF CAIRO_PRODUCT NTINCLUDES=$(BASEDIR)\private\cinc;$(BASEDIR)\public\sdk\inc\cairo;$(NTINCLUDES) !IFDEF NOT_UNICODE WIN32_DEFINE=-DWIN32=300 -D_CAIRO_=300 !ELSE WIN32_DEFINE=-DWIN32=300 -D_CAIRO_=300 -DUNICODE -D_UNICODE !ENDIF !ELSE !IFDEF CHICAGO_PRODUCT NTINCLUDES=$(BASEDIR)\private\cinc;$(BASEDIR)\public\sdk\inc\chicago;$(BASEDIR)\public\sdk\inc\chicago\crt;$(NTINCLUDES) WIN32_DEFINE=-DWIN32=200 -DFLAT -D_CHICAGO_=200 LINKER_FLAGS=$(LINKER_FLAGS) -map !ELSE WIN32_DEFINE=-DWIN32=100 -D_NT1X_=100 CAIRO_LIB_PATH=$(BASEDIR)\public\sdk\lib !ENDIF !ENDIF INCLUDES =$(INCLUDES: =) NTINCLUDES =$(NTINCLUDES: =) UMINCL =$(UMINCL: =) !IFDEF USER_INCLUDES USER_INCLUDES =$(USER_INCLUDES: =) USER_INCL0=-I$(USER_INCLUDES) USER_INCL1=-I$(USER_INCLUDES) !ELSE USER_INCL0= USER_INCL1= !ENDIF !IFDEF INCLUDES INCL=$(INCLUDES) INCPATH0=$(USER_INCL0:;= -I) -I$(INCL:;= -I) -I$(NTINCLUDES:;= -I) -I$(UMINCL:;= -I) INCPATH1=$(USER_INCL1:;= -I) -I$(INCL:;= -I) -I$(NTINCLUDES:;= -I) -I$(UMINCL:;= -I) !ELSE INCPATH0=$(USER_INCL0:;= -I) -I$(NTINCLUDES:;= -I) -I$(UMINCL:;= -I) INCPATH1=$(USER_INCL1:;= -I) -I$(NTINCLUDES:;= -I) -I$(UMINCL:;= -I) !ENDIF INCPATH0=$(INCPATH0:-I =) INCPATH1=$(INCPATH1:-I =) !IFDEF MFC_INCLUDES MFC_INCLUDES=$(MFC_INCLUDES: =) MFC_INCLUDES=-I$(MFC_INCLUDES:;= -I) INCPATH0=$(MFC_INCLUDES) $(INCPATH0) INCPATH1=$(MFC_INCLUDES) $(INCPATH1) !ENDIF !IFNDEF RELATIVE_DEPTH RELATIVE_DEPTH=..\.. !ENDIF !IFNDEF DLLENTRY DLLENTRY=-noentry !ELSE DLLENTRY=-entry:$(DLLENTRY) !ENDIF !IFNDEF DLLBASE DLLBASE=@$(BASEDIR)\PUBLIC\SDK\LIB\coffbase.txt,$(TARGETNAME) !ENDIF !IFNDEF DLLDEF DLLDEF=$(@B).def !ENDIF !IFNDEF BOOTBASE ! IFDEF FRAZZLE BOOTBASE=0xd0100000,0xd0104000 ! ELSE BOOTBASE=0xd0ff0000,0xd0ff4000 ! ENDIF !ENDIF DRIVERBASE=0x10000 HALBASE=0x80400000 # # Map lower case to upper case for variables that can be specified from the # command line. # !IFDEF nttest NTTEST=$(nttest) !ENDIF !IFDEF makedll MAKEDLL=$(makedll) !ENDIF !IFDEF umtest UMTEST=$(umtest) !ENDIF # # Include the list of object files (defined as the OBJECTS macro) that was # built by BUILD program, using the SOURCES= macro defined in the sources. # file. Use macro substitution to build the supported target objects. # !INCLUDE obj\_objects.mac !IF $(386) OBJECTS=$(386_OBJECTS) DLLLIBOBJECTS=$(386_DLLLIBOBJECTS) !ELSEIF $(MIPS) OBJECTS=$(MIPS_OBJECTS) DLLLIBOBJECTS=$(MIPS_DLLLIBOBJECTS) !ELSEIF $(ALPHA) OBJECTS=$(ALPHA_OBJECTS) DLLLIBOBJECTS=$(ALPHA_DLLLIBOBJECTS) !ELSEIF $(PPC) OBJECTS=$(PPC_OBJECTS) DLLLIBOBJECTS=$(PPC_DLLLIBOBJECTS) !ENDIF # # BUILD.EXE defines the NOLINK variable to disable the building of any # test executables when it is recursing on a dirs. file to build components # in subdirectories. # !IF "$(BUILDMSG)" != "Stop." ! IFDEF NOLINK ! UNDEF NTTEST ! UNDEF MAKEDLL ! ELSE ! IFDEF nolink ! UNDEF NTTEST ! UNDEF MAKEDLL ! ENDIF ! ENDIF # DEF NOLINK !ENDIF # BUILDMSG != "Stop." # # Determine type of target link we are doing # !IF "$(TARGETTYPE)" == "PROGLIB" TARGETEXT=exe TARGETLIB= !ELSE ! IF "$(TARGETTYPE)" == "PROGRAM" TARGETEXT=exe TARGETLIB= ! ELSE ! IF "$(TARGETTYPE)" == "DYNLINK" DYNLINK_LIB=$(TARGETPATH)\*\$(TARGETNAME).lib ! IF "$(MAKEDLL)" != "" ! IF "$(UMTYPE)" == "os2" TARGETLIB=$(BASEDIR)\public\sdk\lib\*\ntdll.lib ! ELSE ! IF "$(UMTYPE)" == "posix" TARGETLIB=$(BASEDIR)\public\sdk\lib\*\libcpsx.lib $(BASEDIR)\public\sdk\lib\*\ntdll.lib $(CRT_LIBS) ! ELSE ! IF "$(TARGETNAME)" == "ntdll" TARGETLIB= ! ELSE ! IFDEF USE_CRTDLL ! IFDEF CHICAGO_PRODUCT TARGETLIB=$(WIN32DLL_LIBS) $(BASEDIR)\public\sdk\lib\*\crtdll.lib ! ELSE TARGETLIB=$(WIN32DLL_LIBS) $(BASEDIR)\public\sdk\lib\*\crtdll.lib $(BASEDIR)\public\sdk\lib\*\ntdll.lib ! ENDIF ! ELSE ! IFDEF USE_MSVCRT TARGETLIB=$(WIN32DLL_LIBS) $(LIBC_LIB) ! ELSE TARGETLIB=$(WIN32DLL_LIBS) $(BASEDIR)\public\sdk\lib\*\ntdll.lib $(CRT_LIBS) ! ENDIF ! ENDIF ! ENDIF ! ENDIF ! ENDIF ! IF "$(TARGETEXT)" == "" TARGETEXT=dll ! ENDIF ! IFDEF CAIROLIB # # If we are linking a DLL then add in the cairo libs. # TARGETLIB=$(CAIROLIB) $(TARGETLIB) ! ENDIF ! IFDEF CAIRO_PRODUCT ! IFNDEF TUKWILA TARGETLIB=$(TARGETLIB:lib\*\ntdll.lib=lib\cairo\*\ntdll.lib) ! ENDIF ! ENDIF ! ELSE # "$(MAKEDLL)" != "" TARGETEXT=lib TARGETLIB= ! ENDIF # "$(MAKEDLL)" != "" ! ELSE ! IF "$(TARGETTYPE)" == "LIBRARY" TARGETEXT=lib TARGETLIB= ! ELSE ! IF "$(TARGETTYPE)" == "DRIVER" TARGETEXT=sys TARGETLIB=$(BASEDIR)\public\sdk\lib\*\ntoskrnl.lib $(BASEDIR)\public\sdk\lib\*\hal.lib $(CRT_LIBS) ! ELSE ! IF "$(TARGETTYPE)" == "EXPORT_DRIVER" ! IF "$(MAKEDLL)" != "" TARGETEXT=sys TARGETLIB=$(BASEDIR)\public\sdk\lib\*\ntoskrnl.lib $(BASEDIR)\public\sdk\lib\*\hal.lib $(CRT_LIBS) ! ELSE TARGETEXT=lib TARGETLIB= ! ENDIF ! ELSE ! IF "$(TARGETTYPE)" == "HAL" ! IF "$(MAKEDLL)" != "" TARGETEXT=dll TARGETLIB=$(BASEDIR)\public\sdk\lib\*\ntoskrnl.lib $(CRT_LIBS) ! ELSE TARGETEXT=lib TARGETLIB= ! ENDIF ! ELSE ! IF "$(TARGETTYPE)" == "BOOTPGM" TARGETEXT=sys ! ELSE ! IF "$(TARGETTYPE)" == "MINIPORT" TARGETEXT=sys ! ELSE ! IF "$(TARGETTYPE)" == "GDI_DRIVER" TARGETEXT=dll TARGETLIB=$(BASEDIR)\public\sdk\lib\km\*\win32k.lib ! ENDIF # TARGETTYPE == GDI_DRIVER ! ENDIF # TARGETTYPE == MINIPORT ! ENDIF # TARGETTYPE == BOOTPGM ! ENDIF # TARGETTYPE == HAL ! ENDIF # TARGETTYPE == EXPORT_DRIVER ! ENDIF # TARGETTYPE == DRIVER ! ENDIF # TARGETTYPE == LIBRARY ! ENDIF # TARGETTYPE == DYNLINK ! ENDIF # TARGETTYPE == PROGRAM !ENDIF # TARGETTYPE == PROGLIB TARGET= !IF "$(TARGETTYPE)" != "UMAPPL_NOLIB" ! IF "$(OBJECTS)" != "" TARGET=$(TARGETPATH)\*\$(TARGETNAME).$(TARGETEXT) ! ENDIF !ENDIF # TARGETTYPE != UMAPPL_NOLIB !IFNDEF MACHINE_TARGETLIBS MACHINE_TARGETLIBS=$(TARGETLIB) $(TARGETLIBS) !ENDIF TARGETOBJFILES=$(TARGETOBJFILES) $(OBJECTS) !IF "$(NOLINK)" == "" || \ ("$(NOLINK)" != "" && ("$(TARGETTYPE)"=="LIBRARY" || \ ( ("$(TARGETTYPE)"=="DYNLINK" || \ "$(TARGETTYPE)"=="PROGLIB" || \ "$(TARGETTYPE)"=="EXPORT_DRIVER" || \ "$(TARGETTYPE)"=="HAL") && \ "$(MAKEDLL)" == "") \ ) \ ) !IF "$(NOLINK)" != "" && "$(TARGET)" != "" TARGETLIBFILES=$(TARGETLIBFILES) $(TARGETPATH)\*\$(TARGETNAME).lib !ELSE TARGETEXEFILES=$(TARGETEXEFILES) $(TARGET) !ENDIF !ENDIF # NOLINK == "" || building .lib file for dll !IF "$(NTTEST)" != "" TARGETOBJFILES=$(TARGETOBJFILES) obj\*\$(NTTEST).obj ! IFNDEF NOLINK TARGETEXEFILES=$(TARGETEXEFILES) obj\*\$(NTTEST).exe ! ENDIF # NDEF NOLINK !ENDIF # NTTEST != "" UMOBJFILES= UMEXEFILES= !IF "$(UMAPPLEXT)" == "" ! IFDEF _DOT_COM_FILE UMAPPLEXT=.com ! ELSE UMAPPLEXT=.exe ! ENDIF !ENDIF !IF "$(UMAPPL)" != "" UMOBJFILES=obj\*\$(UMAPPL:*=.obj obj\*\).obj ! IF "$(UMAPPLEXT)" == ".com" ! IFNDEF NOLINK UMEXEFILES=obj\*\$(UMAPPL:*=.com obj\*\).com ! ENDIF ! ELSE ! IF "$(UMAPPLEXT)" == ".exe" ! IFNDEF NOLINK UMEXEFILES=obj\*\$(UMAPPL:*=.exe obj\*\).exe ! ENDIF ! ELSE ! IF "$(UMAPPLEXT)" == ".scr" ! IFNDEF NOLINK UMEXEFILES=obj\*\$(UMAPPL:*=.scr obj\*\).scr ! ENDIF ! ELSE ! ERROR Unsupport UMAPPLEXT = $(UMAPPLEXT) ! ENDIF # UMAPPLEXT == .scr ! ENDIF # UMAPPLEXT == .exe ! ENDIF # UMAPPLEXT == .com !ENDIF # UMAPPL != "" !IF "$(UMTEST)" != "" UMOBJFILES=$(UMOBJFILES) obj\*\$(UMTEST:*=.obj obj\*\).obj ! IFNDEF NOLINK UMEXEFILES=$(UMEXEFILES) obj\*\$(UMTEST:*=.exe obj\*\).exe ! ENDIF !ENDIF # # Define NT_UP as 0 in environment to turn on MP. # If undefined or equal to 1, you get UP. # !IFNDEF NT_UP NT_UP=1 !ENDIF !IF "$(NT_UP)"=="0" NT_UP_DEFINES= !ELSE NT_UP_DEFINES=-DNT_UP=1 !ENDIF !IFNDEF NT_INST NT_INST=0 !ENDIF !IFNDEF PNP_POWER PNP_POWER=0 !ENDIF !IF "$(PNP_POWER)"=="0" NT_PNP_POWER_DEFINES= !ELSE NT_PNP_POWER_DEFINES=-D_PNP_POWER_=1 !ENDIF # # User defined variables (environment variables or command line). # A cpu specific definition will take precedence over the MSC definition. # # xxx_WARNING_LEVEL # xxx_OPTIMIZATION # xxx_CPPFLAGS # !IFNDEF MSC_WARNING_LEVEL MSC_WARNING_LEVEL=/W3 !ENDIF !IFNDEF MSC_OPTIMIZATION MSC_OPTFLAGS=/Oxs $(MSC_OPTIMIZATION) !ELSE MSC_OPTFLAGS=$(MSC_OPTIMIZATION) !ENDIF # # End of user defined variables. # !IFDEF NOT_LEAN_AND_MEAN STD_DEFINES=-DCONDITION_HANDLING=1 $(NT_UP_DEFINES) \ -DNT_INST=$(NT_INST) $(WIN32_DEFINE) $(NT_PNP_POWER_DEFINES) !ELSE STD_DEFINES=-DCONDITION_HANDLING=1 -DWIN32_LEAN_AND_MEAN=1 $(NT_UP_DEFINES) \ -DNT_INST=$(NT_INST) $(WIN32_DEFINE) $(NT_PNP_POWER_DEFINES) !ENDIF !IFNDEF CBSTRING !IF "$(MAJORCOMP)" == "ntos" || "$(MAJORCOMP)" == "NTOS" CBSTRING= -cbstring !ELSE CBSTRING= !ENDIF !ENDIF !IF "$(NTDEBUG)" == "retail" TARGET_DBG_DEFINES= -DDBG=0 -DDEVL=1 DBGFLAGS=$(MSC_OPTFLAGS) !ELSE ! IF "$(NTDEBUG)" == "" TARGET_DBG_DEFINES= -DDBG=0 -DDEVL=1 DBGFLAGS=$(MSC_OPTFLAGS) ! ELSE TARGET_DBG_DEFINES= -DDBG=1 -DDEVL=1 !UNDEF NTLEGO ! IF "$(NTDEBUG)" == "ntsd" DBGFLAGS=$(MSC_OPTFLAGS) /Zi ! ELSE ! IF "$(NTDEBUG)" == "cvp" DBGFLAGS=$(MSC_OPTFLAGS) /Zd ! ELSE ! IF "$(NTDEBUG)" == "sym" DBGFLAGS=$(MSC_OPTFLAGS) /Zd ! ELSE ! IF "$(NTDEBUG)" == "ntsdnodbg" DBGFLAGS=$(MSC_OPTFLAGS) /Zi TARGET_DBG_DEFINES= -DDBG=0 -DDEVL=1 ! ELSE ! ERROR NTDEBUG macro can be either "retail", "", "ntsd", "cvp" or "sym" or "ntsdnodbg" ! ENDIF ! ENDIF # NTDEBUG == ntsdnodbg ! ENDIF # NTDEBUG == sym ! ENDIF # NTDEBUG == cvp ! ENDIF # NTDEBUG == "" !ENDIF # NTDEBUG == retail !IF "$(NTDEBUGTYPE)" == "windbg" LINKER_DBG_TYPE = -debugtype:cv !ELSE ! IF "$(NTDEBUGTYPE)" == "ntsd" || "$(NTDEBUGTYPE)" == "coff" LINKER_DBG_TYPE = -debugtype:coff ! ELSE ! IF "$(NTDEBUGTYPE)" == "both" LINKER_DBG_TYPE = -debugtype:both ! ELSE ! IF "$(NTDEBUGTYPE)" == "" LINKER_DBG_TYPE = -debugtype:coff ! ELSE ! ERROR NTDEBUGTYPE macro can one of "", "ntsd", "coff", "windbg" or "both" ! ENDIF ! ENDIF ! ENDIF !ENDIF !IF "$(PRECOMPILED_OPTION)" == "" ! IF "$(PRECOMPILED_INCLUDE)" != "" ! IF "$(PRECOMPILED_INCLUDE)" != "$(PRECOMPILED_INCLUDE:.hxx=)" PRECOMPILED_CXX=1 ! ENDIF ! IF "$(PRECOMPILED_INCLUDE)" != "$(PRECOMPILED_INCLUDE:.cxx=)" PRECOMPILED_CXX=1 ! ENDIF ! IF "$(PRECOMPILED_PCH)" == "" PRECOMPILED_PCH=$(PRECOMPILED_INCLUDE:.hxx=.pch) PRECOMPILED_PCH=$(PRECOMPILED_PCH:.h=.pch) PRECOMPILED_PCH=$(PRECOMPILED_PCH:.cxx=.pch) PRECOMPILED_PCH=$(PRECOMPILED_PCH:.c=.pch) PRECOMPILED_PCH=$(PRECOMPILED_PCH:..\=) ! ENDIF ! IF "$(PRECOMPILED_OBJ)" == "" PRECOMPILED_OBJ=$(PRECOMPILED_PCH:.pch=.obj) ! ENDIF ! ENDIF !ENDIF ! IF "$(PRECOMPILED_OPTION)" == "" ! IF "$(PRECOMPILED_INCLUDE)" != "" ! IF "$(PRECOMPILED_PCH)" != "" HEADERFILE=/Fpobj\*\$(PRECOMPILED_PCH) ! ENDIF ! IF "$(PRECOMPILED_OBJ)" != "" HEADEROBJNAME=obj\*\$(PRECOMPILED_OBJ) HEADEROBJ=/Fo$(MAKEDIR)\$(HEADEROBJNAME) ! ENDIF ! IF "$(PRECOMPILED_CXX)" == "" PRECOMPILED=/Yu$(PRECOMPILED_INCLUDE:..\=) $(HEADERFILE) PRECOMPILED_CXX= ! ELSE PRECOMPILED= PRECOMPILED_CXX=/Yu$(PRECOMPILED_INCLUDE:..\=) $(HEADERFILE) ! ENDIF PRECOMPILED_TARGET=obj\*\$(PRECOMPILED_PCH) ! ELSE ! IF "$(PRECOMPILED_INCLUDE)" != "" ! IF "$(PRECOMPILED_CXX)" == "" PRECOMPILED=/Yu$(PRECOMPILED_INCLUDE) PRECOMPILED_CXX= ! ELSE PRECOMPILED= PRECOMPILED_CXX=/Yu$(PRECOMPILED_INCLUDE) ! ENDIF ! ENDIF ! ENDIF ! ELSE ! IF "$(PRECOMPILED_CXX)" == "" PRECOMPILED=$(PRECOMPILED_OPTION) PRECOMPILED_CXX= ! ELSE PRECOMPILED= PRECOMPILED_CXX=$(PRECOMPILED_OPTION) ! ENDIF PRECOMPILED_TARGET=$(PRECOMPILED_TARGET) ! IF "$(PRECOMPILED_TARGET)" != "" HEADERFILE=/Fp$(PRECOMPILED_TARGET) ! ENDIF ! IF "$(PRECOMPILED_OBJ)" != "" HEADEROBJNAME=$(PRECOMPILED_OBJ) HEADEROBJ=/Fo$(HEADEROBJNAME) ! ENDIF ! ENDIF !IF ("$(PRECOMPILED_CXX)" == "") && ("$(USECXX_FLAG)" == "") PRECOMPILED_FLAG=/Tc !ELSE PRECOMPILED_FLAG=/Tp !ENDIF !IF "$(NTNOPCH)" != "" PRECOMPILED= PRECOMPILED_CXX= !ENDIF # # Set linker options # # # Merge _PAGE with PAGE, _TEXT with .text, and make sure # INIT sections are discardable # LINK_LIB_IGNORE_FLAG=-IGNORE:4001,4037,4039,4065,4070,4078,4087,4089 LINKER_FLAGS = $(LINKER_FLAGS) \ -MERGE:_PAGE=PAGE \ -MERGE:_TEXT=.text \ -SECTION:INIT,d \ -OPT:REF \ -RELEASE \ -INCREMENTAL:NO \ -FULLBUILD \ -FORCE:MULTIPLE \ -NODEFAULTLIB \ $(LINK_LIB_IGNORE_FLAG) LINKER_MERGE_RDATA=-MERGE:.rdata=.text LINKER_OPTIDATA=-optidata !if "$(USE_PDB)" == "" LINKER_FLAGS = $(LINKER_FLAGS) -PDB:NONE !elseif ("$(PDB_ROOT)" != "") && ("$(CAIRO_PRODUCT)" == "") LINKER_FLAGS = $(LINKER_FLAGS) -PDB:$(PDB_ROOT)\$(TARGETEXT)^\ PDB_ROOTUM = -PDB:$(PDB_ROOT)\$(UMAPPLEXT:.=)^\ !elseif ("$(CAIROPDB_ROOT)" != "") && ("$(CAIRO_PRODUCT)" != "") LINKER_FLAGS = $(LINKER_FLAGS) -PDB:$(CAIROPDB_ROOT)\$(TARGETEXT)^\ PDB_ROOTUM = -PDB:$(CAIROPDB_ROOT)\$(UMAPPLEXT:.=)^\ !endif !IF "$(NTDEBUG)" == "ntsd" || "$(NTDEBUG)" == "ntsdnodbg" ! IF "$(PERFFLAGS)" != "" LINKER_DBG_SECTION=-debug:mapped,FULL ! ELSE LINKER_DBG_SECTION=-debug:notmapped,FULL ! ENDIF # PERFFLAGS != NULL !ELSE ! IF "$(NTDEBUG)" == "retail" LINKER_DBG_SECTION=-debug:NONE ! ELSE ! IF "$(PERFFLAGS)" != "" LINKER_DBG_SECTION=-debug:mapped,MINIMAL ! ELSE LINKER_DBG_SECTION=-debug:notmapped,MINIMAL ! ENDIF # PERFFLAGS != NULL ! ENDIF # NTDEBUG == retail !ENDIF # NTDEBUG == ntsd !IF "$(NTLEANANDMEAN)" == "leanandmean" ! IF "$(NTDEBUGTYPE)" == "coff" || \ "$(NTTEST)"=="ntoskrnl" || \ "$(NTTEST)"=="ntkrnlmp" || \ "$(TARGETTYPE)"=="DRIVER" || \ "$(TARGETTYPE)"=="MINIPORT" || \ "$(TARGETTYPE)"=="EXPORT_DRIVER" || \ "$(TARGETTYPE)"=="HAL" LINKER_DBG_SECTION=-debug:notmapped,minimal ! ELSE LINKER_DBG_SECTION=-debug:none ! ENDIF # NTDEBUGTYPE != coff || TARGETTYPE !ENDIF # NTLEANANDMEAN == leanandmean LINK_OS_VERSIONS = -version:3.51 -osversion:3.51 LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) $(LINKER_DBG_TYPE) $(LINK_OS_VERSIONS) LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) $(LINK_LIB_IGNORE_FLAG) LIBRARIAN=lib -out:$@ $(LIBRARIAN_FLAGS) $(LINKER_DBG_TYPE) -machine:$(TARGET_DIRECTORY) LINKER=link -out:$@ -machine:$(TARGET_DIRECTORY) !IFDEF EXEPROFILEINPUT EXEORDER=-order:@$(@B).prf !ENDIF !IFNDEF DRIVER_ALIGNMENT DRIVER_ALIGNMENT=0x20 !ENDIF !ifndef HAL_ALIGNMENT HAL_ALIGNMENT=0x20 !endif !ifndef KERNEL_ALIGNMENT KERNEL_ALIGNMENT=0x40 !endif # # Standard inference rules for C files that produce object files. # .SUFFIXES: .cxx .cpp .c .f .rc .s .asm .obj .exe .res .p .tdl .odl # # Processor specific control and options. # !include $(TARGET_DIRECTORY)mk.inc LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_MERGE_RDATA) # # Clear the suffixes list so we can ensure only pass zero stuff will be built # !IFDEF PASS0ONLY .SUFFIXES: !ENDIF # # If NTDBGFILES is defined then use binplace to split the symbols. # Define BINPLACE flags as needed if separate .DBG file requested. # !IFDEF NTDBGFILES BINPLACE_FLAGS=-s $(_NTTREE)\Symbols $(BINPLACE_FLAGS) !ENDIF !IFDEF _NTTREE ! IFDEF _WIN95TREE ! IFDEF NTDBGFILES BINPLACE_FLAGS95=$(BINPLACE_FLAGS) -s $(_WIN95TREE)\Symbols ! ENDIF BINPLACE_CMD=binplace -R $(_WIN95TREE) $(BINPLACE_FLAGS95) $@\ & binplace -R $(_NTTREE) $(BINPLACE_FLAGS) $@ ! ELSE BINPLACE_CMD=binplace -R $(_NTTREE) $(BINPLACE_FLAGS) $@ ! ENDIF !ELSE BINPLACE_CMD= !ENDIF !ifdef NTDUMPAMAP MAPDUMP_CMD = link -dump -map $@ | sort /R /+62 > $(_NTDUMPAMAP)\$(@B).srt !else MAPDUMP_CMD = !endif # # Define this macro so including make files can supply a yes prompt # as appropriate. Put the "yes." file in a visible place for OEM's # so they can make too. # YESRESP=$(BASEDIR)\PUBLIC\OAK\INC\yes. !IFNDEF NOPASS0 # # Pass Zero Inference Rules: IDL files (MIDL) and MC files # .SUFFIXES: .idl .mc !IF $(386) PASS0_OBJECTS=$(PASS0_386_OBJECTS) !ELSEIF $(MIPS) PASS0_OBJECTS=$(PASS0_MIPS_OBJECTS) !ELSEIF $(ALPHA) PASS0_OBJECTS=$(PASS0_ALPHA_OBJECTS) !ELSEIF $(PPC) PASS0_OBJECTS=$(PASS0_PPC_OBJECTS) !ENDIF !ENDIF # IFNDEF NOPASS0 MIDL = midl MKTYPLIB = mktyplib !IFDEF USE_OLE_MC MC = mc -o !ELSE MC = mc !ENDIF !IF "$(IDL_TYPE)" == "ole" || "$(IDL_TYPE)" == "" IDL_TYPE=OLE !ELSEIF "$(IDL_TYPE)" == "rpc" IDL_TYPE=RPC !ENDIF !IFNDEF PASS0_HEADERDIR PASS0_HEADERDIR=$(TARGETPATH) !ENDIF !IFNDEF MIDL_OPTIMIZATION MIDL_OPTIMIZATION=-Oi1 !ENDIF !IF "$(IDL_TYPE)" == "OLE" !IF DEFINED(PASS0_CLIENTDIR) || DEFINED(PASS0_SERVERDIR) !ERROR PASS0_CLIENTDIR and PASS0_SERVERDIR can only be used with IDL_TYPE=RPC! !ENDIF !IFNDEF PASS0_SOURCEDIR PASS0_SOURCEDIR=$(TARGETPATH) !ENDIF !IFNDEF MIDL_UUIDDIR MIDL_UUIDDIR=$(PASS0_SOURCEDIR) !ENDIF !IFNDEF NO_PASS0_RULES .idl{$(PASS0_HEADERDIR)}.h: $(MIDL) \ -Zp8 \ $(INCPATH0) \ -char unsigned \ -ms_ext -c_ext \ -proxy $(PASS0_SOURCEDIR)\$(<:.idl=_p.c) \ -dlldata $(PASS0_SOURCEDIR)\dlldata.c \ -iid $(MIDL_UUIDDIR)\$(<:.idl=_i.c) \ -header $(PASS0_HEADERDIR)\$(<:.idl=.h) \ -cpp_cmd $(TARGET_CPP) \ $(C_DEFINES) \ $(MIDL_FLAGS) \ $(MIDL_OPTIMIZATION) \ $< !ENDIF !ELSEIF "$(IDL_TYPE)" == "RPC" !IF DEFINED(PASS0_SOURCEDIR) || DEFINED(MIDL_UUIDDR) !ERROR PASS0_SOURCEDIR and MIDL_UUIDDIR can only be used with IDL_TYPE=OLE! !ENDIF !IFNDEF PASS0_CLIENTDIR PASS0_CLIENTDIR=$(TARGETPATH) !ENDIF !IFNDEF PASS0_SERVERDIR PASS0_SERVERDIR=$(PASS0_CLIENTDIR) !ENDIF !IFNDEF NO_PASS0_RULES .idl{$(PASS0_HEADERDIR)}.h: $(MIDL) \ -Zp8 \ $(INCPATH0) \ -char unsigned \ -ms_ext -c_ext \ -cstub $(PASS0_CLIENTDIR)\$(<:.idl=_c.c) \ -sstub $(PASS0_SERVERDIR)\$(<:.idl=_s.c) \ -cpp_cmd $(TARGET_CPP) \ $(C_DEFINES) \ $(MIDL_FLAGS) \ $(MIDL_OPTIMIZATION) \ $< !ENDIF !ELSE !ERROR Invalid IDL_TYPE value. Supported values: OLE and RPC. !ENDIF # IDL_TYPE !IFNDEF NO_PASS0_RULES !IFDEF PASS0_SOURCEDIR MC_SOURCEDIR=$(PASS0_SOURCEDIR) !ELSE MC_SOURCEDIR=$(PASS0_CLIENTDIR) !ENDIF .mc{$(PASS0_HEADERDIR)}.h: $(MC) -h $(PASS0_HEADERDIR) -r $(MC_SOURCEDIR) $(MC_FLAGS) $< !IF "$(TARGET_CPP)" == "claxp" MKTYPLIB_CPP = cl !ELSE MKTYPLIB_CPP = $(TARGET_CPP) !ENDIF .odl{obj\$(TARGET_DIRECTORY)\}.tlb: $(MKTYPLIB) \ $(INCPATH0) \ /tlb obj\$(TARGET_DIRECTORY)\$(<:.tdl=.tlb) \ -cpp_cmd $(MKTYPLIB_CPP) \ $(MKTYPLIB_FLAGS) \ $< $(BINPLACE_CMD) .tdl{obj\$(TARGET_DIRECTORY)\}.tlb: $(MKTYPLIB) \ $(INCPATH0) \ /tlb obj\$(TARGET_DIRECTORY)\$(<:.tdl=.tlb) \ -cpp_cmd $(MKTYPLIB_CPP) \ $(MKTYPLIB_FLAGS) \ $< $(BINPLACE_CMD) !ENDIF # # Default language ID to US English (0x0409) # !IFDEF RCCODEPAGE RCOPTIONS=$(RCOPTIONS) -c $(RCCODEPAGE) !ENDIF RC_COMPILER=rc -l 409 $(RCOPTIONS) {..\}.rc{obj\$(TARGET_DIRECTORY)\}.res: $(RC_COMPILER) -r -fo $(@R).tmp $(CDEFINES) -x $(INCPATH0) $< @cvtres -$(TARGET_DIRECTORY) $(@R).tmp -r -o $@ !IF "$(NTKEEPRESOURCETMPFILES)" == "" @-erase $(@R).tmp !ENDIF {}.rc{obj\$(TARGET_DIRECTORY)\}.res: $(RC_COMPILER) -r -fo $(@R).tmp $(CDEFINES) -x $(INCPATH0) $< @cvtres -$(TARGET_DIRECTORY) $(@R).tmp -r -o $@ !IF "$(NTKEEPRESOURCETMPFILES)" == "" @-erase $(@R).tmp !ENDIF !IFNDEF NO_C_RULES ECHO_RSP = obj\$(TARGET_DIRECTORY)\echo.msg CL_RSP = obj\$(TARGET_DIRECTORY)\cl.rsp CLCOD_RSP = obj\$(TARGET_DIRECTORY)\clcod.rsp LINK_RSP = obj\$(TARGET_DIRECTORY)\lnk.rsp {..\}.cxx{obj\$(TARGET_DIRECTORY)\}.obj: @type <<$(ECHO_RSP) $(ECHO_MSG) < $@ $(CXX_COMPILER_FLAGS: = ) < $@ $(CXX_COMPILER_FLAGS: = ) < $@ $(CXX_COMPILER_FLAGS: = ) < $@ $(CXX_COMPILER_FLAGS: = ) < $@ $(C_COMPILER_FLAGS: = ) < $@ $(C_COMPILER_FLAGS: = ) < $@ $(C_COMPILER_FLAGS: = ) < $@ $(C_COMPILER_FLAGS: = ) < $@ $(CPPXX: = ) < $@ $(CPPXX: = ) < $@ $(CPPXX: = ) < $@ $(CPPXX: = ) <nul 2>&1 @echo obj\_objects.mac was rebuilt, please reinvoke NMAKE @md \ >nul 2>nul loc: @-loc *.h $(SOURCES) print: @-ppr *.h $(SOURCES) !IFDEF NTTARGETFILES !INCLUDE .\makefile.inc !ELSE !IFDEF NTTARGETFILE0 !INCLUDE .\makefile.inc !ELSE !IFDEF NTTARGETFILE1 !INCLUDE .\makefile.inc !ENDIF !ENDIF !ENDIF !IF "$(PRECOMPILED_INCLUDE)" != "" $(PRECOMPILED_TARGET) $(HEADEROBJNAME): $(PRECOMPILED_INCLUDE) @type << $(ECHO_PRECOMPILED_MSG) <nul 2>nul -$(LIBRARIAN) @<< $(HEADEROBJNAME: = ) $(**: = ) <