]> git.proxmox.com Git - llvm-toolchain.git/blame - debian/rules
fix typo
[llvm-toolchain.git] / debian / rules
CommitLineData
875ec1e7
SL
1#!/usr/bin/make -f
2
20d2a90c 3# polly & lldb aren't enabled for every platform
4a688750 4PROJECTS = clang;clang-tools-extra;lld;cross-project-tests;mlir
20d2a90c
EM
5# openmp & libunwind aren't enabled for every platform
6RUNTIMES = compiler-rt;libcxx;libcxxabi
3c075840 7
43b40b1a 8TARGET_BUILD := build-llvm
3b17d907 9TARGET_BUILD_STAGE2 := $(TARGET_BUILD)/tools/clang/stage2-bins
65242311 10DEB_INST := $(CURDIR)/debian/tmp/
338ca522
SL
11
12GXX_VERSIONED_PACKAGE := $(shell dpkg-query -W -f '$${Depends}' g++ | grep -o 'g++-[0-9][0-9.]*' | tail -n1 )
13GXX_VERSIONED_EXECUTABLE := $(shell dpkg -L $(GXX_VERSIONED_PACKAGE) | grep '/usr/bin/g++-[0-9][0-9.]*' | xargs ls -d | tail -n1 )
14GCC_VERSION := $(subst /usr/bin/g++-,,$(GXX_VERSIONED_EXECUTABLE))
15
42fc7bcf
SL
16LLVM_VERSION := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:([0-9]+).*,\1,p")
17LLVM_VERSION_FULL := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:([0-9.]+)(~|-)(.*),\1,p")
f01f2c14 18LLVM_VERSION_SNAPSHOT := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:(.*),\1,p")
ec919ec0 19ifeq ($(LLVM_VERSION),$(LLVM_VERSION_FULL))
228ad20a 20 LLVM_VERSION_FULL := $(LLVM_VERSION).0.0
ec919ec0 21endif
18c9c055 22
6fb05958
SL
23SOURCE_NAME := $(shell dpkg-parsechangelog -S Source)
24ifneq (,$(findstring snapshot,$(SOURCE_NAME)))
25 BRANCH_NAME=snapshot
26else
27 BRANCH_NAME=$(LLVM_VERSION)
28endif
29
875ec1e7 30SONAME_EXT := 1
430f8ff5 31SONAME_OPENMP := 5
228ad20a 32# Manage the case when the version is 3.5~svn213052-1~exp1 or 3.4.2-1
3f935e99 33DEBIAN_REVISION := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:([0-9.]+)(~|-)(.*),\3,p")
875ec1e7 34ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
187d0897 35 NJOBS := $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
6da834fd
SL
36else
37 NJOBS := $(shell nproc)
875ec1e7
SL
38endif
39
af1ace76 40VENDOR=$(shell lsb_release -is)
773d6874
SL
41DISTRO=$(shell lsb_release -sc)
42
231b7c6e 43DH_VERSION := $(shell dpkg -s debhelper | grep '^Version' | awk '{print $$2}')
99d00fae 44
583a0943 45include /usr/share/dpkg/architecture.mk
875ec1e7 46
feae1e11 47CONFIGURE_EXTRA =
708c17e6 48
5088c762 49# dpkg-buildflags support
27687a10
EM
50# disable fixfilepath in favor of the llvm-project supplied flavor, disable lto
51export DEB_BUILD_MAINT_OPTIONS = reproducible=-fixfilepath,-fixdebugpath optimize=-lto
dd07b033 52# these are handled on a per stage / build basis
5088c762
EM
53export DEB_CFLAGS_MAINT_STRIP = -g -O2
54export DEB_CXXFLAGS_MAINT_STRIP = -g -O2
55
56include /usr/share/dpkg/buildflags.mk
e5d18af7
SL
57
58# We use a stage2 build. It means that a first clang is built using gcc,
59# a second clang is built with the first
16e05820 60# And the various components are built using the second clang.
e5d18af7
SL
61# See https://llvm.org/docs/AdvancedBuilds.html
62
5088c762
EM
63# collect additional flags for all stages all builds
64CFLAGS_EXTRA = -Wno-unused-command-line-argument
65CXXFLAGS_EXTRA = -Wno-unused-command-line-argument
66LDFLAGS_EXTRA = -Wl,--build-id
67
68# collect all flags for stage 1 toolchain build only
69STAGE_1_CFLAGS = $(CFLAGS) $(CFLAGS_EXTRA) $(CPPFLAGS)
70STAGE_1_CXXFLAGS = $(CXXFLAGS) $(CXXFLAGS_EXTRA) $(CPPFLAGS)
71STAGE_1_LDFLAGS = $(LDFLAGS) $(LDFLAGS_EXTRA)
89fafb13
SL
72# If we build with libc++, we might want to set different arguments for
73# stage 1 & runtimes
74RUNTIMES_CFLAGS = $(STAGE_1_CFLAGS)
75RUNTIMES_CXXFLAGS := $(STAGE_1_CXXFLAGS)
76RUNTIMES_LDFLAGS := $(STAGE_1_LDFLAGS)
5088c762
EM
77
78# collect all flags for stage 2 toolchain and stand-alone builds
79STAGE_2_CFLAGS = $(CFLAGS) $(CFLAGS_EXTRA) $(CPPFLAGS)
80STAGE_2_CXXFLAGS = $(CXXFLAGS) $(CXXFLAGS_EXTRA) $(CPPFLAGS)
81STAGE_2_LDFLAGS = $(LDFLAGS) $(LDFLAGS_EXTRA)
2bb5eae6 82
5088c762 83# collect additional cmake options for toolchain build configuration
2e88154b 84STAGE_1_CMAKE_EXTRA =
8fdac930 85STAGE_2_CMAKE_EXTRA =
2e88154b 86STAGE_ALL_CMAKE_EXTRA =
5088c762 87# toolchain config-only var combining all stage 1 cmake options
2e88154b 88CMAKE_EXTRA = $(STAGE_1_CMAKE_EXTRA) $(STAGE_ALL_CMAKE_EXTRA)
5088c762 89# toolchain config-only var prepending BOOTSTRAP_ to all stage 2 cmake options
2e88154b 90BOOTSTRAP_CMAKE_EXTRA = $(foreach extra,$(STAGE_2_CMAKE_EXTRA) $(STAGE_ALL_CMAKE_EXTRA), $(subst -D,-DBOOTSTRAP_,$(extra)))
708c17e6 91
cb07c387 92BASE_PATH := $(CURDIR)
35a8b4a6
EM
93STAGE_1_BIN_DIR := $(BASE_PATH)/$(TARGET_BUILD)/bin
94STAGE_1_LIB_DIR := $(BASE_PATH)/$(TARGET_BUILD)/lib
95STAGE_2_BIN_DIR := $(BASE_PATH)/$(TARGET_BUILD_STAGE2)/bin
96STAGE_2_LIB_DIR := $(BASE_PATH)/$(TARGET_BUILD_STAGE2)/lib
6ac04400 97
21741170
EM
98# toggleable defaults
99COMPILER_RT_USE_BUILTINS_LIBRARY := ON
cb07c387 100LIBCXX_EXCEPTIONS := ON
d816c395 101LIBCXX_USE_COMPILER_RT := ON
6ac04400 102
3270880a
SL
103# We want to set the clang extra version ONLY in stage 2
104# because we want the clang stage 1 to be as reproducible as possible
105# when building with sccache (because this tool do a hash using the
106# compiler binary and other things)
107STAGE_2_CMAKE_EXTRA += -DCLANG_REPOSITORY_STRING=$(DEBIAN_REVISION)
108
042d6084 109ifneq (,$(filter $(DEB_HOST_ARCH),sparc sparc64))
2e88154b 110STAGE_1_CMAKE_EXTRA += -DLLVM_PARALLEL_LINK_JOBS=4
042d6084
JPAG
111endif
112
3d0e431f 113ifneq (,$(filter $(DEB_HOST_ARCH),i386 hurd-i386 kfreebsd-i386 armel mipsel powerpc powerpcspe riscv64))
75562373 114# For some reason, in the stage2 build, when clang is used to compile
ee4d16b4
EM
115# itself. The atomic detection is failing on armel and riscv64. Forcing the inclusion
116# everywhere and in all stages
75562373
SL
117LDFLAGS_EXTRA += -latomic
118endif
119
3e6b8215 120Z3_FLAG = -DLLVM_ENABLE_Z3_SOLVER=OFF
4a38357f 121ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libz3-dev) gt 4.7.0; echo $$?),0)
3e6b8215
GC
122# no ocaml support in main for Ubuntu
123ifneq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
4a38357f
SL
124 Z3_FLAG = -DLLVM_ENABLE_Z3_SOLVER=ON
125endif
3e6b8215 126endif
2e88154b 127STAGE_2_CMAKE_EXTRA += $(Z3_FLAG)
4a38357f 128
bf461e44 129# Change the default CPU for s390x
af118900
GC
130ZARCH=z196
131ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
132ZARCH=z13
133endif
2e88154b 134STAGE_2_CMAKE_EXTRA += -DCLANG_SYSTEMZ_DEFAULT_ARCH=$(ZARCH)
af118900 135
227598db
SM
136# clangd remote index support requires GRPC & protobuf.
137# Enable if minimum tested versions are available.
922aee77 138CLANGD_GRPC_INSTALLED=no
227598db
SM
139ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libgrpc++-dev) gt 1.30.0; echo $$?),0)
140ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' protobuf-compiler-grpc) gt 1.30.0; echo $$?),0)
141ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libprotobuf-dev) gt 3.12.0; echo $$?),0)
142ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' protobuf-compiler) gt 3.12.0; echo $$?),0)
922aee77 143CLANGD_GRPC_INSTALLED=yes
227598db
SM
144STAGE_2_CMAKE_EXTRA += -DCLANGD_ENABLE_REMOTE=ON
145endif
146endif
147endif
148endif
149
123767a4
SL
150export CC=gcc-$(GCC_VERSION)
151export CXX=g++-$(GCC_VERSION)
152
875ec1e7 153ifneq (,$(findstring $(DEB_HOST_ARCH),armel))
2e88154b
EM
154 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabi
155 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
b7363248
EM
156# align arch profile with debian baseline
157# https://wiki.debian.org/ArmEabiPort
158 CFLAGS_EXTRA += -march=armv5t
159 CXXFLAGS_EXTRA += -march=armv5t
6558504c 160# disable compiler-rt builtins (not supported for baseline armel arch: armv5t)
21741170 161# See http://lists.llvm.org/pipermail/llvm-dev/2016-May/099761.html
2e88154b 162 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
21741170 163 COMPILER_RT_USE_BUILTINS_LIBRARY := OFF
21741170 164 LIBCXX_USE_COMPILER_RT := OFF
c39e93a3
EM
165# disable scudo standalone (not supported for baseline armel arch: armv5t)
166 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_SCUDO_STANDALONE=OFF
875ec1e7
SL
167endif
168
af56187b 169ifneq (,$(findstring $(DEB_HOST_ARCH),armhf))
2e88154b
EM
170 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabihf
171 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
b7363248
EM
172# align arch profile with debian baseline
173# https://wiki.debian.org/ArmHardFloatPort#Minimum_CPU_.26_FPU
174 CFLAGS_EXTRA += -march=armv7-a -mfpu=vfpv3-d16
175 CXXFLAGS_EXTRA += -march=armv7-a -mfpu=vfpv3-d16
af56187b
SL
176endif
177
21741170
EM
178ifneq (,$(filter $(DEB_HOST_ARCH),i386))
179# Sometimes, i386 needs help with the triple
2e88154b 180 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=i386-linux-gnu
dd97ff40
SL
181 CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=i386-linux-gnu
182endif
183
c27a5a49 184ifneq (,$(filter $(DEB_HOST_ARCH),mips64el))
eac2759e
SL
185# avoid an issue with search path on mips64el
186# https://bugs.llvm.org/show_bug.cgi?id=41204
2e88154b 187 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=mips64el-linux-gnuabi64
eac2759e
SL
188endif
189
36bdfcce
EM
190ifneq (,$(filter $(DEB_HOST_ARCH),powerpc))
191 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=powerpc-linux-gnu
192 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
193endif
194
c32f435a 195# debug symbols OOM in Ubuntu Ubuntu and slows down build process.
fae383f3 196ifneq (,$(filter $(DEB_HOST_ARCH),riscv64))
e2951087
GC
197 opt_flags = -O2 -DNDEBUG -g0
198else
199 opt_flags = -O2 -DNDEBUG -g1
fae383f3
GC
200endif
201
66650350
JPAG
202ifneq (,$(filter $(DEB_HOST_ARCH),sparc))
203 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=sparc-linux-gnu
204 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
205 STAGE_ALL_CMAKE_EXTRA += -DLLVM_PARALLEL_LINK_JOBS=4
206endif
207
208ifneq (,$(filter $(DEB_HOST_ARCH),sparc64))
209 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=sparc64-linux-gnu
210 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
cdc92042
JPAG
211 STAGE_ALL_CMAKE_EXTRA += -DLLVM_PARALLEL_LINK_JOBS=4
212endif
213
21741170 214ifneq (,$(filter $(DEB_HOST_ARCH),s390x))
9a1ae924
EM
215 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=s390x-linux-gnu
216 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
21741170 217 LIBCXX_EXCEPTIONS := OFF
6558504c
EM
218# disable compiler-rt builtins (not supported for s390x)
219 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
220 COMPILER_RT_USE_BUILTINS_LIBRARY := OFF
221 LIBCXX_USE_COMPILER_RT := OFF
eac2759e
SL
222endif
223
6be367e5
GC
224ifneq (,$(filter $(DEB_HOST_ARCH),mips64el))
225 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
226 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
227 COMPILER_RT_USE_BUILTINS_LIBRARY := OFF
228 LIBCXX_USE_COMPILER_RT := OFF
229endif
230
6a524ab3 231ifneq (,$(filter $(DEB_HOST_ARCH),x32))
6558504c
EM
232 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=x86_64-linux-gnux32
233 STAGE_ALL_CMAKE_EXTRA += -DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-linux-gnux32
bfbd8f81
JPAG
234 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
235 COMPILER_RT_USE_BUILTINS_LIBRARY := OFF
236 LIBCXX_USE_COMPILER_RT := OFF
6a524ab3 237endif
eac2759e 238
653f1a56
PT
239ifneq (,$(filter $(DEB_HOST_ARCH),hurd-i386))
240 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
241endif
242
4ac4be96 243ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) ge 4.8-20121128-1~ ; echo $$?),0)
a405cb76
SL
244 control_vars = '-Vdep:devlibs=libstdc++-$(GCC_VERSION)-dev, libgcc-$(GCC_VERSION)-dev' \
245 '-Vdep:devlibs-objc=libobjc-$(GCC_VERSION)-dev'
4ac4be96 246else ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) ge 4.7.2-10~ ; echo $$?),0)
a405cb76
SL
247 control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev, libgcc-$(GCC_VERSION)-dev' \
248 '-Vdep:devlibs-objc=libobjc-$(GCC_VERSION)-dev'
712c1081 249else
4ac4be96 250 control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev'
712c1081
SL
251endif
252
5c8a7151 253LLVM_SPIRV_VERSION := $(LLVM_VERSION)
277362b9 254LLVM_SPIRV := $(shell bash -c "command -v llvm-spirv-$(LLVM_SPIRV_VERSION)" 2>/dev/null)
5befbff1
JJ
255ifndef LLVM_SPIRV
256 LLVM_SPIRV_VERSION := $(shell expr $(LLVM_VERSION) - 1)
257 LLVM_SPIRV := $(shell bash -c "command -v llvm-spirv-$(LLVM_SPIRV_VERSION)" 2>/dev/null)
258endif
277362b9
JJ
259ifndef LLVM_SPIRV
260 LLVM_SPIRV_INSTALLED = no
7a5f4765 261else
45ef20d1 262 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' llvm-spirv-$(LLVM_SPIRV_VERSION)) gt 14.0.0 ; echo $$?),0)
1f06639f
SL
263# Too old llvm-spirv version are failing. See #52200
264 LLVM_SPIRV_INSTALLED = yes
265 else
266 LLVM_SPIRV_INSTALLED = no
267 endif
7a5f4765
SL
268endif
269
236aed51 270LIBCLC_TARGETS_TO_BUILD="amdgcn--;amdgcn--amdhsa;amdgcn-mesa-mesa3d;r600--;nvptx--;nvptx64--;nvptx--nvidiacl;nvptx64--nvidiacl"
41a4a741 271LIBCLC_LLVM_SPIRV =
7a5f4765
SL
272ifeq ($(LLVM_SPIRV_INSTALLED),yes)
273 LIBCLC_TARGETS_TO_BUILD := $(LIBCLC_TARGETS_TO_BUILD)";spirv-mesa3d-;spirv64-mesa3d-"
41a4a741 274 LIBCLC_LLVM_SPIRV = "-DLLVM_SPIRV=$(LLVM_SPIRV)"
7a5f4765
SL
275endif
276
5088597e 277BINUTILS_GOLD_ARCHS := amd64 arm64 armhf i386 ppc64 ppc64el x32 s390x hurd-i386 kfreebsd-amd64 kfreebsd-i386
128450ef 278ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) ge 2.23.1-1~exp3 ; echo $$?),0)
584e8ad0 279ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
2e88154b
EM
280 STAGE_ALL_CMAKE_EXTRA += -DLLVM_USE_LINKER=gold
281 STAGE_ALL_CMAKE_EXTRA += -DLLVM_BINUTILS_INCDIR=/usr/include/
708c17e6 282endif
ebe2c90f 283endif
875ec1e7 284
4a5a2b0c 285ifneq (,$(filter bolt-$(LLVM_VERSION), $(shell dh_listpackages)))
5bfe8cc3 286 PROJECTS += ;bolt
40422bb7
SL
287endif
288
25f7f7a9
SL
289# flang is only for 64bits
290ifneq (,$(filter flang-$(LLVM_VERSION), $(shell dh_listpackages)))
291 PROJECTS += ;flang
292endif
293
ee6846e2 294CODECOVERAGE=no
772552aa
SL
295ifneq (,$(filter codecoverage,$(DEB_BUILD_OPTIONS)))
296# enable the code coverage
297 CODECOVERAGE=yes
298# for -fvisibility-inlines-hidden see http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20130729/183016.html
299 CXXFLAGS_EXTRA += -fprofile-arcs -ftest-coverage
300 LDFLAGS_EXTRA += -coverage -lgcov
301 RUN_TEST=yes
5a1349d0 302 # OpenMP doesn't respect LDFLAGS
2e88154b 303 STAGE_2_CMAKE_EXTRA+= -DLIBOMP_LDFLAGS="-coverage -lgcov" # don't pass LDFLAGS_EXTRA because it expects gcc arg
772552aa
SL
304endif
305
d5ce4ee9 306# Enable polly (or not)
e213b377 307POLLY_ENABLE=yes
b5662072 308ifneq (,$(filter $(DEB_HOST_ARCH), powerpc powerpcspe))
e213b377 309 POLLY_ENABLE=no
d2c4dc94 310else
4e2033bd 311 PROJECTS+=;polly
b6af4ab8 312endif
d5ce4ee9 313
c039e046
SL
314# Enable libunwind (or not)
315LIBUNWIND_ENABLE=yes
6be367e5 316ifneq (,$(filter $(DEB_HOST_ARCH), s390x armel m68k mipsel mips64el hurd-i386 powerpc sparc sparc64 x32))
c039e046 317 LIBUNWIND_ENABLE=no
14aeabd6
EM
318# do not use compiler-rt builtins for libcxx (libcxxabi) when libunwind is
319# disabled since the gnu implementation in libgcc_s will then be required
320 LIBCXX_USE_COMPILER_RT := OFF
c039e046 321else
3ee7840e 322 RUNTIMES += ;libunwind
2e88154b 323 STAGE_ALL_CMAKE_EXTRA += -DLIBCXXABI_USE_LLVM_UNWINDER=ON
3ee7840e
EM
324endif
325
514529a9
SL
326# Enable openmp (or not)
327OPENMP_ENABLE=yes
ffdb0eb4 328ifneq (,$(filter $(DEB_HOST_ARCH), m68k mipsel powerpc powerpcspe sparc64 s390x x32))
514529a9 329 OPENMP_ENABLE=no
d2c4dc94 330else
20ef6420 331 PROJECTS+=;openmp
2e88154b 332 STAGE_ALL_CMAKE_EXTRA += -DLIBOMP_LIBFLAGS="-lm"
3ee7840e 333ifeq ($(LIBUNWIND_ENABLE),yes)
2e88154b 334 STAGE_ALL_CMAKE_EXTRA += -DOPENMP_USE_LLVM_UNWINDER=ON
514529a9 335endif
c039e046
SL
336endif
337
b990b953
SL
338# Do not install objects
339STAGE_ALL_CMAKE_EXTRA += -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF
340
341
f5a56de6 342RUN_TEST=yes
b4d3a200 343ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
f5a56de6
SL
344 RUN_TEST=no
345endif
3bea2aed
GC
346ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
347ifeq (riscv64,$(DEB_HOST_ARCH))
348 RUN_TEST=no
349endif
350endif
f5a56de6 351
e96aa0e7
SL
352# llvm tests timeout, disable it on mipsel
353ifeq (mipsel,$(DEB_HOST_ARCH))
354 RUN_TEST=no
355endif
356
c06e8852 357SCAN_BUILD=no
afd4c9da
SL
358ifneq (,$(filter scan-build,$(DEB_BUILD_OPTIONS)))
359# enable the build using scan-build
d4afd42d
SL
360# The package are installed through the variable declarations:
361# OTHERMIRROR="deb http://llvm.org/apt/unstable/ llvm-toolchain main"
66eb6597 362# EXTRAPACKAGES="clang-X"
c06e8852 363 SCAN_BUILD=yes
d7a17e8c 364
cdfc21c7 365 PRE_PROCESS=scan-build-$(LLVM_VERSION) --show-description -analyzer-config stable-report-filename=true
b1ecb207 366 PRE_PROCESS_CONF=scan-build-$(LLVM_VERSION)
d4afd42d 367# no need to run tests in this case
b553daa1 368 RUN_TEST=no
0ee244c8 369 CONFIGURE_EXTRA += --enable-assertions
2e88154b 370 STAGE_ALL_CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
afd4c9da
SL
371endif
372
4573b6a9
SL
373ifneq (,$(filter coverity,$(DEB_BUILD_OPTIONS)))
374# enable the build using coverity
375# pbuilder contains BINDMOUNTS="/opt/cov-analysis/"
376# And we have some pbuilder hooks to configure and pack the result
377# Where the binaries are installed on the jenkins instance
378 PRE_PROCESS=PATH=$$PATH:/opt/cov-analysis/bin/ cov-build --dir cov-int
379# We don't want to check the temporary files produced by the configure
380 PRE_PROCESS_CONF=
381 COVERITY_ENABLE=1
382 CONFIGURE_EXTRA += --enable-assertions
383 STAGE_ALL_CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
384# no need to run tests in this case
385 RUN_TEST=no
386else
387 COVERITY_ENABLE=0
388endif
389
e4e11479 390LLDB_ENABLE=yes
4baa08eb 391LLDB_DISABLE_ARCHS := hurd-i386 ia64 powerpc powerpcspe ppc64 riscv64 sparc64 mips64el mipsel
03b2cfea 392# hurd has threading issues
03b2cfea
SL
393ifeq (,$(filter-out $(LLDB_DISABLE_ARCHS), $(DEB_HOST_ARCH)))
394# Disable LLDB for this arch.
d2c4dc94 395 LLDB_ENABLE=no
bbdfe123 396else
2dee6a81 397 STAGE_ALL_CMAKE_EXTRA += -DLLDB_ENABLE_LUA=OFF
4e2033bd 398 PROJECTS+=;lldb
e4e11479
SL
399endif
400
b938a0de
SL
401ifneq (,$(filter $(DISTRO),buster))
402# Don't enable lld python for old distros
403 STAGE_ALL_CMAKE_EXTRA += -DLLDB_ENABLE_PYTHON=OFF
404endif
405
39f4464e 406LIBCXX_WASM_ENABLE=yes
99ff46f9 407LIBCXX_WASM_DISABLE_DISTRO := bionic buster focal bullseye jammy
f647ae31
SL
408# Either wasi-libc doesn't exist / too old
409# or we have this bug
410# https://sourceware.org/bugzilla/show_bug.cgi?id=27558
2e851b26 411ifeq (,$(filter-out $(LIBCXX_WASM_DISABLE_DISTRO), $(DISTRO)))
39f4464e
SL
412 LIBCXX_WASM_ENABLE=no
413endif
0b46f82e 414
77462f3a
JPAG
415ifneq (,$(filter $(DEB_HOST_ARCH),powerpc powerpcspe))
416 LIBCXX_WASM_ENABLE=no
417endif
418
5c2afe58 419LLD_ENABLE=yes
03b2cfea 420
54017839
SL
421ifneq (,$(filter $(DEB_HOST_ARCH_OS),linux))
422# only for linux
2e88154b 423 STAGE_2_CMAKE_EXTRA += -DLLVM_USE_PERF=ON -DLLVM_ENABLE_LIBPFM=ON
54017839
SL
424endif
425
a235abc1 426LTO_ENABLE=no
25057e14
SL
427# Only enable it for archs supporting gold
428ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
a235abc1
SL
429# LTO requires a bunch of memory. Don't do it everywhere
430LTO_DISABLE_ARCHS := i386 armhf s390x ppc64 x32
431ifeq (,$(filter-out $(LTO_DISABLE_ARCHS), $(DEB_HOST_ARCH)))
432 LTO_ENABLE=no
433else
a5b9f332
SL
434# Disable for now because of
435# https://github.com/llvm/llvm-project/issues/58317#issuecomment-1276190743
86b2f11f
SL
436# LTO_ENABLE=yes
437# STAGE_2_CMAKE_EXTRA += -DLLVM_ENABLE_LTO="On"
773d6874 438endif
25057e14 439endif
1bc431e7 440
4baff304
SL
441# https://bugs.launchpad.net/bugs/2016471
442ifeq (,$(filter-out $(LTO_DISABLE_ARCHS), $(DEB_HOST_ARCH)))
443LD_GOLD_SUPPORTS_NO_SYMBOLIC := $(shell ld.gold --help | grep -q -w '-Bno-symbolic' && echo "yes" || echo "no")
444ifeq ($(LD_GOLD_SUPPORTS_NO_SYMBOLIC),yes)
445 STAGE_2_CMAKE_EXTRA += -DLIBOMP_LDFLAGS=-Wl,-Bno-symbolic
446endif
447endif
448
21cd3633
SL
449DH_OPTIONS=
450OCAML_ENABLE= no
1ee43950 451OCAML_ARCHS := amd64 arm64 armhf ppc64el riscv64 s390x
21cd3633
SL
452ifneq (,$(filter $(DEB_HOST_ARCH),$(OCAML_ARCHS)))
453# Enable OCAML for this arch.
eac6d991
SL
454 OCAML_ENABLE=yes
455 OCAML_STDLIB_DIR ?= $(shell ocamlc -where)
456 DH_OPTIONS=--with ocaml
21cd3633
SL
457endif
458
45f800fa
SL
459LIBFUZZER_ENABLE=yes
460ifeq (,$(filter $(DEB_HOST_ARCH_OS),linux))
461 LIBFUZZER_ENABLE=no
462endif
463
cd137e13 464ifneq (,$(filter $(DEB_HOST_ARCH), mipsel))
430f8ff5
RS
465 LIBOMP_ARCH = mips
466endif
467
468ifneq (,$(filter $(DEB_HOST_ARCH), mips64 mips64el))
469 LIBOMP_ARCH = mips64
470endif
471
f01f2c14
SL
472# if cmake is installed in /tmp/cmake/ uses it
473# Used to build llvm on old ubuntu (precise) on the llvm.org/apt/ ci
474CMAKE_BIN=cmake
475ifeq ($(shell test -e /tmp/cmake/bin/cmake && echo -n yes),yes)
476 CMAKE_BIN=/tmp/cmake/bin/cmake
477 export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:/tmp/cmake/bin/
478endif
479
ae115f52 480SCCACHE_ENABLE=no
5e129ea1 481SCCACHE_CMAKE =
2eee7fef 482# if sccache is installed in the chroot, use it
268544a5 483ifeq ($(shell test -e /opt/sccache/sccache && echo -n yes),yes)
58d3e085 484 ifneq (,$(filter $(DEB_HOST_ARCH),i386 amd64))
2157c15a
SL
485 STAGE_1_CMAKE_EXTRA += $(SCCACHE_CMAKE)
486 SCCACHE_ENABLE=yes
487 SCCACHE_PATH=/opt/sccache/
488 SCCACHE_CMD=$(SCCACHE_PATH)/sccache
489 SCCACHE_CMAKE = -DCMAKE_C_COMPILER_LAUNCHER=$(SCCACHE_CMD) -DCMAKE_CXX_COMPILER_LAUNCHER=$(SCCACHE_CMD)
490 export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:/opt/sccache
491 endif
2eee7fef
SL
492endif
493
cb07c387 494# enables cmake build targets like stage2-[target_name]
55387e6b 495ENABLED_STAGE2_CMAKE_BUILD_TARGETS = check-all;check-llvm;check-clang;check-clang-tools;check-lld;check-libcxx;check-libcxxabi;check-mlir;check-sanitizer;llvm-config;test-suite
cb07c387 496
21cd3633
SL
497%:
498 dh $@ $(DH_OPTIONS)
7aec1357 499
4e2033bd
SL
500# For some reasons, some spaces are added, removing them
501PROJECTS_LIST := $(shell echo "$(PROJECTS)"|sed -e "s| ||g")
20d2a90c 502RUNTIMES_LIST := $(shell echo "$(RUNTIMES)"|sed -e "s| ||g")
8c0727ae
SL
503
504preconfigure:
cc5cb79e
SL
505
506 if ! grep -qs '/proc ' /proc/mounts; then \
507 echo "/proc needs to be mounted"; \
508 exit 1; \
509 fi
510
53465968
SL
511 if test "$(DISTRO)" = "bookworm" -a "$(LLVM_SPIRV_INSTALLED)" = "no"; then \
512 echo "llvm spriv isn't detected while it should probably for this distro"; \
53465968
SL
513 fi
514
58d3e085 515 @echo "DEB_BUILD_OPTIONS=$(DEB_BUILD_OPTIONS)"
795b5b2a
SL
516 @echo "DEB_HOST_MULTIARCH=$(DEB_HOST_MULTIARCH)"
517 @echo "DEB_HOST_GNU_TYPE=$(DEB_HOST_GNU_TYPE)"
518 @echo "DEB_HOST_ARCH_BITS=$(DEB_HOST_ARCH_BITS)"
519 @echo "DEB_HOST_ARCH=$(DEB_HOST_ARCH)"
520 @echo "DEB_HOST_ARCH_OS=$(DEB_HOST_ARCH_OS)"
e29bc92a 521 @echo "DISTRO=$(DISTRO)"
386d2533 522 @echo "GCC_VERSION=$(GCC_VERSION)"
dae222ed 523 @echo "PROJECTS=$(PROJECTS_LIST)"
20d2a90c 524 @echo "RUNTIMES=$(RUNTIMES_LIST)"
dae222ed
SL
525 @echo "LLVM_VERSION=$(LLVM_VERSION)"
526 @echo "LLVM_VERSION_FULL=$(LLVM_VERSION_FULL)"
f01f2c14 527 @echo "LLVM_VERSION_SNAPSHOT=$(LLVM_VERSION_SNAPSHOT)"
34fe63ca 528 @echo "PATH=$(PATH)"
58d3e085 529 @echo "LD_LIBRARY_PATH=$$LD_LIBRARY_PATH"
89fafb13
SL
530 @echo "RUNTIMES_CXXFLAGS=$(RUNTIMES_CXXFLAGS)"
531 @echo "STAGE_1_CXXFLAGS=$(STAGE_1_CXXFLAGS)"
532 @echo "STAGE_2_CFLAGS=$(STAGE_2_CFLAGS)"
66d973fe 533 @echo "LIBFUZZER_ENABLE=$(LIBFUZZER_ENABLE)"
a235abc1 534 @echo "LTO_ENABLE=$(LTO_ENABLE)"
66d973fe 535 @echo "COMPILER_RT_WASM_ENABLE=$(COMPILER_RT_WASM_ENABLE)"
e1e0815e 536 @echo "LIBCXX_WASM_ENABLE=$(LIBCXX_WASM_ENABLE)"
58d3e085 537 @echo "SCCACHE_ENABLE=$(SCCACHE_ENABLE)"
795b5b2a 538
8c0727ae
SL
539 for f in debian/*.in; do \
540 f2=$$(echo $$f | sed 's/\.in$$//;s/X\.Y/$(LLVM_VERSION)/'); \
541 echo "$$f => $$f2"; \
542 sed -e 's|@DEB_HOST_MULTIARCH@|$(DEB_HOST_MULTIARCH)|g' \
6fb05958 543 -e "s|@BRANCH_NAME@|$(BRANCH_NAME)|g" \
21cd3633 544 -e "s|@OCAML_STDLIB_DIR@|$(OCAML_STDLIB_DIR)|g" \
8c0727ae
SL
545 -e "s|@LLVM_VERSION_FULL@|$(LLVM_VERSION_FULL)|g" \
546 -e "s|@LLVM_VERSION@|$(LLVM_VERSION)|g" $$f > $$f2; \
547 done
875ec1e7 548
c1e98235 549 # Make install file executable for dh-exec
f01f2c14
SL
550 chmod +x \
551 debian/clang-tools-$(LLVM_VERSION).install \
c380af2f 552 debian/libclang-$(LLVM_VERSION)-dev.install \
a8ab81b5 553 debian/libclang-rt-$(LLVM_VERSION)-dev.install \
f2231f33 554 debian/libpolly-$(LLVM_VERSION)-dev.install \
f01f2c14 555 debian/libomp-$(LLVM_VERSION)-dev.install \
e4160527 556 debian/libomp5-$(LLVM_VERSION).install \
f01f2c14 557 debian/llvm-$(LLVM_VERSION)-dev.install \
a6a1aae2 558 debian/llvm-$(LLVM_VERSION)-linker-tools.install \
0b5d5a54
SL
559 debian/llvm-$(LLVM_VERSION)-linker-tools.links \
560 debian/libbolt-$(LLVM_VERSION)-dev.install
f01f2c14 561
0336f15c
JJ
562ifdef LLVM_SPIRV
563 # llvm-spirv was found, so we can enable *.spv files. Debian
564 # buster and Ubuntu 18.04 don't have llvm-spirv to create the
565 # *.spv files.
566 sed -i -e "s|#spv\ ||g" debian/libclc-$(LLVM_VERSION).install
567endif
f445b2b0 568
39f4464e
SL
569 # disable libc++-X.Y-dev-wasm32.install.in on old distro
570 if test "$(LIBCXX_WASM_ENABLE)" = "no"; then \
571 echo "" > debian/libc++-$(LLVM_VERSION)-dev-wasm32.install; \
1de02633 572 echo "" > debian/libc++abi-$(LLVM_VERSION)-dev-wasm32.install; \
39f4464e
SL
573 fi
574
922aee77
SL
575 # Conditionally enable install clangd grpc files
576 if test "$(CLANGD_GRPC_INSTALLED)" = "yes"; then \
b6ea5560 577 sed -i -e "s|#grpc\ ||g" debian/libclang-$(LLVM_VERSION)-dev.install; \
922aee77
SL
578 fi
579
03b2cfea 580# Override this two targets. They are trying to manage the .in conversion for me
21cd3633
SL
581override_dh_ocamlinit:
582override_dh_ocamlclean:
d887566a 583override_dh_ocaml:
7aec1357 584
8c0727ae 585override_dh_auto_configure: preconfigure
58d3e085
SL
586ifeq (${SCCACHE_ENABLE},yes)
587 ls -al $(SCCACHE_PATH)*
588endif
0118a145
SL
589 echo "Using gcc: "
590 $(CC) -v
e89930d4 591 $(CXX) -v
875ec1e7 592 mkdir -p $(TARGET_BUILD)
179cd18f
SL
593# remove in case of artifact
594 rm -rf build
595
d7a17e8c 596 if test "$(SCAN_BUILD)" = "yes"; then \
eda4bcc8 597 patch -f -p1 < debian/patches/on-the-fly/use-scan-build-runtimes.diff||true; \
d7a17e8c 598 fi
875ec1e7 599
fe7a4317 600 # Configure coverity (we need the compilers) + work around perf issues
c6ad4a0d 601 -(if test $(COVERITY_ENABLE) -eq 1; then \
0c8aea33 602 export PATH=$$PATH:/opt/cov-analysis/bin/; \
9f86c8bf 603 cov-configure --compiler clang --comptype clang; \
cff0f5da
SL
604 cov-configure --compiler gcc-$(GCC_VERSION) --comptype gcc; \
605 cov-configure --compiler g++-$(GCC_VERSION) --comptype gcc; \
4432e6b4 606 cov-configure -co /usr/bin/g++-$(GCC_VERSION) --comptype gcc -- -fPIC -std=c++11; \
cff0f5da 607 cov-configure -co /usr/bin/gcc-$(GCC_VERSION) --comptype gcc -- -fPIC; \
4432e6b4 608 cov-configure -co /usr/bin/g++-$(GCC_VERSION) --comptype gcc -- -fPIC -std=c++11 -fno-exceptions; \
5f3fa775 609 cov-configure -co /usr/bin/g++-$(GCC_VERSION) --comptype gcc --template \
fe7a4317
SL
610 --xml-option append_arg:"--ppp_translator" \
611 --xml-option append_arg:"replace/llvm::AlignOf<PrevTy>::Alignment/(llvm::AlignOf<PrevTy>::Alignment)" \
612 --xml-option append_arg:"--ppp_translator" \
613 --xml-option append_arg:"replace/llvm::AlignOf<NextTy>::Alignment/(llvm::AlignOf<NextTy>::Alignment)"; \
614 cov-configure --compiler c++ --comptype g++ --template \
615 --xml-option append_arg:"--ppp_translator" \
616 --xml-option append_arg:"replace/llvm::AlignOf<PrevTy>::Alignment/(llvm::AlignOf<PrevTy>::Alignment)" \
617 --xml-option append_arg:"--ppp_translator" \
779e06a3 618 --xml-option append_arg:"replace/llvm::AlignOf<NextTy>::Alignment/(llvm::AlignOf<NextTy>::Alignment)"; \
c6ad4a0d 619 fi)
bc3c8281 620
20d2a90c
EM
621# Fails with No target "unwind_static"
622# -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
623# -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF \
624# -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON \
625#- to libc++ when libunwind is built
626#- Matches what is done on brew:
627#- https://bit.ly/3kDNpC9
ae115f52 628ifeq (${SCCACHE_ENABLE},yes)
8579a7d2 629# Just in case...
06f31916 630 $(SCCACHE_CMD) --stop-server||true
8579a7d2 631# Start the sccache server with the right set of options to use GCP
06f31916 632 SCCACHE_LOG=sccache=debug SCCACHE_ERROR_LOG=$(SCCACHE_PATH)/sccache.log SCCACHE_GCS_KEY_PATH=$(SCCACHE_PATH)/secret-gcp-storage.json SCCACHE_GCS_BUCKET=apt-llvm-org-sccache SCCACHE_GCS_RW_MODE=READ_WRITE $(SCCACHE_CMD) --start-server
ae115f52 633endif
f6d87b0d 634 echo "Running tests: $(RUN_TEST)"
f01f2c14 635 echo "Using cmake: $(CMAKE_BIN)"; \
2bb5eae6
EM
636 LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \
637 $(PRE_PROCESS_CONF) $(CMAKE_BIN) -S llvm/ -B $(TARGET_BUILD) \
83fab602 638 -G Ninja \
5eecc2f0 639 -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \
66767e15 640 -DLLVM_VERSION_SUFFIX= \
20d2a90c 641 -DCMAKE_SUPPRESS_REGENERATION=ON \
20d2a90c 642 -DCMAKE_BUILD_TYPE=Release \
5088c762
EM
643 -DCMAKE_C_FLAGS="$(STAGE_1_CFLAGS)" \
644 -DCMAKE_CXX_FLAGS="$(STAGE_1_CXXFLAGS)" \
645 -DCMAKE_SHARED_LINKER_FLAGS="$(STAGE_1_LDFLAGS)" \
646 -DCMAKE_MODULE_LINKER_FLAGS="$(STAGE_1_LDFLAGS)" \
647 -DCMAKE_EXE_LINKER_FLAGS="$(STAGE_1_LDFLAGS)" \
fe702823 648 -DPACKAGE_VENDOR=$(VENDOR) \
f0f0ba2c 649 -DENABLE_LINKER_BUILD_ID=ON \
20d2a90c
EM
650 -DLLVM_TARGETS_TO_BUILD=Native \
651 -DLLVM_ENABLE_PROJECTS="$(PROJECTS_LIST)" \
652 -DLLVM_ENABLE_RUNTIMES="$(RUNTIMES_LIST)" \
20d2a90c
EM
653 -DLLVM_ENABLE_PIC=ON \
654 -DLLVM_ENABLE_RTTI=ON \
20d2a90c
EM
655 -DLLVM_BUILD_DOCS=OFF \
656 -DLLVM_INCLUDE_GO_TESTS=OFF \
27687a10 657 -DLLVM_USE_RELATIVE_PATHS_IN_FILES=ON \
eb425e63 658 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
22f693c0 659 -DLLVM_ENABLE_CURL=ON \
160ea573 660 -DLLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO=ON \
20d2a90c 661 -DCLANG_PLUGIN_SUPPORT=OFF \
1ea7b813 662 -DCLANG_BUILD_EXAMPLES=OFF \
aaf419a9 663 -DCLANG_DEFAULT_LINKER=ld \
aaf419a9 664 -DCLANG_DEFAULT_RTLIB=libgcc \
20d2a90c
EM
665 -DCOMPILER_RT_BUILD_XRAY=OFF \
666 -DCOMPILER_RT_INCLUDE_TESTS=OFF \
21741170
EM
667 -DCOMPILER_RT_USE_LIBCXX=OFF \
668 -DCOMPILER_RT_USE_BUILTINS_LIBRARY=$(COMPILER_RT_USE_BUILTINS_LIBRARY) \
20d2a90c
EM
669 -DLIBUNWIND_USE_COMPILER_RT=ON \
670 -DLIBUNWIND_INSTALL_LIBRARY=OFF \
21741170
EM
671 -DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
672 -DLIBCXXABI_USE_COMPILER_RT=$(LIBCXX_USE_COMPILER_RT) \
20d2a90c 673 -DLIBCXXABI_INSTALL_LIBRARY=OFF \
72d3d9be 674 -DLIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
d816c395 675 -DLIBCXX_USE_COMPILER_RT=$(LIBCXX_USE_COMPILER_RT) \
72d3d9be
SL
676 -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
677 -DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \
678 -DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \
20d2a90c
EM
679 -DLIBCXX_INSTALL_LIBRARY=OFF \
680 -DOPENMP_ENABLE_LIBOMP_PROFILING=OFF \
681 -DOPENMP_ENABLE_LIBOMPTARGET_PROFILING=OFF \
20d2a90c
EM
682 -DLIBOMP_ENABLE_RTTI=OFF \
683 -DLIBOMP_OMPT_SUPPORT=OFF \
3541b7d2 684 -DCLANG_FORCE_MATCHING_LIBCLANG_SOVERSION=ON \
2bb5eae6 685 $(CMAKE_EXTRA) \
7bcbe441
SL
686 -DBUILTINS_CMAKE_ARGS="-DCMAKE_C_FLAGS=$(STAGE_1_CFLAGS);-DCMAKE_CXX_FLAGS=$(STAGE_1_CXXFLAGS);-DCMAKE_EXE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_SHARED_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_MODULE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_BUILD_TYPE=Release;-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
687 -DRUNTIMES_CMAKE_ARGS="-DCMAKE_C_FLAGS=$(STAGE_1_CFLAGS);-DCMAKE_CXX_FLAGS=$(STAGE_1_CXXFLAGS);-DCMAKE_EXE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_SHARED_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_MODULE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_BUILD_TYPE=Release;-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
20d2a90c
EM
688 -DCLANG_ENABLE_BOOTSTRAP=ON \
689 -DCLANG_BOOTSTRAP_TARGETS="$(ENABLED_STAGE2_CMAKE_BUILD_TARGETS)" \
3541b7d2 690 -DCLANG_BOOTSTRAP_PASSTHROUGH="CMAKE_INSTALL_PREFIX;CMAKE_SUPPRESS_REGENERATION;ENABLE_LINKER_BUILD_ID;LLVM_ENABLE_PIC;LLVM_ENABLE_RTTI;LLVM_INCLUDE_GO_TESTS;LLVM_USE_RELATIVE_PATHS_IN_FILES;CLANG_DEFAULT_LINKER;CLANG_DEFAULT_CXX_STDLIB;CLANG_DEFAULT_RTLIB;COMPILER_RT_USE_LIBCXX;COMPILER_RT_USE_BUILTINS_LIBRARY;COMPILER_RT_INCLUDE_TESTS;LIBUNWIND_USE_COMPILER_RT;LIBCXXABI_ENABLE_EXCEPTIONS;LIBCXXABI_USE_COMPILER_RT;LIBCXX_USE_COMPILER_RT;LIBCXX_ENABLE_EXCEPTIONS;LIBCXX_ENABLE_STATIC_ABI_LIBRARY;LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY;LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY;LIBOMP_ENABLE_RTTI;LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN;CLANG_FORCE_MATCHING_LIBCLANG_SOVERSION" \
20d2a90c
EM
691 -DBOOTSTRAP_CMAKE_BUILD_TYPE=RelWithDebInfo \
692 -DBOOTSTRAP_CMAKE_C_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
693 -DBOOTSTRAP_CMAKE_CXX_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
5088c762
EM
694 -DBOOTSTRAP_CMAKE_C_FLAGS="$(STAGE_2_CFLAGS)" \
695 -DBOOTSTRAP_CMAKE_CXX_FLAGS="$(STAGE_2_CXXFLAGS)" \
696 -DBOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS="$(STAGE_2_LDFLAGS)" \
697 -DBOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS="$(STAGE_2_LDFLAGS)" \
698 -DBOOTSTRAP_CMAKE_EXE_LINKER_FLAGS="$(STAGE_2_LDFLAGS)" \
20d2a90c
EM
699 -DBOOTSTRAP_LLVM_ENABLE_FFI=ON \
700 -DBOOTSTRAP_LLVM_ENABLE_DUMP=ON \
701 -DBOOTSTRAP_LLVM_ENABLE_LIBPFM=ON \
702 -DBOOTSTRAP_LLVM_ENABLE_SPHINX=ON \
4c62eb73 703 -DBOOTSTRAP_CLANG_DEFAULT_PIE_ON_LINUX=ON \
20d2a90c
EM
704 -DBOOTSTRAP_SPHINX_WARNINGS_AS_ERRORS=OFF \
705 -DBOOTSTRAP_LLVM_USE_RELATIVE_PATHS_IN_FILES=ON \
706 -DBOOTSTRAP_LLVM_INSTALL_UTILS=ON \
707 -DBOOTSTRAP_LLVM_VERSION_SUFFIX= \
708 -DBOOTSTRAP_LLVM_POLLY_LINK_INTO_TOOLS=ON \
c7f288bb 709 -DBOOTSTRAP_LLVM_EXPERIMENTAL_TARGETS_TO_BUILD="M68k;Xtensa" \
20d2a90c 710 -DBOOTSTRAP_LLVM_LINK_LLVM_DYLIB=ON \
4250a0c0 711 -DBOOTSTRAP_LLVM_ENABLE_CURL=ON \
20d2a90c 712 -DBOOTSTRAP_CLANG_LINK_CLANG_DYLIB=ON \
20d2a90c 713 -DBOOTSTRAP_LIBCLANG_LIBRARY_VERSION=$(SONAME_EXT) \
20d2a90c 714 -DBOOTSTRAP_LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON \
8fdac930 715 -DBOOTSTRAP_PYTHON_EXECUTABLE=/usr/bin/python3 \
20d2a90c 716 $(BOOTSTRAP_CMAKE_EXTRA) \
b02fa835 717 -DBOOTSTRAP_BUILTINS_CMAKE_ARGS="-DCMAKE_C_FLAGS=$(STAGE_2_CFLAGS);-DCMAKE_CXX_FLAGS=$(STAGE_2_CXXFLAGS);-DCMAKE_EXE_LINKER_FLAGS=$(STAGE_2_LDFLAGS);-DCMAKE_SHARED_LINKER_FLAGS=$(STAGE_2_LDFLAGS);-DCMAKE_MODULE_LINKER_FLAGS=$(STAGE_2_LDFLAGS);-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DCMAKE_C_FLAGS_RELWITHDEBINFO=$(opt_flags);-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$(opt_flags);-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
89fafb13 718 -DBOOTSTRAP_RUNTIMES_CMAKE_ARGS="-DCMAKE_C_FLAGS=$(STAGE_2_CFLAGS);-DCMAKE_CXX_FLAGS=$(RUNTIMES_CXXFLAGS);-DCMAKE_EXE_LINKER_FLAGS=$(STAGE_2_LDFLAGS) -L$(STAGE_1_LIB_DIR);-DCMAKE_SHARED_LINKER_FLAGS=$(STAGE_2_LDFLAGS) -L$(STAGE_1_LIB_DIR);-DCMAKE_MODULE_LINKER_FLAGS=$(STAGE_2_LDFLAGS) -L$(STAGE_1_LIB_DIR);-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DCMAKE_C_FLAGS_RELWITHDEBINFO=$(opt_flags);-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$(opt_flags);-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF"
8fdac930 719
77d09c0d
SL
720 FOUND_VERSION=`grep LLVM_VERSION_STRING build-llvm/include/llvm/Config/llvm-config.h|cut -d\" -f2`; \
721 if ! echo "$(LLVM_VERSION_FULL)"|grep "$$FOUND_VERSION"; then \
a13dfd15 722 echo "mismatch of version. Found: $$FOUND_VERSION / Expected: $(LLVM_VERSION_FULL)"; \
8617886b 723 exit 1; \
77d09c0d 724 fi
7d63b357 725
066d9c79 726VERBOSE=-v
7d63b357 727
7c261d5b 728debian-full-build:
181db69a 729 echo "Using cmake: $(CMAKE_BIN)"
3fc7e4da 730# linker hack so stage2 can link against stage1 libs at runtime
35a8b4a6 731 LD_LIBRARY_PATH=$(STAGE_1_LIB_DIR):$$LD_LIBRARY_PATH \
82d26c04 732 VERBOSE=1 $(PRE_PROCESS) $(CMAKE_BIN) --build $(TARGET_BUILD) -j $(NJOBS) --target stage2 || cat build-llvm/tools/clang/stage2-bins/CMakeFiles/CMakeOutput.log
7d63b357
SL
733
734# Check the stage 2 build worked
3b17d907 735 if ! readelf --string-dump .comment $(TARGET_BUILD_STAGE2)/bin/clang 2>&1|grep -q "clang version"; then \
7d63b357 736 echo "clang hasn't been built using clang. Bye bye. Check that the stage2 build has been done."; \
c06e8852
SL
737 if test "$(SCAN_BUILD)" = "no"; then \
738 exit 2; \
739 fi; \
7d63b357 740 fi
78a11429
SL
741 if ldd $(TARGET_BUILD_STAGE2)/lib/libclang-$(LLVM_VERSION).so.1|grep -q libclang-cpp-$(LLVM_VERSION); then \
742 echo "libclang-$(LLVM_VERSION).so.1 depends on libclang-cpp. Should not be the case"; \
743 exit 2; \
744 fi
beabf665 745 if test -e $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libclang-$(LLVM_VERSION).so.1; then \
6cb0704a
SL
746 echo "libclang-$(LLVM_VERSION).so.1 link is broken"; \
747 exit 2; \
748 fi
7d63b357
SL
749 touch $@
750
751debian-libfuzzer-build:
752ifeq (${LIBFUZZER_ENABLE},yes)
bb5876c1 753 cd $(TARGET_BUILD); \
5088c762 754 CFLAGS="$(opt_flags) $(STAGE_2_CFLAGS)"; \
7d63b357 755 echo $$CFLAGS; \
1de70a0b 756 for sourcefile in $(BASE_PATH)/compiler-rt/lib/fuzzer/*.cpp; do \
2f1fc2f0 757 $(SCCACHE_CMD) $(STAGE_2_BIN_DIR)/clang++ -c $$CFLAGS -std=c++17 $$sourcefile -IFuzzer || exit 1; \
1a948d0e 758 done; \
7d63b357
SL
759 ar ruv libFuzzer.a Fuzzer*.o
760endif
761 touch $@
762
437f86c9
TA
763debian-libclc-build:
764# Builds libclc
437f86c9 765 mkdir -p libclc/build
cb07c387 766 echo "Using cmake: $(CMAKE_BIN)"
437f86c9 767 cd libclc/build && \
cb07c387 768 $(CMAKE_BIN) ../ \
83fab602 769 -G Ninja \
8579a7d2 770 $(SCCACHE_CMAKE) \
35a8b4a6
EM
771 -DCMAKE_C_COMPILER=$(STAGE_2_BIN_DIR)/clang \
772 -DCMAKE_CXX_COMPILER=$(STAGE_2_BIN_DIR)/clang++ \
5088c762 773 -DCMAKE_C_FLAGS="$(opt_flags) $(STAGE_2_CFLAGS)" \
e436189c 774 -DCMAKE_CXX_FLAGS="$(opt_flags) $(STAGE_2_CXXFLAGS) -I$(BASE_PATH)/llvm/include" \
5088c762
EM
775 -DCMAKE_SHARED_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
776 -DCMAKE_MODULE_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
777 -DCMAKE_EXE_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
e001f3ee
JJ
778 -DCMAKE_INSTALL_PREFIX=/usr \
779 -DCMAKE_INSTALL_DATADIR=lib \
780 -DCMAKE_INSTALL_INCLUDEDIR=include \
f884c990 781 -DLLVM_CMAKE_DIR=$(STAGE_2_BIN_DIR)/../ \
41a4a741 782 $(LIBCLC_LLVM_SPIRV) \
7a5f4765 783 -DLIBCLC_TARGETS_TO_BUILD=$(LIBCLC_TARGETS_TO_BUILD); \
7729b52c 784 LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(STAGE_2_LIB_DIR) ninja -j $(NJOBS) $(VERBOSE)
0336f15c
JJ
785ifndef LLVM_SPIRV
786 echo "libclc built without SPIRV (.spv) outputs because llvm-spirv wasn't found"
d9604ece 787endif
437f86c9
TA
788 touch $@
789
78fcc5f7
GC
790build-wasm/compiler-rt-%: cpu = $(@:build-wasm/compiler-rt-%=%)
791build-wasm/compiler-rt-%:
792 @echo "Building compiler-rt for $(cpu)"
793 @echo "Using cmake: $(CMAKE_BIN)"
794 mkdir -p "$@"
795 $(CMAKE_BIN) -B "$@" -S compiler-rt/lib/builtins/ \
bcf5c6f8 796 -G Ninja \
8579a7d2 797 $(SCCACHE_CMAKE) \
98b9aa75 798 -DCMAKE_SYSTEM_NAME=Generic \
78fcc5f7
GC
799 -DCMAKE_C_COMPILER_TARGET=$(cpu)-unknown-unknown \
800 -DCMAKE_CXX_COMPILER_TARGET=$(cpu)-unknown-unknown \
801 -DCMAKE_ASM_COMPILER_TARGET=$(cpu)-unknown-unknown \
bcf5c6f8
FL
802 -DCMAKE_C_COMPILER=$(STAGE_2_BIN_DIR)/clang \
803 -DCMAKE_CXX_COMPILER=$(STAGE_2_BIN_DIR)/clang++ \
804 -DCMAKE_C_FLAGS="$(opt_flags) $(STAGE_2_CFLAGS)" \
805 -DCMAKE_CXX_FLAGS="$(opt_flags) $(STAGE_2_CXXFLAGS)" \
806 -DCMAKE_SHARED_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
807 -DCMAKE_MODULE_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
808 -DCMAKE_EXE_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
93128711 809 -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION) \
bcf5c6f8
FL
810 -DCMAKE_INSTALL_DATADIR=lib \
811 -DCMAKE_INSTALL_INCLUDEDIR=include \
f884c990 812 -DLLVM_CMAKE_DIR=$(STAGE_2_BIN_DIR)/../ \
bcf5c6f8
FL
813 -DCOMPILER_RT_STANDALONE_BUILD=ON \
814 -DCOMPILER_RT_BAREMETAL_BUILD=ON \
815 -DCOMPILER_RT_INCLUDE_TESTS=OFF \
816 -DCOMPILER_RT_USE_LIBCXX=OFF \
817 -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
78fcc5f7
GC
818 -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=$(cpu)-unknown-unknown \
819 -DCOMPILER_RT_OS_DIR=wasi
9e3e1db3 820 ninja -C "$@" -j $(NJOBS) $(VERBOSE)
78fcc5f7 821
93ecb8e7 822ifeq ($(LIBCXX_WASM_ENABLE), no)
78fcc5f7 823build-wasm/libcxx-%-wasi: build-wasm/compiler-rt-%
39f4464e 824 @echo "Skipping libcxx-*-wasi on this distro $(DISTRO)"
c8e6138a 825else
78fcc5f7
GC
826build-wasm/libcxx-%-wasi: cpu = $(@:build-wasm/libcxx-%-wasi=%)
827build-wasm/libcxx-%-wasi: build-wasm/compiler-rt-%
828 @echo "Building libcxx for $(cpu)"
829 @echo "Using cmake: $(CMAKE_BIN)"
830
831 # We need a functioning clang, which in turn requires a linker. We
832 # patch clang to use a versioned wasm-ld (cf. wasm-ld-path.diff), so
833 # create wasm-ld-$(LLVM_VERSION) in the stage2 bin dir manually.
834 cp $(STAGE_2_BIN_DIR)/wasm-ld $(STAGE_2_BIN_DIR)/wasm-ld-$(LLVM_VERSION)
835
836 # We need a wasm compiler-rt. Depend on the make target that builds it,
837 # and manually copy it to the stage2 lib dir from there
838 mkdir -p \
93128711 839 $(STAGE_2_LIB_DIR)/clang/$(LLVM_VERSION)/lib/wasi/
78fcc5f7 840 cp build-wasm/compiler-rt-$(cpu)/lib/wasi/libclang_rt.builtins-$(cpu).a \
93128711 841 $(STAGE_2_LIB_DIR)/clang/$(LLVM_VERSION)/lib/wasi/
78fcc5f7
GC
842
843 # Notes:
844 # - Uses $(LDFLAGS) instead of $(STAGE_2_LDFLAGS), because wasm-ld does not
845 # support --build-id yet. Upstream is working on it, cf. D107662.
846 # - Pass -fno-stack-protector to disable -fstack-protector-strong that is
847 # passed by default, as this is not supported yet in WebAssembly, cf.
848 # https://github.com/WebAssembly/wasi-libc/issues/157
849 # - Use llvm-ar and llvm-ranlib, as binutils does not currently support
850 # WebAssembly and creates invalid indexes.
851 # - Use LLVM_LIBDIR_SUFFIX to install to /usr/lib/wasm32-wasi. To be
852 # replaced by CMAKE_INSTALL_LIBDIR=lib/$(cpu)-wasi when D130586
853 # ships.
854 mkdir -p "$@"
855 $(CMAKE_BIN) -B "$@" -S runtimes \
7863400b 856 -G Ninja \
78fcc5f7
GC
857 $(SCCACHE_CMAKE) \
858 -DCMAKE_C_COMPILER_WORKS=ON \
859 -DCMAKE_CXX_COMPILER_WORKS=ON \
860 -DLLVM_COMPILER_CHECKED=ON \
861 -DCMAKE_C_COMPILER_TARGET=$(cpu)-unknown-wasi \
862 -DCMAKE_CXX_COMPILER_TARGET=$(cpu)-unknown-wasi \
863 -DCMAKE_ASM_COMPILER_TARGET=$(cpu)-unknown-wasi \
864 -DCMAKE_C_COMPILER=$(STAGE_2_BIN_DIR)/clang \
865 -DCMAKE_CXX_COMPILER=$(STAGE_2_BIN_DIR)/clang++ \
866 -DCMAKE_AR=$(STAGE_2_BIN_DIR)/llvm-ar \
867 -DCMAKE_RANLIB=$(STAGE_2_BIN_DIR)/llvm-ranlib \
868 -DCMAKE_C_FLAGS="$(opt_flags) $(STAGE_2_CFLAGS) -fno-stack-protector" \
869 -DCMAKE_CXX_FLAGS="$(opt_flags) $(STAGE_2_CXXFLAGS) -fno-stack-protector" \
870 -DCMAKE_SHARED_LINKER_FLAGS="$(LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
871 -DCMAKE_MODULE_LINKER_FLAGS="$(LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
872 -DCMAKE_EXE_LINKER_FLAGS="$(LDFLAGS) -L$(STAGE_2_LIB_DIR)" \
873 -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \
874 -DCMAKE_INSTALL_INCLUDEDIR=include/$(cpu)-wasi \
875 -DLLVM_LIBDIR_SUFFIX=/$(cpu)-wasi \
876 -DLLVM_CONFIG=$(STAGE_2_BIN_DIR)/llvm-config \
877 -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
878 -DLIBCXX_USE_COMPILER_RT=ON \
879 -DLIBCXXABI_USE_COMPILER_RT=ON \
880 -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
881 -DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \
882 -DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \
883 -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
884 -DLIBCXX_CXX_ABI=libcxxabi \
885 -DLIBCXX_ABI_VERSION=2 \
886 -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
887 -DLIBCXX_ENABLE_SHARED:BOOL=OFF \
888 -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
889 -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
890 -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \
891 -DLIBCXX_ENABLE_THREADS:BOOL=OFF \
892 -DLIBCXX_HAS_PTHREAD_API:BOOL=OFF \
893 -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
894 -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
895 -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
896 -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
897 -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
898 -DLIBCXXABI_ENABLE_THREADS:BOOL=OFF \
899 -DLIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \
900 -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
901 -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF
9e3e1db3 902 ninja -C "$@" -j $(NJOBS) $(VERBOSE)
39f4464e 903endif
78fcc5f7
GC
904
905# Build compiler-rt for wasm32 and wasm64. Build libcxx only for wasm32, as
906# libcxx requires wasi-libc, which only exists for wasm32 right now.
907debian-wasm-build: \
908 build-wasm/compiler-rt-wasm32 \
909 build-wasm/libcxx-wasm32-wasi \
910 build-wasm/compiler-rt-wasm64
bcf5c6f8
FL
911 touch $@
912
a5c11bf3
SL
913sccache-stats:
914# If we used sccache, shows stats
06f31916
SL
915 if test -f $(SCCACHE_CMD); then \
916 ls -al $(SCCACHE_PATH)/; \
bde3d49c 917 mkdir -p /tmp/buildd/source/; \
06f31916 918 $(SCCACHE_CMD) --stats-format json --show-stats > /tmp/buildd/source/sccache-stats.json; \
bde3d49c 919 cat /tmp/buildd/source/sccache-stats.json; \
a5c11bf3
SL
920 fi
921 touch $@
922
78fcc5f7
GC
923override_dh_auto_build: \
924 debian-full-build \
925 debian-libfuzzer-build \
926 debian-libclc-build \
927 debian-wasm-build \
928 sccache-stats
6ac04400 929
a6c0767f
SL
930override_dh_prep: build_doc
931 dh_prep
932
76129c23 933build_doc:
daf38c16
SL
934 BUILDDIR="_build"; \
935 ALLSPHINXOPTS="-d $$BUILDDIR/doctrees ."; \
936 cd $(CURDIR)/llvm/docs && \
937 sphinx-build -b html $$ALLSPHINXOPTS $$BUILDDIR/html && \
938 sphinx-build -b man $$ALLSPHINXOPTS $$BUILDDIR/man && \
939 cd -; \
940 cd $(CURDIR)/clang/docs && \
941 sphinx-build -b html $$ALLSPHINXOPTS $$BUILDDIR/html && \
942 sphinx-build -b man $$ALLSPHINXOPTS $$BUILDDIR/man
943
dfa81be0 944 -(if test "$(OCAML_ENABLE)" = yes; then \
dd2ac7bd 945 ninja -C "$(TARGET_BUILD_STAGE2)" $(VERBOSE) ocaml_doc; \
dfa81be0 946 fi)
c0198ab3 947
dd2ac7bd 948 ninja -C $(TARGET_BUILD_STAGE2) $(VERBOSE) docs-llvm-html docs-clang-html docs-clang-tools-html docs-clang-tools-man docs-clang-man docs-llvm-man
df8b6900
JPAG
949
950ifeq (${POLLY_ENABLE},yes)
dd2ac7bd 951 ninja -C $(TARGET_BUILD_STAGE2) $(VERBOSE) docs-polly-html docs-polly-man
df8b6900 952endif
875ec1e7 953
a6c0767f 954# Rename manpages
66dfda54 955 d=$(CURDIR)/llvm/docs/_build/man/; \
630eb4ec 956 if test -d $$d; then \
a9ab44f7
SL
957 cd $$d; \
958 for f in *.1; do \
959 echo "$$f"|grep $(LLVM_VERSION) || mv $$f `echo $$f|sed "s|\.1|-$(LLVM_VERSION).1|"`; \
960 done; \
961 else \
962 echo "could not find $$d"; \
630eb4ec 963 fi
65fb2295
SL
964# the clang doc generation only generates clang manpage
965# When it will do more, we should move that in the loop above
0203a45f 966 cd $(CURDIR)/clang/docs/_build/man/ && mv clang.1 clang-$(LLVM_VERSION).1
fe848490 967
76129c23 968# Remove the copy of jquery. See bug #701087
dbba4938 969 for d in $(TARGET_BUILD_STAGE2)/docs/html/_static/ $(TARGET_BUILD_STAGE2)/tools/clang/docs/html/_static/ $(TARGET_BUILD_STAGE2)/tools/clang/tools/extra/docs/html/_static/; do \
da7745a4
SL
970 cd $$d && rm -f jquery.js && ln -s /usr/share/javascript/jquery/jquery.js && cd -; \
971 cd $$d && rm -f underscore.js && ln -s /usr/share/javascript/underscore/underscore.js && cd -; \
76129c23
SL
972 done
973
7d1b8a2a 974 mkdir -p debian/man/
1037ae5f
SL
975 ls -al clang/tools/scan-view/bin/scan-view
976 clang/tools/scan-view/bin/scan-view --help || true
977 help2man --no-info --version-string=$(LLVM_VERSION) clang/tools/scan-view/bin/scan-view > debian/man/scan-view-$(LLVM_VERSION).1 || true
978 help2man --no-info --version-string=$(LLVM_VERSION) clang/tools/clang-format/clang-format-diff.py > debian/man/clang-format-diff-$(LLVM_VERSION).1 || true
76129c23 979
d3aa5d84 980 CMDS="llvm-dwarfdump llvm-mc llvm-objdump llvm-rtdyld llvm-size llvm-ranlib lldb clang-format clang clang++ clang-tblgen clang-check clang-cpp clang-tidy clang-apply-replacements clang-rename clang-query pp-trace sancov lli modularize clang-include-fixer find-all-symbols clang-reorder-fields ld.lld llvm-tblgen clang-change-namespace clang-offload-bundler clangd clang-repl git-clang-format run-clang-tidy"; \
d13452ba
SL
981 for f in $$CMDS; do \
982 echo "Generating manpage of $$f"; \
c0281a9d 983 LD_LIBRARY_PATH=$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/:/usr/lib/*/libfakeroot help2man --no-info --version-string=$(LLVM_VERSION) $(TARGET_BUILD_STAGE2)/bin/$$f > debian/man/$$f-$(LLVM_VERSION).1 || true; \
6d6fb79c 984 done
0f9f7a80
SL
985 # Create the following directory regardless as libomp-16-doc
986 # is Architecture: all
987 mkdir -p openmp/runtime/doc/doxygen/generated/html/
988
514529a9 989 if test "$(OPENMP_ENABLE)" = yes; then \
e9955fc3 990 cd openmp/runtime && doxygen doc/doxygen/config; cd -; \
514529a9
SL
991 cd openmp/runtime/doc/doxygen/generated/html/ && rm jquery.js && ln -s /usr/share/javascript/jquery/jquery.js; \
992 fi
e5225028 993 touch $@
875ec1e7
SL
994
995override_dh_auto_install:
b3654c24
SL
996 # Clean up temporary files to make sure the install works
997 rm -rf $(find $(TARGET_BUILD) -wholename '*CMakeFiles*' -not -name CMakeLists.txt -a -name "*.dir" -type d)
187d0897 998
b3654c24 999 # install/fast enables a make install without recompiling temporary files
caaf053d 1000 LD_LIBRARY_PATH=$(STAGE_2_LIB_DIR):$$LD_LIBRARY_PATH DESTDIR=$(DEB_INST)/ ninja -C $(TARGET_BUILD) $(VERBOSE) stage2-install
c5abefcc 1001
dd8713ff
SL
1002 # Not used on Linux.
1003 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/argdumper
1004 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang/clang-format-bbedit.applescript
eb2110af
SL
1005 # Remove bat files https://bugs.llvm.org/show_bug.cgi?id=30755
1006 rm -f $(DEB_INST)/usr/share/clang/scan-build-$(LLVM_VERSION)/libexec/*.bat $(DEB_INST)/usr/share/clang/scan-build-$(LLVM_VERSION)/bin/*.bat
dd8713ff 1007
f656e7dd 1008 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libExampleIRTransforms.a
fb1f4563
SL
1009 # Remove an example - introduced in https://reviews.llvm.org/D61446
1010 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libBye.a
f656e7dd 1011
d6eab310 1012 cp $(TARGET_BUILD_STAGE2)/bin/clang-query $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin
dd8713ff 1013
b742b383
SL
1014 # Only run on executable, not script
1015 chrpath -d `find $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/ -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'|cut -d: -f1`
0af59c9b 1016ifeq (,$(filter $(DEB_HOST_ARCH), powerpc powerpcspe))
816d1182 1017ifneq (,$(filter $(DEB_HOST_ARCH_OS),linux))
d24f4d88
SL
1018 # To fix custom-library-search-path
1019 chrpath -d $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)*/lib/linux/*.so
816d1182 1020endif
0af59c9b 1021endif
b742b383 1022
c039e046
SL
1023 if test "$(LIBUNWIND_ENABLE)" = yes; then \
1024 mkdir -p debian/tmp/usr/include/libunwind; \
1025 cp -R libunwind/include/* debian/tmp/usr/include/libunwind/; \
1026 fi
c72a6c0e 1027
20d2a90c 1028 : # libomp
514529a9 1029 if test "$(OPENMP_ENABLE)" = yes; then \
11a0af38 1030 cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib; \
20d2a90c 1031 ln -s libomp.so.$(SONAME_OPENMP) libomp.so; \
124f9774 1032 cp libomp.so.$(SONAME_OPENMP) libomp-$(LLVM_VERSION).so.$(SONAME_OPENMP); \
514529a9 1033 fi
430f8ff5 1034
b0c15f84 1035# Remove artifact (where compiler-rt is built)
dd8713ff
SL
1036# if test -d $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux; then \
1037# cd $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux && rm -rf $$(find . -mindepth 2 -maxdepth 2 -type d) && rm -rf $$(find -empty) && rm -rf */.dir; \
1038# fi
e5cf5438
SL
1039
1040 mkdir -p $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/
94db6453 1041 cp compiler-rt/lib/asan/scripts/asan_symbolize.py $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/asan_symbolize-$(LLVM_VERSION)
e5cf5438 1042
45f800fa 1043ifeq (${LIBFUZZER_ENABLE},yes)
45fe7b69
SL
1044 mkdir -p $(CURDIR)/debian/libfuzzer-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/
1045 cp -v $(TARGET_BUILD)/libFuzzer.a $(CURDIR)/debian/libfuzzer-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/
45f800fa 1046endif
45fe7b69 1047
875ec1e7
SL
1048# Create this fake directory to make the install libclang-common-dev happy
1049# under the unsupported archs of compiler-rt
65242311 1050 mkdir -p $(DEB_INST)/usr/lib/clang/$(LLVM_VERSION)/lib
5a8e8787 1051 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/
65242311 1052 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/clang_linux/
956d37d3 1053 mkdir -p $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux/
5a8e8787 1054 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/share/
a13dfd15 1055# On some archs, the sanitizers are not built. As we explicitly includes some txt files, create
a3daeed3 1056# a fake txt to make sure it doesn't fail
5a8e8787
SL
1057 echo "The *.txt files, if available, contain helper to override some of the errors messages." > $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/README.txt
1058 echo "Please visit https://github.com/google/sanitizers/wiki/AddressSanitizer for help" >> $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/README.txt
68662551 1059# Path changed. Make a copy of it
5a8e8787 1060 cp $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/README.txt $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/share/README.txt
875ec1e7 1061
5eecc2f0 1062# Remove things that CMake install but which aren't packaged yet,
dd8713ff 1063# or are packaged from the source or build tree.
dd8713ff
SL
1064 mv $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang-$(LLVM_VERSION) \
1065 $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang
5eecc2f0 1066
7138491d 1067# Probably useless
6bbfdc3d 1068 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/six.py
4afa87ab 1069 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local/lib/python*/*-packages/six.py
b2075702 1070 rm -rf $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/__pycache__/ \
3401c0d7 1071 $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/*/__pycache__/
7043d832 1072
5bfe8cc3
SL
1073 # workaround issue https://github.com/llvm/llvm-project/issues/57101
1074 find debian/tmp -iname 'libbolt_rt*.a' -path '*/build-llvm/*' -delete
1075 # Remove an osx file
1076 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libbolt_rt_instr_osx.a
1077
dd2ac7bd 1078 DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C libclc/build install
5f674308 1079
78fcc5f7
GC
1080 DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-wasm/compiler-rt-wasm32 install
1081 DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-wasm/compiler-rt-wasm64 install
41c7732f
SL
1082 if test -d build-wasm/libcxx-wasm32-wasi; then \
1083 DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-wasm/libcxx-wasm32-wasi install; \
1084 fi
1085
50a54f4e 1086
1448ae0a 1087# Rename binaries
65242311 1088 mkdir -p $(DEB_INST)/usr/bin/
45fe7b69
SL
1089 cd $(DEB_INST)/usr/bin/; \
1090 rm -f *; \
b80030da 1091 for f in ../lib/llvm-$(LLVM_VERSION)/bin/*; do \
1448ae0a
SL
1092 ln -s $$f `basename $$f`-$(LLVM_VERSION); \
1093 echo "Link $$f to `basename $$f`-$(LLVM_VERSION)"; \
1094 done
1095
31daa190 1096# Rename some stuff with the version name
6086214c 1097 cp $(CURDIR)/clang/tools/scan-build/man/scan-build.1 $(CURDIR)/clang/tools/scan-build/man/scan-build-$(LLVM_VERSION).1
b1ecb207 1098
b910c7e9 1099 # copy the vim files (except that tablegen does not exist for indent
d251a2ee
SL
1100 VIM_DIRS="ftdetect ftplugin syntax indent"; \
1101 for dir in $$VIM_DIRS; do \
2aa08a74
SL
1102 cp -f $(CURDIR)/llvm/utils/vim/$$dir/llvm.vim $(CURDIR)/llvm/utils/vim/$$dir/llvm-$(LLVM_VERSION).vim; \
1103 if test -f $(CURDIR)/llvm/utils/vim/$$dir/tablegen.vim; then \
1104 cp -f $(CURDIR)/llvm/utils/vim/$$dir/tablegen.vim $(CURDIR)/llvm/utils/vim/$$dir/tablegen-$(LLVM_VERSION).vim; \
d251a2ee
SL
1105 fi; \
1106 done
2aa08a74 1107 cp -f $(CURDIR)/llvm/utils/vim/vimrc $(CURDIR)/llvm/utils/vim/llvm-$(LLVM_VERSION)-vimrc
31daa190 1108
a5a8400e 1109 cp -f $(CURDIR)/clang/tools/clang-format/clang-format-diff.py $(CURDIR)/clang/tools/clang-format/clang-format-diff-$(LLVM_VERSION)
76129c23 1110
a5a8400e 1111 cp -f $(CURDIR)/clang/tools/clang-format/clang-format.py clang/tools/clang-format/clang-format-$(LLVM_VERSION).py
7fa75a0e 1112
d13452ba 1113 rm -rf clang/tools/scan-build-$(LLVM_VERSION)
94db6453
SL
1114 cp -fR $(CURDIR)/clang/tools/scan-build clang/tools/scan-build-$(LLVM_VERSION)
1115
a46bba31
SL
1116 rm -rf clang/tools/scan-build-py-$(LLVM_VERSION)
1117 cp -fR $(CURDIR)/clang/tools/scan-build-py clang/tools/scan-build-py-$(LLVM_VERSION)
21cd3633 1118 chmod +x clang/tools/scan-build-py-$(LLVM_VERSION)/bin/*
a46bba31 1119
d13452ba 1120 rm -rf clang/tools/scan-view-$(LLVM_VERSION)
94db6453
SL
1121 cp -fR $(CURDIR)/clang/tools/scan-view clang/tools/scan-view-$(LLVM_VERSION)
1122
0d6e1b40 1123# Remove some license files
5eecc2f0 1124 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/include/llvm/Support/LICENSE.TXT
1448ae0a 1125
f075d6a0 1126# Disable CMake's package validation checks for target files that we may remove.
20434a8d 1127 sed -i '/_IMPORT_CHECK_TARGETS \(Polly\|sancov\|llvm-omp-device-info\|omptarget\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake
68e5f7c0
SL
1128
1129# Also disable mlir-* checks in the cmake
1cc6c3ec 1130 sed -i '/_IMPORT_CHECK_TARGETS \(mlir-\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake
e10ac5c5
SL
1131
1132 sed -i '/_cmake_import_check_files_for_.*\/bin\/.*/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake
1133 sed -i '/_IMPORT_CHECK_FILES_FOR_.*\/bin\/.*/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake
1134 sed -i '/_IMPORT_CHECK_FILES_FOR_\(mlir-\|Polly\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake
24f56dd4 1135 sed -i '/_cmake_import_check_files_for_\(mlir\|Polly\|MLIR\|omptarget\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake
f075d6a0 1136
8ab8cd7b
PW
1137# Disable CMake's package validation checks for binaries that may not be installed
1138 sed -i 's|.*_IMPORT_CHECK_FILES_FOR_.*/bin/.*)|#&|' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake
1139
14a06d10 1140# Adjust to the existing symlink. See #994827
26db809a 1141 sed -i "s|libclang-$(LLVM_VERSION).so.$(LLVM_VERSION).*\"|libclang-$(LLVM_VERSION).so.1\"|" $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake
14a06d10 1142
c05f6c91 1143# Managed in python*-lldb-X.Y.links.in
e7d54dd0 1144 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/lldb/_lldb.so
e5cf5438 1145
65242311 1146# Manage the polly files. Sometimes, we build them. Sometimes not.
b6af4ab8 1147 if test "$(POLLY_ENABLE)" = yes; then \
519cbc61 1148 mkdir -p $(CURDIR)/debian/libclang-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/ $(CURDIR)/debian/libpolly-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/polly/; \
20d2a90c 1149 mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libPolly* \
519cbc61
SL
1150 $(CURDIR)/debian/libpolly-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/; \
1151 rm -rf $(CURDIR)/debian/libpolly-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/polly; \
65242311 1152 mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/include/polly/ \
519cbc61 1153 $(CURDIR)/debian/libpolly-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/; \
65242311
SL
1154 fi
1155
1aa9ae9e 1156 mkdir -p $(CURDIR)/debian/usr/share/doc/llvm-$(LLVM_VERSION)-doc/ $(CURDIR)/debian/usr/share/doc/clang-$(LLVM_VERSION)-doc/
dbba4938
SL
1157 cp -R $(TARGET_BUILD_STAGE2)/docs/html $(CURDIR)/debian/usr/share/doc/llvm-$(LLVM_VERSION)-doc/
1158 cp -R $(TARGET_BUILD_STAGE2)/tools/clang/docs/html $(CURDIR)/debian/usr/share/doc/clang-$(LLVM_VERSION)-doc/
1159 cp -R $(TARGET_BUILD_STAGE2)/tools/clang/tools/extra/docs/html $(CURDIR)/debian/usr/share/doc/clang-$(LLVM_VERSION)-doc/clang-extra
1aa9ae9e 1160
cc9911af 1161# Rename OCaml bindings
21cd3633 1162 if test "$(OCAML_ENABLE)" = yes; then \
ebc5013b 1163 mkdir -p "$(DEB_INST)$(OCAML_STDLIB_DIR)"; \
45f800fa 1164 mkdir -p "$(DEB_INST)usr/lib/llvm-$(LLVM_VERSION)/docs/ocaml/html/html"; \
c62cdd3c 1165 mkdir -p "$(DEB_INST)usr/lib/llvm-$(LLVM_VERSION)/share/doc/llvm/ocaml-html/"; \
21cd3633 1166 if test -d "$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/ocaml"; then \
21cd3633
SL
1167 mv -f "$(DEB_INST)usr/lib/llvm-$(LLVM_VERSION)/lib/ocaml" \
1168 "$(DEB_INST)$(OCAML_STDLIB_DIR)/llvm-$(LLVM_VERSION)"; \
1169 fi; \
1170 fi
cc9911af 1171
4dbb8ad2
SL
1172# For some reasons, from Ubuntu jammy, python stuff are installed in /local/lib, move it back
1173 if test -d $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local/lib/; then \
1174 mv $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local/lib/* $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/; \
1175 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/six.py; \
1176 ls $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local/; \
1177 rmdir $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local/lib; \
1178 rmdir $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local; \
1179 fi
1180
f445b2b0
SL
1181# Disable the python binding for buster. not sure why it regressed
1182# regressed de4364f1ecaa..0745b0c0354a
66bfde8c 1183 if test "$(DISTRO)" = "buster" -o "$(DISTRO)" = "bionic" -o "$(DEB_HOST_ARCH)" = "mips64el"; then \
f445b2b0
SL
1184 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/gdb/python/ompd/; \
1185 touch $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/gdb/python/ompd/empty; \
fec3c5de 1186 echo "" > debian/python3-lldb-$(LLVM_VERSION).install; \
f445b2b0
SL
1187 fi
1188
dd8713ff
SL
1189# Delete the target build directory to save some space on the build systems
1190# All the files have been installed in $(CURDIR)/debian/tmp/ already
44b820ea 1191 rm -rf $(TARGET_BUILD)
e5225028 1192 touch $@
dd8713ff 1193
1d9005f1 1194
cc9911af 1195override_dh_makeshlibs:
738f2e66
SL
1196 dh_makeshlibs -plibclang$(SONAME_EXT)-$(LLVM_VERSION)
1197 dh_makeshlibs -pliblldb-$(LLVM_VERSION)
1198 dh_makeshlibs -plibllvm$(LLVM_VERSION)
1199 dh_makeshlibs -plibomp$(SONAME_OPENMP)-$(LLVM_VERSION)
f1490d72 1200 dh_makeshlibs --remaining-packages -V
cc9911af 1201
52df5b22 1202override_dh_shlibdeps:
3eb35be5 1203# Ignore asan libraries. They would trigger dependencies to multiarch libraries
fd14caa2 1204 dh_shlibdeps -l$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/ -Xlibclang_rt.asan -Xlibclang_rt.asan -Xlibclang_rt.asan-*.so -Xlibclang_rt.asan-*.so
52df5b22 1205
e5cf5438 1206override_dh_installman:
af56187b
SL
1207 if test -f lld/docs/ld.lld.1; then \
1208 mv lld/docs/ld.lld.1 lld/docs/ld.lld-$(LLVM_VERSION).1; \
1209 fi
e5cf5438
SL
1210 dh_installman
1211# Make sure that lli manpage is only in llvm-3.2-runtime (See #697117)
1212 rm -f $(CURDIR)/debian/llvm-$(LLVM_VERSION)/usr/share/man/man1/lli*
1213
1214
875ec1e7 1215override_dh_strip:
e9f1d28b 1216 : # running out of diskspace on the buildds
c114641a 1217 find $(TARGET_BUILD) -name '*.o' -o -name '*.a' -type f | xargs -r rm -f
231b7c6e
SL
1218ifeq (0, $(strip $(shell dpkg --compare-versions $(DH_VERSION) ge 9.20160114; echo $$?)))
1219 : # If we don't have the right version of debhelper, don't run the option
738f2e66
SL
1220 dh_strip -p libclang$(SONAME_EXT)-$(LLVM_VERSION) --dbgsym-migration='libclang$(SONAME_EXT)-$(LLVM_VERSION)-dbg'
1221 dh_strip -p libllvm$(LLVM_VERSION) --dbgsym-migration='libllvm$(LLVM_VERSION)-dbg'
1222 dh_strip -p liblldb-$(LLVM_VERSION) --dbgsym-migration='liblldb-$(LLVM_VERSION)-dbg'
1223 dh_strip -p libomp$(SONAME_OPENMP)-$(LLVM_VERSION) --dbgsym-migration='libomp$(SONAME_OPENMP)-$(LLVM_VERSION)-dbg'
231b7c6e 1224endif
06b90c93 1225# ifeq (${LLD_ENABLE},yes)
6bcd0a96 1226# PATH=$(CURDIR)/:$$PATH dh_strip -p liblld-$(LLVM_VERSION) --dbg-package=liblld-$(LLVM_VERSION)-dbg
06b90c93 1227# endif
f0f0ba2c 1228ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) lt 2.31.1-11 ; echo $$?),0)
87fdbcd7
SL
1229 : # building with clang, binutils/strip has hard time stripping some libs because of
1230 : # https://sourceware.org/bugzilla/show_bug.cgi?id=23788
1231 : # use llvm-strip instead
7dd264c6
SL
1232 : # Workaround some issues with stripping by using llvm's
1233 if test ! -f $(CURDIR)/strip; then \
1234 ln -s $(CURDIR)/debian/llvm-$(LLVM_VERSION)/usr/lib/llvm-$(LLVM_VERSION)/bin/llvm-strip $(CURDIR)/strip; \
1235 fi
2630cd44
SL
1236 ls -al $(CURDIR)/debian/.debhelper/*/dbgsym-root/usr/lib/debug/.build-id/*/*|| true
1237 : # On some old version of Debian (stretch) and Ubuntu, Rules-Requires-Root isn't supported
1238 : # Sometime, it fails because of chown: changing ownership of 'debian/.debhelper/clang-7/dbgsym-root/usr/lib/debug/.build-id/37/ba506ae9d2f82219bf5c552f7c09853052b2b0.debug': Operation not permitted
c471c172 1239 : # Therefore, continue when we encounter an error
2630cd44 1240 PATH=$(CURDIR)/:$$PATH LD_LIBRARY_PATH=$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/:/usr/lib/*/libfakeroot dh_strip -a -v || true
6bcd0a96
SL
1241 : # Remove the workaround
1242 rm $(CURDIR)/strip
fd33d673
SL
1243 : # for some reasons, the +x might be removed
1244 chmod -f +x $(CURDIR)/debian/*/usr/lib/llvm-$(LLVM_VERSION)/bin/* || true
10fe453c 1245else
bcf5c6f8
FL
1246 # GNU strip doesn't recognize WebAssembly binaries, and actually corrupts them.
1247 # llvm-strip (as of 15.0.2) fails with --strip-debug (but works with --strip-all)
78fcc5f7 1248 dh_strip -a -v -Xlibclang_rt.builtins-wasm32.a -Xlibclang_rt.builtins-wasm64.a -Xusr/lib/wasm32-wasi
10fe453c 1249endif
7aec1357 1250
44ef5ad8 1251override_dh_install:
ed8ddc78 1252ifeq (${POLLY_ENABLE},yes)
259b7ad4 1253# only for arch:any builds
519cbc61
SL
1254ifneq (,$(filter libpolly-$(LLVM_VERSION)-dev, $(shell dh_listpackages)))
1255 dh_install -p libpolly-$(LLVM_VERSION)-dev usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/polly/*.cmake usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/polly
21d3048d 1256# On old Debian & Ubuntu, removing the files is necessary
0a64af0a 1257 rm -rf debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/polly/*.cmake
8e4a4321
GC
1258else
1259 rm -rf $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/polly/*.cmake
259b7ad4 1260endif
ed8ddc78 1261endif
44ef5ad8 1262 dh_install --fail-missing
1d75785e 1263# Move the libc++ abi files from libc++ to libc++-abi for the wasm32 packages
3b5da5d9
SL
1264# These packages are arch: all, so only do so when the packages are built
1265ifneq (,$(filter libc++-$(LLVM_VERSION)-dev-wasm32, $(shell dh_listpackages)))
1266 mkdir -p $(CURDIR)/debian/libc++abi-$(LLVM_VERSION)-dev-wasm32/usr/lib/llvm-$(LLVM_VERSION)/include/wasm32-wasi/c++/v1
1d75785e
SL
1267 if test -f $(CURDIR)/debian/libc++-$(LLVM_VERSION)-dev-wasm32/usr/lib/llvm-$(LLVM_VERSION)/include/wasm32-wasi/c++/v1/__cxxabi_config.h; then \
1268 mv $(CURDIR)/debian/libc++-$(LLVM_VERSION)-dev-wasm32/usr/lib/llvm-$(LLVM_VERSION)/include/wasm32-wasi/c++/v1/__cxxabi_config.h \
1269 $(CURDIR)/debian/libc++abi-$(LLVM_VERSION)-dev-wasm32/usr/lib/llvm-$(LLVM_VERSION)/include/wasm32-wasi/c++/v1/__cxxabi_config.h; \
1270 mv $(CURDIR)/debian/libc++-$(LLVM_VERSION)-dev-wasm32/usr/lib/llvm-$(LLVM_VERSION)/include/wasm32-wasi/c++/v1/cxxabi.h \
1271 $(CURDIR)/debian/libc++abi-$(LLVM_VERSION)-dev-wasm32/usr/lib/llvm-$(LLVM_VERSION)/include/wasm32-wasi/c++/v1/cxxabi.h; \
1272 fi
f667185d 1273endif
563a36e0
SL
1274# Because of hurd, we are more flexible in what we include in libclang-X.Y-rt
1275# but we don't want to install wasi files into libclang-rt as they have their own package
1276# So, we remove this directory from the package
ba265857 1277 rm -fr $(CURDIR)/debian/libclang-rt-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/wasi/
300cdbe1
SL
1278
1279repack_a_llvm_ir:
1280ifeq (${LTO_ENABLE},yes)
1281# with LTO, .a contains llvm ir instead of native code. So, recompile them
1282 NJOBS="$(NJOBS)" P_TO_LLVM="$(CURDIR)" VERSION=$(LLVM_VERSION) bash -v debian/llvm-compile-lto-elf.sh $(CXXFLAGS_EXTRA)
1283endif
1284 touch $@
1285
1286
1287override_dh_installdeb: repack_a_llvm_ir
1d2a025d
SL
1288# Managed by the package
1289 dh_installdeb -a
1290
c05f6c91 1291 rm -f $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/lldb/__init__.pyc $(CURDIR)/debian/python*-lldb-$(LLVM_VERSION)/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/lldb/__init__.pyc
673cb02f 1292 rm -f $(CURDIR)/debian/clang-$(LLVM_VERSION)-examples/usr/share/doc/clang-$(LLVM_VERSION)-examples/examples/*Make*
81435e71 1293
7ab8ed57
SL
1294# the openmp header files moved to the same path as lib clang headers.
1295# To make sure they aren't conflicting ( https://bugs.llvm.org/show_bug.cgi?id=46977 )
1296# Remove them from the libclang-common package
5a8e8787 1297 rm -f $(CURDIR)/debian/libclang-common-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/include/omp*.h
7ab8ed57 1298
4e78d353
SL
1299# Remove some libc++ abi files in the libc++ file. See bug #969274
1300 rm -f $(CURDIR)/debian/libc++-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/c++/__cxxabi_config.h $(CURDIR)/debian/libc++-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/c++/cxxabi.h
78fcc5f7 1301
3ed4be9b
SL
1302# Remove auto generated python pyc
1303 find $(CURDIR)/debian/llvm-$(LLVM_VERSION)-tools/usr/lib/llvm-$(LLVM_VERSION)/ -name '*.pyc' | xargs -r rm -f
1304
b553daa1 1305ifeq (${RUN_TEST},yes)
42bfe3ea 1306# List of the archs we know we have 100 % tests working
056378d9 1307ARCH_LLVM_TEST_OK := i386 amd64
dd8713ff 1308
875ec1e7 1309override_dh_auto_test:
b6ca1c63 1310 echo "Running tests: $(RUN_TEST)"
da2955c1 1311# LLVM tests
dd8713ff 1312ifneq (,$(findstring $(DEB_HOST_ARCH),$(ARCH_LLVM_TEST_OK)))
f25e2499 1313# logs the output to check-llvm_build_log.txt for validation through autopkgtest
dd2ac7bd 1314 ninja $(VERBOSE) -C $(TARGET_BUILD) stage2-check-llvm | tee check-llvm_build_log.txt
dd8713ff 1315else
dd2ac7bd 1316 ninja $(VERBOSE) -C $(TARGET_BUILD) stage2-check-llvm || true
dd8713ff
SL
1317endif
1318
da2955c1 1319# Clang tests
dd2ac7bd 1320 ninja $(VERBOSE) -C $(TARGET_BUILD) stage2-check-clang || true
dd8713ff 1321
da2955c1 1322# Clang extra tests (ex: clang-tidy)
dd2ac7bd 1323 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-clang-tools || true
da2955c1
SL
1324
1325# LLD tests
ef64786f 1326ifeq (${LLD_ENABLE},yes)
dd2ac7bd 1327 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-lld || true
ef64786f 1328endif
7c7373be 1329
528f1c84 1330# Sanitizer
dd2ac7bd 1331 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-sanitizer || true
a4104082 1332
6ac04400 1333# Libcxx
8d4ee847 1334 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-libcxx || true
6ac04400
RS
1335
1336# Libcxxabi
8d4ee847 1337 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-libcxxabi || true
6ac04400 1338
55387e6b 1339# MLIR
59a5e080 1340ifeq (,$(filter $(DEB_HOST_ARCH), armel armhf i386 x32))
32a70e59
SL
1341# Do not run MLIR test on i386 because of
1342# https://github.com/llvm/llvm-project/issues/58357
55387e6b 1343 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-mlir || true
32a70e59 1344endif
55387e6b 1345
437f86c9 1346# Libclc
dd2ac7bd 1347 ninja $(VERBOSE) -C libclc/build test || true
437f86c9 1348
da2955c1 1349# LLDB tests
dd8713ff 1350ifeq (,$(filter $(DEB_HOST_ARCH), $(LLDB_DISABLE_ARCHS) armhf armel))
4a1524f5 1351ifneq (,$(filter codecoverage,$(DEB_BUILD_OPTIONS)))
f3a81d32 1352# Create a symlink to run the testsuite: see https://bugs.archlinux.org/task/50759
e7d54dd0 1353 cd $(CURDIR)/$(TARGET_BUILD)/lib/python*/*-packages/; \
a6c8c74a
SL
1354 if test ! -e _lldb.so; then \
1355 ln -s lldb/_lldb.so; \
1356 fi
f2830edd 1357 if test "$(CODECOVERAGE)" = "no"; then \
dd2ac7bd 1358 LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(CURDIR)/$(TARGET_BUILD)/lib/ ninja $(VERBOSE) -C $(TARGET_BUILD) check-lldb || true; \
f2830edd 1359 fi
18368be9 1360 # remove the workaround
e7d54dd0 1361 rm $(CURDIR)/$(TARGET_BUILD)/lib/python*/*-packages/_lldb.so
dd8713ff 1362endif
bf21400e 1363endif
dd8713ff 1364
da2955c1 1365# Polly tests
a958f0b7 1366#ifeq (${POLLY_ENABLE},yes)
066d9c79 1367# ninja -C $(TARGET_BUILD) check-polly || true
a958f0b7 1368#endif
dd8713ff 1369
fa3d839c 1370# Managed by debian build system
e7d54dd0 1371 rm -f $(CURDIR)/$(TARGET_BUILD)/lib/python*/*-packages/lldb/_lldb.so
1432f600 1372
c1c56e85
SL
1373# The compression of the code coverage report is done in the
1374# hook B21GetCoverageResults on the server
3dbb24b9 1375 if test "$(CODECOVERAGE)" = "yes"; then \
3b524bad 1376 REPORT=reports/llvm-toolchain.info; \
3dbb24b9 1377 mkdir -p reports/; \
1db2f514 1378 lcov --directory $(TARGET_BUILD)/ --capture --ignore-errors source --output-file $$REPORT; \
9a38e3eb 1379 lcov --remove $$REPORT "/usr*" -o $$REPORT; \
f11bd58b 1380 genhtml -o reports/coverage --show-details --highlight --legend $$REPORT; \
b64f52e0
SL
1381 chmod 0755 `find reports/coverage -type d`; \
1382 chmod 0644 `find reports/coverage -type f`; \
3dbb24b9 1383 fi
8bcfb779 1384else
f111124c 1385override_dh_auto_test:
8bcfb779 1386 @echo "Skipping tests"
f111124c
SL
1387endif
1388
875ec1e7 1389
ada0fc6b 1390override_dh_gencontrol: sccache-stats
712c1081
SL
1391 dh_gencontrol -- $(control_vars)
1392
7aec1357 1393
875ec1e7 1394override_dh_auto_clean:
3270880a 1395 rm -rf $(TARGET_BUILD) llvm/docs/_build/ clang/docs/_build tools/clang/docs/_html/
10a05cac
SL
1396# QA tools
1397 rm -rf cov-int/ reports/
0e2e9334 1398 rm -f `ls debian/*.in|grep -v control.in|sed -e "s|.in$$||g"`
12815a6f 1399 find utils -name '*.pyc' | xargs -r rm -f
a5a8400e
SL
1400 # Use -I because a test has a space in its name
1401 find lldb/test -iname '*.pyc' | xargs -I{} -r rm -f {}
a5a8400e
SL
1402 rm -f $(CURDIR)/utils/vim/llvm-$(LLVM_VERSION).vim $(CURDIR)/utils/vim/tablegen-$(LLVM_VERSION).vim
1403 rm -f $(CURDIR)/clang/tools/clang-format/clang-format-diff-$(LLVM_VERSION)
1404 rm -f $(CURDIR)/clang/tools/clang-format/clang-format-$(LLVM_VERSION).py
d2bd294c 1405 rm -rf libclc/build
78fcc5f7 1406 rm -rf build-wasm
4625379d
SL
1407 if test -f lld/docs/ld.lld-$(LLVM_VERSION).1; then \
1408 mv lld/docs/ld.lld-$(LLVM_VERSION).1 lld/docs/ld.lld.1; \
1409 fi
f01f2c14 1410 for f in debian/*.in; do \
2c450a09
SL
1411 if ! echo $$f|grep control; then \
1412 f2=$$(echo $$f | sed 's/\.in$$//;s/X\.Y/$(LLVM_VERSION)/'); \
1413 rm -f $$f2; \
1414 fi; \
f01f2c14 1415 done
c06e8852 1416 if test "$(SCAN_BUILD)" = "yes"; then \
fd0d9b39 1417 patch -f -R -p1 < debian/patches/on-the-fly/use-scan-build-runtimes.diff||true; \
c06e8852 1418 fi
f01f2c14
SL
1419 : # for some reason, the docs are written to debian/usr and debian/man ...
1420 rm -rf debian/usr debian/man
4afa87ab 1421 : # remove extra stamps
d24f4d88 1422 rm -f debian-*-build override_dh_auto_install sccache-stats build_doc
214db535 1423
78fcc5f7 1424.PHONY: override_dh_strip preconfigure