security/nss/coreconf/WIN32.mk

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 #
     2 # This Source Code Form is subject to the terms of the Mozilla Public
     3 # License, v. 2.0. If a copy of the MPL was not distributed with this
     4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     6 #
     7 # Configuration common to all versions of Windows NT
     8 # and Windows 95
     9 #
    11 DEFAULT_COMPILER = cl
    13 ifdef NS_USE_GCC
    14 	CC           = gcc
    15 	CCC          = g++
    16 	LINK         = ld
    17 	AR           = ar
    18 	AR          += cr $@
    19 	RANLIB       = ranlib
    20 	BSDECHO      = echo
    21 	RC           = windres.exe -O coff --use-temp-file
    22 	LINK_DLL      = $(CC) $(OS_DLLFLAGS) $(DLLFLAGS)
    23 else
    24 	CC           = cl
    25 	CCC          = cl
    26 	LINK         = link
    27 	AR           = lib
    28 	AR          += -NOLOGO -OUT:$@
    29 	RANLIB       = echo
    30 	BSDECHO      = echo
    31 	RC           = rc.exe
    32 	MT           = mt.exe
    33 	# Determine compiler version
    34 	CC_VERSION  := $(shell $(CC) 2>&1 | sed -ne \
    35 		's|.* \([0-9]\+\.[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?\).*|\1|p')
    36 	# Change the dots to spaces.
    37 	_CC_VERSION_WORDS := $(subst ., ,$(CC_VERSION))
    38 	_CC_VMAJOR  := $(word 1,$(_CC_VERSION_WORDS))
    39 	_CC_VMINOR  := $(word 2,$(_CC_VERSION_WORDS))
    40 	_CC_RELEASE := $(word 3,$(_CC_VERSION_WORDS))
    41 	_CC_BUILD   := $(word 4,$(_CC_VERSION_WORDS))
    42 	_MSC_VER     = $(_CC_VMAJOR)$(_CC_VMINOR)
    43 	_MSC_VER_6   = 1200
    44 	# VC10 (2010) is 16.00.30319.01, VC10SP1 is 16.00.40219.01.
    45 	_MSC_VER_GE_10SP1 := $(shell expr $(_MSC_VER) \> 1600 \| \
    46 		$(_MSC_VER) = 1600 \& $(_CC_RELEASE) \>= 40219)
    47 	# VC12 (2013).
    48 	_MSC_VER_GE_12 := $(shell expr $(_MSC_VER) \>= 1800)
    49 	ifeq ($(_CC_VMAJOR),14)
    50 	    # -DYNAMICBASE is only supported on VC8SP1 or newer,
    51 	    # so be very specific here!
    52 	    # VC8 is 14.00.50727.42, VC8SP1 is 14.00.50727.762
    53 	    ifeq ($(_CC_RELEASE).$(_CC_BUILD),50727.42)
    54 		USE_DYNAMICBASE =
    55 	    else
    56 	    ifeq ($(_CC_RELEASE).$(_CC_BUILD),50727.762)
    57 		USE_DYNAMICBASE = 1
    58 	    else
    59 		_LOSER := $(error Unknown compiler version $(CC_VERSION))
    60 	    endif
    61 	    endif
    62 	endif
    63 	# if $(_CC_VMAJOR) >= 15
    64 	# NOTE: 'sort' sorts the words in lexical order, so this test works
    65 	# only if $(_CC_VMAJOR) is two digits.
    66 	ifeq ($(firstword $(sort $(_CC_VMAJOR) 15)),15)
    67 	    USE_DYNAMICBASE = 1
    68 	endif
    69 endif
    71 ifdef BUILD_TREE
    72 NSINSTALL_DIR  = $(BUILD_TREE)/nss
    73 else
    74 NSINSTALL_DIR  = $(CORE_DEPTH)/coreconf/nsinstall
    75 endif
    76 NSINSTALL      = nsinstall
    78 MKDEPEND_DIR    = $(CORE_DEPTH)/coreconf/mkdepend
    79 MKDEPEND        = $(MKDEPEND_DIR)/$(OBJDIR_NAME)/mkdepend.exe
    80 # Note: MKDEPENDENCIES __MUST__ be a relative pathname, not absolute.
    81 # If it is absolute, gmake will crash unless the named file exists.
    82 MKDEPENDENCIES  = $(OBJDIR_NAME)/depend.mk
    84 INSTALL      = $(NSINSTALL)
    85 MAKE_OBJDIR  = mkdir
    86 MAKE_OBJDIR += $(OBJDIR)
    87 GARBAGE     += $(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb
    88 XP_DEFINE   += -DXP_PC
    89 ifdef NS_USE_GCC
    90 LIB_SUFFIX   = a
    91 else
    92 LIB_SUFFIX   = lib
    93 endif
    94 DLL_SUFFIX   = dll
    96 ifdef NS_USE_GCC
    97     # The -mnop-fun-dllimport flag allows us to avoid a drawback of
    98     # the dllimport attribute that a pointer to a function marked as
    99     # dllimport cannot be used as as a constant address.
   100     OS_CFLAGS += -mwindows -mms-bitfields -mnop-fun-dllimport
   101     _GEN_IMPORT_LIB=-Wl,--out-implib,$(IMPORT_LIBRARY)
   102     DLLFLAGS  += -mwindows -o $@ -shared -Wl,--export-all-symbols $(if $(IMPORT_LIBRARY),$(_GEN_IMPORT_LIB))
   103     ifdef BUILD_OPT
   104 	ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
   105 		OPTIMIZER += -Os
   106 	else
   107 		OPTIMIZER += -O2
   108 	endif
   109 	DEFINES    += -UDEBUG -U_DEBUG -DNDEBUG
   110     else
   111 	OPTIMIZER  += -g
   112 	NULLSTRING :=
   113 	SPACE      := $(NULLSTRING) # end of the line
   114 	USERNAME   := $(subst $(SPACE),_,$(USERNAME))
   115 	USERNAME   := $(subst -,_,$(USERNAME))
   116 	DEFINES    += -DDEBUG -D_DEBUG -UNDEBUG -DDEBUG_$(USERNAME)
   117     endif
   118 else # !NS_USE_GCC
   119     OS_CFLAGS += -W3 -nologo -D_CRT_SECURE_NO_WARNINGS \
   120 		 -D_CRT_NONSTDC_NO_WARNINGS
   121     OS_DLLFLAGS += -nologo -DLL -SUBSYSTEM:WINDOWS
   122     ifeq ($(_MSC_VER),$(_MSC_VER_6))
   123     ifndef MOZ_DEBUG_SYMBOLS
   124 	OS_DLLFLAGS += -PDB:NONE
   125     endif
   126     endif
   127     ifdef USE_DYNAMICBASE
   128 	OS_DLLFLAGS += -DYNAMICBASE
   129     endif
   130     ifdef BUILD_OPT
   131 	OS_CFLAGS  += -MD
   132 	ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
   133 		OPTIMIZER += -O1
   134 	else
   135 		OPTIMIZER += -O2
   136 	endif
   137 	DEFINES    += -UDEBUG -U_DEBUG -DNDEBUG
   138 	DLLFLAGS   += -OUT:$@
   139 	ifdef MOZ_DEBUG_SYMBOLS
   140 		ifdef MOZ_DEBUG_FLAGS
   141 			OPTIMIZER += $(MOZ_DEBUG_FLAGS) -Fd$(OBJDIR)/
   142 		else
   143 			OPTIMIZER += -Zi -Fd$(OBJDIR)/
   144 		endif
   145 		DLLFLAGS += -DEBUG -OPT:REF
   146 		LDFLAGS += -DEBUG -OPT:REF
   147 	endif
   148     else
   149 	#
   150 	# Define USE_DEBUG_RTL if you want to use the debug runtime library
   151 	# (RTL) in the debug build
   152 	#
   153 	ifdef USE_DEBUG_RTL
   154 		OS_CFLAGS += -MDd -D_CRTDBG_MAP_ALLOC
   155 	else
   156 		OS_CFLAGS += -MD
   157 	endif
   158 	OPTIMIZER += -Zi -Fd$(OBJDIR)/ -Od
   159 	NULLSTRING :=
   160 	SPACE      := $(NULLSTRING) # end of the line
   161 	USERNAME   := $(subst $(SPACE),_,$(USERNAME))
   162 	USERNAME   := $(subst -,_,$(USERNAME))
   163 	DEFINES    += -DDEBUG -D_DEBUG -UNDEBUG -DDEBUG_$(USERNAME)
   164 	DLLFLAGS   += -DEBUG -OUT:$@
   165 	LDFLAGS    += -DEBUG 
   166 ifeq ($(_MSC_VER),$(_MSC_VER_6))
   167 ifndef MOZ_DEBUG_SYMBOLS
   168 	LDFLAGS    += -PDB:NONE 
   169 endif
   170 endif
   171 	# Purify requires /FIXED:NO when linking EXEs.
   172 	LDFLAGS    += /FIXED:NO
   173     endif
   174 ifneq ($(_MSC_VER),$(_MSC_VER_6))
   175     # Convert certain deadly warnings to errors (see list at end of file)
   176     OS_CFLAGS += -we4002 -we4003 -we4004 -we4006 -we4009 -we4013 \
   177      -we4015 -we4028 -we4033 -we4035 -we4045 -we4047 -we4053 -we4054 -we4063 \
   178      -we4064 -we4078 -we4087 -we4090 -we4098 -we4390 -we4551 -we4553 -we4715
   180     ifeq ($(_MSC_VER_GE_12),1)
   181 	OS_CFLAGS += -FS
   182     endif
   183 endif # !MSVC6
   184 endif # NS_USE_GCC
   186 ifdef USE_64
   187 DEFINES += -DWIN64
   188 else
   189 DEFINES += -DWIN32
   190 endif
   192 ifeq (,$(filter-out x386 x86_64,$(CPU_ARCH)))
   193 ifdef USE_64
   194 	DEFINES += -D_AMD64_
   195 else
   196 	DEFINES += -D_X86_
   197 endif
   198 endif
   199 ifeq ($(CPU_ARCH), ALPHA)
   200 	DEFINES += -D_ALPHA_=1
   201 endif
   203 ifdef MAPFILE
   204 ifndef NS_USE_GCC
   205 DLLFLAGS += -DEF:$(MAPFILE)
   206 endif
   207 endif
   208 # Change PROCESS to put the mapfile in the correct format for this platform
   209 PROCESS_MAP_FILE = cp $< $@
   212 #
   213 #  The following is NOT needed for the NSPR 2.0 library.
   214 #
   216 DEFINES += -D_WINDOWS
   218 # override default, which is ASFLAGS = CFLAGS
   219 ifdef NS_USE_GCC
   220 	AS	= $(CC)
   221 	ASFLAGS = $(INCLUDES)
   222 else
   223 ifdef USE_64
   224 	AS	= ml64.exe
   225 	ASFLAGS = -nologo -Cp -Sn -Zi $(INCLUDES)
   226 else
   227 	AS	= ml.exe
   228 	ASFLAGS = -nologo -Cp -Sn -Zi -coff $(INCLUDES)
   229 endif
   230 endif
   232 #
   233 # override the definitions of RELEASE_TREE found in tree.mk
   234 #
   235 ifndef RELEASE_TREE
   236     ifdef BUILD_SHIP
   237 	ifdef USE_SHIPS
   238 	    RELEASE_TREE = $(NTBUILD_SHIP)
   239 	else
   240 	    RELEASE_TREE = //redbuild/components
   241 	endif
   242     else
   243 	RELEASE_TREE = //redbuild/components
   244     endif
   245 endif
   247 #
   248 # override the definitions of IMPORT_LIB_PREFIX, LIB_PREFIX, and
   249 # DLL_PREFIX in prefix.mk
   250 #
   252 ifndef IMPORT_LIB_PREFIX
   253     ifdef NS_USE_GCC
   254 	IMPORT_LIB_PREFIX = lib
   255     else
   256 	IMPORT_LIB_PREFIX = $(NULL)
   257     endif
   258 endif
   260 ifndef LIB_PREFIX
   261     ifdef NS_USE_GCC
   262 	LIB_PREFIX = lib
   263     else
   264 	LIB_PREFIX = $(NULL)
   265     endif
   266 endif
   268 ifndef DLL_PREFIX
   269     DLL_PREFIX =  $(NULL)
   270 endif
   272 #
   273 # override the definitions of various _SUFFIX symbols in suffix.mk
   274 #
   276 #
   277 # Object suffixes
   278 #
   279 ifndef OBJ_SUFFIX
   280     ifdef NS_USE_GCC
   281 	OBJ_SUFFIX = .o
   282     else
   283 	OBJ_SUFFIX = .obj
   284     endif
   285 endif
   287 #
   288 # Assembler source suffixes
   289 #
   290 ifndef ASM_SUFFIX
   291     ifdef NS_USE_GCC
   292 	ASM_SUFFIX = .s
   293     else
   294 	ASM_SUFFIX = .asm
   295     endif
   296 endif
   298 #
   299 # Library suffixes
   300 #
   302 ifndef IMPORT_LIB_SUFFIX
   303     IMPORT_LIB_SUFFIX = .$(LIB_SUFFIX)
   304 endif
   306 ifndef DYNAMIC_LIB_SUFFIX_FOR_LINKING
   307     DYNAMIC_LIB_SUFFIX_FOR_LINKING = $(IMPORT_LIB_SUFFIX)
   308 endif
   310 #
   311 # Program suffixes
   312 #
   313 ifndef PROG_SUFFIX
   314     PROG_SUFFIX = .exe
   315 endif
   317 #
   318 # When the processor is NOT 386-based on Windows NT, override the
   319 # value of $(CPU_TAG).  For WinNT, 95, 16, not CE.
   320 #
   321 ifneq ($(CPU_ARCH),x386)
   322     CPU_TAG = _$(CPU_ARCH)
   323 endif
   325 #
   326 # override ruleset.mk, removing the "lib" prefix for library names, and
   327 # adding the "32" after the LIBRARY_VERSION.
   328 #
   329 ifdef LIBRARY_NAME
   330     SHARED_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)32$(JDK_DEBUG_SUFFIX).dll
   331     IMPORT_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)32$(JDK_DEBUG_SUFFIX).lib
   332 endif
   334 #
   335 # override the TARGETS defined in ruleset.mk, adding IMPORT_LIBRARY
   336 #
   337 ifndef TARGETS
   338     TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) $(PROGRAM)
   339 endif
   341 # list of MSVC warnings converted to errors above:
   342 # 4002: too many actual parameters for macro 'identifier'
   343 # 4003: not enough actual parameters for macro 'identifier'
   344 # 4004: incorrect construction after 'defined'
   345 # 4006: #undef expected an identifier
   346 # 4009: string too big; trailing characters truncated
   347 # 4015: 'identifier' : type of bit field must be integral
   348 # 4028: formal parameter different from declaration
   349 # 4033: 'function' must return a value
   350 # 4035: 'function' : no return value
   351 # 4045: 'identifier' : array bounds overflow
   352 # 4047: 'function' : 'type 1' differs in levels of indirection from 'type 2'
   353 # 4053: one void operand for '?:'
   354 # 4054: 'conversion' : from function pointer 'type1' to data pointer 'type2'
   355 # 4059: pascal string too big, length byte is length % 256
   356 # 4063: case 'identifier' is not a valid value for switch of enum 'identifier'
   357 # 4064: switch of incomplete enum 'identifier'
   358 # 4078: case constant 'value' too big for the type of the switch expression
   359 # 4087: 'function' : declared with 'void' parameter list
   360 # 4090: 'function' : different 'const' qualifiers
   361 # 4098: 'function' : void function returning a value
   362 # 4390: ';' : empty controlled statement found; is this the intent?
   363 # 4541: RTTI train wreck
   364 # 4715: not all control paths return a value
   365 # 4013: function undefined; assuming extern returning int
   366 # 4553: '==' : operator has no effect; did you intend '='?
   367 # 4551: function call missing argument list

mercurial