diff options
Diffstat (limited to 'debian/symbols.mk')
-rw-r--r-- | debian/symbols.mk | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/debian/symbols.mk b/debian/symbols.mk new file mode 100644 index 0000000000..d839c198df --- /dev/null +++ b/debian/symbols.mk @@ -0,0 +1,110 @@ +include debian/make.mk + +PYTHON := python3 -B +PRODUCT := browser + +include debian/upstream.mk + +ARCHES := amd64 i386 + +.DEFAULT_GOAL = symbols + +PACKAGE_NAME = $(PRODUCT_NAME) +PACKAGE_VERSION = $(DEBIAN_VERSION) + +define download_package +$1_$2_$3.deb: PACKAGE=$1 +$1_$2_$3.deb: VERSION=$2 +$1_$2_$3.deb: ARCH=$3 +PACKAGES += $1_$2_$3.deb + +endef + +define define_package +$(foreach arch,$(ARCHES),$(call download_package,$1,$(lastword $(subst :, ,$(PACKAGE_VERSION))),$(arch))) +endef + +$(eval $(call define_package,$(PACKAGE_NAME))) +DBG=dbgsym +ifeq (,$(filter 45.%,$(PACKAGE_VERSION))) +DBGTYPE=buildid +else +DBGTYPE=dbg +endif +DBG_PACKAGE_NAME = $(PACKAGE_NAME)-$(DBG) +$(eval $(call define_package,$(DBG_PACKAGE_NAME))) + +export APT_CONFIG=$(CURDIR)/debian/symbols.apt.conf +apt-tmp: + mkdir -p apt-tmp/config/apt.conf.d apt-tmp/config/preferences.d apt-tmp/dpkg apt-tmp/lists/lists/partial + touch apt-tmp/dpkg/status + for arch in $(ARCHES); do echo $$arch; done > apt-tmp/dpkg/arch + apt-get update + +$(PACKAGES): apt-tmp + apt-get download $(PACKAGE):$(ARCH)=$(PACKAGE_VERSION) + $(if $(filter-out $(VERSION),$(PACKAGE_VERSION)),mv $(PACKAGE)_$(subst :,%3a,$(PACKAGE_VERSION))_$(ARCH).deb $@) + [ -f "$@" ] && touch $@ + +NON_DEBUG_PACKAGES := $(filter $(PACKAGE_NAME)_%,$(PACKAGES)) + +define CR + + +endef + +$(NON_DEBUG_PACKAGES:%=%.x): $(PACKAGE_NAME)_%.x: $(PACKAGE_NAME)_% $(DBG_PACKAGE_NAME)_% + $(foreach deb,$^,dpkg-deb -x $(deb) $@$(CR)) + @touch $@ + +MOZ_OBJDIR = build-breakpad +export MOZCONFIG=$(CURDIR)/$(MOZ_OBJDIR)/mozconfig + +$(MOZ_OBJDIR)/mozconfig: + mkdir -p $(MOZ_OBJDIR) + @echo mk_add_options MOZ_OBJDIR=$(MOZ_OBJDIR) > $@ + @echo ac_add_options --enable-project=tools/crashreporter >> $@ + +$(MOZ_OBJDIR)/config.status: $(MOZ_OBJDIR)/mozconfig + $(CURDIR)/mach configure + $(CURDIR)/mach build pre-export export + +$(MOZ_OBJDIR)/dist/host/bin/dump_syms: $(MOZ_OBJDIR)/config.status + $(CURDIR)/mach build -C . toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/host + +$(MOZ_OBJDIR)/dist/bin/fileid: $(MOZ_OBJDIR)/config.status + $(CURDIR)/mach build -C . testing/tools/fileid/target + +ifneq (undefined,$(origin SYMBOL_FILE)) +$(MAKECMDGOALS): syms/%: $(SYMBOL_FILE) $(MOZ_OBJDIR)/dist/host/bin/dump_syms + @mkdir -p $(@D) + $(MOZ_OBJDIR)/dist/host/bin/dump_syms $< > $@ +endif + +ifneq (undefined,$(origin SYMBOL_FILES)) +FILE_ID = $(shell $(MOZ_OBJDIR)/dist/bin/fileid $1) +BUILD_ID = $(shell LANG=C readelf --notes $1 | awk '/Build ID/ {print substr($$3, 1, 2) "/" substr($$3, 3)}') +ifeq ($(DBGTYPE),buildid) +DBG_FILE = .build-id/$(call BUILD_ID, $1).debug +else +DBG_FILE = $(subst $(NULL) $(NULL),/,$(wordlist 2,$(words $(subst /, ,$1)),$(subst /, ,$1))) +endif + +$(SYMBOL_FILES:%=%.dbg): %.dbg: % + objcopy --decompress-debug-sections $(firstword $(subst /, ,$<))/usr/lib/debug/$(call DBG_FILE, $*) $@ + +$(SYMBOL_FILES:%=dump-%.dbg): dump-%.dbg: %.dbg $(MOZ_OBJDIR)/dist/bin/fileid + $(MAKE) -f $(firstword $(MAKEFILE_LIST)) syms/$(notdir $*)/$(call FILE_ID,$*.dbg)/$(notdir $*).sym SYMBOL_FILE="$<" + +symbols: $(SYMBOL_FILES:%=dump-%.dbg) + +else +symbols: $(NON_DEBUG_PACKAGES:%=%.x) + $(MAKE) -f $(firstword $(MAKEFILE_LIST)) symbols SYMBOL_FILES="$(shell find $(^:%=%/usr/lib) -path '*/usr/lib/debug' -prune -o \( -type f -exec sh -c "file -b --mime-type {} | grep -q application/x-sharedlib" \; -print \))" +endif + +syms.zip: + (cd syms; zip -rmD ../syms.zip .) + +upload: syms.zip + curl -X POST -H 'Auth-Token: $(API_TOKEN)' --form syms.zip=@syms.zip https://symbols.mozilla.org/upload/ |