123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- #
- # 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)
- 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
- MKDEPEND_DIR = $(CORE_DEPTH)/coreconf/mkdepend
- MKDEPEND = $(MKDEPEND_DIR)/$(OBJDIR_NAME)/mkdepend.exe
- # Note: MKDEPENDENCIES __MUST__ be a relative pathname, not absolute.
- # If it is absolute, gmake will crash unless the named file exists.
- MKDEPENDENCIES = $(OBJDIR_NAME)/depend.mk
- INSTALL = $(NSINSTALL)
- MAKE_OBJDIR = mkdir
- MAKE_OBJDIR += $(OBJDIR)
- 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
- 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
- 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 ruleset.mk, removing the "lib" prefix for library names, and
- # adding the "32" after the LIBRARY_VERSION.
- #
- ifdef LIBRARY_NAME
- SHARED_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)32$(JDK_DEBUG_SUFFIX).dll
- IMPORT_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)32$(JDK_DEBUG_SUFFIX).lib
- endif
- #
- # override the TARGETS defined in ruleset.mk, adding IMPORT_LIBRARY
- #
- ifndef TARGETS
- TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) $(PROGRAM)
- endif
|