]> git.proxmox.com Git - llvm-toolchain.git/blob - debian/rules
fix typo
[llvm-toolchain.git] / debian / rules
1 #!/usr/bin/make -f
2
3 # polly & lldb aren't enabled for every platform
4 PROJECTS = clang;clang-tools-extra;lld;cross-project-tests;mlir
5 # openmp & libunwind aren't enabled for every platform
6 RUNTIMES = compiler-rt;libcxx;libcxxabi
7
8 TARGET_BUILD := build-llvm
9 TARGET_BUILD_STAGE2 := $(TARGET_BUILD)/tools/clang/stage2-bins
10 DEB_INST := $(CURDIR)/debian/tmp/
11
12 GXX_VERSIONED_PACKAGE := $(shell dpkg-query -W -f '$${Depends}' g++ | grep -o 'g++-[0-9][0-9.]*' | tail -n1 )
13 GXX_VERSIONED_EXECUTABLE := $(shell dpkg -L $(GXX_VERSIONED_PACKAGE) | grep '/usr/bin/g++-[0-9][0-9.]*' | xargs ls -d | tail -n1 )
14 GCC_VERSION := $(subst /usr/bin/g++-,,$(GXX_VERSIONED_EXECUTABLE))
15
16 LLVM_VERSION := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:([0-9]+).*,\1,p")
17 LLVM_VERSION_FULL := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:([0-9.]+)(~|-)(.*),\1,p")
18 LLVM_VERSION_SNAPSHOT := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:(.*),\1,p")
19 ifeq ($(LLVM_VERSION),$(LLVM_VERSION_FULL))
20 LLVM_VERSION_FULL := $(LLVM_VERSION).0.0
21 endif
22
23 SOURCE_NAME := $(shell dpkg-parsechangelog -S Source)
24 ifneq (,$(findstring snapshot,$(SOURCE_NAME)))
25 BRANCH_NAME=snapshot
26 else
27 BRANCH_NAME=$(LLVM_VERSION)
28 endif
29
30 SONAME_EXT := 1
31 SONAME_OPENMP := 5
32 # Manage the case when the version is 3.5~svn213052-1~exp1 or 3.4.2-1
33 DEBIAN_REVISION := $(shell dpkg-parsechangelog | sed -rne "s,^Version: 1:([0-9.]+)(~|-)(.*),\3,p")
34 ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
35 NJOBS := $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
36 else
37 NJOBS := $(shell nproc)
38 endif
39
40 VENDOR=$(shell lsb_release -is)
41 DISTRO=$(shell lsb_release -sc)
42
43 DH_VERSION := $(shell dpkg -s debhelper | grep '^Version' | awk '{print $$2}')
44
45 include /usr/share/dpkg/architecture.mk
46
47 CONFIGURE_EXTRA =
48
49 # dpkg-buildflags support
50 # disable fixfilepath in favor of the llvm-project supplied flavor, disable lto
51 export DEB_BUILD_MAINT_OPTIONS = reproducible=-fixfilepath,-fixdebugpath optimize=-lto
52 # these are handled on a per stage / build basis
53 export DEB_CFLAGS_MAINT_STRIP = -g -O2
54 export DEB_CXXFLAGS_MAINT_STRIP = -g -O2
55
56 include /usr/share/dpkg/buildflags.mk
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
60 # And the various components are built using the second clang.
61 # See https://llvm.org/docs/AdvancedBuilds.html
62
63 # collect additional flags for all stages all builds
64 CFLAGS_EXTRA = -Wno-unused-command-line-argument
65 CXXFLAGS_EXTRA = -Wno-unused-command-line-argument
66 LDFLAGS_EXTRA = -Wl,--build-id
67
68 # collect all flags for stage 1 toolchain build only
69 STAGE_1_CFLAGS = $(CFLAGS) $(CFLAGS_EXTRA) $(CPPFLAGS)
70 STAGE_1_CXXFLAGS = $(CXXFLAGS) $(CXXFLAGS_EXTRA) $(CPPFLAGS)
71 STAGE_1_LDFLAGS = $(LDFLAGS) $(LDFLAGS_EXTRA)
72 # If we build with libc++, we might want to set different arguments for
73 # stage 1 & runtimes
74 RUNTIMES_CFLAGS = $(STAGE_1_CFLAGS)
75 RUNTIMES_CXXFLAGS := $(STAGE_1_CXXFLAGS)
76 RUNTIMES_LDFLAGS := $(STAGE_1_LDFLAGS)
77
78 # collect all flags for stage 2 toolchain and stand-alone builds
79 STAGE_2_CFLAGS = $(CFLAGS) $(CFLAGS_EXTRA) $(CPPFLAGS)
80 STAGE_2_CXXFLAGS = $(CXXFLAGS) $(CXXFLAGS_EXTRA) $(CPPFLAGS)
81 STAGE_2_LDFLAGS = $(LDFLAGS) $(LDFLAGS_EXTRA)
82
83 # collect additional cmake options for toolchain build configuration
84 STAGE_1_CMAKE_EXTRA =
85 STAGE_2_CMAKE_EXTRA =
86 STAGE_ALL_CMAKE_EXTRA =
87 # toolchain config-only var combining all stage 1 cmake options
88 CMAKE_EXTRA = $(STAGE_1_CMAKE_EXTRA) $(STAGE_ALL_CMAKE_EXTRA)
89 # toolchain config-only var prepending BOOTSTRAP_ to all stage 2 cmake options
90 BOOTSTRAP_CMAKE_EXTRA = $(foreach extra,$(STAGE_2_CMAKE_EXTRA) $(STAGE_ALL_CMAKE_EXTRA), $(subst -D,-DBOOTSTRAP_,$(extra)))
91
92 BASE_PATH := $(CURDIR)
93 STAGE_1_BIN_DIR := $(BASE_PATH)/$(TARGET_BUILD)/bin
94 STAGE_1_LIB_DIR := $(BASE_PATH)/$(TARGET_BUILD)/lib
95 STAGE_2_BIN_DIR := $(BASE_PATH)/$(TARGET_BUILD_STAGE2)/bin
96 STAGE_2_LIB_DIR := $(BASE_PATH)/$(TARGET_BUILD_STAGE2)/lib
97
98 # toggleable defaults
99 COMPILER_RT_USE_BUILTINS_LIBRARY := ON
100 LIBCXX_EXCEPTIONS := ON
101 LIBCXX_USE_COMPILER_RT := ON
102
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)
107 STAGE_2_CMAKE_EXTRA += -DCLANG_REPOSITORY_STRING=$(DEBIAN_REVISION)
108
109 ifneq (,$(filter $(DEB_HOST_ARCH),sparc sparc64))
110 STAGE_1_CMAKE_EXTRA += -DLLVM_PARALLEL_LINK_JOBS=4
111 endif
112
113 ifneq (,$(filter $(DEB_HOST_ARCH),i386 hurd-i386 kfreebsd-i386 armel mipsel powerpc powerpcspe riscv64))
114 # For some reason, in the stage2 build, when clang is used to compile
115 # itself. The atomic detection is failing on armel and riscv64. Forcing the inclusion
116 # everywhere and in all stages
117 LDFLAGS_EXTRA += -latomic
118 endif
119
120 Z3_FLAG = -DLLVM_ENABLE_Z3_SOLVER=OFF
121 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libz3-dev) gt 4.7.0; echo $$?),0)
122 # no ocaml support in main for Ubuntu
123 ifneq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
124 Z3_FLAG = -DLLVM_ENABLE_Z3_SOLVER=ON
125 endif
126 endif
127 STAGE_2_CMAKE_EXTRA += $(Z3_FLAG)
128
129 # Change the default CPU for s390x
130 ZARCH=z196
131 ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
132 ZARCH=z13
133 endif
134 STAGE_2_CMAKE_EXTRA += -DCLANG_SYSTEMZ_DEFAULT_ARCH=$(ZARCH)
135
136 # clangd remote index support requires GRPC & protobuf.
137 # Enable if minimum tested versions are available.
138 CLANGD_GRPC_INSTALLED=no
139 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libgrpc++-dev) gt 1.30.0; echo $$?),0)
140 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' protobuf-compiler-grpc) gt 1.30.0; echo $$?),0)
141 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libprotobuf-dev) gt 3.12.0; echo $$?),0)
142 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' protobuf-compiler) gt 3.12.0; echo $$?),0)
143 CLANGD_GRPC_INSTALLED=yes
144 STAGE_2_CMAKE_EXTRA += -DCLANGD_ENABLE_REMOTE=ON
145 endif
146 endif
147 endif
148 endif
149
150 export CC=gcc-$(GCC_VERSION)
151 export CXX=g++-$(GCC_VERSION)
152
153 ifneq (,$(findstring $(DEB_HOST_ARCH),armel))
154 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabi
155 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
156 # align arch profile with debian baseline
157 # https://wiki.debian.org/ArmEabiPort
158 CFLAGS_EXTRA += -march=armv5t
159 CXXFLAGS_EXTRA += -march=armv5t
160 # disable compiler-rt builtins (not supported for baseline armel arch: armv5t)
161 # See http://lists.llvm.org/pipermail/llvm-dev/2016-May/099761.html
162 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
163 COMPILER_RT_USE_BUILTINS_LIBRARY := OFF
164 LIBCXX_USE_COMPILER_RT := OFF
165 # disable scudo standalone (not supported for baseline armel arch: armv5t)
166 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_SCUDO_STANDALONE=OFF
167 endif
168
169 ifneq (,$(findstring $(DEB_HOST_ARCH),armhf))
170 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabihf
171 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
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
176 endif
177
178 ifneq (,$(filter $(DEB_HOST_ARCH),i386))
179 # Sometimes, i386 needs help with the triple
180 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=i386-linux-gnu
181 CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=i386-linux-gnu
182 endif
183
184 ifneq (,$(filter $(DEB_HOST_ARCH),mips64el))
185 # avoid an issue with search path on mips64el
186 # https://bugs.llvm.org/show_bug.cgi?id=41204
187 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=mips64el-linux-gnuabi64
188 endif
189
190 ifneq (,$(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
193 endif
194
195 # debug symbols OOM in Ubuntu Ubuntu and slows down build process.
196 ifneq (,$(filter $(DEB_HOST_ARCH),riscv64))
197 opt_flags = -O2 -DNDEBUG -g0
198 else
199 opt_flags = -O2 -DNDEBUG -g1
200 endif
201
202 ifneq (,$(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
206 endif
207
208 ifneq (,$(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
211 STAGE_ALL_CMAKE_EXTRA += -DLLVM_PARALLEL_LINK_JOBS=4
212 endif
213
214 ifneq (,$(filter $(DEB_HOST_ARCH),s390x))
215 STAGE_ALL_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=s390x-linux-gnu
216 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
217 LIBCXX_EXCEPTIONS := OFF
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
222 endif
223
224 ifneq (,$(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
229 endif
230
231 ifneq (,$(filter $(DEB_HOST_ARCH),x32))
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
234 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
235 COMPILER_RT_USE_BUILTINS_LIBRARY := OFF
236 LIBCXX_USE_COMPILER_RT := OFF
237 endif
238
239 ifneq (,$(filter $(DEB_HOST_ARCH),hurd-i386))
240 STAGE_ALL_CMAKE_EXTRA += -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
241 endif
242
243 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) ge 4.8-20121128-1~ ; echo $$?),0)
244 control_vars = '-Vdep:devlibs=libstdc++-$(GCC_VERSION)-dev, libgcc-$(GCC_VERSION)-dev' \
245 '-Vdep:devlibs-objc=libobjc-$(GCC_VERSION)-dev'
246 else ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) ge 4.7.2-10~ ; echo $$?),0)
247 control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev, libgcc-$(GCC_VERSION)-dev' \
248 '-Vdep:devlibs-objc=libobjc-$(GCC_VERSION)-dev'
249 else
250 control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev'
251 endif
252
253 LLVM_SPIRV_VERSION := $(LLVM_VERSION)
254 LLVM_SPIRV := $(shell bash -c "command -v llvm-spirv-$(LLVM_SPIRV_VERSION)" 2>/dev/null)
255 ifndef 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)
258 endif
259 ifndef LLVM_SPIRV
260 LLVM_SPIRV_INSTALLED = no
261 else
262 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' llvm-spirv-$(LLVM_SPIRV_VERSION)) gt 14.0.0 ; echo $$?),0)
263 # Too old llvm-spirv version are failing. See #52200
264 LLVM_SPIRV_INSTALLED = yes
265 else
266 LLVM_SPIRV_INSTALLED = no
267 endif
268 endif
269
270 LIBCLC_TARGETS_TO_BUILD="amdgcn--;amdgcn--amdhsa;amdgcn-mesa-mesa3d;r600--;nvptx--;nvptx64--;nvptx--nvidiacl;nvptx64--nvidiacl"
271 LIBCLC_LLVM_SPIRV =
272 ifeq ($(LLVM_SPIRV_INSTALLED),yes)
273 LIBCLC_TARGETS_TO_BUILD := $(LIBCLC_TARGETS_TO_BUILD)";spirv-mesa3d-;spirv64-mesa3d-"
274 LIBCLC_LLVM_SPIRV = "-DLLVM_SPIRV=$(LLVM_SPIRV)"
275 endif
276
277 BINUTILS_GOLD_ARCHS := amd64 arm64 armhf i386 ppc64 ppc64el x32 s390x hurd-i386 kfreebsd-amd64 kfreebsd-i386
278 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) ge 2.23.1-1~exp3 ; echo $$?),0)
279 ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
280 STAGE_ALL_CMAKE_EXTRA += -DLLVM_USE_LINKER=gold
281 STAGE_ALL_CMAKE_EXTRA += -DLLVM_BINUTILS_INCDIR=/usr/include/
282 endif
283 endif
284
285 ifneq (,$(filter bolt-$(LLVM_VERSION), $(shell dh_listpackages)))
286 PROJECTS += ;bolt
287 endif
288
289 # flang is only for 64bits
290 ifneq (,$(filter flang-$(LLVM_VERSION), $(shell dh_listpackages)))
291 PROJECTS += ;flang
292 endif
293
294 CODECOVERAGE=no
295 ifneq (,$(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
302 # OpenMP doesn't respect LDFLAGS
303 STAGE_2_CMAKE_EXTRA+= -DLIBOMP_LDFLAGS="-coverage -lgcov" # don't pass LDFLAGS_EXTRA because it expects gcc arg
304 endif
305
306 # Enable polly (or not)
307 POLLY_ENABLE=yes
308 ifneq (,$(filter $(DEB_HOST_ARCH), powerpc powerpcspe))
309 POLLY_ENABLE=no
310 else
311 PROJECTS+=;polly
312 endif
313
314 # Enable libunwind (or not)
315 LIBUNWIND_ENABLE=yes
316 ifneq (,$(filter $(DEB_HOST_ARCH), s390x armel m68k mipsel mips64el hurd-i386 powerpc sparc sparc64 x32))
317 LIBUNWIND_ENABLE=no
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
321 else
322 RUNTIMES += ;libunwind
323 STAGE_ALL_CMAKE_EXTRA += -DLIBCXXABI_USE_LLVM_UNWINDER=ON
324 endif
325
326 # Enable openmp (or not)
327 OPENMP_ENABLE=yes
328 ifneq (,$(filter $(DEB_HOST_ARCH), m68k mipsel powerpc powerpcspe sparc64 s390x x32))
329 OPENMP_ENABLE=no
330 else
331 PROJECTS+=;openmp
332 STAGE_ALL_CMAKE_EXTRA += -DLIBOMP_LIBFLAGS="-lm"
333 ifeq ($(LIBUNWIND_ENABLE),yes)
334 STAGE_ALL_CMAKE_EXTRA += -DOPENMP_USE_LLVM_UNWINDER=ON
335 endif
336 endif
337
338 # Do not install objects
339 STAGE_ALL_CMAKE_EXTRA += -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF
340
341
342 RUN_TEST=yes
343 ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
344 RUN_TEST=no
345 endif
346 ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
347 ifeq (riscv64,$(DEB_HOST_ARCH))
348 RUN_TEST=no
349 endif
350 endif
351
352 # llvm tests timeout, disable it on mipsel
353 ifeq (mipsel,$(DEB_HOST_ARCH))
354 RUN_TEST=no
355 endif
356
357 SCAN_BUILD=no
358 ifneq (,$(filter scan-build,$(DEB_BUILD_OPTIONS)))
359 # enable the build using scan-build
360 # The package are installed through the variable declarations:
361 # OTHERMIRROR="deb http://llvm.org/apt/unstable/ llvm-toolchain main"
362 # EXTRAPACKAGES="clang-X"
363 SCAN_BUILD=yes
364
365 PRE_PROCESS=scan-build-$(LLVM_VERSION) --show-description -analyzer-config stable-report-filename=true
366 PRE_PROCESS_CONF=scan-build-$(LLVM_VERSION)
367 # no need to run tests in this case
368 RUN_TEST=no
369 CONFIGURE_EXTRA += --enable-assertions
370 STAGE_ALL_CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
371 endif
372
373 ifneq (,$(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
386 else
387 COVERITY_ENABLE=0
388 endif
389
390 LLDB_ENABLE=yes
391 LLDB_DISABLE_ARCHS := hurd-i386 ia64 powerpc powerpcspe ppc64 riscv64 sparc64 mips64el mipsel
392 # hurd has threading issues
393 ifeq (,$(filter-out $(LLDB_DISABLE_ARCHS), $(DEB_HOST_ARCH)))
394 # Disable LLDB for this arch.
395 LLDB_ENABLE=no
396 else
397 STAGE_ALL_CMAKE_EXTRA += -DLLDB_ENABLE_LUA=OFF
398 PROJECTS+=;lldb
399 endif
400
401 ifneq (,$(filter $(DISTRO),buster))
402 # Don't enable lld python for old distros
403 STAGE_ALL_CMAKE_EXTRA += -DLLDB_ENABLE_PYTHON=OFF
404 endif
405
406 LIBCXX_WASM_ENABLE=yes
407 LIBCXX_WASM_DISABLE_DISTRO := bionic buster focal bullseye jammy
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
411 ifeq (,$(filter-out $(LIBCXX_WASM_DISABLE_DISTRO), $(DISTRO)))
412 LIBCXX_WASM_ENABLE=no
413 endif
414
415 ifneq (,$(filter $(DEB_HOST_ARCH),powerpc powerpcspe))
416 LIBCXX_WASM_ENABLE=no
417 endif
418
419 LLD_ENABLE=yes
420
421 ifneq (,$(filter $(DEB_HOST_ARCH_OS),linux))
422 # only for linux
423 STAGE_2_CMAKE_EXTRA += -DLLVM_USE_PERF=ON -DLLVM_ENABLE_LIBPFM=ON
424 endif
425
426 LTO_ENABLE=no
427 # Only enable it for archs supporting gold
428 ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
429 # LTO requires a bunch of memory. Don't do it everywhere
430 LTO_DISABLE_ARCHS := i386 armhf s390x ppc64 x32
431 ifeq (,$(filter-out $(LTO_DISABLE_ARCHS), $(DEB_HOST_ARCH)))
432 LTO_ENABLE=no
433 else
434 # Disable for now because of
435 # https://github.com/llvm/llvm-project/issues/58317#issuecomment-1276190743
436 # LTO_ENABLE=yes
437 # STAGE_2_CMAKE_EXTRA += -DLLVM_ENABLE_LTO="On"
438 endif
439 endif
440
441 # https://bugs.launchpad.net/bugs/2016471
442 ifeq (,$(filter-out $(LTO_DISABLE_ARCHS), $(DEB_HOST_ARCH)))
443 LD_GOLD_SUPPORTS_NO_SYMBOLIC := $(shell ld.gold --help | grep -q -w '-Bno-symbolic' && echo "yes" || echo "no")
444 ifeq ($(LD_GOLD_SUPPORTS_NO_SYMBOLIC),yes)
445 STAGE_2_CMAKE_EXTRA += -DLIBOMP_LDFLAGS=-Wl,-Bno-symbolic
446 endif
447 endif
448
449 DH_OPTIONS=
450 OCAML_ENABLE= no
451 OCAML_ARCHS := amd64 arm64 armhf ppc64el riscv64 s390x
452 ifneq (,$(filter $(DEB_HOST_ARCH),$(OCAML_ARCHS)))
453 # Enable OCAML for this arch.
454 OCAML_ENABLE=yes
455 OCAML_STDLIB_DIR ?= $(shell ocamlc -where)
456 DH_OPTIONS=--with ocaml
457 endif
458
459 LIBFUZZER_ENABLE=yes
460 ifeq (,$(filter $(DEB_HOST_ARCH_OS),linux))
461 LIBFUZZER_ENABLE=no
462 endif
463
464 ifneq (,$(filter $(DEB_HOST_ARCH), mipsel))
465 LIBOMP_ARCH = mips
466 endif
467
468 ifneq (,$(filter $(DEB_HOST_ARCH), mips64 mips64el))
469 LIBOMP_ARCH = mips64
470 endif
471
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
474 CMAKE_BIN=cmake
475 ifeq ($(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/
478 endif
479
480 SCCACHE_ENABLE=no
481 SCCACHE_CMAKE =
482 # if sccache is installed in the chroot, use it
483 ifeq ($(shell test -e /opt/sccache/sccache && echo -n yes),yes)
484 ifneq (,$(filter $(DEB_HOST_ARCH),i386 amd64))
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
492 endif
493
494 # enables cmake build targets like stage2-[target_name]
495 ENABLED_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
496
497 %:
498 dh $@ $(DH_OPTIONS)
499
500 # For some reasons, some spaces are added, removing them
501 PROJECTS_LIST := $(shell echo "$(PROJECTS)"|sed -e "s| ||g")
502 RUNTIMES_LIST := $(shell echo "$(RUNTIMES)"|sed -e "s| ||g")
503
504 preconfigure:
505
506 if ! grep -qs '/proc ' /proc/mounts; then \
507 echo "/proc needs to be mounted"; \
508 exit 1; \
509 fi
510
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"; \
513 fi
514
515 @echo "DEB_BUILD_OPTIONS=$(DEB_BUILD_OPTIONS)"
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)"
521 @echo "DISTRO=$(DISTRO)"
522 @echo "GCC_VERSION=$(GCC_VERSION)"
523 @echo "PROJECTS=$(PROJECTS_LIST)"
524 @echo "RUNTIMES=$(RUNTIMES_LIST)"
525 @echo "LLVM_VERSION=$(LLVM_VERSION)"
526 @echo "LLVM_VERSION_FULL=$(LLVM_VERSION_FULL)"
527 @echo "LLVM_VERSION_SNAPSHOT=$(LLVM_VERSION_SNAPSHOT)"
528 @echo "PATH=$(PATH)"
529 @echo "LD_LIBRARY_PATH=$$LD_LIBRARY_PATH"
530 @echo "RUNTIMES_CXXFLAGS=$(RUNTIMES_CXXFLAGS)"
531 @echo "STAGE_1_CXXFLAGS=$(STAGE_1_CXXFLAGS)"
532 @echo "STAGE_2_CFLAGS=$(STAGE_2_CFLAGS)"
533 @echo "LIBFUZZER_ENABLE=$(LIBFUZZER_ENABLE)"
534 @echo "LTO_ENABLE=$(LTO_ENABLE)"
535 @echo "COMPILER_RT_WASM_ENABLE=$(COMPILER_RT_WASM_ENABLE)"
536 @echo "LIBCXX_WASM_ENABLE=$(LIBCXX_WASM_ENABLE)"
537 @echo "SCCACHE_ENABLE=$(SCCACHE_ENABLE)"
538
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' \
543 -e "s|@BRANCH_NAME@|$(BRANCH_NAME)|g" \
544 -e "s|@OCAML_STDLIB_DIR@|$(OCAML_STDLIB_DIR)|g" \
545 -e "s|@LLVM_VERSION_FULL@|$(LLVM_VERSION_FULL)|g" \
546 -e "s|@LLVM_VERSION@|$(LLVM_VERSION)|g" $$f > $$f2; \
547 done
548
549 # Make install file executable for dh-exec
550 chmod +x \
551 debian/clang-tools-$(LLVM_VERSION).install \
552 debian/libclang-$(LLVM_VERSION)-dev.install \
553 debian/libclang-rt-$(LLVM_VERSION)-dev.install \
554 debian/libpolly-$(LLVM_VERSION)-dev.install \
555 debian/libomp-$(LLVM_VERSION)-dev.install \
556 debian/libomp5-$(LLVM_VERSION).install \
557 debian/llvm-$(LLVM_VERSION)-dev.install \
558 debian/llvm-$(LLVM_VERSION)-linker-tools.install \
559 debian/llvm-$(LLVM_VERSION)-linker-tools.links \
560 debian/libbolt-$(LLVM_VERSION)-dev.install
561
562 ifdef 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
567 endif
568
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; \
572 echo "" > debian/libc++abi-$(LLVM_VERSION)-dev-wasm32.install; \
573 fi
574
575 # Conditionally enable install clangd grpc files
576 if test "$(CLANGD_GRPC_INSTALLED)" = "yes"; then \
577 sed -i -e "s|#grpc\ ||g" debian/libclang-$(LLVM_VERSION)-dev.install; \
578 fi
579
580 # Override this two targets. They are trying to manage the .in conversion for me
581 override_dh_ocamlinit:
582 override_dh_ocamlclean:
583 override_dh_ocaml:
584
585 override_dh_auto_configure: preconfigure
586 ifeq (${SCCACHE_ENABLE},yes)
587 ls -al $(SCCACHE_PATH)*
588 endif
589 echo "Using gcc: "
590 $(CC) -v
591 $(CXX) -v
592 mkdir -p $(TARGET_BUILD)
593 # remove in case of artifact
594 rm -rf build
595
596 if test "$(SCAN_BUILD)" = "yes"; then \
597 patch -f -p1 < debian/patches/on-the-fly/use-scan-build-runtimes.diff||true; \
598 fi
599
600 # Configure coverity (we need the compilers) + work around perf issues
601 -(if test $(COVERITY_ENABLE) -eq 1; then \
602 export PATH=$$PATH:/opt/cov-analysis/bin/; \
603 cov-configure --compiler clang --comptype clang; \
604 cov-configure --compiler gcc-$(GCC_VERSION) --comptype gcc; \
605 cov-configure --compiler g++-$(GCC_VERSION) --comptype gcc; \
606 cov-configure -co /usr/bin/g++-$(GCC_VERSION) --comptype gcc -- -fPIC -std=c++11; \
607 cov-configure -co /usr/bin/gcc-$(GCC_VERSION) --comptype gcc -- -fPIC; \
608 cov-configure -co /usr/bin/g++-$(GCC_VERSION) --comptype gcc -- -fPIC -std=c++11 -fno-exceptions; \
609 cov-configure -co /usr/bin/g++-$(GCC_VERSION) --comptype gcc --template \
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" \
618 --xml-option append_arg:"replace/llvm::AlignOf<NextTy>::Alignment/(llvm::AlignOf<NextTy>::Alignment)"; \
619 fi)
620
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
628 ifeq (${SCCACHE_ENABLE},yes)
629 # Just in case...
630 $(SCCACHE_CMD) --stop-server||true
631 # Start the sccache server with the right set of options to use GCP
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
633 endif
634 echo "Running tests: $(RUN_TEST)"
635 echo "Using cmake: $(CMAKE_BIN)"; \
636 LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \
637 $(PRE_PROCESS_CONF) $(CMAKE_BIN) -S llvm/ -B $(TARGET_BUILD) \
638 -G Ninja \
639 -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \
640 -DLLVM_VERSION_SUFFIX= \
641 -DCMAKE_SUPPRESS_REGENERATION=ON \
642 -DCMAKE_BUILD_TYPE=Release \
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)" \
648 -DPACKAGE_VENDOR=$(VENDOR) \
649 -DENABLE_LINKER_BUILD_ID=ON \
650 -DLLVM_TARGETS_TO_BUILD=Native \
651 -DLLVM_ENABLE_PROJECTS="$(PROJECTS_LIST)" \
652 -DLLVM_ENABLE_RUNTIMES="$(RUNTIMES_LIST)" \
653 -DLLVM_ENABLE_PIC=ON \
654 -DLLVM_ENABLE_RTTI=ON \
655 -DLLVM_BUILD_DOCS=OFF \
656 -DLLVM_INCLUDE_GO_TESTS=OFF \
657 -DLLVM_USE_RELATIVE_PATHS_IN_FILES=ON \
658 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
659 -DLLVM_ENABLE_CURL=ON \
660 -DLLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO=ON \
661 -DCLANG_PLUGIN_SUPPORT=OFF \
662 -DCLANG_BUILD_EXAMPLES=OFF \
663 -DCLANG_DEFAULT_LINKER=ld \
664 -DCLANG_DEFAULT_RTLIB=libgcc \
665 -DCOMPILER_RT_BUILD_XRAY=OFF \
666 -DCOMPILER_RT_INCLUDE_TESTS=OFF \
667 -DCOMPILER_RT_USE_LIBCXX=OFF \
668 -DCOMPILER_RT_USE_BUILTINS_LIBRARY=$(COMPILER_RT_USE_BUILTINS_LIBRARY) \
669 -DLIBUNWIND_USE_COMPILER_RT=ON \
670 -DLIBUNWIND_INSTALL_LIBRARY=OFF \
671 -DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
672 -DLIBCXXABI_USE_COMPILER_RT=$(LIBCXX_USE_COMPILER_RT) \
673 -DLIBCXXABI_INSTALL_LIBRARY=OFF \
674 -DLIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
675 -DLIBCXX_USE_COMPILER_RT=$(LIBCXX_USE_COMPILER_RT) \
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 \
679 -DLIBCXX_INSTALL_LIBRARY=OFF \
680 -DOPENMP_ENABLE_LIBOMP_PROFILING=OFF \
681 -DOPENMP_ENABLE_LIBOMPTARGET_PROFILING=OFF \
682 -DLIBOMP_ENABLE_RTTI=OFF \
683 -DLIBOMP_OMPT_SUPPORT=OFF \
684 -DCLANG_FORCE_MATCHING_LIBCLANG_SOVERSION=ON \
685 $(CMAKE_EXTRA) \
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" \
688 -DCLANG_ENABLE_BOOTSTRAP=ON \
689 -DCLANG_BOOTSTRAP_TARGETS="$(ENABLED_STAGE2_CMAKE_BUILD_TARGETS)" \
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" \
691 -DBOOTSTRAP_CMAKE_BUILD_TYPE=RelWithDebInfo \
692 -DBOOTSTRAP_CMAKE_C_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
693 -DBOOTSTRAP_CMAKE_CXX_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
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)" \
699 -DBOOTSTRAP_LLVM_ENABLE_FFI=ON \
700 -DBOOTSTRAP_LLVM_ENABLE_DUMP=ON \
701 -DBOOTSTRAP_LLVM_ENABLE_LIBPFM=ON \
702 -DBOOTSTRAP_LLVM_ENABLE_SPHINX=ON \
703 -DBOOTSTRAP_CLANG_DEFAULT_PIE_ON_LINUX=ON \
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 \
709 -DBOOTSTRAP_LLVM_EXPERIMENTAL_TARGETS_TO_BUILD="M68k;Xtensa" \
710 -DBOOTSTRAP_LLVM_LINK_LLVM_DYLIB=ON \
711 -DBOOTSTRAP_LLVM_ENABLE_CURL=ON \
712 -DBOOTSTRAP_CLANG_LINK_CLANG_DYLIB=ON \
713 -DBOOTSTRAP_LIBCLANG_LIBRARY_VERSION=$(SONAME_EXT) \
714 -DBOOTSTRAP_LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON \
715 -DBOOTSTRAP_PYTHON_EXECUTABLE=/usr/bin/python3 \
716 $(BOOTSTRAP_CMAKE_EXTRA) \
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" \
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"
719
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 \
722 echo "mismatch of version. Found: $$FOUND_VERSION / Expected: $(LLVM_VERSION_FULL)"; \
723 exit 1; \
724 fi
725
726 VERBOSE=-v
727
728 debian-full-build:
729 echo "Using cmake: $(CMAKE_BIN)"
730 # linker hack so stage2 can link against stage1 libs at runtime
731 LD_LIBRARY_PATH=$(STAGE_1_LIB_DIR):$$LD_LIBRARY_PATH \
732 VERBOSE=1 $(PRE_PROCESS) $(CMAKE_BIN) --build $(TARGET_BUILD) -j $(NJOBS) --target stage2 || cat build-llvm/tools/clang/stage2-bins/CMakeFiles/CMakeOutput.log
733
734 # Check the stage 2 build worked
735 if ! readelf --string-dump .comment $(TARGET_BUILD_STAGE2)/bin/clang 2>&1|grep -q "clang version"; then \
736 echo "clang hasn't been built using clang. Bye bye. Check that the stage2 build has been done."; \
737 if test "$(SCAN_BUILD)" = "no"; then \
738 exit 2; \
739 fi; \
740 fi
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
745 if test -e $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libclang-$(LLVM_VERSION).so.1; then \
746 echo "libclang-$(LLVM_VERSION).so.1 link is broken"; \
747 exit 2; \
748 fi
749 touch $@
750
751 debian-libfuzzer-build:
752 ifeq (${LIBFUZZER_ENABLE},yes)
753 cd $(TARGET_BUILD); \
754 CFLAGS="$(opt_flags) $(STAGE_2_CFLAGS)"; \
755 echo $$CFLAGS; \
756 for sourcefile in $(BASE_PATH)/compiler-rt/lib/fuzzer/*.cpp; do \
757 $(SCCACHE_CMD) $(STAGE_2_BIN_DIR)/clang++ -c $$CFLAGS -std=c++17 $$sourcefile -IFuzzer || exit 1; \
758 done; \
759 ar ruv libFuzzer.a Fuzzer*.o
760 endif
761 touch $@
762
763 debian-libclc-build:
764 # Builds libclc
765 mkdir -p libclc/build
766 echo "Using cmake: $(CMAKE_BIN)"
767 cd libclc/build && \
768 $(CMAKE_BIN) ../ \
769 -G Ninja \
770 $(SCCACHE_CMAKE) \
771 -DCMAKE_C_COMPILER=$(STAGE_2_BIN_DIR)/clang \
772 -DCMAKE_CXX_COMPILER=$(STAGE_2_BIN_DIR)/clang++ \
773 -DCMAKE_C_FLAGS="$(opt_flags) $(STAGE_2_CFLAGS)" \
774 -DCMAKE_CXX_FLAGS="$(opt_flags) $(STAGE_2_CXXFLAGS) -I$(BASE_PATH)/llvm/include" \
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)" \
778 -DCMAKE_INSTALL_PREFIX=/usr \
779 -DCMAKE_INSTALL_DATADIR=lib \
780 -DCMAKE_INSTALL_INCLUDEDIR=include \
781 -DLLVM_CMAKE_DIR=$(STAGE_2_BIN_DIR)/../ \
782 $(LIBCLC_LLVM_SPIRV) \
783 -DLIBCLC_TARGETS_TO_BUILD=$(LIBCLC_TARGETS_TO_BUILD); \
784 LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(STAGE_2_LIB_DIR) ninja -j $(NJOBS) $(VERBOSE)
785 ifndef LLVM_SPIRV
786 echo "libclc built without SPIRV (.spv) outputs because llvm-spirv wasn't found"
787 endif
788 touch $@
789
790 build-wasm/compiler-rt-%: cpu = $(@:build-wasm/compiler-rt-%=%)
791 build-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/ \
796 -G Ninja \
797 $(SCCACHE_CMAKE) \
798 -DCMAKE_SYSTEM_NAME=Generic \
799 -DCMAKE_C_COMPILER_TARGET=$(cpu)-unknown-unknown \
800 -DCMAKE_CXX_COMPILER_TARGET=$(cpu)-unknown-unknown \
801 -DCMAKE_ASM_COMPILER_TARGET=$(cpu)-unknown-unknown \
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)" \
809 -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION) \
810 -DCMAKE_INSTALL_DATADIR=lib \
811 -DCMAKE_INSTALL_INCLUDEDIR=include \
812 -DLLVM_CMAKE_DIR=$(STAGE_2_BIN_DIR)/../ \
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 \
818 -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=$(cpu)-unknown-unknown \
819 -DCOMPILER_RT_OS_DIR=wasi
820 ninja -C "$@" -j $(NJOBS) $(VERBOSE)
821
822 ifeq ($(LIBCXX_WASM_ENABLE), no)
823 build-wasm/libcxx-%-wasi: build-wasm/compiler-rt-%
824 @echo "Skipping libcxx-*-wasi on this distro $(DISTRO)"
825 else
826 build-wasm/libcxx-%-wasi: cpu = $(@:build-wasm/libcxx-%-wasi=%)
827 build-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 \
839 $(STAGE_2_LIB_DIR)/clang/$(LLVM_VERSION)/lib/wasi/
840 cp build-wasm/compiler-rt-$(cpu)/lib/wasi/libclang_rt.builtins-$(cpu).a \
841 $(STAGE_2_LIB_DIR)/clang/$(LLVM_VERSION)/lib/wasi/
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 \
856 -G Ninja \
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
902 ninja -C "$@" -j $(NJOBS) $(VERBOSE)
903 endif
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.
907 debian-wasm-build: \
908 build-wasm/compiler-rt-wasm32 \
909 build-wasm/libcxx-wasm32-wasi \
910 build-wasm/compiler-rt-wasm64
911 touch $@
912
913 sccache-stats:
914 # If we used sccache, shows stats
915 if test -f $(SCCACHE_CMD); then \
916 ls -al $(SCCACHE_PATH)/; \
917 mkdir -p /tmp/buildd/source/; \
918 $(SCCACHE_CMD) --stats-format json --show-stats > /tmp/buildd/source/sccache-stats.json; \
919 cat /tmp/buildd/source/sccache-stats.json; \
920 fi
921 touch $@
922
923 override_dh_auto_build: \
924 debian-full-build \
925 debian-libfuzzer-build \
926 debian-libclc-build \
927 debian-wasm-build \
928 sccache-stats
929
930 override_dh_prep: build_doc
931 dh_prep
932
933 build_doc:
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
944 -(if test "$(OCAML_ENABLE)" = yes; then \
945 ninja -C "$(TARGET_BUILD_STAGE2)" $(VERBOSE) ocaml_doc; \
946 fi)
947
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
949
950 ifeq (${POLLY_ENABLE},yes)
951 ninja -C $(TARGET_BUILD_STAGE2) $(VERBOSE) docs-polly-html docs-polly-man
952 endif
953
954 # Rename manpages
955 d=$(CURDIR)/llvm/docs/_build/man/; \
956 if test -d $$d; then \
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"; \
963 fi
964 # the clang doc generation only generates clang manpage
965 # When it will do more, we should move that in the loop above
966 cd $(CURDIR)/clang/docs/_build/man/ && mv clang.1 clang-$(LLVM_VERSION).1
967
968 # Remove the copy of jquery. See bug #701087
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 \
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 -; \
972 done
973
974 mkdir -p debian/man/
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
979
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"; \
981 for f in $$CMDS; do \
982 echo "Generating manpage of $$f"; \
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; \
984 done
985 # Create the following directory regardless as libomp-16-doc
986 # is Architecture: all
987 mkdir -p openmp/runtime/doc/doxygen/generated/html/
988
989 if test "$(OPENMP_ENABLE)" = yes; then \
990 cd openmp/runtime && doxygen doc/doxygen/config; cd -; \
991 cd openmp/runtime/doc/doxygen/generated/html/ && rm jquery.js && ln -s /usr/share/javascript/jquery/jquery.js; \
992 fi
993 touch $@
994
995 override_dh_auto_install:
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)
998
999 # install/fast enables a make install without recompiling temporary files
1000 LD_LIBRARY_PATH=$(STAGE_2_LIB_DIR):$$LD_LIBRARY_PATH DESTDIR=$(DEB_INST)/ ninja -C $(TARGET_BUILD) $(VERBOSE) stage2-install
1001
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
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
1007
1008 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libExampleIRTransforms.a
1009 # Remove an example - introduced in https://reviews.llvm.org/D61446
1010 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libBye.a
1011
1012 cp $(TARGET_BUILD_STAGE2)/bin/clang-query $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin
1013
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`
1016 ifeq (,$(filter $(DEB_HOST_ARCH), powerpc powerpcspe))
1017 ifneq (,$(filter $(DEB_HOST_ARCH_OS),linux))
1018 # To fix custom-library-search-path
1019 chrpath -d $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)*/lib/linux/*.so
1020 endif
1021 endif
1022
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
1027
1028 : # libomp
1029 if test "$(OPENMP_ENABLE)" = yes; then \
1030 cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib; \
1031 ln -s libomp.so.$(SONAME_OPENMP) libomp.so; \
1032 cp libomp.so.$(SONAME_OPENMP) libomp-$(LLVM_VERSION).so.$(SONAME_OPENMP); \
1033 fi
1034
1035 # Remove artifact (where compiler-rt is built)
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
1039
1040 mkdir -p $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/
1041 cp compiler-rt/lib/asan/scripts/asan_symbolize.py $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/asan_symbolize-$(LLVM_VERSION)
1042
1043 ifeq (${LIBFUZZER_ENABLE},yes)
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/
1046 endif
1047
1048 # Create this fake directory to make the install libclang-common-dev happy
1049 # under the unsupported archs of compiler-rt
1050 mkdir -p $(DEB_INST)/usr/lib/clang/$(LLVM_VERSION)/lib
1051 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/
1052 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/clang_linux/
1053 mkdir -p $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux/
1054 mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/share/
1055 # On some archs, the sanitizers are not built. As we explicitly includes some txt files, create
1056 # a fake txt to make sure it doesn't fail
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
1059 # Path changed. Make a copy of it
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
1061
1062 # Remove things that CMake install but which aren't packaged yet,
1063 # or are packaged from the source or build tree.
1064 mv $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang-$(LLVM_VERSION) \
1065 $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang
1066
1067 # Probably useless
1068 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/six.py
1069 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/local/lib/python*/*-packages/six.py
1070 rm -rf $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/__pycache__/ \
1071 $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/*/__pycache__/
1072
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
1078 DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C libclc/build install
1079
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
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
1086
1087 # Rename binaries
1088 mkdir -p $(DEB_INST)/usr/bin/
1089 cd $(DEB_INST)/usr/bin/; \
1090 rm -f *; \
1091 for f in ../lib/llvm-$(LLVM_VERSION)/bin/*; do \
1092 ln -s $$f `basename $$f`-$(LLVM_VERSION); \
1093 echo "Link $$f to `basename $$f`-$(LLVM_VERSION)"; \
1094 done
1095
1096 # Rename some stuff with the version name
1097 cp $(CURDIR)/clang/tools/scan-build/man/scan-build.1 $(CURDIR)/clang/tools/scan-build/man/scan-build-$(LLVM_VERSION).1
1098
1099 # copy the vim files (except that tablegen does not exist for indent
1100 VIM_DIRS="ftdetect ftplugin syntax indent"; \
1101 for dir in $$VIM_DIRS; do \
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; \
1105 fi; \
1106 done
1107 cp -f $(CURDIR)/llvm/utils/vim/vimrc $(CURDIR)/llvm/utils/vim/llvm-$(LLVM_VERSION)-vimrc
1108
1109 cp -f $(CURDIR)/clang/tools/clang-format/clang-format-diff.py $(CURDIR)/clang/tools/clang-format/clang-format-diff-$(LLVM_VERSION)
1110
1111 cp -f $(CURDIR)/clang/tools/clang-format/clang-format.py clang/tools/clang-format/clang-format-$(LLVM_VERSION).py
1112
1113 rm -rf clang/tools/scan-build-$(LLVM_VERSION)
1114 cp -fR $(CURDIR)/clang/tools/scan-build clang/tools/scan-build-$(LLVM_VERSION)
1115
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)
1118 chmod +x clang/tools/scan-build-py-$(LLVM_VERSION)/bin/*
1119
1120 rm -rf clang/tools/scan-view-$(LLVM_VERSION)
1121 cp -fR $(CURDIR)/clang/tools/scan-view clang/tools/scan-view-$(LLVM_VERSION)
1122
1123 # Remove some license files
1124 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/include/llvm/Support/LICENSE.TXT
1125
1126 # Disable CMake's package validation checks for target files that we may remove.
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
1128
1129 # Also disable mlir-* checks in the cmake
1130 sed -i '/_IMPORT_CHECK_TARGETS \(mlir-\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake
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
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
1136
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
1140 # Adjust to the existing symlink. See #994827
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
1142
1143 # Managed in python*-lldb-X.Y.links.in
1144 rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python*/*-packages/lldb/_lldb.so
1145
1146 # Manage the polly files. Sometimes, we build them. Sometimes not.
1147 if test "$(POLLY_ENABLE)" = yes; then \
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/; \
1149 mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libPolly* \
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; \
1152 mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/include/polly/ \
1153 $(CURDIR)/debian/libpolly-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/; \
1154 fi
1155
1156 mkdir -p $(CURDIR)/debian/usr/share/doc/llvm-$(LLVM_VERSION)-doc/ $(CURDIR)/debian/usr/share/doc/clang-$(LLVM_VERSION)-doc/
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
1160
1161 # Rename OCaml bindings
1162 if test "$(OCAML_ENABLE)" = yes; then \
1163 mkdir -p "$(DEB_INST)$(OCAML_STDLIB_DIR)"; \
1164 mkdir -p "$(DEB_INST)usr/lib/llvm-$(LLVM_VERSION)/docs/ocaml/html/html"; \
1165 mkdir -p "$(DEB_INST)usr/lib/llvm-$(LLVM_VERSION)/share/doc/llvm/ocaml-html/"; \
1166 if test -d "$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/ocaml"; then \
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
1171
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
1181 # Disable the python binding for buster. not sure why it regressed
1182 # regressed de4364f1ecaa..0745b0c0354a
1183 if test "$(DISTRO)" = "buster" -o "$(DISTRO)" = "bionic" -o "$(DEB_HOST_ARCH)" = "mips64el"; then \
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; \
1186 echo "" > debian/python3-lldb-$(LLVM_VERSION).install; \
1187 fi
1188
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
1191 rm -rf $(TARGET_BUILD)
1192 touch $@
1193
1194
1195 override_dh_makeshlibs:
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)
1200 dh_makeshlibs --remaining-packages -V
1201
1202 override_dh_shlibdeps:
1203 # Ignore asan libraries. They would trigger dependencies to multiarch libraries
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
1205
1206 override_dh_installman:
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
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
1215 override_dh_strip:
1216 : # running out of diskspace on the buildds
1217 find $(TARGET_BUILD) -name '*.o' -o -name '*.a' -type f | xargs -r rm -f
1218 ifeq (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
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'
1224 endif
1225 # ifeq (${LLD_ENABLE},yes)
1226 # PATH=$(CURDIR)/:$$PATH dh_strip -p liblld-$(LLVM_VERSION) --dbg-package=liblld-$(LLVM_VERSION)-dbg
1227 # endif
1228 ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) lt 2.31.1-11 ; echo $$?),0)
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
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
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
1239 : # Therefore, continue when we encounter an error
1240 PATH=$(CURDIR)/:$$PATH LD_LIBRARY_PATH=$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/:/usr/lib/*/libfakeroot dh_strip -a -v || true
1241 : # Remove the workaround
1242 rm $(CURDIR)/strip
1243 : # for some reasons, the +x might be removed
1244 chmod -f +x $(CURDIR)/debian/*/usr/lib/llvm-$(LLVM_VERSION)/bin/* || true
1245 else
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)
1248 dh_strip -a -v -Xlibclang_rt.builtins-wasm32.a -Xlibclang_rt.builtins-wasm64.a -Xusr/lib/wasm32-wasi
1249 endif
1250
1251 override_dh_install:
1252 ifeq (${POLLY_ENABLE},yes)
1253 # only for arch:any builds
1254 ifneq (,$(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
1256 # On old Debian & Ubuntu, removing the files is necessary
1257 rm -rf debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/polly/*.cmake
1258 else
1259 rm -rf $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/polly/*.cmake
1260 endif
1261 endif
1262 dh_install --fail-missing
1263 # Move the libc++ abi files from libc++ to libc++-abi for the wasm32 packages
1264 # These packages are arch: all, so only do so when the packages are built
1265 ifneq (,$(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
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
1273 endif
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
1277 rm -fr $(CURDIR)/debian/libclang-rt-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/wasi/
1278
1279 repack_a_llvm_ir:
1280 ifeq (${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)
1283 endif
1284 touch $@
1285
1286
1287 override_dh_installdeb: repack_a_llvm_ir
1288 # Managed by the package
1289 dh_installdeb -a
1290
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
1292 rm -f $(CURDIR)/debian/clang-$(LLVM_VERSION)-examples/usr/share/doc/clang-$(LLVM_VERSION)-examples/examples/*Make*
1293
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
1297 rm -f $(CURDIR)/debian/libclang-common-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/include/omp*.h
1298
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
1301
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
1305 ifeq (${RUN_TEST},yes)
1306 # List of the archs we know we have 100 % tests working
1307 ARCH_LLVM_TEST_OK := i386 amd64
1308
1309 override_dh_auto_test:
1310 echo "Running tests: $(RUN_TEST)"
1311 # LLVM tests
1312 ifneq (,$(findstring $(DEB_HOST_ARCH),$(ARCH_LLVM_TEST_OK)))
1313 # logs the output to check-llvm_build_log.txt for validation through autopkgtest
1314 ninja $(VERBOSE) -C $(TARGET_BUILD) stage2-check-llvm | tee check-llvm_build_log.txt
1315 else
1316 ninja $(VERBOSE) -C $(TARGET_BUILD) stage2-check-llvm || true
1317 endif
1318
1319 # Clang tests
1320 ninja $(VERBOSE) -C $(TARGET_BUILD) stage2-check-clang || true
1321
1322 # Clang extra tests (ex: clang-tidy)
1323 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-clang-tools || true
1324
1325 # LLD tests
1326 ifeq (${LLD_ENABLE},yes)
1327 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-lld || true
1328 endif
1329
1330 # Sanitizer
1331 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-sanitizer || true
1332
1333 # Libcxx
1334 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-libcxx || true
1335
1336 # Libcxxabi
1337 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-libcxxabi || true
1338
1339 # MLIR
1340 ifeq (,$(filter $(DEB_HOST_ARCH), armel armhf i386 x32))
1341 # Do not run MLIR test on i386 because of
1342 # https://github.com/llvm/llvm-project/issues/58357
1343 ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-mlir || true
1344 endif
1345
1346 # Libclc
1347 ninja $(VERBOSE) -C libclc/build test || true
1348
1349 # LLDB tests
1350 ifeq (,$(filter $(DEB_HOST_ARCH), $(LLDB_DISABLE_ARCHS) armhf armel))
1351 ifneq (,$(filter codecoverage,$(DEB_BUILD_OPTIONS)))
1352 # Create a symlink to run the testsuite: see https://bugs.archlinux.org/task/50759
1353 cd $(CURDIR)/$(TARGET_BUILD)/lib/python*/*-packages/; \
1354 if test ! -e _lldb.so; then \
1355 ln -s lldb/_lldb.so; \
1356 fi
1357 if test "$(CODECOVERAGE)" = "no"; then \
1358 LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(CURDIR)/$(TARGET_BUILD)/lib/ ninja $(VERBOSE) -C $(TARGET_BUILD) check-lldb || true; \
1359 fi
1360 # remove the workaround
1361 rm $(CURDIR)/$(TARGET_BUILD)/lib/python*/*-packages/_lldb.so
1362 endif
1363 endif
1364
1365 # Polly tests
1366 #ifeq (${POLLY_ENABLE},yes)
1367 # ninja -C $(TARGET_BUILD) check-polly || true
1368 #endif
1369
1370 # Managed by debian build system
1371 rm -f $(CURDIR)/$(TARGET_BUILD)/lib/python*/*-packages/lldb/_lldb.so
1372
1373 # The compression of the code coverage report is done in the
1374 # hook B21GetCoverageResults on the server
1375 if test "$(CODECOVERAGE)" = "yes"; then \
1376 REPORT=reports/llvm-toolchain.info; \
1377 mkdir -p reports/; \
1378 lcov --directory $(TARGET_BUILD)/ --capture --ignore-errors source --output-file $$REPORT; \
1379 lcov --remove $$REPORT "/usr*" -o $$REPORT; \
1380 genhtml -o reports/coverage --show-details --highlight --legend $$REPORT; \
1381 chmod 0755 `find reports/coverage -type d`; \
1382 chmod 0644 `find reports/coverage -type f`; \
1383 fi
1384 else
1385 override_dh_auto_test:
1386 @echo "Skipping tests"
1387 endif
1388
1389
1390 override_dh_gencontrol: sccache-stats
1391 dh_gencontrol -- $(control_vars)
1392
1393
1394 override_dh_auto_clean:
1395 rm -rf $(TARGET_BUILD) llvm/docs/_build/ clang/docs/_build tools/clang/docs/_html/
1396 # QA tools
1397 rm -rf cov-int/ reports/
1398 rm -f `ls debian/*.in|grep -v control.in|sed -e "s|.in$$||g"`
1399 find utils -name '*.pyc' | xargs -r rm -f
1400 # Use -I because a test has a space in its name
1401 find lldb/test -iname '*.pyc' | xargs -I{} -r rm -f {}
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
1405 rm -rf libclc/build
1406 rm -rf build-wasm
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
1410 for f in debian/*.in; do \
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; \
1415 done
1416 if test "$(SCAN_BUILD)" = "yes"; then \
1417 patch -f -R -p1 < debian/patches/on-the-fly/use-scan-build-runtimes.diff||true; \
1418 fi
1419 : # for some reason, the docs are written to debian/usr and debian/man ...
1420 rm -rf debian/usr debian/man
1421 : # remove extra stamps
1422 rm -f debian-*-build override_dh_auto_install sccache-stats build_doc
1423
1424 .PHONY: override_dh_strip preconfigure