summaryrefslogtreecommitdiffstats
path: root/security/nss/coreconf/WIN32.mk
diff options
context:
space:
mode:
Diffstat (limited to 'security/nss/coreconf/WIN32.mk')
-rw-r--r--security/nss/coreconf/WIN32.mk368
1 files changed, 368 insertions, 0 deletions
diff --git a/security/nss/coreconf/WIN32.mk b/security/nss/coreconf/WIN32.mk
new file mode 100644
index 0000000000..f5db943cff
--- /dev/null
+++ b/security/nss/coreconf/WIN32.mk
@@ -0,0 +1,368 @@
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#
+# Configuration common to all versions of Windows NT
+# and Windows 95
+#
+
+DEFAULT_COMPILER = cl
+
+ifdef NS_USE_GCC
+ CC = gcc
+ CCC = g++
+ LD = ld
+ AR = ar
+ AR += cr $@
+ RANLIB = ranlib
+ BSDECHO = echo
+ RC = windres.exe -O coff --use-temp-file
+ LINK_DLL = $(CC) $(OS_DLLFLAGS) $(DLLFLAGS)
+else
+ CC = cl
+ CCC = cl
+ LD = link
+ LDFLAGS += -nologo
+ AR = lib
+ AR += -nologo -OUT:$@
+ RANLIB = echo
+ BSDECHO = echo
+ RC = rc.exe
+ MT = mt.exe
+ # Check for clang-cl
+ CLANG_CL := $(shell expr `$(CC) -? 2>&1 | grep -w clang | wc -l` \> 0)
+ # Determine compiler version
+ ifeq ($(CLANG_CL),1)
+ # clang-cl pretends to be MSVC 2012.
+ CC_VERSION := 17.00.00.00
+ else
+ CC_VERSION := $(shell $(CC) 2>&1 | sed -ne \
+ 's|.* \([0-9]\+\.[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?\).*|\1|p')
+ endif
+ # Change the dots to spaces.
+ _CC_VERSION_WORDS := $(subst ., ,$(CC_VERSION))
+ _CC_VMAJOR := $(word 1,$(_CC_VERSION_WORDS))
+ _CC_VMINOR := $(word 2,$(_CC_VERSION_WORDS))
+ _CC_RELEASE := $(word 3,$(_CC_VERSION_WORDS))
+ _CC_BUILD := $(word 4,$(_CC_VERSION_WORDS))
+ _MSC_VER = $(_CC_VMAJOR)$(_CC_VMINOR)
+ _MSC_VER_6 = 1200
+ # VC10 (2010) is 16.00.30319.01, VC10SP1 is 16.00.40219.01.
+ _MSC_VER_GE_10SP1 := $(shell expr $(_MSC_VER) \> 1600 \| \
+ $(_MSC_VER) = 1600 \& $(_CC_RELEASE) \>= 40219)
+ # VC11 (2012).
+ _MSC_VER_GE_11 := $(shell expr $(_MSC_VER) \>= 1700)
+ # VC12 (2013).
+ _MSC_VER_GE_12 := $(shell expr $(_MSC_VER) \>= 1800)
+ # VC14 (2015).
+ _MSC_VER_GE_14 := $(shell expr $(_MSC_VER) \>= 1900)
+ ifeq ($(_CC_VMAJOR),14)
+ # -DYNAMICBASE is only supported on VC8SP1 or newer,
+ # so be very specific here!
+ # VC8 is 14.00.50727.42, VC8SP1 is 14.00.50727.762
+ ifeq ($(_CC_RELEASE).$(_CC_BUILD),50727.42)
+ USE_DYNAMICBASE =
+ else
+ ifeq ($(_CC_RELEASE).$(_CC_BUILD),50727.762)
+ USE_DYNAMICBASE = 1
+ else
+ _LOSER := $(error Unknown compiler version $(CC_VERSION))
+ endif
+ endif
+ endif
+ # if $(_CC_VMAJOR) >= 15
+ # NOTE: 'sort' sorts the words in lexical order, so this test works
+ # only if $(_CC_VMAJOR) is two digits.
+ ifeq ($(firstword $(sort $(_CC_VMAJOR) 15)),15)
+ USE_DYNAMICBASE = 1
+ endif
+endif
+
+ifdef BUILD_TREE
+NSINSTALL_DIR = $(BUILD_TREE)/nss
+else
+NSINSTALL_DIR = $(CORE_DEPTH)/coreconf/nsinstall
+endif
+NSINSTALL = nsinstall
+
+INSTALL = $(NSINSTALL)
+GARBAGE += $(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb
+XP_DEFINE += -DXP_PC
+ifdef NS_USE_GCC
+LIB_SUFFIX = a
+else
+LIB_SUFFIX = lib
+endif
+DLL_SUFFIX = dll
+
+define MAKE_OBJDIR
+if test ! -d $(@D); then mkdir -p $(@D); fi
+endef
+
+ifdef NS_USE_GCC
+ OS_CFLAGS += -mwindows
+ _GEN_IMPORT_LIB=-Wl,--out-implib,$(IMPORT_LIBRARY)
+ DLLFLAGS += -mwindows -o $@ -shared -Wl,--export-all-symbols $(if $(IMPORT_LIBRARY),$(_GEN_IMPORT_LIB))
+ ifdef BUILD_OPT
+ ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER += -Os
+ else
+ OPTIMIZER += -O2
+ endif
+ DEFINES += -UDEBUG -DNDEBUG
+ else
+ OPTIMIZER += -g
+ DEFINES += -DDEBUG -UNDEBUG
+ endif
+else # !NS_USE_GCC
+ WARNING_CFLAGS = -W3 -nologo -D_CRT_SECURE_NO_WARNINGS \
+ -D_CRT_NONSTDC_NO_WARNINGS
+ OS_DLLFLAGS += -nologo -DLL -SUBSYSTEM:WINDOWS
+ ifndef NSS_ENABLE_WERROR
+ NSS_ENABLE_WERROR = 1
+ endif
+ ifeq ($(NSS_ENABLE_WERROR),1)
+ WARNING_CFLAGS += -WX
+ endif
+ ifeq ($(_MSC_VER),$(_MSC_VER_6))
+ ifndef MOZ_DEBUG_SYMBOLS
+ OS_DLLFLAGS += -PDB:NONE
+ endif
+ endif
+ ifdef USE_DYNAMICBASE
+ OS_DLLFLAGS += -DYNAMICBASE
+ endif
+ #
+ # Define USE_DEBUG_RTL if you want to use the debug runtime library
+ # (RTL) in the debug build.
+ # Define USE_STATIC_RTL if you want to use the static RTL.
+ #
+ ifdef USE_DEBUG_RTL
+ ifdef USE_STATIC_RTL
+ OS_CFLAGS += -MTd
+ else
+ OS_CFLAGS += -MDd
+ endif
+ OS_CFLAGS += -D_CRTDBG_MAP_ALLOC
+ else
+ ifdef USE_STATIC_RTL
+ OS_CFLAGS += -MT
+ else
+ OS_CFLAGS += -MD
+ endif
+ endif
+ ifdef BUILD_OPT
+ ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER += -O1
+ else
+ OPTIMIZER += -O2
+ endif
+ DEFINES += -UDEBUG -DNDEBUG
+ DLLFLAGS += -OUT:$@
+ ifdef MOZ_DEBUG_SYMBOLS
+ ifdef MOZ_DEBUG_FLAGS
+ OPTIMIZER += $(MOZ_DEBUG_FLAGS) -Fd$(OBJDIR)/
+ else
+ OPTIMIZER += -Zi -Fd$(OBJDIR)/
+ endif
+ DLLFLAGS += -DEBUG -OPT:REF
+ LDFLAGS += -DEBUG -OPT:REF
+ endif
+ else
+ OPTIMIZER += -Zi -Fd$(OBJDIR)/ -Od
+ NULLSTRING :=
+ DEFINES += -DDEBUG -UNDEBUG
+ DLLFLAGS += -DEBUG -OUT:$@
+ LDFLAGS += -DEBUG
+ifeq ($(_MSC_VER),$(_MSC_VER_6))
+ifndef MOZ_DEBUG_SYMBOLS
+ LDFLAGS += -PDB:NONE
+endif
+endif
+ # Purify requires /FIXED:NO when linking EXEs.
+ LDFLAGS += /FIXED:NO
+ # So the linker will find main in the gtestutil library
+ LDFLAGS += -SUBSYSTEM:CONSOLE
+ endif
+ifneq ($(_MSC_VER),$(_MSC_VER_6))
+ # NSS has too many of these to fix, downgrade the warning
+ # Disable C4267: conversion from 'size_t' to 'type', possible loss of data
+ # Disable C4244: conversion from 'type1' to 'type2', possible loss of data
+ # Disable C4018: 'expression' : signed/unsigned mismatch
+ # Disable C4312: 'type cast': conversion from 'type1' to 'type2' of greater size
+ OS_CFLAGS += -w44267 -w44244 -w44018 -w44312
+ ifeq ($(_MSC_VER_GE_12),1)
+ OS_CFLAGS += -FS
+ endif
+endif # !MSVC6
+endif # NS_USE_GCC
+
+ifdef USE_64
+DEFINES += -DWIN64
+else
+DEFINES += -DWIN32
+endif
+
+ifeq (,$(filter-out x386 x86_64,$(CPU_ARCH)))
+ifdef USE_64
+ DEFINES += -D_AMD64_
+ # Use subsystem 5.02 to allow running on Windows XP.
+ ifeq ($(_MSC_VER_GE_11),1)
+ LDFLAGS += -SUBSYSTEM:CONSOLE,5.02
+ endif
+ CPU_ARCH = x86_64
+else
+ DEFINES += -D_X86_
+ # VS2012 defaults to -arch:SSE2. Use -arch:IA32 to avoid requiring
+ # SSE2. Clang-cl gets confused by -arch:IA32, so don't add it.
+ # (See https://llvm.org/bugs/show_bug.cgi?id=24335)
+ # Use subsystem 5.01 to allow running on Windows XP.
+ ifeq ($(_MSC_VER_GE_11),1)
+ ifneq ($(CLANG_CL),1)
+ OS_CFLAGS += -arch:IA32
+ endif
+ LDFLAGS += -SUBSYSTEM:CONSOLE,5.01
+ endif
+ CPU_ARCH = x386
+endif
+endif
+ifeq ($(CPU_ARCH), ALPHA)
+ DEFINES += -D_ALPHA_=1
+endif
+
+ifdef MAPFILE
+ifndef NS_USE_GCC
+DLLFLAGS += -DEF:$(MAPFILE)
+endif
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+
+#
+# The following is NOT needed for the NSPR 2.0 library.
+#
+
+DEFINES += -D_WINDOWS
+
+# override default, which is ASFLAGS = CFLAGS
+ifdef NS_USE_GCC
+ AS = $(CC)
+ ASFLAGS = $(INCLUDES)
+else
+ifdef USE_64
+ AS = ml64.exe
+ ASFLAGS = -nologo -Cp -Sn -Zi $(INCLUDES)
+else
+ AS = ml.exe
+ ASFLAGS = -nologo -Cp -Sn -Zi -coff -safeseh $(INCLUDES)
+endif
+endif
+
+# clear any CSTD and CXXSTD unless we're using GCC
+ifndef NS_USE_GCC
+ CSTD =
+ CXXSTD =
+endif
+
+#
+# override the definitions of RELEASE_TREE found in tree.mk
+#
+ifndef RELEASE_TREE
+ ifdef BUILD_SHIP
+ ifdef USE_SHIPS
+ RELEASE_TREE = $(NTBUILD_SHIP)
+ else
+ RELEASE_TREE = //redbuild/components
+ endif
+ else
+ RELEASE_TREE = //redbuild/components
+ endif
+endif
+
+#
+# override the definitions of IMPORT_LIB_PREFIX, LIB_PREFIX, and
+# DLL_PREFIX in prefix.mk
+#
+
+ifndef IMPORT_LIB_PREFIX
+ ifdef NS_USE_GCC
+ IMPORT_LIB_PREFIX = lib
+ else
+ IMPORT_LIB_PREFIX = $(NULL)
+ endif
+endif
+
+ifndef LIB_PREFIX
+ ifdef NS_USE_GCC
+ LIB_PREFIX = lib
+ else
+ LIB_PREFIX = $(NULL)
+ endif
+endif
+
+ifndef DLL_PREFIX
+ DLL_PREFIX = $(NULL)
+endif
+
+#
+# override the definitions of various _SUFFIX symbols in suffix.mk
+#
+
+#
+# Object suffixes
+#
+ifndef OBJ_SUFFIX
+ ifdef NS_USE_GCC
+ OBJ_SUFFIX = .o
+ else
+ OBJ_SUFFIX = .obj
+ endif
+endif
+
+#
+# Assembler source suffixes
+#
+ifndef ASM_SUFFIX
+ ifdef NS_USE_GCC
+ ASM_SUFFIX = .s
+ else
+ ASM_SUFFIX = .asm
+ endif
+endif
+
+#
+# Library suffixes
+#
+
+ifndef IMPORT_LIB_SUFFIX
+ IMPORT_LIB_SUFFIX = .$(LIB_SUFFIX)
+endif
+
+ifndef DYNAMIC_LIB_SUFFIX_FOR_LINKING
+ DYNAMIC_LIB_SUFFIX_FOR_LINKING = $(IMPORT_LIB_SUFFIX)
+endif
+
+#
+# Program suffixes
+#
+ifndef PROG_SUFFIX
+ PROG_SUFFIX = .exe
+endif
+
+#
+# When the processor is NOT 386-based on Windows NT, override the
+# value of $(CPU_TAG). For WinNT, 95, 16, not CE.
+#
+ifneq ($(CPU_ARCH),x386)
+ CPU_TAG = _$(CPU_ARCH)
+endif
+
+#
+# override the TARGETS defined in ruleset.mk, adding IMPORT_LIBRARY
+#
+ifndef TARGETS
+ TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) $(PROGRAM)
+endif