1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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/
|