Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

453 lines
8.8 KiB

#########################################################################
#
# M A C R O N O T E S
#
# -----------------------------------------------------------------------------
#
# CGO C compiler's G Option. This macro is appended to the -G
# flag.
#
# ENV_CFLAGS The additional CFLAGS.
#
# LANG Added by haituanv. LANG is defaulted to 'US' which builds the
# US version of nmake. The other choice is 'JAPAN' which is used
# in the Ikura project.
#
# MESSAGE_FILE Specifies the name of the text file which stores NMAKE's
# error messages. This macro depends on LANG
#
###############################################################################
####################
# #
# Error checks ... #
# #
####################
!ifndef INCLUDE
! error INCLUDE environment variable not defined
!endif
!ifndef LIB
! error LIB environment variable not defined
!endif
#
# LANGAPI directory
#
!ifndef LANGAPI
LANGAPI = \langapi
!endif
#
# Default TARGET
#
!ifndef TARGET
TARGET=nt
!endif
#
# Check for valid TARGET
#
!if "$(TARGET)" != "dos"
!if "$(TARGET)" != "nt"
!if "$(TARGET)" != "tnt"
!if "$(TARGET)" != "ntmips"
!error TARGET env var has bad value '$(TARGET)', use lower case 'dos/nt/tnt/ntmips'
!endif
!endif
!endif
!endif
#
# Set default VER
#
!ifdef RELEASE
VER=retail
!endif
!ifndef VER
VER=cvinfo
!endif
#
# Validate VER
#
!if "$(VER)" != "debug"
!if "$(VER)" != "retail"
!if "$(VER)" != "cvinfo"
!error VER env var has bad value '$(VER)', use lower case 'retail/debug/cvinfo'
!endif
!endif
!endif
####################
# #
# Macro Constants #
# #
####################
AS = masm
!if "$(TARGET)" == "dos"
DOS =
!endif
!if "$(TARGET)" == "nt"
FLAT =
NT =
!endif
!if "$(TARGET)" == "tnt"
FLAT =
TNT =
!endif
!if "$(TARGET)" == "ntmips"
FLAT =
NTMIPS =
NT =
!endif
!ifndef FLAT
MEMORY_MODEL = L
!else
MEMORY_MODEL =
!endif
!ifndef WARN
WARNING_LEVEL = 3
!else
WARNING_LEVEL = $(WARN)
!endif
STACKSIZE = 0x3000
INCLUDE_PATH = .
LOGO = -nologo
PCH = -YX -Fp$(OBJDIR)\nmake.pch
PDB = -Fd$(OBJDIR)\nmake.pdb
###########################################
# #
# Version and TARGET dependent macros ... #
# #
###########################################
# Notes on compile macros:
#
# FLAT - define for all 32-bit builds
# SELF_RECURSE - define if you want nmake to call doMake() recursively,
# instead of spawning another nmake on a recursive invocation.
# Defining this will enable the /V option.
#
#############################################################################
#
# Language default to 'US'
#
!if "$(LANG)" == ""
LANG = US
!endif
#
# Validate language
#
!if "$(LANG)" != "US"
!if "$(LANG)" != "JAPAN"
!error LANG must be defined as one of (US, JAPAN)
!endif
!endif
# message file
!if "$(LANG)" == "JAPAN"
MESSAGE_FILE = nmmsg.jp
!else if "$(LANG)" == "US"
MESSAGE_FILE = nmmsg.us
!else
!error There is no message text file for LANG=$(LANG)
!endif
!ifdef FLAT
NOSUPER =
!endif
!ifdef DOS
CLM = -DDOS
! ifndef NOSUPER
SUPER =
! endif
! ifdef SUPER
CLM = $(CLM) -DUSE_SUPER
! endif
! ifdef DOSX16
CLM = $(CLM) -DUSE_DOSX16
! endif
LOPTS = /cp:0x01
!endif
!ifdef FLAT
CLM = -DFLAT -DNO_OPTION_Z
LOPTS =
!endif
!ifdef NO_OPTION_Z
CLM = $(CLM) -DNO_OPTION_Z
!endif
!if defined (TNT)
CLM = $(CLM) -DDOS
!endif
!if defined (TNT)
LOPTS =
!endif
!ifdef KANJI
CLM = $(CLM) -DKANJI
!endif
#
# DBC=0 will disable _MBCS entension
#
!if "$(DBC)" != "0"
!message --- Building MBCS version
CLM=$(CLM) -D_MBCS
!else
!message --- Building SBCS version
!endif
!ifdef NT
ECHO =
LOPTS =
!endif
!ifdef NTMIPS
INCLUDE=$(TOOLS_SL)\nt\mips\include
LIB = $(TOOLS_SL)\nt\mips\lib
!endif
!if "$(VER)" != "debug" && "$(VER)" != "cvinfo"
CGO = $(CGO)s
CLM = -DNDEBUG $(CLM)
!endif
!if "$(VER)" == "debug"
KEEP = keep
!endif
!if "$(VER)" == "retail"
LOPTS = $(LOPTS)
!else
! ifndef NT
LOPTS = /CO $(LOPTS)
! endif
!endif
!if defined (DOS) && defined(DOSX16)
LINKER = link530
LOPTS = /DOSEXT $(LOPTS)
!else ifdef NTMIPS
CC = mcl
!else if defined( NT )
LINKER = link
CC = cl
! else
! ifdef TNT
LINKER = link
CC = cl
! else
LINKER = link
! endif
!endif
! ifdef NT
LOPTS =
! else
! ifdef TNT
LOPTS =
! else
LOPTS = /map /noe $(LOPTS)
! endif
! endif
!if "$(VER)" == "debug" || "$(VER)" == "cvinfo"
OPTIMZ = -Od
!else # Retail version
! ifdef DOS
OPTIMZ = -O1
! else if defined(NT)
OPTIMZ = -O2
! else
OPTIMZ = -Ox
! endif
!endif
##############################
# #
# Macro Dependent macros ... #
# #
##############################
!ifdef NTMIPS
CODE_GEN_OPTS = -Zi
!else if !defined(FLAT)
CODE_GEN_OPTS = -Gc$(CGO) -Zi
!else
! if "$(VER)" == "debug" || "$(VER)" == "cvinfo"
CODE_GEN_OPTS = -Zi
! else
! ifdef TNT
CODE_GEN_OPTS = -G$(CGO) -Zi
! else
CODE_GEN_OPTS = -G$(CGO)
! endif
! endif
!endif
COM_LINE_MACROS = $(CLM)
!ifdef BROWSE
BROWSE_OPTION = -FR$(OBJDIR)\ #ends in a '\'
!endif
COMPILER_FLAGS = $(PCH) $(PDB) -I$(INCLUDE_PATH) -I$(LANGAPI)\include \
-W$(WARNING_LEVEL) $(LOGO) $(BROWSE_OPTION)
!if !defined(FLAT)
COMPILER_FLAGS = $(COMPILER_FLAGS) -A$(MEMORY_MODEL) $(TEXT_SEGMENT)
!endif
AFLAGS = -Mx -Zi $(MFLAGS)
CFLAGS = $(COMPILER_FLAGS) $(COM_LINE_MACROS) $(OPTIMZ) \
$(CODE_GEN_OPTS) $(DEBUG_OPTS) $(ENV_CFLAGS)
LFLAGS = $(LOPTS) /nod /noi /stack:$(STACKSIZE)
!if defined( NTMIPS )
CFLAGS = $(CFLAGS) -DFLAT -DNT -Gfy -Gt0 -MD
!else if defined( NT )
CFLAGS = $(CFLAGS) -DFLAT -DNT -Gfyz -MD
!endif
#############################
# #
# Creating Object directory #
# #
#############################
OBJDIR = $(LANG)\$(TARGET)\$(VER)
!if [cd $(LANG)]
! if [md $(LANG)]
! error Failed creating $(LANG) directory!
! elseif [cd $(LANG)]
! error Failed cd to $(LANG) directory!
! endif
!endif
!if [cd $(TARGET)]
! if [md $(TARGET)]
! error Failed creating $(TARGET) directory!
! elseif [cd $(TARGET)]
! error Failed cd to $(TARGET) directory!
! elseif [md $(VER)]
! error Failed creating $(TARGET)\$(VER) directory!
! elseif [cd $(VER)]
! if [md $(VER)]
! error Failed creating $(TARGET)\$(VER) directory!
! endif
! endif
!else if [cd $(VER)]
! if [md $(VER)]
! error Failed creating $(TARGET)\$(VER) directory!
! else if [cd $(VER)]
! if [md $(VER)]
! error Failed creating $(TARGET)\$(VER) directory!
! endif
! endif
!else if [cd ..\$(VER)]
! if [md ..\$(VER)]
! error Failed creating $(TARGET)\$(VER) directory!
! endif
!endif
!if [cd $(MAKEDIR)]
! error Failed cd to $(MAKEDIR) directory!
!endif
##############################
# #
# Setting up inference rules #
# #
##############################
# Clear the Suffix list
.SUFFIXES:
# Set the list
.SUFFIXES: .exe .obj .deb .c .asm .h .txt
# The inference rules used are
.c{$(OBJDIR)}.obj:
$(CC) $(CFLAGS) -c -Fo$(OBJDIR)\ $<
.asm{$(OBJDIR)}.obj:
@echo $<
$(AS) $(AFLAGS) $(<B), $@; >nul
.asm.obj:
@echo $<
$(AS) $(AFLAGS) $*; >nul
###############################
# #
# Echoing useful information #
# #
###############################
!ifdef INFO
!message LANG = "$(LANG)"
!message TARGET = "$(TARGET)"
!message VER = "$(VER)"
!message CC = "$(CC)"
!message LINKER = "$(LINKER)"
!message OBJDIR = "$(OBJDIR)"
!message CFLAGS = "$(CFLAGS)"
!message AFLAGS = "$(AFLAGS)"
!message LFLAGS = "$(LFLAGS)"
!message
!message PATH = "$(PATH)"
!message INCLUDE = "$(INCLUDE)"
!message LIB = "$(LIB)"
!message
!endif
#################################
# #
# Providing help about building #
# #
#################################
!if "$(HELP)" == "build"
help:
@type <<
Define TARGET and VER environment variables to tell NMAKE what version to build.
The possible values of TARGET are 'dos' and the possible values for VER
are 'retail', 'debug' and 'cvinfo'. The object files are always built with /Zi
option. This is done to make it just a matter of linking when debugging. The
'retail' and 'cvinfo' versions differ in only that codeview information has
been added. For the 'retail' version the asserts are removed.
To see information about what is being built define INFO.
You can define LOGO when running under OS/2 to see the compiler logo and
define ECHO to see the command actually passed to the compiler. The switches
passed to the compiler can be changed from the command line by defining the
corresponding switches used in def.mak.
<<
!endif