|
| 1 | +# |
| 2 | +# ***** BEGIN LICENSE BLOCK ***** |
| 3 | +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 4 | +# |
| 5 | +# The contents of this file are subject to the Mozilla Public License Version |
| 6 | +# 1.1 (the "License"); you may not use this file except in compliance with |
| 7 | +# the License. You may obtain a copy of the License at |
| 8 | +# http://www.mozilla.org/MPL/ |
| 9 | +# |
| 10 | +# Software distributed under the License is distributed on an "AS IS" basis, |
| 11 | +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| 12 | +# for the specific language governing rights and limitations under the |
| 13 | +# License. |
| 14 | +# |
| 15 | +# The Original Code is mozilla.org code. |
| 16 | +# |
| 17 | +# The Initial Developer of the Original Code is |
| 18 | +# Netscape Communications Corporation. |
| 19 | +# Portions created by the Initial Developer are Copyright (C) 1998 |
| 20 | +# the Initial Developer. All Rights Reserved. |
| 21 | +# |
| 22 | +# Contributor(s): |
| 23 | +# |
| 24 | +# Alternatively, the contents of this file may be used under the terms of |
| 25 | +# either the GNU General Public License Version 2 or later (the "GPL"), or |
| 26 | +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
| 27 | +# in which case the provisions of the GPL or the LGPL are applicable instead |
| 28 | +# of those above. If you wish to allow use of your version of this file only |
| 29 | +# under the terms of either the GPL or the LGPL, and not to allow others to |
| 30 | +# use your version of this file under the terms of the MPL, indicate your |
| 31 | +# decision by deleting the provisions above and replace them with the notice |
| 32 | +# and other provisions required by the GPL or the LGPL. If you do not delete |
| 33 | +# the provisions above, a recipient may use your version of this file under |
| 34 | +# the terms of any one of the MPL, the GPL or the LGPL. |
| 35 | +# |
| 36 | +# ***** END LICENSE BLOCK ***** |
| 37 | + |
| 38 | +DEPTH = . |
| 39 | +topsrcdir = @top_srcdir@ |
| 40 | +srcdir = @srcdir@ |
| 41 | +VPATH = @srcdir@ |
| 42 | + |
| 43 | +ifndef .PYMAKE |
| 44 | +ifeq (,$(MAKE_VERSION)) |
| 45 | +$(error GNU Make is required) |
| 46 | +endif |
| 47 | +ifeq (,$(filter-out 3.78 3.79,$(MAKE_VERSION))) |
| 48 | +$(error GNU Make 3.80 or higher is required) |
| 49 | +endif |
| 50 | +endif |
| 51 | + |
| 52 | +include $(DEPTH)/config/autoconf.mk |
| 53 | + |
| 54 | +default:: |
| 55 | + |
| 56 | +TIERS += base |
| 57 | + |
| 58 | +# |
| 59 | +# tier "base" - basic setup |
| 60 | +# |
| 61 | +tier_base_dirs = \ |
| 62 | + config \ |
| 63 | + build \ |
| 64 | + probes \ |
| 65 | + $(NULL) |
| 66 | + |
| 67 | +ifndef LIBXUL_SDK |
| 68 | +tier_base_dirs += \ |
| 69 | + memory \ |
| 70 | + $(NULL) |
| 71 | +ifeq ($(OS_TARGET),Android) |
| 72 | +tier_base_dirs += other-licenses/android |
| 73 | +endif |
| 74 | + |
| 75 | +endif |
| 76 | + |
| 77 | +ifdef COMPILE_ENVIRONMENT |
| 78 | +include $(topsrcdir)/$(MOZ_BUILD_APP)/build.mk |
| 79 | +endif |
| 80 | + |
| 81 | + |
| 82 | +include $(topsrcdir)/config/config.mk |
| 83 | + |
| 84 | +GARBAGE_DIRS += dist _javagen _profile _tests staticlib |
| 85 | +DIST_GARBAGE = config.cache config.log config.status config-defs.h \ |
| 86 | + config/autoconf.mk \ |
| 87 | + unallmakefiles mozilla-config.h \ |
| 88 | + netwerk/necko-config.h xpcom/xpcom-config.h xpcom/xpcom-private.h \ |
| 89 | + $(topsrcdir)/.mozconfig.mk $(topsrcdir)/.mozconfig.out |
| 90 | + |
| 91 | +default alldep all:: $(topsrcdir)/configure config.status |
| 92 | + $(RM) -r $(DIST)/sdk |
| 93 | + $(RM) -r $(DIST)/include |
| 94 | + $(RM) -r $(DIST)/private |
| 95 | + $(RM) -r $(DIST)/public |
| 96 | + $(RM) -r $(DIST)/bin/components |
| 97 | + $(RM) -r _tests |
| 98 | + |
| 99 | +$(topsrcdir)/configure: $(topsrcdir)/configure.in |
| 100 | + @echo "STOP! configure.in has changed, and your configure is out of date." |
| 101 | + @echo "Please rerun autoconf and re-configure your build directory." |
| 102 | + @echo "To ignore this message, touch 'configure' in the source directory," |
| 103 | + @echo "but your build might not succeed." |
| 104 | + @exit 1 |
| 105 | + |
| 106 | +config.status: $(topsrcdir)/configure |
| 107 | + @echo "STOP! configure has changed and needs to be run in this build directory." |
| 108 | + @echo "Please rerun configure." |
| 109 | + @echo "To ignore this message, touch 'config.status' in the build directory," |
| 110 | + @echo "but your build might not succeed." |
| 111 | + @exit 1 |
| 112 | + |
| 113 | +# Build pseudo-external modules first when export is explicitly called |
| 114 | +export:: |
| 115 | + $(RM) -r $(DIST)/sdk |
| 116 | + $(MAKE) -C config export |
| 117 | + $(MAKE) tier_nspr |
| 118 | + |
| 119 | +ifdef ENABLE_TESTS |
| 120 | +# Additional makefile targets to call automated test suites |
| 121 | +include $(topsrcdir)/testing/testsuite-targets.mk |
| 122 | +endif |
| 123 | + |
| 124 | +include $(topsrcdir)/config/rules.mk |
| 125 | + |
| 126 | +distclean:: |
| 127 | + cat unallmakefiles | $(XARGS) rm -f |
| 128 | + $(RM) unallmakefiles $(DIST_GARBAGE) |
| 129 | + |
| 130 | +ifeq ($(OS_ARCH),WINNT) |
| 131 | +# we want to copy PDB files on Windows |
| 132 | +MAKE_SYM_STORE_ARGS := -c --vcs-info |
| 133 | +ifdef PDBSTR_PATH |
| 134 | +MAKE_SYM_STORE_ARGS += -i |
| 135 | +endif |
| 136 | +DUMP_SYMS_BIN ?= $(topsrcdir)/toolkit/crashreporter/tools/win32/dump_syms_vc$(_MSC_VER).exe |
| 137 | +# PDB files don't get moved to dist, so we need to scan the whole objdir |
| 138 | +MAKE_SYM_STORE_PATH := . |
| 139 | +endif |
| 140 | +ifeq ($(OS_ARCH),Darwin) |
| 141 | +# need to pass arch flags for universal builds |
| 142 | +ifdef UNIVERSAL_BINARY |
| 143 | +MAKE_SYM_STORE_ARGS := -c -a "i386 x86_64" --vcs-info |
| 144 | +MAKE_SYM_STORE_PATH := $(DIST)/universal |
| 145 | +else |
| 146 | +MAKE_SYM_STORE_ARGS := -c -a $(OS_TEST) --vcs-info |
| 147 | +MAKE_SYM_STORE_PATH := $(DIST)/bin |
| 148 | +endif |
| 149 | +DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms |
| 150 | +endif |
| 151 | +ifeq (,$(filter-out Linux SunOS,$(OS_ARCH))) |
| 152 | +MAKE_SYM_STORE_ARGS := -c --vcs-info |
| 153 | +DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms |
| 154 | +MAKE_SYM_STORE_PATH := $(DIST)/bin |
| 155 | +endif |
| 156 | + |
| 157 | +SYM_STORE_SOURCE_DIRS := $(topsrcdir) |
| 158 | + |
| 159 | +include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk |
| 160 | + |
| 161 | +ifdef MOZ_SYMBOLS_EXTRA_BUILDID |
| 162 | +EXTRA_BUILDID := -$(MOZ_SYMBOLS_EXTRA_BUILDID) |
| 163 | +endif |
| 164 | + |
| 165 | +SYMBOL_INDEX_NAME = \ |
| 166 | + $(MOZ_APP_NAME)-$(MOZ_APP_VERSION)-$(OS_TARGET)-$(BUILDID)$(EXTRA_BUILDID)-symbols.txt |
| 167 | + |
| 168 | +buildsymbols: |
| 169 | +ifdef MOZ_CRASHREPORTER |
| 170 | +ifdef USE_ELF_HACK |
| 171 | + $(MAKE) -C $(MOZ_BUILD_APP)/installer elfhack |
| 172 | +endif |
| 173 | + echo building symbol store |
| 174 | + $(RM) -r $(DIST)/crashreporter-symbols |
| 175 | + $(RM) "$(DIST)/$(SYMBOL_ARCHIVE_BASENAME).zip" |
| 176 | + $(NSINSTALL) -D $(DIST)/crashreporter-symbols |
| 177 | + OBJCOPY="$(OBJCOPY)" \ |
| 178 | + $(PYTHON) $(topsrcdir)/toolkit/crashreporter/tools/symbolstore.py \ |
| 179 | + $(MAKE_SYM_STORE_ARGS) \ |
| 180 | + $(foreach dir,$(SYM_STORE_SOURCE_DIRS),-s $(dir)) \ |
| 181 | + $(DUMP_SYMS_BIN) \ |
| 182 | + $(DIST)/crashreporter-symbols \ |
| 183 | + $(MAKE_SYM_STORE_PATH) > \ |
| 184 | + $(DIST)/crashreporter-symbols/$(SYMBOL_INDEX_NAME) |
| 185 | + echo packing symbols |
| 186 | + $(NSINSTALL) -D $(DIST)/$(PKG_PATH) |
| 187 | + cd $(DIST)/crashreporter-symbols && \ |
| 188 | + zip -r9D "../$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip" . |
| 189 | + cd $(DIST)/crashreporter-symbols && \ |
| 190 | + grep "sym" $(SYMBOL_INDEX_NAME) > $(SYMBOL_INDEX_NAME).tmp && \ |
| 191 | + mv $(SYMBOL_INDEX_NAME).tmp $(SYMBOL_INDEX_NAME) |
| 192 | + cd $(DIST)/crashreporter-symbols && \ |
| 193 | + zip -r9D "../$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip" . -i "*.sym" -i "*.txt" |
| 194 | +endif # MOZ_CRASHREPORTER |
| 195 | + |
| 196 | +uploadsymbols: |
| 197 | +ifdef MOZ_CRASHREPORTER |
| 198 | + $(SHELL) $(topsrcdir)/toolkit/crashreporter/tools/upload_symbols.sh $(SYMBOL_INDEX_NAME) "$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip" |
| 199 | +endif |
| 200 | + |
| 201 | +codesighs: |
| 202 | + $(MAKE) -C $(MOZ_BUILD_APP)/installer codesighs |
| 203 | + |
| 204 | +# defined in package-name.mk |
| 205 | +export MOZ_SOURCE_STAMP |
| 206 | + |
| 207 | +#XXX: this is a hack, since we don't want to clobber for MSVC |
| 208 | +# PGO support, but we can't do this test in client.mk |
| 209 | +ifneq ($(OS_ARCH)_$(GNU_CC), WINNT_) |
| 210 | +# No point in clobbering if PGO has been explicitly disabled. |
| 211 | +ifndef NO_PROFILE_GUIDED_OPTIMIZE |
| 212 | +maybe_clobber_profiledbuild: clean |
| 213 | +else |
| 214 | +maybe_clobber_profiledbuild: |
| 215 | +endif |
| 216 | +else |
| 217 | +maybe_clobber_profiledbuild: |
| 218 | +endif |
| 219 | + |
| 220 | +.PHONY: maybe_clobber_profiledbuild |
| 221 | + |
| 222 | +# Look for R_386_PC32 relocations in shared libs, these |
| 223 | +# break x86_64 builds and SELinux users. |
| 224 | +ifeq ($(OS_TARGET)_$(TARGET_XPCOM_ABI),Linux_x86-gcc3) |
| 225 | +scheck:: |
| 226 | + @relcount=`find $(DIST)/bin -name "*.so" | xargs objdump -R | grep R_386_PC32 | wc -l` && if test $$relcount -gt 0; then echo "FAILED: R_386_PC32 relocations detected in a shared library. Did you use a system header without adding it to config/system-headers?"; exit 1; else echo "PASSED"; fi |
| 227 | +endif |
0 commit comments