1 # vim:set ts=8 sw=8 sts=8 noet:
3 # ***** BEGIN LICENSE BLOCK *****
4 # Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 # The contents of this file are subject to the Mozilla Public License Version
7 # 1.1 (the "License"); you may not use this file except in compliance with
8 # the License. You may obtain a copy of the License at
9 # http://www.mozilla.org/MPL/
11 # Software distributed under the License is distributed on an "AS IS" basis,
12 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 # for the specific language governing rights and limitations under the
16 # The Original Code is mozilla.org code.
18 # The Initial Developer of the Original Code is
19 # Netscape Communications Corporation.
20 # Portions created by the Initial Developer are Copyright (C) 1998
21 # the Initial Developer. All Rights Reserved.
24 # Chase Phillips <chase@mozilla.org>
25 # Benjamin Smedberg <benjamin@smedbergs.us>
26 # Jeff Walden <jwalden+code@mit.edu>
28 # Alternatively, the contents of this file may be used under the terms of
29 # either of the GNU General Public License Version 2 or later (the "GPL"),
30 # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
31 # in which case the provisions of the GPL or the LGPL are applicable instead
32 # of those above. If you wish to allow use of your version of this file only
33 # under the terms of either the GPL or the LGPL, and not to allow others to
34 # use your version of this file under the terms of the MPL, indicate your
35 # decision by deleting the provisions above and replace them with the notice
36 # and other provisions required by the GPL or the LGPL. If you do not delete
37 # the provisions above, a recipient may use your version of this file under
38 # the terms of any one of the MPL, the GPL or the LGPL.
40 # ***** END LICENSE BLOCK *****
43 $(error topsrcdir was not set
))
47 MOZILLA_DIR
= $(topsrcdir
)
50 ifndef INCLUDED_CONFIG_MK
51 include $(topsrcdir
)/config
/config.mk
54 ifndef INCLUDED_VERSION_MK
55 include $(topsrcdir
)/config
/version.mk
59 XPIDLSRCS
+= $(SDK_XPIDLSRCS
)
62 EXPORTS
+= $(SDK_HEADERS
)
65 REPORT_BUILD
= @echo
$(notdir $<)
73 # Don't copy xulrunner files at install time, when using system xulrunner
78 # ELOG prints out failed command when building silently (gmake -s).
79 ifneq (,$(findstring s
, $(filter-out --%, $(MAKEFLAGS
))))
80 ELOG
:= $(EXEC
) sh
$(BUILD_TOOLS
)/print-failed-commands.sh
85 ifeq (,$(filter-out WINNT WINCE
,$(OS_ARCH
)))
86 _VPATH_SRCS
= $(abspath
$<)
91 # Add $(DIST)/lib to VPATH so that -lfoo dependencies are followed
94 VPATH
+= $(LIBXUL_SDK
)/lib
97 # EXPAND_LIBNAME - $(call EXPAND_LIBNAME,foo)
98 # expands to foo.lib on platforms with import libs and -lfoo otherwise
100 # EXPAND_LIBNAME_PATH - $(call EXPAND_LIBNAME_PATH,foo,dir)
101 # expands to dir/foo.lib on platforms with import libs and
102 # -Ldir -lfoo otherwise
104 # EXPAND_MOZLIBNAME - $(call EXPAND_MOZLIBNAME,foo)
105 # expands to $(DIST)/lib/foo.lib on platforms with import libs and
108 EXPAND_LIBNAME
= $(foreach lib
,$(1),$(LIB_PREFIX
)$(lib
).
$(LIB_SUFFIX
))
109 EXPAND_LIBNAME_PATH
= $(foreach lib
,$(1),$(2)/$(LIB_PREFIX
)$(lib
).
$(LIB_SUFFIX
))
110 EXPAND_MOZLIBNAME
= $(foreach lib
,$(1),$(DIST
)/lib
/$(LIB_PREFIX
)$(lib
).
$(LIB_SUFFIX
))
113 EXTRA_DSO_LIBS
:= $(call EXPAND_MOZLIBNAME
,$(EXTRA_DSO_LIBS
))
116 ################################################################################
117 # Testing frameworks support
118 ################################################################################
120 testxpcobjdir
= $(DEPTH
)/_tests
/xpcshell
125 ifndef relativesrcdir
126 $(error Must
define relativesrcdir when defining XPCSHELL_TESTS.
)
129 # Test file installation
130 ifneq (,$(filter WINNT os2-emx
,$(HOST_OS_ARCH
)))
131 # Windows and OS/2 nsinstall can't recursively copy directories, so use nsinstall.py
132 TEST_INSTALLER
= $(PYTHON
) $(topsrcdir
)/config
/nsinstall.py
134 TEST_INSTALLER
= $(INSTALL
)
137 define _INSTALL_TESTS
138 $(TEST_INSTALLER
) $(wildcard $(srcdir)/$(dir)/*) $(testxpcobjdir
)/$(relativesrcdir
)/$(dir)
140 endef # do not remove the blank line!
142 SOLO_FILE ?
= $(error Specify a
test filename in SOLO_FILE when using check-interactive or check-one
)
145 $(foreach dir,$(XPCSHELL_TESTS
),$(_INSTALL_TESTS
))
146 $(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py \
147 $(testxpcobjdir
)/all-test-dirs.list \
148 $(addprefix $(relativesrcdir
)/,$(XPCSHELL_TESTS
))
150 testxpcsrcdir
= $(topsrcdir
)/testing
/xpcshell
152 # Execute all tests in the $(XPCSHELL_TESTS) directories.
153 # See also testsuite-targets.mk 'xpcshell-tests' target for global execution.
155 $(PYTHON
) -u
$(topsrcdir
)/config
/pythonpath.py \
156 -I
$(topsrcdir
)/build \
157 $(testxpcsrcdir
)/runxpcshelltests.py \
158 --symbols-path
=$(DIST
)/crashreporter-symbols \
160 $(DIST
)/bin
/xpcshell \
161 $(foreach dir,$(XPCSHELL_TESTS
),$(testxpcobjdir
)/$(relativesrcdir
)/$(dir))
163 # Execute a single test, specified in $(SOLO_FILE), but don't automatically
164 # start the test. Instead, present the xpcshell prompt so the user can
165 # attach a debugger and then start the test.
167 $(PYTHON
) -u
$(topsrcdir
)/config
/pythonpath.py \
168 -I
$(topsrcdir
)/build \
169 $(testxpcsrcdir
)/runxpcshelltests.py \
170 --symbols-path
=$(DIST
)/crashreporter-symbols \
171 --test-path
=$(SOLO_FILE
) \
172 --profile-name
=$(MOZ_APP_NAME
) \
174 $(DIST
)/bin
/xpcshell \
175 $(foreach dir,$(XPCSHELL_TESTS
),$(testxpcobjdir
)/$(relativesrcdir
)/$(dir))
177 # Execute a single test, specified in $(SOLO_FILE)
179 $(PYTHON
) -u
$(topsrcdir
)/config
/pythonpath.py \
180 -I
$(topsrcdir
)/build \
181 $(testxpcsrcdir
)/runxpcshelltests.py \
182 --symbols-path
=$(DIST
)/crashreporter-symbols \
183 --test-path
=$(SOLO_FILE
) \
184 --profile-name
=$(MOZ_APP_NAME
) \
187 $(DIST
)/bin
/xpcshell \
188 $(foreach dir,$(XPCSHELL_TESTS
),$(testxpcobjdir
)/$(relativesrcdir
)/$(dir))
190 endif # XPCSHELL_TESTS
194 # Compile the tests to $(DIST)/bin. Make lots of niceties available by default
195 # through TestHarness.h, by modifying the list of includes and the libs against
197 CPPSRCS
+= $(CPP_UNIT_TESTS
)
198 SIMPLE_PROGRAMS
+= $(CPP_UNIT_TESTS
:.
cpp=$(BIN_SUFFIX
))
199 INCLUDES
+= -I
$(DIST
)/include/testing
200 LIBS
+= $(XPCOM_GLUE_LDOPTS
) $(NSPR_LIBS
)
202 # ...and run them the usual way
205 for f in
$(subst .
cpp,$(BIN_SUFFIX
),$(CPP_UNIT_TESTS
)); do \
206 XPCOM_DEBUG_BREAK
=stack-and-abort
$(RUN_TEST_PROGRAM
) $(DIST
)/bin
/$$f; \
209 endif # CPP_UNIT_TESTS
211 .PHONY
: check xpcshell-tests check-interactive check-one
219 # If BUILD_STATIC_LIBS or FORCE_STATIC_LIB is set, build a static library.
220 # Otherwise, build a shared library.
224 ifdef STATIC_LIBRARY_NAME
225 _LIBRARY
:= $(LIB_PREFIX
)$(STATIC_LIBRARY_NAME
).
$(LIB_SUFFIX
)
226 # Only build actual library if it is installed in DIST/lib or SDK
227 ifeq (,$(SDK_LIBRARY
)$(DIST_INSTALL
)$(NO_EXPAND_LIBS
))
228 LIBRARY
:= $(_LIBRARY
).
$(LIBS_DESC_SUFFIX
)
230 LIBRARY
:= $(_LIBRARY
) $(_LIBRARY
).
$(LIBS_DESC_SUFFIX
)
232 endif # STATIC_LIBRARY_NAME
236 ifdef HOST_LIBRARY_NAME
237 HOST_LIBRARY
:= $(LIB_PREFIX
)$(HOST_LIBRARY_NAME
).
$(LIB_SUFFIX
)
242 ifneq (_1
,$(FORCE_SHARED_LIB
)_
$(BUILD_STATIC_LIBS
))
246 MKSHLIB
= $(MKCSHLIB
)
249 ifneq (,$(filter OS2 WINNT WINCE
,$(OS_ARCH
)))
250 IMPORT_LIBRARY
:= $(LIB_PREFIX
)$(SHARED_LIBRARY_NAME
).
$(IMPORT_LIB_SUFFIX
)
253 ifeq (OS2
,$(OS_ARCH
))
255 SHARED_LIBRARY_NAME
:= $(SHORT_LIBNAME
)
260 SHARED_LIBRARY
:= $(SHARED_LIBRARY_NAME
)
262 SHARED_LIBRARY
:= $(DLL_PREFIX
)$(SHARED_LIBRARY_NAME
)$(DLL_SUFFIX
)
265 ifeq ($(OS_ARCH
),OS2
)
266 DEF_FILE
:= $(SHARED_LIBRARY
:.dll
=.def
)
269 ifdef MOZ_ENABLE_LIBXUL
274 endif # FORCE_SHARED_LIB && !BUILD_STATIC_LIBS
277 ifeq (,$(BUILD_STATIC_LIBS
)$(FORCE_STATIC_LIB
))
281 ifeq (_1
,$(FORCE_SHARED_LIB
)_
$(BUILD_STATIC_LIBS
))
282 SHARED_LIBRARY
:= $(NULL
)
284 IMPORT_LIBRARY
:= $(NULL
)
287 ifdef FORCE_STATIC_LIB
288 ifndef FORCE_SHARED_LIB
289 SHARED_LIBRARY
:= $(NULL
)
291 IMPORT_LIBRARY
:= $(NULL
)
295 ifdef FORCE_SHARED_LIB
296 ifndef FORCE_STATIC_LIB
301 ifdef JAVA_LIBRARY_NAME
302 JAVA_LIBRARY
:= $(JAVA_LIBRARY_NAME
).jar
305 ifeq (,$(filter-out WINNT WINCE
,$(OS_ARCH
)))
309 # Unless we're building SIMPLE_PROGRAMS, all C++ files share a PDB file per
310 # directory. For parallel builds, this PDB file is shared and locked by
311 # MSPDBSRV.EXE, starting with MSVC8 SP1. If you're using MSVC 7.1 or MSVC8
312 # without SP1, don't do parallel builds.
314 # The final PDB for libraries and programs is created by the linker and uses
315 # a different name from the single PDB file created by the compiler. See
319 ifdef SIMPLE_PROGRAMS
320 COMPILE_PDBFILE
= $(basename $(@F
)).pdb
322 COMPILE_PDBFILE
= generated.pdb
325 LINK_PDBFILE
= $(basename $(@F
)).pdb
327 CODFILE
=$(basename $(@F
)).cod
331 ifdef SHARED_LIBRARY_NAME
332 MAPFILE
=$(SHARED_LIBRARY_NAME
).map
334 MAPFILE
=$(basename $(@F
)).map
335 endif # SHARED_LIBRARY_NAME
339 OS_LDFLAGS
+= -DEF
:$(call normalizepath
,$(DEFFILE
))
340 EXTRA_DEPS
+= $(DEFFILE
)
344 OS_LDFLAGS
+= -MAP
:$(MAPFILE
)
349 ifdef ENABLE_CXX_EXCEPTIONS
350 CXXFLAGS
+= $(MOZ_EXCEPTIONS_FLAGS_ON
) -DMOZ_CPP_EXCEPTIONS
=1
351 endif # ENABLE_CXX_EXCEPTIONS
354 ifeq ($(SOLARIS_SUNPRO_CXX
),1)
355 ifeq (86,$(findstring 86,$(OS_TEST
)))
356 OS_LDFLAGS
+= -M
$(topsrcdir
)/config
/solaris_ia32.map
358 endif # Solaris Sun Studio C++
360 ifeq (,$(filter-out WINNT WINCE
,$(HOST_OS_ARCH
)))
361 HOST_PDBFILE
=$(basename $(@F
)).pdb
365 TARGETS
= $(LIBRARY
) $(SHARED_LIBRARY
) $(PROGRAM
) $(SIMPLE_PROGRAMS
) $(HOST_LIBRARY
) $(HOST_PROGRAM
) $(HOST_SIMPLE_PROGRAMS
) $(JAVA_LIBRARY
)
371 $(addsuffix .
$(OBJ_SUFFIX
), $(JMC_GEN
)) \
372 $(CSRCS
:.c
=.
$(OBJ_SUFFIX
)) \
373 $(SSRCS
:.S
=.
$(OBJ_SUFFIX
)) \
374 $(patsubst %.
cc,%.
$(OBJ_SUFFIX
),$(CPPSRCS
:.
cpp=.
$(OBJ_SUFFIX
))) \
375 $(CMSRCS
:.m
=.
$(OBJ_SUFFIX
)) \
376 $(CMMSRCS
:.mm
=.
$(OBJ_SUFFIX
)) \
377 $(ASFILES
:.
$(ASM_SUFFIX
)=.
$(OBJ_SUFFIX
))
378 OBJS
= $(strip $(_OBJS
))
383 $(addprefix host_
,$(HOST_CSRCS
:.c
=.
$(OBJ_SUFFIX
))) \
384 $(addprefix host_
,$(patsubst %.
cc,%.
$(OBJ_SUFFIX
),$(HOST_CPPSRCS
:.
cpp=.
$(OBJ_SUFFIX
)))) \
385 $(addprefix host_
,$(HOST_CMSRCS
:.m
=.
$(OBJ_SUFFIX
))) \
386 $(addprefix host_
,$(HOST_CMMSRCS
:.mm
=.
$(OBJ_SUFFIX
)))
387 HOST_OBJS
= $(strip $(_HOST_OBJS
))
390 LIBOBJS
:= $(addprefix \", $(OBJS
))
391 LIBOBJS
:= $(addsuffix \", $(LIBOBJS
))
394 ifneq (,$(OBJS
)$(XPIDLSRCS
)$(SIMPLE_PROGRAMS
))
395 MDDEPFILES
= $(addprefix $(MDDEPDIR
)/,$(OBJS
:.
$(OBJ_SUFFIX
)=.pp
))
397 MDDEPFILES
+= $(addprefix $(MDDEPDIR
)/,$(XPIDLSRCS
:.idl
=.xpt
))
403 $(GARBAGE
) $(TARGETS
) $(OBJS
) $(PROGOBJS
) LOGS TAGS a.out \
404 $(filter-out $(ASFILES
),$(OBJS
:.
$(OBJ_SUFFIX
)=.s
)) $(OBJS
:.
$(OBJ_SUFFIX
)=.ii
) \
405 $(OBJS
:.
$(OBJ_SUFFIX
)=.i
) \
406 $(HOST_PROGOBJS
) $(HOST_OBJS
) $(IMPORT_LIBRARY
) $(DEF_FILE
)\
407 $(EXE_DEF_FILE
) so_locations _gen _stubs
$(wildcard *.res
) $(wildcard *.RES
) \
408 $(wildcard *.pdb
) $(CODFILE
) $(MAPFILE
) $(IMPORT_LIBRARY
) \
409 $(SHARED_LIBRARY
:$(DLL_SUFFIX
)=.exp
) $(wildcard *.ilk
) \
410 $(PROGRAM
:$(BIN_SUFFIX
)=.exp
) $(SIMPLE_PROGRAMS
:$(BIN_SUFFIX
)=.exp
) \
411 $(PROGRAM
:$(BIN_SUFFIX
)=.lib
) $(SIMPLE_PROGRAMS
:$(BIN_SUFFIX
)=.lib
) \
412 $(SIMPLE_PROGRAMS
:$(BIN_SUFFIX
)=.
$(OBJ_SUFFIX
)) \
413 $(wildcard gts_tmp_
*) $(LIBRARY
:%.a
=.
%.timestamp
)
415 $(GARBAGE_DIRS
) /no-such-file
418 GARBAGE
+= $(MOCSRCS
)
421 ifdef SIMPLE_PROGRAMS
422 GARBAGE
+= $(SIMPLE_PROGRAMS
:%=%.
$(OBJ_SUFFIX
))
425 ifdef HOST_SIMPLE_PROGRAMS
426 GARBAGE
+= $(HOST_SIMPLE_PROGRAMS
:%=%.
$(OBJ_SUFFIX
))
430 # the Solaris WorkShop template repository cache. it occasionally can get
431 # out of sync, so targets like clobber should kill it.
433 ifeq ($(SOLARIS_SUNPRO_CXX
),1)
434 GARBAGE_DIRS
+= SunWS_cache
437 XPIDL_GEN_DIR
= _xpidlgen
439 ifdef MOZ_UPDATE_XTERM
440 # Its good not to have a newline at the end of the titlebar string because it
441 # makes the make -s output easier to read. Echo -n does not work on all
442 # platforms, but we can trick sed into doing it.
443 UPDATE_TITLE
= sed
-e
"s!Y!$(1) in $(shell $(BUILD_TOOLS)/print-depth-path.sh)/$(2)!" $(MOZILLA_DIR
)/config
/xterm.str
;
446 define SUBMAKE
# $(call SUBMAKE,target,directory)
448 +@
$(MAKE
) $(if
$(2),-C
$(2)) $(1)
450 endef # The extra line is important here! don't delete it
452 ifneq (,$(strip $(DIRS
)))
454 $(foreach dir,$(DIRS
),$(call SUBMAKE
,$@
,$(dir)))
457 # we only use this for the makefiles target and other stuff that doesn't matter
458 ifneq (,$(strip $(PARALLEL_DIRS
)))
459 LOOP_OVER_PARALLEL_DIRS
= \
460 $(foreach dir,$(PARALLEL_DIRS
),$(call SUBMAKE
,$@
,$(dir)))
463 ifneq (,$(strip $(STATIC_DIRS
)))
464 LOOP_OVER_STATIC_DIRS
= \
465 $(foreach dir,$(STATIC_DIRS
),$(call SUBMAKE
,$@
,$(dir)))
468 ifneq (,$(strip $(TOOL_DIRS
)))
469 LOOP_OVER_TOOL_DIRS
= \
470 $(foreach dir,$(TOOL_DIRS
),$(call SUBMAKE
,$@
,$(dir)))
474 # create a bunch of fake targets for order-only processing
475 PARALLEL_DIRS_export
= $(addsuffix _export
,$(PARALLEL_DIRS
))
476 PARALLEL_DIRS_libs
= $(addsuffix _libs
,$(PARALLEL_DIRS
))
477 PARALLEL_DIRS_tools
= $(addsuffix _tools
,$(PARALLEL_DIRS
))
479 .PHONY
: $(PARALLEL_DIRS_export
) $(PARALLEL_DIRS_libs
) $(PARALLEL_DIRS_tools
)
483 # Now we can differentiate between objects used to build a library, and
484 # objects used to build an executable in the same directory.
491 HOST_PROGOBJS
= $(HOST_OBJS
)
494 # MAKE_DIRS: List of directories to build while looping over directories.
495 # A Makefile that needs $(MDDEPDIR) created but doesn't set any of these
496 # variables we know to check can just set NEED_MDDEPDIR explicitly.
497 ifneq (,$(OBJS
)$(XPIDLSRCS
)$(SIMPLE_PROGRAMS
)$(NEED_MDDEPDIR
))
498 MAKE_DIRS
+= $(CURDIR
)/$(MDDEPDIR
)
499 GARBAGE_DIRS
+= $(MDDEPDIR
)
503 # Tags: emacs (etags), vi (ctags)
504 # TAG_PROGRAM := ctags -L -
506 TAG_PROGRAM
= xargs etags
-a
509 # Turn on C++ linking if we have any .cpp or .mm files
510 # (moved this from config.mk so that config.mk can be included
511 # before the CPPSRCS are defined)
513 ifneq ($(CPPSRCS
)$(CMMSRCS
),)
516 ifneq ($(HOST_CPPSRCS
)$(HOST_CMMSRCS
),)
517 HOST_CPP_PROG_LINK
= 1
521 # This will strip out symbols that the component should not be
522 # exporting from the .dynsym section.
525 EXTRA_DSO_LDOPTS
+= $(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS
)
529 # Enforce the requirement that MODULE_NAME must be set
530 # for components in static builds
534 ifndef FORCE_SHARED_LIB
536 $(error MODULE_NAME is required for components which may be used in static builds
)
543 # MacOS X specific stuff
546 ifeq ($(OS_ARCH
),Darwin
)
549 EXTRA_DSO_LDOPTS
+= -bundle
551 EXTRA_DSO_LDOPTS
+= -dynamiclib
-install_name @executable_path
/$(SHARED_LIBRARY
) -compatibility_version
1 -current_version
1 -single_module
557 # On NetBSD a.out systems, use -Bsymbolic. This fixes what would otherwise be
558 # fatal symbol name clashes between components.
560 ifeq ($(OS_ARCH
),NetBSD
)
561 ifeq ($(DLL_SUFFIX
),.so
.1.0)
563 EXTRA_DSO_LDOPTS
+= -Wl
,-Bsymbolic
568 ifeq ($(OS_ARCH
),FreeBSD
)
570 EXTRA_DSO_LDOPTS
+= -Wl
,-Bsymbolic
574 ifeq ($(OS_ARCH
),NetBSD
)
575 ifneq (,$(filter arc cobalt hpcmips mipsco newsmips pmax sgimips
,$(OS_TEST
)))
576 ifeq ($(MODULE
),layout
)
577 OS_CFLAGS
+= -Wa
,-xgot
578 OS_CXXFLAGS
+= -Wa
,-xgot
584 # HP-UXBeOS specific section: for COMPONENTS only, add -Bsymbolic flag
585 # which uses internal symbols first
587 ifeq ($(OS_ARCH
),HP-UX
)
589 ifeq ($(GNU_CC
)$(GNU_CXX
),)
590 EXTRA_DSO_LDOPTS
+= -Wl
,-Bsymbolic
591 ifneq ($(HAS_EXTRAEXPORTS
),1)
592 MKSHLIB
+= -Wl
,+eNSGetModule
-Wl
,+eerrno
593 MKCSHLIB
+= +eNSGetModule
+eerrno
594 ifneq ($(OS_TEST
),ia64
)
595 MKSHLIB
+= -Wl
,+e_shlInit
596 MKCSHLIB
+= +e_shlInit
598 endif # !HAS_EXTRAEXPORTS
599 endif # non-gnu compilers
603 ifeq ($(OS_ARCH
),AIX
)
605 ifneq ($(HAS_EXTRAEXPORTS
),1)
606 MKSHLIB
+= -bE
:$(MOZILLA_DIR
)/build
/unix
/aix.exp
-bnoexpall
607 MKCSHLIB
+= -bE
:$(MOZILLA_DIR
)/build
/unix
/aix.exp
-bnoexpall
608 endif # HAS_EXTRAEXPORTS
613 # OSF1: add -B symbolic flag for components
615 ifeq ($(OS_ARCH
),OSF1
)
617 ifeq ($(GNU_CC
)$(GNU_CXX
),)
618 EXTRA_DSO_LDOPTS
+= -B symbolic
624 # Linux: add -Bsymbolic flag for components
626 ifeq ($(OS_ARCH
),Linux
)
628 EXTRA_DSO_LDOPTS
+= -Wl
,-Bsymbolic
633 # GNU doesn't have path length limitation
636 ifeq ($(OS_ARCH
),GNU
)
637 OS_CPPFLAGS
+= -DPATH_MAX
=1024 -DMAXPATHLEN
=1024
643 ifeq ($(OS_ARCH
),WINNT
)
646 DSO_LDOPTS
+= -Wl
,--out-implib
-Wl
,$(IMPORT_LIBRARY
)
659 ifeq (_WINNT
,$(GNU_CC
)_
$(OS_ARCH
))
663 endif # WINNT && !GNU_CC
664 ifneq (,$(filter WINCE
,$(OS_ARCH
)))
668 ifeq ($(OS_ARCH
), WINCE
)
670 HOST_OUTOPTION
= -Fo
# eol
673 ifeq (,$(CROSS_COMPILE
))
674 HOST_OUTOPTION
= $(OUTOPTION
)
676 HOST_OUTOPTION
= -o
# eol
680 ################################################################################
682 # SUBMAKEFILES: List of Makefiles for next level down.
683 # This is used to update or create the Makefiles before invoking them.
684 SUBMAKEFILES
+= $(addsuffix /Makefile
, $(DIRS
) $(TOOL_DIRS
) $(PARALLEL_DIRS
))
686 # The root makefile doesn't want to do a plain export/libs, because
687 # of the tiers and because of libxul. Suppress the default rules in favor
688 # of something else. Makefiles which use this var *must* provide a sensible
689 # default rule before including rules.mk
690 ifndef SUPPRESS_DEFAULT_RULES
693 $(foreach tier
,$(TIERS
),$(call SUBMAKE
,tier_
$(tier
)))
697 ifneq (,$(strip $(STATIC_DIRS
)))
698 $(foreach dir,$(STATIC_DIRS
),$(call SUBMAKE
,,$(dir)))
712 endif # SUPPRESS_DEFAULT_RULES
714 ifeq ($(filter s
,$(MAKEFLAGS
)),)
722 MAKE_TIER_SUBMAKEFILES
= +$(if
$(tier_
$*_dirs
),$(MAKE
) $(addsuffix /Makefile
,$(tier_
$*_dirs
)))
726 @
$(MAKE_TIER_SUBMAKEFILES
)
727 $(foreach dir,$(tier_
$*_dirs
),$(call SUBMAKE
,export,$(dir)))
731 @
$(MAKE_TIER_SUBMAKEFILES
)
732 $(foreach dir,$(tier_
$*_dirs
),$(call SUBMAKE
,libs
,$(dir)))
736 @
$(MAKE_TIER_SUBMAKEFILES
)
737 $(foreach dir,$(tier_
$*_dirs
),$(call SUBMAKE
,tools
,$(dir)))
739 $(foreach tier
,$(TIERS
),tier_
$(tier
))::
740 @
$(ECHO
) "$@: $($@_staticdirs) $($@_dirs)"
741 $(foreach dir,$($@_staticdirs
),$(call SUBMAKE
,,$(dir)))
746 # Do everything from scratch
751 # Add dummy depend target for tinderboxes
754 # Target to only regenerate makefiles
755 makefiles
: $(SUBMAKEFILES
)
756 ifneq (,$(DIRS
)$(TOOL_DIRS
)$(PARALLEL_DIRS
))
757 $(LOOP_OVER_PARALLEL_DIRS
)
759 $(LOOP_OVER_TOOL_DIRS
)
763 export:: $(PARALLEL_DIRS_export
)
765 $(PARALLEL_DIRS_export
): %_export
: %/Makefile
766 +@
$(call SUBMAKE
,export,$*)
769 export:: $(SUBMAKEFILES
) $(MAKE_DIRS
) $(if
$(XPIDLSRCS
),$(IDL_DIR
))
771 $(LOOP_OVER_TOOL_DIRS
)
774 tools
:: $(PARALLEL_DIRS_tools
)
776 $(PARALLEL_DIRS_tools
): %_tools
: %/Makefile
777 +@
$(call SUBMAKE
,tools
,$*)
780 tools
:: $(SUBMAKEFILES
) $(MAKE_DIRS
)
782 ifneq (,$(strip $(TOOL_DIRS
)))
783 $(foreach dir,$(TOOL_DIRS
),$(call SUBMAKE
,libs
,$(dir)))
787 # Rule to create list of libraries for final link
793 ifdef BUILD_STATIC_LIBS
794 @
$(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_LINK_COMPS
) $(STATIC_LIBRARY_NAME
)
796 @
$(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_LINK_COMP_NAMES
) $(MODULE_NAME
)
798 endif # BUILD_STATIC_LIBS
800 $(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_LINK_LIBS
) $(STATIC_LIBRARY_NAME
)
802 endif # EXPORT_LIBRARY
805 ifneq (,$(filter-out %.
$(LIB_SUFFIX
),$(SHARED_LIBRARY_LIBS
)))
806 $(error SHARED_LIBRARY_LIBS must contain .
$(LIB_SUFFIX
) files only
)
809 # Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries
810 DO_EXPAND_LIBS
= $(foreach f
,$(1),$(if
$(filter %.
$(LIB_SUFFIX
),$(f
)),$(if
$(wildcard $(f
).
$(LIBS_DESC_SUFFIX
)),$(f
).
$(LIBS_DESC_SUFFIX
),$(if
$(wildcard $(f
)),$(f
)))))
811 LIBS_DEPS
= $(call DO_EXPAND_LIBS
,$(filter %.
$(LIB_SUFFIX
),$(LIBS
)))
812 SHARED_LIBRARY_LIBS_DEPS
= $(call DO_EXPAND_LIBS
,$(SHARED_LIBRARY_LIBS
))
813 HOST_LIBS_DEPS
= $(filter %.
$(LIB_SUFFIX
),$(HOST_LIBS
))
814 DSO_LDOPTS_DEPS
= $(call DO_EXPAND_LIBS
,$(EXTRA_DSO_LIBS
) $(filter %.
$(LIB_SUFFIX
), $(EXTRA_DSO_LDOPTS
)))
816 # Dependencies which, if modified, should cause everything to rebuild
817 GLOBAL_DEPS
+= Makefile Makefile.in
$(DEPTH
)/config
/autoconf.mk
$(topsrcdir
)/config
/config.mk
819 ##############################################
821 libs
:: $(PARALLEL_DIRS_libs
)
823 $(PARALLEL_DIRS_libs
): %_libs
: %/Makefile
824 +@
$(call SUBMAKE
,libs
,$*)
828 ifeq ($(EXPORT_LIBRARY
),1)
830 EXPORT_LIBRARY
= $(DEPTH
)/staticlib
/components
832 EXPORT_LIBRARY
= $(DEPTH
)/staticlib
835 # If EXPORT_LIBRARY has a value, we'll be installing there. We also need to cleanup there
836 GARBAGE
+= $(foreach lib
,$(LIBRARY
),$(EXPORT_LIBRARY
)/$(lib
))
838 endif # EXPORT_LIBRARY
840 libs
:: $(SUBMAKEFILES
) $(MAKE_DIRS
) $(HOST_LIBRARY
) $(LIBRARY
) $(SHARED_LIBRARY
) $(IMPORT_LIBRARY
) $(HOST_PROGRAM
) $(PROGRAM
) $(HOST_SIMPLE_PROGRAMS
) $(SIMPLE_PROGRAMS
) $(JAVA_LIBRARY
)
841 ifndef NO_DIST_INSTALL
843 ifdef EXPORT_LIBRARY
# Stage libs that will be linked into a static build
844 $(INSTALL
) $(IFLAGS1
) $(LIBRARY
) $(EXPORT_LIBRARY
)
845 endif # EXPORT_LIBRARY
848 $(error Shipping static component libs makes no sense.
)
850 $(INSTALL
) $(IFLAGS1
) $(LIBRARY
) $(DIST
)/lib
856 $(INSTALL
) $(IFLAGS2
) $(SHARED_LIBRARY
) $(FINAL_TARGET
)/components
857 $(ELF_DYNSTR_GC
) $(FINAL_TARGET
)/components
/$(SHARED_LIBRARY
)
858 ifndef NO_COMPONENTS_MANIFEST
859 @
$(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_TARGET
)/chrome.manifest
"manifest components/components.manifest"
860 @
$(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_TARGET
)/components
/components.manifest
"binary-component $(SHARED_LIBRARY)"
862 else # ! IS_COMPONENT
863 ifneq (,$(filter OS2 WINNT WINCE
,$(OS_ARCH
)))
864 $(INSTALL
) $(IFLAGS2
) $(IMPORT_LIBRARY
) $(DIST
)/lib
866 $(INSTALL
) $(IFLAGS2
) $(SHARED_LIBRARY
) $(DIST
)/lib
868 $(INSTALL
) $(IFLAGS2
) $(SHARED_LIBRARY
) $(FINAL_TARGET
)
870 endif # SHARED_LIBRARY
872 $(INSTALL
) $(IFLAGS2
) $(PROGRAM
) $(FINAL_TARGET
)
874 ifdef SIMPLE_PROGRAMS
875 $(INSTALL
) $(IFLAGS2
) $(SIMPLE_PROGRAMS
) $(FINAL_TARGET
)
878 $(INSTALL
) $(IFLAGS2
) $(HOST_PROGRAM
) $(DIST
)/host
/bin
880 ifdef HOST_SIMPLE_PROGRAMS
881 $(INSTALL
) $(IFLAGS2
) $(HOST_SIMPLE_PROGRAMS
) $(DIST
)/host
/bin
884 $(INSTALL
) $(IFLAGS1
) $(HOST_LIBRARY
) $(DIST
)/host
/lib
888 $(INSTALL
) $(IFLAGS1
) $(JAVA_LIBRARY
) $(FINAL_TARGET
)/components
890 $(INSTALL
) $(IFLAGS1
) $(JAVA_LIBRARY
) $(FINAL_TARGET
)
893 endif # !NO_DIST_INSTALL
896 ##############################################
898 ifndef NO_PROFILE_GUIDED_OPTIMIZE
899 ifdef MOZ_PROFILE_USE
900 ifeq ($(OS_ARCH
)_
$(GNU_CC
), WINNT_
)
901 # When building with PGO, we have to make sure to re-link
902 # in the MOZ_PROFILE_USE phase if we linked in the
903 # MOZ_PROFILE_GENERATE phase. We'll touch this pgo.relink
904 # file in the link rule in the GENERATE phase to indicate
905 # that we need a relink.
907 $(SHARED_LIBRARY
): pgo.relink
910 $(PROGRAM
): pgo.relink
913 # In the second pass, we need to merge the pgc files into the pgd file.
914 # The compiler would do this for us automatically if they were in the right
915 # place, but they're in dist/bin.
916 ifneq (,$(SHARED_LIBRARY
)$(PROGRAM
))
919 $(PYTHON
) $(topsrcdir
)/build
/win32
/pgomerge.py \
920 $(PROGRAM
:$(BIN_SUFFIX
)=) $(DIST
)/$(MOZ_APP_NAME
)
923 $(PYTHON
) $(topsrcdir
)/build
/win32
/pgomerge.py \
924 $(SHARED_LIBRARY_NAME
) $(DIST
)/$(MOZ_APP_NAME
)
926 endif # SHARED_LIBRARY || PROGRAM
928 endif # MOZ_PROFILE_GENERATE || MOZ_PROFILE_USE
929 endif # NO_PROFILE_GUIDED_OPTIMIZE
931 ##############################################
934 $(MAKE
) -C
$(topsrcdir
) -f client.mk checkout
936 clean clobber realclean clobber_all
:: $(SUBMAKEFILES
)
938 -rm -rf
$(ALL_TRASH_DIRS
)
939 $(foreach dir,$(PARALLEL_DIRS
) $(DIRS
) $(STATIC_DIRS
) $(TOOL_DIRS
),-$(call SUBMAKE
,$@
,$(dir)))
941 distclean:: $(SUBMAKEFILES
)
942 $(foreach dir,$(PARALLEL_DIRS
) $(DIRS
) $(STATIC_DIRS
) $(TOOL_DIRS
),-$(call SUBMAKE
,$@
,$(dir)))
943 -rm -rf
$(ALL_TRASH_DIRS
)
944 -rm -f
$(ALL_TRASH
) \
945 Makefile .HSancillary \
946 $(wildcard *.
$(OBJ_SUFFIX
)) $(wildcard *.ho
) $(wildcard host_
*.o
*) \
947 $(wildcard *.
$(LIB_SUFFIX
)) $(wildcard *$(DLL_SUFFIX
)) \
948 $(wildcard *.
$(IMPORT_LIB_SUFFIX
))
949 ifeq ($(OS_ARCH
),OS2
)
950 -rm -f
$(PROGRAM
:.exe
=.map
)
955 find
$(topsrcdir
) -name
dist -prune
-o \
( -name
'*.[hc]' -o
-name
'*.cp' -o
-name
'*.cpp' -o
-name
'*.idl' \
) -print |
$(TAG_PROGRAM
)
959 # creates OBJS, links with LIBS to create Foo
961 $(PROGRAM
): $(PROGOBJS
) $(LIBS_DEPS
) $(EXTRA_DEPS
) $(EXE_DEF_FILE
) $(RESFILE
) $(GLOBAL_DEPS
)
963 ifeq (WINCE
,$(OS_ARCH
))
964 $(EXPAND_LD
) -NOLOGO
-OUT
:$@
$(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(PROGOBJS
) $(RESFILE
) $(LIBS
) $(EXTRA_LIBS
) $(OS_LIBS
)
966 ifeq (_WINNT
,$(GNU_CC
)_
$(OS_ARCH
))
967 $(EXPAND_LD
) -NOLOGO
-OUT
:$@
-PDB
:$(LINK_PDBFILE
) $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(PROGOBJS
) $(RESFILE
) $(LIBS
) $(EXTRA_LIBS
) $(OS_LIBS
)
968 ifdef MSMANIFEST_TOOL
969 @if
test -f
$@.manifest
; then \
970 if
test -f
"$(srcdir)/$@.manifest"; then \
971 echo
"Embedding manifest from $(srcdir)/$@.manifest and $@.manifest"; \
972 mt.exe
-NOLOGO
-MANIFEST
"$(win_srcdir)/$@.manifest" $@.manifest
-OUTPUTRESOURCE
:$@\
;1; \
974 echo
"Embedding manifest from $@.manifest"; \
975 mt.exe
-NOLOGO
-MANIFEST
$@.manifest
-OUTPUTRESOURCE
:$@\
;1; \
977 elif
test -f
"$(srcdir)/$@.manifest"; then \
978 echo
"Embedding manifest from $(srcdir)/$@.manifest"; \
979 mt.exe
-NOLOGO
-MANIFEST
"$(win_srcdir)/$@.manifest" -OUTPUTRESOURCE
:$@\
;1; \
981 endif # MSVC with manifest tool
982 ifdef MOZ_PROFILE_GENERATE
983 # touch it a few seconds into the future to work around FAT's
984 # 2-second granularity
985 touch
-t
`date +%Y%m%d%H%M.%S -d "now+5seconds"` pgo.relink
987 else # !WINNT || GNU_CC
988 ifeq ($(CPP_PROG_LINK
),1)
989 $(EXPAND_CCC
) -o
$@
$(CXXFLAGS
) $(WRAP_MALLOC_CFLAGS
) $(PROGOBJS
) $(RESFILE
) $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
) $(BIN_FLAGS
) $(WRAP_MALLOC_LIB
) $(EXE_DEF_FILE
)
990 else # ! CPP_PROG_LINK
991 $(EXPAND_CC
) -o
$@
$(CFLAGS
) $(PROGOBJS
) $(RESFILE
) $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
) $(BIN_FLAGS
) $(EXE_DEF_FILE
)
992 endif # CPP_PROG_LINK
993 endif # WINNT && !GNU_CC
999 ifdef MOZ_POST_PROGRAM_COMMAND
1000 $(MOZ_POST_PROGRAM_COMMAND
) $@
1003 $(HOST_PROGRAM
): $(HOST_PROGOBJS
) $(HOST_LIBS_DEPS
) $(HOST_EXTRA_DEPS
) $(GLOBAL_DEPS
)
1004 ifeq (WINCE
,$(OS_ARCH
))
1005 $(HOST_LD
) -NOLOGO
-OUT
:$@
$(HOST_OBJS
) $(WIN32_EXE_LDFLAGS
) $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1007 ifeq (_WINNT
,$(GNU_CC
)_
$(HOST_OS_ARCH
))
1008 $(HOST_LD
) -NOLOGO
-OUT
:$@
-PDB
:$(HOST_PDBFILE
) $(HOST_OBJS
) $(WIN32_EXE_LDFLAGS
) $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1009 ifdef MSMANIFEST_TOOL
1010 @if
test -f
$@.manifest
; then \
1011 if
test -f
"$(srcdir)/$@.manifest"; then \
1012 echo
"Embedding manifest from $(srcdir)/$@.manifest and $@.manifest"; \
1013 mt.exe
-NOLOGO
-MANIFEST
"$(win_srcdir)/$@.manifest" $@.manifest
-OUTPUTRESOURCE
:$@\
;1; \
1015 echo
"Embedding manifest from $@.manifest"; \
1016 mt.exe
-NOLOGO
-MANIFEST
$@.manifest
-OUTPUTRESOURCE
:$@\
;1; \
1018 elif
test -f
"$(srcdir)/$@.manifest"; then \
1019 echo
"Embedding manifest from $(srcdir)/$@.manifest"; \
1020 mt.exe
-NOLOGO
-MANIFEST
"$(win_srcdir)/$@.manifest" -OUTPUTRESOURCE
:$@\
;1; \
1022 endif # MSVC with manifest tool
1024 ifeq ($(HOST_CPP_PROG_LINK
),1)
1025 $(HOST_CXX
) -o
$@
$(HOST_CXXFLAGS
) $(HOST_LDFLAGS
) $(HOST_PROGOBJS
) $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1027 $(HOST_CC
) -o
$@
$(HOST_CFLAGS
) $(HOST_LDFLAGS
) $(HOST_PROGOBJS
) $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1028 endif # HOST_CPP_PROG_LINK
1033 # This is an attempt to support generation of multiple binaries
1034 # in one directory, it assumes everything to compile Foo is in
1035 # Foo.o (from either Foo.c or Foo.cpp).
1037 # SIMPLE_PROGRAMS = Foo Bar
1038 # creates Foo.o Bar.o, links with LIBS to create Foo, Bar.
1040 $(SIMPLE_PROGRAMS
): %$(BIN_SUFFIX
): %.
$(OBJ_SUFFIX
) $(LIBS_DEPS
) $(EXTRA_DEPS
) $(GLOBAL_DEPS
)
1041 ifeq (WINCE
,$(OS_ARCH
))
1042 $(EXPAND_LD
) -nologo
-entry
:mainACRTStartup
-out
:$@
$< $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(LIBS
) $(EXTRA_LIBS
) $(OS_LIBS
)
1044 ifeq (_WINNT
,$(GNU_CC
)_
$(OS_ARCH
))
1045 $(EXPAND_LD
) -nologo
-out
:$@
-pdb
:$(LINK_PDBFILE
) $< $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(LIBS
) $(EXTRA_LIBS
) $(OS_LIBS
)
1046 ifdef MSMANIFEST_TOOL
1047 @if
test -f
$@.manifest
; then \
1048 mt.exe
-NOLOGO
-MANIFEST
$@.manifest
-OUTPUTRESOURCE
:$@\
;1; \
1049 rm -f
$@.manifest
; \
1051 endif # MSVC with manifest tool
1053 ifeq ($(CPP_PROG_LINK
),1)
1054 $(EXPAND_CCC
) $(WRAP_MALLOC_CFLAGS
) $(CXXFLAGS
) -o
$@
$< $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
) $(WRAP_MALLOC_LIB
) $(BIN_FLAGS
)
1056 $(EXPAND_CC
) $(WRAP_MALLOC_CFLAGS
) $(CFLAGS
) $(OUTOPTION
)$@
$< $(WIN32_EXE_LDFLAGS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
) $(WRAP_MALLOC_LIB
) $(BIN_FLAGS
)
1057 endif # CPP_PROG_LINK
1058 endif # WINNT && !GNU_CC
1064 ifdef MOZ_POST_PROGRAM_COMMAND
1065 $(MOZ_POST_PROGRAM_COMMAND
) $@
1068 $(HOST_SIMPLE_PROGRAMS
): host_
%$(HOST_BIN_SUFFIX
): host_
%.
$(OBJ_SUFFIX
) $(HOST_LIBS_DEPS
) $(HOST_EXTRA_DEPS
) $(GLOBAL_DEPS
)
1069 ifeq (WINCE
,$(OS_ARCH
))
1070 $(HOST_LD
) -NOLOGO
-OUT
:$@
$(WIN32_EXE_LDFLAGS
) $< $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1072 ifeq (WINNT_
,$(HOST_OS_ARCH
)_
$(GNU_CC
))
1073 $(HOST_LD
) -NOLOGO
-OUT
:$@
-PDB
:$(HOST_PDBFILE
) $< $(WIN32_EXE_LDFLAGS
) $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1075 ifneq (,$(HOST_CPPSRCS
)$(USE_HOST_CXX
))
1076 $(HOST_CXX
) $(HOST_OUTOPTION
)$@
$(HOST_CXXFLAGS
) $(INCLUDES
) $< $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1078 $(HOST_CC
) $(HOST_OUTOPTION
)$@
$(HOST_CFLAGS
) $(INCLUDES
) $< $(HOST_LIBS
) $(HOST_EXTRA_LIBS
)
1084 # Purify target. Solaris/sparc only to start.
1085 # Purify does not recognize "egcs" or "c++" so we go with
1086 # "gcc" and "g++" for now.
1089 ifeq ($(CPP_PROG_LINK
),1)
1090 $(PURIFY
) $(CCC
) -o
$^.pure
$(CXXFLAGS
) $(PROGOBJS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
)
1092 $(PURIFY
) $(CC
) -o
$^.pure
$(CFLAGS
) $(PROGOBJS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
)
1094 ifndef NO_DIST_INSTALL
1095 $(INSTALL
) $(IFLAGS2
) $^.pure
$(FINAL_TARGET
)
1098 quantify
: $(PROGRAM
)
1099 ifeq ($(CPP_PROG_LINK
),1)
1100 $(QUANTIFY
) $(CCC
) -o
$^.quantify
$(CXXFLAGS
) $(PROGOBJS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
)
1102 $(QUANTIFY
) $(CC
) -o
$^.quantify
$(CFLAGS
) $(PROGOBJS
) $(LDFLAGS
) $(LIBS_DIR
) $(LIBS
) $(OS_LIBS
) $(EXTRA_LIBS
)
1104 ifndef NO_DIST_INSTALL
1105 $(INSTALL
) $(IFLAGS2
) $^.quantify
$(FINAL_TARGET
)
1108 ifdef DTRACE_PROBE_OBJ
1109 EXTRA_DEPS
+= $(DTRACE_PROBE_OBJ
)
1112 $(filter %.
$(LIB_SUFFIX
),$(LIBRARY
)): $(OBJS
) $(LOBJS
) $(SHARED_LIBRARY_LIBS_DEPS
) $(EXTRA_DEPS
) $(GLOBAL_DEPS
)
1114 $(EXPAND_AR
) $(AR_FLAGS
) $(OBJS
) $(LOBJS
) $(SHARED_LIBRARY_LIBS
)
1117 $(filter-out %.
$(LIB_SUFFIX
),$(LIBRARY
)): $(filter %.
$(LIB_SUFFIX
),$(LIBRARY
)) $(OBJS
) $(LOBJS
) $(SHARED_LIBRARY_LIBS_DEPS
) $(EXTRA_DEPS
) $(GLOBAL_DEPS
)
1118 $(EXPAND_LIBS_GEN
) $(OBJS
) $(LOBJS
) $(SHARED_LIBRARY_LIBS
) > $@
1120 ifeq (,$(filter-out WINNT WINCE
, $(OS_ARCH
)))
1121 $(IMPORT_LIBRARY
): $(SHARED_LIBRARY
)
1124 ifeq ($(OS_ARCH
),OS2
)
1125 $(DEF_FILE
): $(OBJS
) $(SHARED_LIBRARY_LIBS
)
1127 echo LIBRARY
$(SHARED_LIBRARY_NAME
) INITINSTANCE TERMINSTANCE
> $@
1129 echo CODE LOADONCALL MOVEABLE DISCARDABLE
>> $@
1130 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED
>> $@
1135 $(IMPORT_LIBRARY
): $(SHARED_LIBRARY
)
1141 $(HOST_LIBRARY
): $(HOST_OBJS
) Makefile
1143 $(HOST_AR
) $(HOST_AR_FLAGS
) $(HOST_OBJS
)
1148 ifdef DTRACE_PROBE_OBJ
1149 ifndef DTRACE_LIB_DEPENDENT
1150 $(DTRACE_PROBE_OBJ
): $(OBJS
)
1151 dtrace
-G
-C
-s
$(MOZILLA_DTRACE_SRC
) -o
$(DTRACE_PROBE_OBJ
) $(OBJS
)
1157 # On Darwin (Mac OS X), dwarf2 debugging uses debug info left in .o files,
1158 # so instead of deleting .o files after repacking them into a dylib, we make
1159 # symlinks back to the originals. The symlinks are a no-op for stabs debugging,
1160 # so no need to conditionalize on OS version or debugging format.
1162 $(SHARED_LIBRARY
): $(OBJS
) $(LOBJS
) $(DEF_FILE
) $(RESFILE
) $(SHARED_LIBRARY_LIBS_DEPS
) $(LIBRARY
) $(EXTRA_DEPS
) $(DSO_LDOPTS_DEPS
) $(GLOBAL_DEPS
)
1163 ifndef INCREMENTAL_LINKER
1166 ifdef DTRACE_LIB_DEPENDENT
1168 dtrace
-G
-C
-s
$(MOZILLA_DTRACE_SRC
) -o
$(DTRACE_PROBE_OBJ
) $(shell $(EXPAND_LIBS
) $(MOZILLA_PROBE_LIBS
))
1170 $(EXPAND_MKSHLIB
) $(SHLIB_LDSTARTFILE
) $(OBJS
) $(LOBJS
) $(SUB_SHLOBJS
) $(DTRACE_PROBE_OBJ
) $(MOZILLA_PROBE_LIBS
) $(RESFILE
) $(LDFLAGS
) $(SHARED_LIBRARY_LIBS
) $(EXTRA_DSO_LDOPTS
) $(OS_LIBS
) $(EXTRA_LIBS
) $(DEF_FILE
) $(SHLIB_LDENDFILE
)
1171 @
rm -f
$(DTRACE_PROBE_OBJ
)
1172 else # ! DTRACE_LIB_DEPENDENT
1173 $(EXPAND_MKSHLIB
) $(SHLIB_LDSTARTFILE
) $(OBJS
) $(DTRACE_PROBE_OBJ
) $(LOBJS
) $(SUB_SHLOBJS
) $(RESFILE
) $(LDFLAGS
) $(SHARED_LIBRARY_LIBS
) $(EXTRA_DSO_LDOPTS
) $(OS_LIBS
) $(EXTRA_LIBS
) $(DEF_FILE
) $(SHLIB_LDENDFILE
)
1174 endif # DTRACE_LIB_DEPENDENT
1176 ifeq (_WINNT
,$(GNU_CC
)_
$(OS_ARCH
))
1177 ifdef MSMANIFEST_TOOL
1178 ifdef EMBED_MANIFEST_AT
1179 @if
test -f
$@.manifest
; then \
1180 mt.exe
-NOLOGO
-MANIFEST
$@.manifest
-OUTPUTRESOURCE
:$@\
;$(EMBED_MANIFEST_AT
); \
1181 rm -f
$@.manifest
; \
1183 endif # EMBED_MANIFEST_AT
1184 endif # MSVC with manifest tool
1185 ifdef MOZ_PROFILE_GENERATE
1186 touch
-t
`date +%Y%m%d%H%M.%S -d "now+5seconds"` pgo.relink
1188 endif # WINNT && !GCC
1189 @
rm -f foodummyfilefoo
$(DELETE_AFTER_LINK
)
1194 ifdef MOZ_POST_DSO_LIB_COMMAND
1195 $(MOZ_POST_DSO_LIB_COMMAND
) $@
1199 ifdef COMPILER_DEPEND
1200 ifeq ($(SOLARIS_SUNPRO_CC
),1)
1201 _MDDEPFILE
= $(MDDEPDIR
)/$(@F
).pp
1203 define MAKE_DEPS_AUTO_CC
1204 if
test -d
$(@D
); then \
1205 echo
"Building deps for $< using Sun Studio cc"; \
1206 $(CC
) $(COMPILE_CFLAGS
) -xM
$< >$(_MDDEPFILE
) ; \
1209 define MAKE_DEPS_AUTO_CXX
1210 if
test -d
$(@D
); then \
1211 echo
"Building deps for $< using Sun Studio CC"; \
1212 $(CXX
) $(COMPILE_CXXFLAGS
) -xM
$< >$(_MDDEPFILE
) ; \
1215 endif # Sun Studio on Solaris
1216 else # COMPILER_DEPEND
1218 # Generate dependencies on the fly
1220 _MDDEPFILE
= $(MDDEPDIR
)/$(@F
).pp
1222 define MAKE_DEPS_AUTO
1223 if
test -d
$(@D
); then \
1224 echo
"Building deps for $<"; \
1225 $(MKDEPEND
) -o
'.$(OBJ_SUFFIX)' -f-
$(DEFINES
) $(ACDEFINES
) $(XULPPFLAGS
) $(INCLUDES
) $< 2>/dev
/null | sed
-e
"s|^[^ ]*/||" > $(_MDDEPFILE
) ; \
1229 MAKE_DEPS_AUTO_CC
= $(MAKE_DEPS_AUTO
)
1230 MAKE_DEPS_AUTO_CXX
= $(MAKE_DEPS_AUTO
)
1232 endif # COMPILER_DEPEND
1234 endif # MOZ_AUTO_DEPS
1236 # Rules for building native targets must come first because of the host_ prefix
1237 host_
%.
$(OBJ_SUFFIX
): %.c
$(GLOBAL_DEPS
)
1239 $(ELOG
) $(HOST_CC
) $(HOST_OUTOPTION
)$@
-c
$(HOST_CFLAGS
) $(INCLUDES
) $(NSPR_CFLAGS
) $(_VPATH_SRCS
)
1241 host_
%.
$(OBJ_SUFFIX
): %.
cpp $(GLOBAL_DEPS
)
1243 $(ELOG
) $(HOST_CXX
) $(HOST_OUTOPTION
)$@
-c
$(HOST_CXXFLAGS
) $(INCLUDES
) $(NSPR_CFLAGS
) $(_VPATH_SRCS
)
1245 host_
%.
$(OBJ_SUFFIX
): %.
cc $(GLOBAL_DEPS
)
1247 $(ELOG
) $(HOST_CXX
) $(HOST_OUTOPTION
)$@
-c
$(HOST_CXXFLAGS
) $(INCLUDES
) $(NSPR_CFLAGS
) $(_VPATH_SRCS
)
1249 host_
%.
$(OBJ_SUFFIX
): %.m
$(GLOBAL_DEPS
)
1251 $(ELOG
) $(HOST_CC
) $(HOST_OUTOPTION
)$@
-c
$(HOST_CFLAGS
) $(HOST_CMFLAGS
) $(INCLUDES
) $(NSPR_CFLAGS
) $(_VPATH_SRCS
)
1253 host_
%.
$(OBJ_SUFFIX
): %.mm
$(GLOBAL_DEPS
)
1255 $(ELOG
) $(HOST_CXX
) $(HOST_OUTOPTION
)$@
-c
$(HOST_CXXFLAGS
) $(HOST_CMMFLAGS
) $(INCLUDES
) $(NSPR_CFLAGS
) $(_VPATH_SRCS
)
1257 %:: %.c
$(GLOBAL_DEPS
)
1259 @
$(MAKE_DEPS_AUTO_CC
)
1260 $(ELOG
) $(CC
) $(CFLAGS
) $(LDFLAGS
) $(OUTOPTION
)$@
$(_VPATH_SRCS
)
1262 %.
$(OBJ_SUFFIX
): %.c
$(GLOBAL_DEPS
)
1264 @
$(MAKE_DEPS_AUTO_CC
)
1265 $(ELOG
) $(CC
) $(OUTOPTION
)$@
-c
$(COMPILE_CFLAGS
) $(_VPATH_SRCS
)
1267 # DEFINES and ACDEFINES are needed here to enable conditional compilation of Q_OBJECTs:
1268 # 'moc' only knows about #defines it gets on the command line (-D...), not in
1269 # included headers like mozilla-config.h
1270 moc_
%.
cpp: %.h
$(GLOBAL_DEPS
)
1271 $(MOC
) $(DEFINES
) $(ACDEFINES
) $< $(OUTOPTION
)$@
1273 moc_
%.
cc: %.
cc $(GLOBAL_DEPS
)
1275 $(ELOG
) $(MOC
) $(DEFINES
) $(ACDEFINES
) $(_VPATH_SRCS
:.
cc=.h
) $(OUTOPTION
)$@
1278 # The AS_DASH_C_FLAG is needed cause not all assemblers (Solaris) accept
1280 %.
$(OBJ_SUFFIX
): %.
$(ASM_SUFFIX
) $(GLOBAL_DEPS
)
1281 $(AS
) -o
$@
$(ASFLAGS
) $(AS_DASH_C_FLAG
) $(_VPATH_SRCS
)
1284 %.
$(OBJ_SUFFIX
): %.S
$(GLOBAL_DEPS
)
1285 $(AS
) -o
$@
$(ASFLAGS
) -c
$<
1287 %:: %.
cpp $(GLOBAL_DEPS
)
1288 @
$(MAKE_DEPS_AUTO_CXX
)
1289 $(CCC
) $(OUTOPTION
)$@
$(CXXFLAGS
) $(_VPATH_SRCS
) $(LDFLAGS
)
1292 # Please keep the next two rules in sync.
1294 %.
$(OBJ_SUFFIX
): %.
cc $(GLOBAL_DEPS
)
1296 @
$(MAKE_DEPS_AUTO_CXX
)
1297 $(ELOG
) $(CCC
) $(OUTOPTION
)$@
-c
$(COMPILE_CXXFLAGS
) $(_VPATH_SRCS
)
1299 %.
$(OBJ_SUFFIX
): %.
cpp $(GLOBAL_DEPS
)
1301 @
$(MAKE_DEPS_AUTO_CXX
)
1302 ifdef STRICT_CPLUSPLUS_SUFFIX
1303 echo
"#line 1 \"$*.cpp\"" | cat
- $*.
cpp > t_
$*.
cc
1304 $(ELOG
) $(CCC
) -o
$@
-c
$(COMPILE_CXXFLAGS
) t_
$*.
cc
1307 $(ELOG
) $(CCC
) $(OUTOPTION
)$@
-c
$(COMPILE_CXXFLAGS
) $(_VPATH_SRCS
)
1308 endif #STRICT_CPLUSPLUS_SUFFIX
1310 $(OBJ_PREFIX
)%.
$(OBJ_SUFFIX
): %.mm
$(GLOBAL_DEPS
)
1312 @
$(MAKE_DEPS_AUTO_CXX
)
1313 $(ELOG
) $(CCC
) -o
$@
-c
$(COMPILE_CXXFLAGS
) $(COMPILE_CMMFLAGS
) $(_VPATH_SRCS
)
1315 $(OBJ_PREFIX
)%.
$(OBJ_SUFFIX
): %.m
$(GLOBAL_DEPS
)
1317 @
$(MAKE_DEPS_AUTO_CC
)
1318 $(ELOG
) $(CC
) -o
$@
-c
$(COMPILE_CFLAGS
) $(COMPILE_CMFLAGS
) $(_VPATH_SRCS
)
1321 $(CCC
) -S
$(COMPILE_CXXFLAGS
) $(_VPATH_SRCS
)
1324 $(CCC
) -S
$(COMPILE_CXXFLAGS
) $(_VPATH_SRCS
)
1327 $(CC
) -S
$(COMPILE_CFLAGS
) $(_VPATH_SRCS
)
1330 $(CCC
) -C
-E
$(COMPILE_CXXFLAGS
) $(_VPATH_SRCS
) > $*.i
1333 $(CCC
) -C
-E
$(COMPILE_CXXFLAGS
) $(_VPATH_SRCS
) > $*.i
1336 $(CC
) -C
-E
$(COMPILE_CFLAGS
) $(_VPATH_SRCS
) > $*.i
1339 $(CCC
) -C
-E
$(COMPILE_CXXFLAGS
) $(COMPILE_CMMFLAGS
) $(_VPATH_SRCS
) > $*.i
1342 @echo Creating Resource file
: $@
1343 ifeq ($(OS_ARCH
),OS2
)
1344 $(RC
) $(RCFLAGS
:-D
%=-d
%) -i
$(subst /,\
,$(srcdir)) -r
$< $@
1347 $(RC
) $(RCFLAGS
) $(filter-out -U
%,$(DEFINES
)) $(INCLUDES
:-I
%=--include-dir
%) $(OUTOPTION
)$@
$(_VPATH_SRCS
)
1349 $(RC
) $(RCFLAGS
) -r
$(DEFINES
) $(INCLUDES
) $(OUTOPTION
)$@
$(_VPATH_SRCS
)
1353 # need 3 separate lines for OS/2
1360 rm -f
$@
; cp
$< $@
; chmod
+x
$@
1362 # Cancel these implicit rules
1372 ###############################################################################
1374 ###############################################################################
1375 ifneq (,$(filter OS2 WINNT WINCE
,$(OS_ARCH
)))
1382 SPACE
:= $(EMPTY
) $(EMPTY
)
1384 # MSYS has its own special path form, but javac expects the source and class
1385 # paths to be in the DOS form (i.e. e:/builds/...). This function does the
1386 # appropriate conversion on Windows, but is a noop on other systems.
1387 ifeq (,$(filter-out WINNT WINCE
, $(HOST_OS_ARCH
)))
1388 # We use 'pwd -W' to get DOS form of the path. However, since the given path
1389 # could be a file or a non-existent path, we cannot call 'pwd -W' directly
1390 # on the path. Instead, we extract the root path (i.e. "c:/"), call 'pwd -W'
1391 # on it, then merge with the rest of the path.
1392 root-path
= $(shell echo
$(1) | sed
-e
"s|\(/[^/]*\)/\?\(.*\)|\1|")
1393 non-root-path
= $(shell echo
$(1) | sed
-e
"s|\(/[^/]*\)/\?\(.*\)|\2|")
1394 normalizepath
= $(foreach p
,$(1),$(if
$(filter /%,$(1)),$(patsubst %/,%,$(shell cd
$(call root-path
,$(1)) && pwd
-W
))/$(call non-root-path
,$(1)),$(1)))
1396 normalizepath
= $(1)
1399 _srcdir
= $(call normalizepath
,$(srcdir))
1400 ifdef JAVA_SOURCEPATH
1401 SP
= $(subst $(SPACE
),$(SEP
),$(call normalizepath
,$(strip $(JAVA_SOURCEPATH
))))
1402 _JAVA_SOURCEPATH
= ".$(SEP)$(_srcdir)$(SEP)$(SP)"
1404 _JAVA_SOURCEPATH
= ".$(SEP)$(_srcdir)"
1407 ifdef JAVA_CLASSPATH
1408 CP
= $(subst $(SPACE
),$(SEP
),$(call normalizepath
,$(strip $(JAVA_CLASSPATH
))))
1409 _JAVA_CLASSPATH
= ".$(SEP)$(CP)"
1418 $(_JAVA_DIR
)/%.class
: %.java
$(GLOBAL_DEPS
) $(_JAVA_DIR
)
1419 $(JAVAC
) $(JAVAC_FLAGS
) -classpath
$(_JAVA_CLASSPATH
) \
1420 -sourcepath
$(_JAVA_SOURCEPATH
) -d
$(_JAVA_DIR
) $(_VPATH_SRCS
)
1422 $(JAVA_LIBRARY
): $(addprefix $(_JAVA_DIR
)/,$(JAVA_SRCS
:.java
=.class
)) $(GLOBAL_DEPS
)
1423 $(JAR
) cf
$@
-C
$(_JAVA_DIR
) .
1425 GARBAGE_DIRS
+= $(_JAVA_DIR
)
1427 ###############################################################################
1429 ###############################################################################
1431 # Note: Passing depth to make-makefile is optional.
1432 # It saves the script some work, though.
1433 Makefile
: Makefile.in
1434 @
$(PERL
) $(AUTOCONF_TOOLS
)/make-makefile
-t
$(topsrcdir
) -d
$(DEPTH
)
1437 # VPATH does not work on some machines in this case, so add $(srcdir)
1438 $(SUBMAKEFILES
): % : $(srcdir)/%.in
1439 $(PERL
) $(AUTOCONF_TOOLS
)/make-makefile
-t
$(topsrcdir
) -d
$(DEPTH
) $@
1442 ifdef AUTOUPDATE_CONFIGURE
1443 $(topsrcdir
)/configure
: $(topsrcdir
)/configure.in
1444 (cd
$(topsrcdir
) && $(AUTOCONF
)) && (cd
$(DEPTH
) && .
/config.status
--recheck
)
1447 ###############################################################################
1448 # Bunch of things that extend the 'export' rule (in order):
1449 ###############################################################################
1451 ################################################################################
1452 # Copy each element of EXPORTS to $(DIST)/include
1455 ifneq ($(XPIDLSRCS
),)
1461 ifneq ($(XPI_NAME
),)
1465 export:: $(FINAL_TARGET
)
1468 ifndef NO_DIST_INSTALL
1471 $(INSTALL
) $(IFLAGS1
) $^
$(DIST
)/include
1473 endif # NO_DIST_INSTALL
1475 define EXPORT_NAMESPACE_RULE
1476 ifndef NO_DIST_INSTALL
1477 export:: $(EXPORTS_
$(namespace
))
1478 $(INSTALL
) $(IFLAGS1
) $$^
$(DIST
)/include/$(namespace
)
1479 endif # NO_DIST_INSTALL
1482 $(foreach namespace
,$(EXPORTS_NAMESPACES
),$(eval
$(EXPORT_NAMESPACE_RULE
)))
1484 ################################################################################
1485 # Copy each element of PREF_JS_EXPORTS
1490 ifneq (,$(XPI_NAME
)$(LIBXUL_SDK
))
1491 PREF_DIR
= defaults
/preferences
1493 PREF_DIR
= defaults
/pref
1497 ifneq ($(PREF_JS_EXPORTS
),)
1498 # on win32, pref files need CRLF line endings... see bug 206029
1499 ifeq (WINNT
,$(OS_ARCH
))
1500 PREF_PPFLAGS
= --line-endings
=crlf
1503 ifndef NO_DIST_INSTALL
1504 $(FINAL_TARGET
)/$(PREF_DIR
):
1507 libs
:: $(FINAL_TARGET
)/$(PREF_DIR
) $(PREF_JS_EXPORTS
)
1509 for i in
$(PREF_JS_EXPORTS
); do \
1510 dest
=$(FINAL_TARGET
)/$(PREF_DIR
)/`basename $$i`; \
1512 $(PYTHON
) $(topsrcdir
)/config
/Preprocessor.py
$(PREF_PPFLAGS
) $(DEFINES
) $(ACDEFINES
) $(XULPPFLAGS
) $$i > $$dest; \
1517 ################################################################################
1518 # Copy each element of AUTOCFG_JS_EXPORTS to $(FINAL_TARGET)/defaults/autoconfig
1520 ifneq ($(AUTOCFG_JS_EXPORTS
),)
1521 $(FINAL_TARGET
)/defaults
/autoconfig
::
1524 ifndef NO_DIST_INSTALL
1525 export:: $(AUTOCFG_JS_EXPORTS
) $(FINAL_TARGET
)/defaults
/autoconfig
1526 $(INSTALL
) $(IFLAGS1
) $^
1530 ################################################################################
1531 # Export the elements of $(XPIDLSRCS)
1532 # generating .h and .xpt files and moving them to the appropriate places.
1534 ifneq ($(XPIDLSRCS
),)
1536 export:: $(patsubst %.idl
,$(XPIDL_GEN_DIR
)/%.h
, $(XPIDLSRCS
))
1539 XPIDL_MODULE
= $(MODULE
)
1542 ifeq ($(XPIDL_MODULE
),) # we need $(XPIDL_MODULE) to make $(XPIDL_MODULE).xpt
1545 @echo
"*** Error processing XPIDLSRCS:"
1546 @echo
"Please define MODULE or XPIDL_MODULE when defining XPIDLSRCS,"
1547 @echo
"so we have a module name to use when creating MODULE.xpt."
1548 @echo
; sleep
2; false
1554 # generate .h files from into $(XPIDL_GEN_DIR), then export to $(DIST)/include;
1555 # warn against overriding existing .h file.
1556 $(XPIDL_GEN_DIR
)/.done
:
1557 @if
test ! -d
$(XPIDL_GEN_DIR
); then echo Creating
$(XPIDL_GEN_DIR
)/.done
; rm -rf
$(XPIDL_GEN_DIR
); mkdir
$(XPIDL_GEN_DIR
); fi
1560 # don't depend on $(XPIDL_GEN_DIR), because the modification date changes
1561 # with any addition to the directory, regenerating all .h files -> everything.
1563 $(XPIDL_GEN_DIR
)/%.h
: %.idl
$(XPIDL_COMPILE
) $(XPIDL_GEN_DIR
)/.done
1565 $(ELOG
) $(XPIDL_COMPILE
) -m header
-w
$(XPIDL_FLAGS
) -o
$(XPIDL_GEN_DIR
)/$* $(_VPATH_SRCS
)
1566 @if
test -n
"$(findstring $*.h, $(EXPORTS))"; \
1567 then echo
"*** WARNING: file $*.h generated from $*.idl overrides $(srcdir)/$*.h"; else true
; fi
1570 # generate intermediate .xpt files into $(XPIDL_GEN_DIR), then link
1571 # into $(XPIDL_MODULE).xpt and export it to $(FINAL_TARGET)/components.
1572 $(XPIDL_GEN_DIR
)/%.xpt
: %.idl
$(XPIDL_COMPILE
) $(XPIDL_GEN_DIR
)/.done
1574 $(ELOG
) $(XPIDL_COMPILE
) -m typelib
-w
$(XPIDL_FLAGS
) -e
$@
-d
$(MDDEPDIR
)/$*.pp
$(_VPATH_SRCS
)
1576 # no need to link together if XPIDLSRCS contains only XPIDL_MODULE
1577 ifneq ($(XPIDL_MODULE
).idl
,$(strip $(XPIDLSRCS
)))
1578 $(XPIDL_GEN_DIR
)/$(XPIDL_MODULE
).xpt
: $(patsubst %.idl
,$(XPIDL_GEN_DIR
)/%.xpt
,$(XPIDLSRCS
)) $(GLOBAL_DEPS
) $(XPIDL_LINK
)
1579 $(XPIDL_LINK
) $(XPIDL_GEN_DIR
)/$(XPIDL_MODULE
).xpt
$(patsubst %.idl
,$(XPIDL_GEN_DIR
)/%.xpt
,$(XPIDLSRCS
))
1580 endif # XPIDL_MODULE.xpt != XPIDLSRCS
1582 libs
:: $(XPIDL_GEN_DIR
)/$(XPIDL_MODULE
).xpt
1583 ifndef NO_DIST_INSTALL
1584 $(INSTALL
) $(IFLAGS1
) $(XPIDL_GEN_DIR
)/$(XPIDL_MODULE
).xpt
$(FINAL_TARGET
)/components
1585 ifndef NO_INTERFACES_MANIFEST
1586 @
$(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_TARGET
)/components
/interfaces.manifest
"interfaces $(XPIDL_MODULE).xpt"
1587 @
$(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_TARGET
)/chrome.manifest
"manifest components/interfaces.manifest"
1593 GARBAGE_DIRS
+= $(XPIDL_GEN_DIR
)
1597 ifneq ($(XPIDLSRCS
),)
1598 # export .idl files to $(IDL_DIR)
1599 ifndef NO_DIST_INSTALL
1600 export:: $(XPIDLSRCS
) $(IDL_DIR
)
1601 $(INSTALL
) $(IFLAGS1
) $^
1603 export:: $(patsubst %.idl
,$(XPIDL_GEN_DIR
)/%.h
, $(XPIDLSRCS
)) $(DIST
)/include
1604 $(INSTALL
) $(IFLAGS1
) $^
1605 endif # NO_DIST_INSTALL
1612 # General rules for exporting idl files.
1614 # WORK-AROUND ONLY, for mozilla/tools/module-deps/bootstrap.pl build.
1615 # Bug to fix idl dependency problems w/o this extra build pass is
1616 # http://bugzilla.mozilla.org/show_bug.cgi?id=145777
1621 export-idl
:: $(SUBMAKEFILES
) $(MAKE_DIRS
)
1623 ifneq ($(XPIDLSRCS
),)
1624 ifndef NO_DIST_INSTALL
1625 export-idl
:: $(XPIDLSRCS
) $(IDL_DIR
)
1626 $(INSTALL
) $(IFLAGS1
) $^
1629 $(LOOP_OVER_PARALLEL_DIRS
)
1631 $(LOOP_OVER_TOOL_DIRS
)
1634 ifneq ($(XPIDLSRCS
),)
1636 JAVA_XPIDLSRCS
= $(XPIDLSRCS
)
1638 # A single IDL file can contain multiple interfaces, which result in multiple
1639 # Java interface files. So use hidden dependency files.
1640 JAVADEPFILES
= $(addprefix $(JAVA_GEN_DIR
)/.
,$(JAVA_XPIDLSRCS
:.idl
=.java.pp
))
1644 GARBAGE_DIRS
+= $(JAVA_GEN_DIR
)
1646 # generate .java files into _javagen/[package name dirs]
1647 _JAVA_GEN_DIR
= $(JAVA_GEN_DIR
)/$(JAVA_IFACES_PKG_NAME
)
1651 $(JAVA_GEN_DIR
)/.
%.java.pp
: %.idl
$(XPIDL_COMPILE
) $(_JAVA_GEN_DIR
)
1653 $(ELOG
) $(XPIDL_COMPILE
) -m java
-w
$(XPIDL_FLAGS
) -I
$(srcdir) -I
$(IDL_DIR
) -o
$(_JAVA_GEN_DIR
)/$* $(_VPATH_SRCS
)
1656 # "Install" generated Java interfaces. We segregate them based on the XPI_NAME.
1657 # If XPI_NAME is not set, install into the "default" directory.
1658 ifneq ($(XPI_NAME
),)
1659 JAVA_INSTALL_DIR
= $(JAVA_DIST_DIR
)/$(XPI_NAME
)
1661 JAVA_INSTALL_DIR
= $(JAVA_DIST_DIR
)/default
1664 $(JAVA_INSTALL_DIR
):
1667 export:: $(JAVA_DIST_DIR
) $(JAVADEPFILES
) $(JAVA_INSTALL_DIR
)
1668 (cd
$(JAVA_GEN_DIR
) && tar $(TAR_CREATE_FLAGS
) - .
) |
(cd
$(JAVA_INSTALL_DIR
) && tar -xf
-)
1671 endif # MOZ_JAVAXPCOM
1673 ################################################################################
1674 # Copy each element of EXTRA_COMPONENTS to $(FINAL_TARGET)/components
1675 ifneq (,$(filter %.js
,$(EXTRA_COMPONENTS
) $(EXTRA_PP_COMPONENTS
)))
1676 ifeq (,$(filter %.manifest
,$(EXTRA_COMPONENTS
) $(EXTRA_PP_COMPONENTS
)))
1677 ifndef NO_JS_MANIFEST
1678 $(error .js component without matching .manifest. See https
://developer.mozilla.org
/en
/XPCOM
/XPCOM_changes_in_Gecko_2.0
)
1683 ifdef EXTRA_COMPONENTS
1684 libs
:: $(EXTRA_COMPONENTS
)
1685 ifndef NO_DIST_INSTALL
1686 $(INSTALL
) $(IFLAGS1
) $^
$(FINAL_TARGET
)/components
1691 ifdef EXTRA_PP_COMPONENTS
1692 libs
:: $(EXTRA_PP_COMPONENTS
)
1693 ifndef NO_DIST_INSTALL
1695 $(NSINSTALL
) -D
$(FINAL_TARGET
)/components
; \
1697 fname
=`basename $$i`; \
1698 dest
=$(FINAL_TARGET
)/components
/$${fname}; \
1700 $(PYTHON
) $(topsrcdir
)/config
/Preprocessor.py
$(DEFINES
) $(ACDEFINES
) $(XULPPFLAGS
) $$i > $$dest; \
1705 EXTRA_MANIFESTS
= $(filter %.manifest
,$(EXTRA_COMPONENTS
) $(EXTRA_PP_COMPONENTS
))
1706 ifneq (,$(EXTRA_MANIFESTS
))
1708 $(PYTHON
) $(MOZILLA_DIR
)/config
/buildlist.py
$(FINAL_TARGET
)/chrome.manifest
$(patsubst %,"manifest components/%",$(notdir $(EXTRA_MANIFESTS
)))
1711 ################################################################################
1712 # Copy each element of EXTRA_JS_MODULES to $(FINAL_TARGET)/modules
1713 ifdef EXTRA_JS_MODULES
1714 libs
:: $(EXTRA_JS_MODULES
)
1715 ifndef NO_DIST_INSTALL
1716 $(INSTALL
) $(IFLAGS1
) $^
$(FINAL_TARGET
)/modules
1721 ifdef EXTRA_PP_JS_MODULES
1722 libs
:: $(EXTRA_PP_JS_MODULES
)
1723 ifndef NO_DIST_INSTALL
1725 $(NSINSTALL
) -D
$(FINAL_TARGET
)/modules
; \
1727 dest
=$(FINAL_TARGET
)/modules
/`basename $$i`; \
1729 $(PYTHON
) $(topsrcdir
)/config
/Preprocessor.py
$(DEFINES
) $(ACDEFINES
) $(XULPPFLAGS
) $$i > $$dest; \
1735 ################################################################################
1738 ifneq (,$(SDK_LIBRARY
))
1742 ifndef NO_DIST_INSTALL
1743 libs
:: $(SDK_LIBRARY
) $(SDK_LIB_DIR
)
1744 $(INSTALL
) $(IFLAGS2
) $^
1749 ifneq (,$(SDK_BINARY
))
1753 ifndef NO_DIST_INSTALL
1754 libs
:: $(SDK_BINARY
) $(SDK_BIN_DIR
)
1755 $(INSTALL
) $(IFLAGS2
) $^
1760 ################################################################################
1763 JAR_MANIFEST
:= $(srcdir)/jar.mn
1767 $(LOOP_OVER_PARALLEL_DIRS
)
1769 $(LOOP_OVER_TOOL_DIRS
)
1771 $(FINAL_TARGET
)/chrome
:
1774 libs realchrome
:: $(CHROME_DEPS
) $(FINAL_TARGET
)/chrome
1775 ifneq (,$(wildcard $(JAR_MANIFEST
)))
1776 ifndef NO_DIST_INSTALL
1777 $(PYTHON
) $(MOZILLA_DIR
)/config
/JarMaker.py \
1778 $(QUIET
) -j
$(FINAL_TARGET
)/chrome \
1779 $(MAKE_JARS_FLAGS
) $(XULPPFLAGS
) $(DEFINES
) $(ACDEFINES
) \
1784 ifneq ($(DIST_FILES
),)
1788 libs
:: $(DIST_FILES
) $(DIST
)/bin
1790 for f in
$(DIST_FILES
); do \
1791 dest
=$(FINAL_TARGET
)/`basename $$f`; \
1793 $(PYTHON
) $(MOZILLA_DIR
)/config
/Preprocessor.py \
1794 $(XULAPP_DEFINES
) $(DEFINES
) $(ACDEFINES
) $(XULPPFLAGS
) \
1795 $(srcdir)/$$f > $$dest; \
1799 ifneq ($(DIST_CHROME_FILES
),)
1800 libs
:: $(DIST_CHROME_FILES
)
1802 for f in
$(DIST_CHROME_FILES
); do \
1803 dest
=$(FINAL_TARGET
)/chrome
/`basename $$f`; \
1805 $(PYTHON
) $(MOZILLA_DIR
)/config
/Preprocessor.py \
1806 $(XULAPP_DEFINES
) $(DEFINES
) $(ACDEFINES
) $(XULPPFLAGS
) \
1807 $(srcdir)/$$f > $$dest; \
1811 ifneq ($(XPI_PKGNAME
),)
1815 @echo
"Stripping $(XPI_PKGNAME) package directory..."
1816 @echo
$(FINAL_TARGET
)
1817 @cd
$(FINAL_TARGET
) && find .
! -type d \
1827 ! -name
"*.properties" \
1838 $(PLATFORM_EXCLUDE_LIST
) \
1839 -exec
$(STRIP
) $(STRIP_FLAGS
) {} >/dev
/null
2>&1 \
;
1842 @echo
"Packaging $(XPI_PKGNAME).xpi..."
1843 cd
$(FINAL_TARGET
) && $(ZIP
) -qr ..
/$(XPI_PKGNAME
).xpi
*
1846 ifdef INSTALL_EXTENSION_ID
1848 $(error XPI_NAME must be set for INSTALL_EXTENSION_ID
)
1852 $(RM
) -rf
"$(DIST)/bin/extensions/$(INSTALL_EXTENSION_ID)"
1853 $(NSINSTALL
) -D
"$(DIST)/bin/extensions/$(INSTALL_EXTENSION_ID)"
1854 cd
$(FINAL_TARGET
) && tar $(TAR_CREATE_FLAGS
) - . |
(cd
"../../bin/extensions/$(INSTALL_EXTENSION_ID)" && tar -xf
-)
1858 ifneq (,$(filter flat symlink
,$(MOZ_CHROME_FILE_FORMAT
)))
1859 _JAR_REGCHROME_DISABLE_JAR
=1
1861 _JAR_REGCHROME_DISABLE_JAR
=0
1864 REGCHROME
= $(PERL
) -I
$(MOZILLA_DIR
)/config
$(MOZILLA_DIR
)/config
/add-chrome.pl \
1865 $(if
$(filter gtk2
,$(MOZ_WIDGET_TOOLKIT
)),-x
) \
1866 $(if
$(CROSS_COMPILE
),-o
$(OS_ARCH
)) $(FINAL_TARGET
)/chrome
/installed-chrome.txt \
1867 $(_JAR_REGCHROME_DISABLE_JAR
)
1869 REGCHROME_INSTALL
= $(PERL
) -I
$(MOZILLA_DIR
)/config
$(MOZILLA_DIR
)/config
/add-chrome.pl \
1870 $(if
$(filter gtk2
,$(MOZ_WIDGET_TOOLKIT
)),-x
) \
1871 $(if
$(CROSS_COMPILE
),-o
$(OS_ARCH
)) $(DESTDIR
)$(mozappdir
)/chrome
/installed-chrome.txt \
1872 $(_JAR_REGCHROME_DISABLE_JAR
)
1875 #############################################################################
1877 #############################################################################
1878 ifdef COMPILER_DEPEND
1880 @echo
"$(MAKE): No need to run depend target.\
1881 Using compiler-based depend." 1>&2
1882 ifeq ($(GNU_CC
)$(GNU_CXX
),)
1884 @echo
"`echo '$(MAKE):'|sed 's/./ /g'`"\
1885 '(Compiler-based depend was turned on by "--enable-md".)' 1>&2
1888 @space
="`echo '$(MAKE): '|sed 's/./ /g'`";\
1889 echo
"$$space"'Since you are using a GNU compiler,\
1890 it is on by default.' 1>&2; \
1891 echo
"$$space"'To turn it off, pass --disable-md to configure.' 1>&2
1894 else # ! COMPILER_DEPEND
1896 ifndef MOZ_AUTO_DEPS
1898 define MAKE_DEPS_NOAUTO
1899 $(MKDEPEND
) -w1024
-o
'.$(OBJ_SUFFIX)' -f-
$(DEFINES
) $(ACDEFINES
) $(INCLUDES
) $< 2>/dev
/null | sed
-e
"s|^[^ ]*/||" > $@
1902 $(MDDEPDIR
)/%.pp
: %.c
1904 @
$(MAKE_DEPS_NOAUTO
)
1906 $(MDDEPDIR
)/%.pp
: %.
cpp
1908 @
$(MAKE_DEPS_NOAUTO
)
1910 $(MDDEPDIR
)/%.pp
: %.s
1912 @
$(MAKE_DEPS_NOAUTO
)
1914 ifneq (,$(OBJS
)$(XPIDLSRCS
)$(SIMPLE_PROGRAMS
))
1915 depend
:: $(SUBMAKEFILES
) $(MAKE_DIRS
) $(MDDEPFILES
)
1917 depend
:: $(SUBMAKEFILES
)
1919 $(LOOP_OVER_PARALLEL_DIRS
)
1921 $(LOOP_OVER_TOOL_DIRS
)
1923 dependclean
:: $(SUBMAKEFILES
)
1925 $(LOOP_OVER_PARALLEL_DIRS
)
1927 $(LOOP_OVER_TOOL_DIRS
)
1929 endif # MOZ_AUTO_DEPS
1931 endif # COMPILER_DEPEND
1934 #############################################################################
1935 # MDDEPDIR is the subdirectory where all the dependency files are placed.
1936 # This uses a make rule (instead of a macro) to support parallel
1937 # builds (-jN). If this were done in the LOOP_OVER_DIRS macro, two
1938 # processes could simultaneously try to create the same directory.
1940 # We use $(CURDIR) in the rule's target to ensure that we don't find
1941 # a dependency directory in the source tree via VPATH (perhaps from
1942 # a previous build in the source tree) and thus neglect to create a
1943 # dependency directory in the object directory, where we really need
1946 $(CURDIR
)/$(MDDEPDIR
):
1947 @if
test ! -d
$@
; then echo Creating
$@
; rm -rf
$@
; mkdir
$@
; else true
; fi
1949 ifneq (,$(filter-out all chrome default
export realchrome tools
clean clobber clobber_all
distclean realclean,$(MAKECMDGOALS
)))
1950 ifneq (,$(OBJS
)$(XPIDLSRCS
)$(SIMPLE_PROGRAMS
))
1951 MDDEPEND_FILES
:= $(strip $(wildcard $(MDDEPDIR
)/*.pp
))
1953 ifneq (,$(MDDEPEND_FILES
))
1954 # The script mddepend.pl checks the dependencies and writes to stdout
1955 # one rule to force out-of-date objects. For example,
1956 # foo.o boo.o: FORCE
1957 # The script has an advantage over including the *.pp files directly
1958 # because it handles the case when header files are removed from the build.
1959 # 'make' would complain that there is no way to build missing headers.
1960 ALL_PP_RESULTS
= $(shell $(PERL
) $(BUILD_TOOLS
)/mddepend.pl
- $(MDDEPEND_FILES
))
1961 $(eval
$(ALL_PP_RESULTS
))
1966 #############################################################################
1968 -include $(topsrcdir
)/$(MOZ_BUILD_APP
)/app-rules.mk
1969 -include $(MY_RULES
)
1972 # Generate Emacs tags in a file named TAGS if ETAGS was set in $(MY_CONFIG)
1976 ifneq ($(CSRCS
)$(CPPSRCS
)$(HEADERS
),)
1978 TAGS
:: $(CSRCS
) $(CPPSRCS
) $(HEADERS
)
1979 $(ETAGS
) $(CSRCS
) $(CPPSRCS
) $(HEADERS
)
1983 ################################################################################
1984 # Special gmake rules.
1985 ################################################################################
1989 # Disallow parallel builds with MSVC < 8
1991 ifneq (,$(filter 1200 1300 1310,$(_MSC_VER
)))
1996 # Re-define the list of default suffixes, so gmake won't have to churn through
1997 # hundreds of built-in suffix rules for stuff we don't need.
2002 # Fake targets. Always run these rules, even if a file/directory with that
2003 # name already exists.
2005 .PHONY
: all alltags boot checkout chrome realchrome
clean clobber clobber_all
export install libs makefiles
realclean run_apprunner tools
$(DIRS
) $(TOOL_DIRS
) FORCE
2007 # Used as a dependency to force targets to rebuild
2010 # Delete target if error occurs when building target
2013 # Properly set LIBPATTERNS for the platform
2014 .LIBPATTERNS
= $(if
$(IMPORT_LIB_SUFFIX
),$(LIB_PREFIX
)%.
$(IMPORT_LIB_SUFFIX
)) $(LIB_PREFIX
)%.
$(LIB_SUFFIX
) $(DLL_PREFIX
)%$(DLL_SUFFIX
)
2018 TAGS
: $(SUBMAKEFILES
) $(CSRCS
) $(CPPSRCS
) $(wildcard *.h
)
2019 -etags
$(CSRCS
) $(CPPSRCS
) $(wildcard *.h
)
2020 $(LOOP_OVER_PARALLEL_DIRS
)
2030 @
$(foreach tier
,$(TIERS
),echo
'$(tier):'; echo
' dirs: $(tier_$(tier)_dirs)'; echo
' staticdirs: $(tier_$(tier)_staticdirs)'; )
2042 @
$(topsrcdir
)/build
/unix
/print-depth-path.sh
2045 @
$(topsrcdir
)/build
/package
/rpm
/print-module-name.sh
2047 echo-module-filelist
:
2048 @
$(topsrcdir
)/build
/package
/rpm
/print-module-filelist.sh
2051 ifneq (,$(filter $(PROGRAM
) $(HOST_PROGRAM
) $(SIMPLE_PROGRAMS
) $(HOST_LIBRARY
) $(LIBRARY
) $(SHARED_LIBRARY
),$(TARGETS
)))
2052 @echo
--------------------------------------------------------------------------------
2053 @echo
"PROGRAM = $(PROGRAM)"
2054 @echo
"SIMPLE_PROGRAMS = $(SIMPLE_PROGRAMS)"
2055 @echo
"LIBRARY = $(LIBRARY)"
2056 @echo
"SHARED_LIBRARY = $(SHARED_LIBRARY)"
2057 @echo
"SHARED_LIBRARY_LIBS = $(SHARED_LIBRARY_LIBS)"
2058 @echo
"LIBS = $(LIBS)"
2059 @echo
"DEF_FILE = $(DEF_FILE)"
2060 @echo
"IMPORT_LIBRARY = $(IMPORT_LIBRARY)"
2061 @echo
"STATIC_LIBS = $(STATIC_LIBS)"
2062 @echo
"SHARED_LIBS = $(SHARED_LIBS)"
2063 @echo
"EXTRA_DSO_LIBS = $(EXTRA_DSO_LIBS)"
2064 @echo
"EXTRA_DSO_LDOPTS = $(EXTRA_DSO_LDOPTS)"
2065 @echo
"DEPENDENT_LIBS = $(DEPENDENT_LIBS)"
2066 @echo
--------------------------------------------------------------------------------
2068 $(LOOP_OVER_PARALLEL_DIRS
)
2072 @echo
"MOZ_BUILD_ROOT = $(MOZ_BUILD_ROOT)"
2073 @echo
"MOZ_WIDGET_TOOLKIT = $(MOZ_WIDGET_TOOLKIT)"
2075 @echo
"CXX = $(CXX)"
2076 @echo
"CCC = $(CCC)"
2077 @echo
"CPP = $(CPP)"
2080 @echo
"IMPLIB = $(IMPLIB)"
2081 @echo
"FILTER = $(FILTER)"
2082 @echo
"MKSHLIB = $(MKSHLIB)"
2083 @echo
"MKCSHLIB = $(MKCSHLIB)"
2085 @echo
"CFLAGS = $(CFLAGS)"
2086 @echo
"OS_CFLAGS = $(OS_CFLAGS)"
2087 @echo
"COMPILE_CFLAGS = $(COMPILE_CFLAGS)"
2088 @echo
"CXXFLAGS = $(CXXFLAGS)"
2089 @echo
"OS_CXXFLAGS = $(OS_CXXFLAGS)"
2090 @echo
"COMPILE_CXXFLAGS = $(COMPILE_CXXFLAGS)"
2091 @echo
"COMPILE_CMFLAGS = $(COMPILE_CMFLAGS)"
2092 @echo
"COMPILE_CMMFLAGS = $(COMPILE_CMMFLAGS)"
2093 @echo
"LDFLAGS = $(LDFLAGS)"
2094 @echo
"OS_LDFLAGS = $(OS_LDFLAGS)"
2095 @echo
"DSO_LDOPTS = $(DSO_LDOPTS)"
2096 @echo
"OS_INCLUDES = $(OS_INCLUDES)"
2097 @echo
"OS_LIBS = $(OS_LIBS)"
2098 @echo
"EXTRA_LIBS = $(EXTRA_LIBS)"
2099 @echo
"BIN_FLAGS = $(BIN_FLAGS)"
2100 @echo
"INCLUDES = $(INCLUDES)"
2101 @echo
"DEFINES = $(DEFINES)"
2102 @echo
"ACDEFINES = $(ACDEFINES)"
2103 @echo
"BIN_SUFFIX = $(BIN_SUFFIX)"
2104 @echo
"LIB_SUFFIX = $(LIB_SUFFIX)"
2105 @echo
"DLL_SUFFIX = $(DLL_SUFFIX)"
2106 @echo
"IMPORT_LIB_SUFFIX = $(IMPORT_LIB_SUFFIX)"
2107 @echo
"INSTALL = $(INSTALL)"
2110 @echo
"HOST_CC = $(HOST_CC)"
2111 @echo
"HOST_CXX = $(HOST_CXX)"
2112 @echo
"HOST_CFLAGS = $(HOST_CFLAGS)"
2113 @echo
"HOST_LDFLAGS = $(HOST_LDFLAGS)"
2114 @echo
"HOST_LIBS = $(HOST_LIBS)"
2115 @echo
"HOST_EXTRA_LIBS = $(HOST_EXTRA_LIBS)"
2116 @echo
"HOST_EXTRA_DEPS = $(HOST_EXTRA_DEPS)"
2117 @echo
"HOST_PROGRAM = $(HOST_PROGRAM)"
2118 @echo
"HOST_OBJS = $(HOST_OBJS)"
2119 @echo
"HOST_PROGOBJS = $(HOST_PROGOBJS)"
2120 @echo
"HOST_LIBRARY = $(HOST_LIBRARY)"
2123 @echo
"Build Modules = $(BUILD_MODULES)"
2124 @echo
"Module dirs = $(BUILD_MODULE_DIRS)"
2128 $(DOXYGEN
) $(DEPTH
)/config
/doxygen.cfg
2131 check:: $(SUBMAKEFILES
) $(MAKE_DIRS
)
2132 $(LOOP_OVER_PARALLEL_DIRS
)
2134 $(LOOP_OVER_TOOL_DIRS
)
2138 FREEZE_VARIABLES
= \
2150 EXTRA_PP_COMPONENTS \
2153 $(foreach var
,$(FREEZE_VARIABLES
),$(eval
$(var
)_FROZEN
:= '$($(var))'))
2155 CHECK_FROZEN_VARIABLES
= $(foreach var
,$(FREEZE_VARIABLES
), \
2156 $(if
$(subst $($(var
)_FROZEN
),,'$($(var))'),$(error Makefile variable
'$(var)' changed value after including rules.mk. Was
$($(var
)_FROZEN
), now
$($(var
)).
)))
2159 $(CHECK_FROZEN_VARIABLES
)
2162 if
test -d
$(DIST
)/bin
; then touch
$(DIST
)/bin
/.purgecaches
; fi