| # |
| # 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/. |
| |
| ####################################################################### |
| # # |
| # Parameters to this makefile (set these in this file): # |
| # # |
| # a) # |
| # TARGETS -- the target to create # |
| # (defaults to $LIBRARY $PROGRAM) # |
| # b) # |
| # DIRS -- subdirectories for make to recurse on # |
| # (the 'all' rule builds $TARGETS $DIRS) # |
| # c) # |
| # CSRCS, CPPSRCS -- .c and .cpp files to compile # |
| # (used to define $OBJS) # |
| # d) # |
| # PROGRAM -- the target program name to create from $OBJS # |
| # ($OBJDIR automatically prepended to it) # |
| # e) # |
| # LIBRARY -- the target library name to create from $OBJS # |
| # ($OBJDIR automatically prepended to it) # |
| # # |
| ####################################################################### |
| |
| # |
| # CPU_TAG is now defined in the $(TARGET).mk files |
| # |
| |
| ifndef COMPILER_TAG |
| ifneq ($(DEFAULT_COMPILER), $(notdir $(firstword $(CC)))) |
| # |
| # Temporary define for the Client; to be removed when binary release is used |
| # |
| ifdef MOZILLA_CLIENT |
| COMPILER_TAG = |
| else |
| COMPILER_TAG = _$(notdir $(firstword $(CC))) |
| endif |
| else |
| COMPILER_TAG = |
| endif |
| endif |
| |
| ifeq ($(MKPROG),) |
| MKPROG = $(CC) |
| endif |
| |
| # |
| # This makefile contains rules for building the following kinds of |
| # objects: |
| # - (1) LIBRARY: a static (archival) library |
| # - (2) SHARED_LIBRARY: a shared (dynamic link) library |
| # - (3) IMPORT_LIBRARY: an import library, defined in $(OS_TARGET).mk |
| # - (4) PROGRAM: an executable binary |
| # |
| # A library is build by specifying the LIBRARY_NAME variable. |
| # If you want to build only a static library, set SHARED_LIBRARY = $(NULL) |
| # If you want to build only a shared library, set LIBRARY = $(NULL) |
| # You can specify the shared library major version via LIBRARY_VERSION. |
| # |
| # Normally you want to link to the shared library. In this case you must |
| # provide an export script, like: |
| # MAPFILE = $(OBJDIR)/$(LIBRARY_NAME).def. |
| # Unfortunatly this variable is needed by the ARCH setup, so you have to set |
| # it explicitly in the manifest.mn. |
| # |
| # Per default, it's assumed the shared library provides resource specification |
| # in the file RES. You can set it to $(NULL), if that is not true. |
| # |
| # If you have an unversioned SHARED_LIBRARY, you must explicitly change or |
| # disable the static LIBRARY, as these normally clash on Windows. |
| |
| ifdef LIBRARY_NAME |
| ifndef LIBRARY |
| LIBRARY := $(OBJDIR)/$(LIB_PREFIX)$(LIBRARY_NAME).$(LIB_SUFFIX) |
| endif |
| ifndef SHARED_LIBRARY |
| SHARED_LIBRARY := $(OBJDIR)/$(DLL_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX) |
| endif |
| |
| ifneq ($(SHARED_LIBRARY),) |
| |
| ifdef IMPORT_LIB_SUFFIX |
| ifdef MAPFILE |
| ifndef IMPORT_LIBRARY |
| IMPORT_LIBRARY := $(OBJDIR)/$(IMPORT_LIB_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION)$(IMPORT_LIB_SUFFIX) |
| endif |
| endif |
| endif |
| |
| ifndef MAPFILE_SOURCE |
| MAPFILE_SOURCE := $(LIBRARY_NAME).def |
| endif |
| |
| ifeq (,$(filter-out WIN%,$(OS_TARGET))) |
| ifndef RES |
| RES := $(OBJDIR)/$(LIBRARY_NAME).res |
| endif |
| ifndef RESNAME |
| RESNAME := $(LIBRARY_NAME).rc |
| endif |
| endif |
| |
| endif |
| endif |
| |
| # |
| # Common rules used by lots of makefiles... |
| # |
| |
| ifdef PROGRAM |
| PROGRAM := $(addprefix $(OBJDIR)/, $(PROGRAM)$(PROG_SUFFIX)) |
| endif |
| |
| ifdef PROGRAMS |
| PROGRAMS := $(addprefix $(OBJDIR)/, $(PROGRAMS:%=%$(PROG_SUFFIX))) |
| endif |
| |
| ifndef TARGETS |
| TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAM) |
| endif |
| |
| # Make both .cpp and .cc work. |
| CPPSRCS1 = $(CPPSRCS:.cpp=$(OBJ_SUFFIX)) |
| CPPSRCS2 = $(CPPSRCS1:.cc=$(OBJ_SUFFIX)) |
| |
| ifndef OBJS |
| SIMPLE_OBJS = \ |
| $(CSRCS:.c=$(OBJ_SUFFIX)) \ |
| $(CPPSRCS2) \ |
| $(ASFILES:$(ASM_SUFFIX)=$(OBJ_SUFFIX)) \ |
| $(BUILT_CSRCS:.c=$(OBJ_SUFFIX)) \ |
| $(BUILT_CPPSRCS:.cpp=$(OBJ_SUFFIX)) \ |
| $(BUILT_ASFILES:$(ASM_SUFFIX)=$(OBJ_SUFFIX)) |
| OBJS = $(addprefix $(OBJDIR)/$(PROG_PREFIX), $(SIMPLE_OBJS)) |
| endif |
| |
| ifndef BUILT_SRCS |
| BUILT_SRCS = $(addprefix $(OBJDIR)/$(PROG_PREFIX), \ |
| $(BUILT_CSRCS) $(BUILT_CPPSRCS) $(BUILT_ASFILES)) |
| endif |
| |
| ifndef MAKE_OBJDIR |
| define MAKE_OBJDIR |
| if test ! -d $(@D); then $(NSINSTALL) -D $(@D); fi |
| endef |
| endif |
| |
| ALL_TRASH = $(TARGETS) $(OBJS) $(OBJDIR) LOGS TAGS $(GARBAGE) \ |
| so_locations $(BUILT_SRCS) $(NOSUCHFILE) |
| |
| ifdef NSS_BUILD_CONTINUE_ON_ERROR |
| # Try to build everything. I.e., don't exit on errors. |
| EXIT_ON_ERROR = +e |
| IGNORE_ERROR = - |
| CLICK_STOPWATCH = date |
| else |
| EXIT_ON_ERROR = -e |
| IGNORE_ERROR = |
| CLICK_STOPWATCH = true |
| endif |
| |
| ifdef REQUIRES |
| MODULE_INCLUDES := $(addprefix -I$(SOURCE_XP_DIR)/public/, $(REQUIRES)) |
| INCLUDES += $(MODULE_INCLUDES) |
| ifeq ($(MODULE), sectools) |
| PRIVATE_INCLUDES := $(addprefix -I$(SOURCE_XP_DIR)/private/, $(REQUIRES)) |
| INCLUDES += $(PRIVATE_INCLUDES) |
| endif |
| endif |
| |
| ifdef SYSTEM_INCL_DIR |
| YOPT = -Y$(SYSTEM_INCL_DIR) |
| endif |
| |
| MK_RULESET = included |