# Copyright 2000, International Business Machines Corporation and others. # All Rights Reserved. # # This software has been released under the terms of the IBM Public # License. For details, see the LICENSE file in the top-level source # directory or online at http://www.openafs.org/dl/license10.html # Common nmake file to be included in each NTMakfile. # # Required definitions: # AFSDEV_BUILDTYPE = [ CHECKED | FREE ] # # Optional definitions: # AFSDEV_WARNLEVEL = [0 | 1 | 2 | 3 | 4] (default is 3) # AFSDEV_AUXCDEFINES = (default is null) # AFSDEV_AUXRCFLAGS = (default is null) # AFSDEV_AUXMIDLFLAGS = auxiliary midl flags # AFSDEV_TEXTMODE = (default is null) # DEBUG_VERBOSE = optional debug statements for testing # AFS_OBJDIR - Location of object directory, either absolute or relative # AFSROOT - ROOT Directory so that $(AFSROOT)\scr is location of source # ############################################################################ # Optional compliation flags # NO_CRTDBG - used to disable some builds for CFTDBG allocate mapping # _CRTDBG_MAP_ALLOC = (default is null) # VADUMP - define VADUMP=1 if you are going to use the vadump utility and you are using V6.0 # ####### Special optional defines !IFNDEF NO_CRTDBG #don't set _CRTDBG_MAP_ALLOC flag for some module compliations #_CRTDBG_MAP_ALLOC=1 !ENDIF ####### #sanity checks !IF ("$(CPU)" == "x86") CPU=i386 !ENDIF !IF ("$(CPU)" != "i386") !ERROR Platform SDK not configured for i386 !ENDIF !IF EXISTS("TOOLS.INI") !MESSAGE ************CAUTION TOOLS.INI IN EFFECT********** !ENDIF !IF ("$(AFSROOT)"=="") !ERROR AFSROOT is not set !ENDIF !IF (DEFINED(PROFILE) || DEFINED(TUNE)) AFSDEV_BUILDTYPE = NONE !ELSE !IF ("$(AFSDEV_BUILDTYPE)" != "CHECKED" && "$(AFSDEV_BUILDTYPE)" != "FREE") !ERROR Must define AFSDEV_BUILDTYPE to be CHECKED or FREE. !ENDIF !ENDIF !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") !UNDEF _CRTDBG_MAP_ALLOC !ENDIF # Limit default include and library directories to those specified for build. !IFNDEF AFSDEV_INCLUDE !ERROR Must define AFSDEV_INCLUDE to be the default include directories. !ENDIF !IF ((!DEFINED(INCLUDE)) && ([set INCLUDE=$(AFSDEV_INCLUDE)] != 0)) # If env. var. INCLUDE not defined then macro assignment won't set it. !ERROR Failed setting environment variable INCLUDE. !ENDIF INCLUDE = $(AFSDEV_INCLUDE) !IFNDEF AFSDEV_LIB !ERROR Must define AFSDEV_LIB to be the default library directories. !ENDIF !IF ((!DEFINED(LIB)) && ([set LIB=$(AFSDEV_LIB)] != 0)) # If env. var. LIB not defined then macro assignment won't set it. !ERROR Failed setting environment variable LIB. !ENDIF LIB = $(AFSDEV_LIB) #define used in WinNT/2000 installation and program version display AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=5 AFSPRODUCT_VER_PATCH=6200 AFSPRODUCT_VER_BUILD=0 AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH) AFSPRODUCT_FILE_VERSION=$(AFSPRODUCT_VER_MAJOR),$(AFSPRODUCT_VER_MINOR),$(AFSPRODUCT_VER_PATCH),$(AFSPRODUCT_VER_BUILD) # Set CELLNAME_DEFAULT to "your cell name" CELLNAME_DEFAULT=openafs.org CELLSERVDB_INSTALL=CellServDB.GrandCentral CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB TARGETOS = WINNT # Define defaults folder locations DEST=dest SRC=src OBJ=obj !IF ("$(AFS_OBJDIR)"=="") ######### AFS_OBJDIR is NOT used use default locations ! IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED") DESTDIR=$(AFSROOT)\$(DEST)\$(SYS_NAME)\checked OJT=$(AFSROOT)\$(OBJ)\$(SYS_NAME)\checked ! ELSE DESTDIR=$(AFSROOT)\$(DEST)\$(SYS_NAME)\free OJT=$(AFSROOT)\$(OBJ)\$(SYS_NAME)\free ! ENDIF UTIL_CR = $(DESTDIR)\bin\util_cr.exe !ELSE ######### AFS_OBJDIR is defined, use specific locations for obj and dest # there is a special case for config because util_cr is not defined yet! ! IF (EXIST($(AFSROOT)\$(AFS_OBJDIR))) # AFS_OBJDIR is relative path ! IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED") DESTDIR=$(AFSROOT)\$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\checked OJT=$(AFSROOT)\$(AFS_OBJDIR)\$(SYS_NAME)\checked\config ! ELSE OJT=$(AFSROOT)\$(AFS_OBJDIR)\$(SYS_NAME)\free\config DESTDIR=$(AFSROOT)\$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\free ! ENDIF ! ELSE ! IF (EXIST($(AFS_OBJDIR))) # AFS_OBJDIR is full path ! IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED") DESTDIR=$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\checked OJT=$(AFS_OBJDIR)\$(SYS_NAME)\checked\config ! ELSE DESTDIR=$(AFS_OBJDIR)\$(DEST)\$(SYS_NAME)\free OJT=$(AFS_OBJDIR)\$(SYS_NAME)\free\config ! ENDIF ! ELSE !ERROR Can't find location of DEST directory! ! ENDIF ! ENDIF UTIL_CR = $(DESTDIR)\bin\util_cr.exe ! IF ("$(MAKEDIR:\config=)"=="$(MAKEDIR)") # we are NOT doing a config make, use util_cr to generate object directory ! IF ( !EXIST($(UTIL_CR)) || (!EXIST($(TMP)\home) && !EXIST($(TEMP)\home)) || (([$(UTIL_CR) _dir "!$(AFSDEV_BUILDTYPE)!src!$(AFS_OBJDIR)!"])!=0)) !ERROR Can't produce object paths, util_cr not working , TMP or TEMP environment variables not defined ! ENDIF ! IF EXIST($(TMP)\home) !INCLUDE $(TMP)\home ! ELSE !INCLUDE $(TEMP)\home ! ENDIF ! ENDIF !ENDIF #AFS_OBJDIR !IF ("$(RELDIR)"=="") OUT=$(OJT) !ELSE OUT=$(OJT)\$(RELDIR) !ENDIF !MESSAGE Directory assignments: !MESSAGE OJT=[$(OJT)] !MESSAGE OUT=[$(OUT)] !MESSAGE DESTDIR=[$(DESTDIR)] # Definitions provided here are based on WIN32.MAK, a common nmake # file included with the MS SDK and MS VC distributions. # WIN32.MAK, and this nmake file, are targeted to the MSVC compiler; # port this nmake file if additional compiler support is required. # !IF ("$(AFSVER_CL)"=="1300") # afslflags = $(afslflags) /DEBUG # !ENDIF !IF ("$(APPVER)" == "") APPVER=5.0 !ENDIF !INCLUDE # Extend and/or supplement definitions in WIN32.MAK. # Command macros. !IF !DEFINED(COPY) COPY = -copy !ENDIF !IF !DEFINED(DEL) DEL = -del !ENDIF !IF !DEFINED(MKDIR) MKDIR = -md !ENDIF !IF !DEFINED(REN) REN = ren !ENDIF !IF !DEFINED(ECHO) ECHO = echo !ENDIF !IF !DEFINED(CD) CD = cd !ENDIF !IF !DEFINED(MC) MC = mc -vcsU !ENDIF !IF !DEFINED(MAKECMD) MAKECMD = nmake.exe !ENDIF !IF !DEFINED(MIDL) MIDL = midl !ENDIF COMPILE_ET = $(DESTDIR)\bin\compile_et RXGEN = $(DESTDIR)\bin\rxgen # Common clean target. clean:: $(DEL) /q $(OUT)\*.obj $(OUT)\*.lib $(OUT)\*.dll $(OUT)\*.exe $(OUT)\*.pdb $(DEL) /q $(OUT)\*_component_version_number.* *_component_version_number.* # Common lang target. lang:: #################### Compile optional build flags set ########### afscdefs =\ -I. \ -I$(DESTDIR)\include \ -I$(DESTDIR)\include\afs \ -I$(DESTDIR)\include\rx \ -DWIN32_LEAN_AND_MEAN \ -DSTRICT \ -D_WIN32_IE=0x0500 \ -D_WIN32_WINNT=0x0500 \ -DWINVER=0x0500 \ -DREGISTER_POWER_NOTIFICATIONS \ -DAFS_AFSDB_ENV \ -DAFS_FREELANCE_CLIENT \ -DAFS_64BIT_ENV \ -DAFS_64BIT_CLIENT \ -DAFS_LARGEFILE_ENV \ $(AFSDEV_AUXCDEFINES) # Compiler switches (except include paths and preprocessor defines) # # Note: if conflicting options are specified, rightmost option applies. # # /Oy- specifies no frame-pointer omission # /GF pool strings and place in read-only memory # /Gd use cdecl calling convention by default # /Gy enable function-level linking # /GX enable C++ exceptions (assumes extern C funcs never throw exceptions) # /Os favor small (over fast) code; seems to avoid 64-bit bugs in VC compiler # /Wp64 enable 64-bit porting warnings (conflicts with warnings as errors # due to SDK mapping of Get/SetWindowLongPtr to Get/SetWindowLong afscflags =\ /Oy- \ /GF \ /Gd \ /Gy \ /Os !IF ("$(AFSVER_CL)"=="1400" || "$(AFSVER_CL)"=="1500") afscflags = $(afscflags) /EHsc /wd4996 !ELSE afscflags = $(afscflags) /GX !ENDIF !IF ("$(AFSVER_CL)"!="1200") afscflags = $(afscflags) /GT /GS #/Wp64 !IF ("$(AFSVER_CL)"!="1400" && "$(AFSVER_CL)"!="1500") afscflags = $(afscflags) /G7 !ENDIF !ENDIF !IF ("$(AFSIFS)" == "TRUE") afscdefs = $(afscdefs) -DAFSIFS !ENDIF !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") afscflags = $(afscflags) /Ox /Zi cdebug = $(cdebug:-Od=) # avoid annoying override warning (D4025) cvarsdll = $(cvarsdll:-MDd=-MD) NODEBUG=1 _VC_MANIFEST_BASENAME = __OAFW !ELSE # CHECKED BUILD cdebug = $(cdebug:-Z7=-Zi) # avoid annoying override warning (D4025) !IF ("$(AFSVER_CL)"=="1200") afscdefs = $(afscdefs) -DDEBUG /GZ !ELSE afscdefs = $(afscdefs) -DDEBUG /RTCs /RTCu !ENDIF !IFDEF _CRTDBG_MAP_ALLOC afscflags = $(afscflags) -D_DEBUG -D_CRTDBG_MAP_ALLOC !ENDIF !UNDEF NODEBUG _VC_MANIFEST_BASENAME = __OAFW.Debug !ENDIF !IF ("$(AFSVER_CL)"=="1500"|| "$(AFSVER_CL)"=="1400" || "$(AFSVER_CL)" == "1310") _VC_MANIFEST_EMBED_EXE= \ if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;1 _VC_MANIFEST_EMBED_DLL= \ if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;2 !ELSE _VC_MANIFEST_EMBED_EXE= _VC_MANIFEST_EMBED_DLL= !ENDIF !IF DEFINED(CODESIGN_DESC) && DEFINED(CODESIGN_URL) && DEFINED(CODESIGN_TIMESTAMP) CODESIGN_USERLAND= signtool.exe sign /a /d "$(CODESIGN_DESC)" /du $(CODESIGN_URL) \ /t $(CODESIGN_TIMESTAMP) /v $@ !ELSE CODESIGN_USERLAND= !ENDIF !IF DEFINED(SYMSTORE_EXE) && DEFINED(SYMSTORE_ROOT) !IF "$(SYMSTORE_COMMENT)" != "" SYMSTORE_COMMENT = |$(SYMSTORE_COMMENT) !ENDIF SYMSTORE_IMPORT= \ $(SYMSTORE_EXE) add /s $(SYMSTORE_ROOT) /t "OpenAFS for Windows" /v "$(AFSBLD_TYPE)-$(CPU)-$(AFSPRODUCT_VERSION)" /c "$(@F)$(SYMSTORE_COMMENT)" /f $*.* !ELSE SYMSTORE_IMPORT= !ENDIF # Set compiler warning level !IFNDEF AFSDEV_WARNLEVEL AFSDEV_WARNLEVEL = 3 !ELSE !IF ("$(AFSDEV_WARNLEVEL)" != "0" && \ "$(AFSDEV_WARNLEVEL)" != "1" && \ "$(AFSDEV_WARNLEVEL)" != "2" && \ "$(AFSDEV_WARNLEVEL)" != "3" && \ "$(AFSDEV_WARNLEVEL)" != "4") !ERROR Must define AFSDEV_WARNLEVEL to be one of 0 through 4. !ENDIF !ENDIF afscflags = $(afscflags) /W$(AFSDEV_WARNLEVEL) # C/C++ compilation macros C2OBJ = $(cc) /Fo$@ /Fd$*.pdb $(cflags) $(cdebug) $(cvarsdll) $(afscflags) $(afscdefs) /c CPP2OBJ = $(C2OBJ) # Inference rules for building and installing targets # Compile .c files, from current directory to defined by OUT .SUFFIXES: .c .rc .c{$(OUT)\}.obj: $(C2OBJ) $< .c.obj: $(C2OBJ) $< .cpp{$(OUT)\}.obj: $(CPP2OBJ) $< .rc{$(OUT)\}.res: $(RC) /fo$(OUT)\$(