[packaging] Always build with non-asan for all architecture
[platform/upstream/llvm.git] / packaging / llvm.spec
1 %define keepstatic 1
2 %define llvm_release_build 1
3
4 %define llvm_version 10
5
6 Name:      llvm
7 Summary:   The LLVM Project is a collection of modular and reusable compiler and toolchain technologies
8 Version:   10.0.0
9 Release:   1
10 Group:     Development/Toolchain
11 License:   NCSA
12 Source0:   %{name}-%{version}.tar.gz
13 Source1001: llvm.manifest
14
15 BuildRequires: cmake
16 BuildRequires: python3
17 BuildRequires: python-devel
18 BuildRequires: patchelf
19 BuildRequires: binutils-devel
20
21 %if 0%{llvm_release_build}
22 BuildRequires: sed
23 %endif
24
25 Requires: libllvm = %{version}-%{release}
26
27 %if 0%{llvm_release_build}
28 # Disable debug packages building
29 %define debug_package %{nil}
30 %define __debug_install_post %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{?_find_debuginfo_strip_opts} %{?_find_debuginfo_ko_strip_opts} "%{_builddir}/%{?buildsubdir}"\
31         rm -rf "%{buildroot}/usr/lib/debug"\
32         rm -rf "%{buildroot}/usr/src/debug"
33 %endif
34
35 %define install_prefix /usr
36 %define sdk_install_prefix /home/owner/share/tmp/sdk_tools/lldb
37 %define sdk_bin_dir %{sdk_install_prefix}/bin
38
39 %ifarch x86_64 aarch64
40 %define library_dir %{install_prefix}/lib64
41 %define sdk_lib_dir %{sdk_install_prefix}/lib64
42 %define system_lib_dir /usr/lib64
43 %else
44 %define library_dir %{install_prefix}/lib
45 %define sdk_lib_dir %{sdk_install_prefix}/lib
46 %define system_lib_dir /usr/lib
47 %endif
48
49 %ifarch armv7l
50 %define ARCH armv7l
51 %define ABI eabi
52 %endif
53 %ifarch armv7hl
54 %define ARCH armv7hl
55 %define ABI eabihf
56 %endif
57 %ifarch %ix86
58 %define ARCH i586
59 %endif
60 %ifarch x86_64
61 %define ARCH x86_64
62 %endif
63 %ifarch aarch64
64 %define ARCH aarch64
65 %endif
66 %define host_arch %{ARCH}-tizen-linux-gnu%{?ABI}
67
68 %description
69 LLVM is a compiler infrastructure designed for compile-time, link-time, runtime,
70 and idle-time optimization of programs from arbitrary programming languages.
71 LLVM is written in C++ and has been developed since 2000 at the University of
72 Illinois and Apple. It currently supports compilation of C and C++ programs,
73 using front-ends derived from GCC 4.0.1. A new front-end for the C family of
74 languages is in development. The compiler infrastructure
75 includes mirror sets of programming tools as well as libraries with equivalent
76 functionality.
77
78 %package devel
79 Summary: Libraries and Header Files for LLVM %{version}
80 Requires: %{name} = %{version}
81
82 %description devel
83 This package contains library and header files needed to develop
84 new native programs that use the LLVM infrastructure.
85
86 %package static-devel
87 Summary: Static libraries for LLVM
88 Requires: %{name} = %{version}
89
90 %description static-devel
91 This package contains static libraries needed to develop new
92 native programs that use the LLVM infrastructure.
93
94 %package -n libllvm
95 Summary: LLVM shared libraries
96
97 %description -n libllvm
98 Shared libraries for the LLVM compiler infrastructure.
99
100 %package -n clang
101 Summary: Clang %{version} (C Language family frontend for LLVM)
102 License: NCSA
103 Requires: llvm = %{version}-%{release}
104 Provides: libclang.so.%{version}
105
106 %description -n clang
107 A new front-end for the C family of languages is in development.
108
109 %package -n clang-gcc-replace
110 Summary: Clang %{version} symlinks as gcc/g++
111 License: NCSA
112 Requires: clang = %{version}-%{release}
113 Conflicts: gcc
114
115 %description -n clang-gcc-replace
116 Symlinks to replace gcc and g++ for compilation
117
118 %package -n clang-devel
119 Summary: Clang %{version} Development Library
120 Requires: clang = %{version}-%{release}
121
122 %description -n clang-devel
123 This package contains the clang (C language) frontend for LLVM.
124 (development files)
125
126 %package -n lldb
127 Summary: LLDB
128 License: NCSA
129
130 %description -n lldb
131 LLDB is a next generation, high-performance debugger. It is built as a set
132 of reusable components which highly leverage existing libraries in the
133 larger LLVM Project, such as the Clang expression parser and LLVM
134 disassembler.
135
136 %package -n lldb-devel
137 Summary: Development header files for LLDB
138 Requires: lldb = %{version}-%{release}
139
140 %description -n lldb-devel
141 The package contains header files for the LLDB debugger.
142
143 %package -n compiler-rt
144 Summary: Compiler runtime libraries
145
146 %description -n compiler-rt
147 Compiler runtime libraries
148
149 %prep
150 %setup -q
151
152 %build
153 %if "%{__cc}" == "clang"
154 # compiler-rt can't be built with clang+FORTIFY_SOURCE and can't be built without -fPIC
155 CFLAGS=$(echo $CFLAGS | sed -e "s#-Wp,-D_FORTIFY_SOURCE=2#-fPIC#g")
156 CXXFLAGS=$(echo $CXXFLAGS | sed -e "s#-Wp,-D_FORTIFY_SOURCE=2#-fPIC#g")
157 %endif
158 %if 0%{llvm_release_build}
159 # Not to build debug info
160 RELCFLAGS=$(echo $CFLAGS | sed -e 's*\(^\|[[:space:]]\)-g\([[:digit:]]\+\|gdb\)\?* *g')
161 export CFLAGS=${RELCFLAGS}
162 RELCXXFLAGS=$(echo $CXXFLAGS | sed -e 's*\(^\|[[:space:]]\)-g\([[:digit:]]\+\|gdb\)\?* *g')
163 export CXXFLAGS=${RELCXXFLAGS}
164 RELFFLAGS=$(echo $FFLAGS | sed -e 's*\(^\|[[:space:]]\)-g\([[:digit:]]\+\|gdb\)\?* *g')
165 export FFLAGS=${RELFFLAGS}
166 %endif
167
168 cp %{SOURCE1001} .
169 %{?asan:%gcc_unforce_options}
170
171 %ifarch armv7l armv7hl aarch64
172 CPP_INCLUDE_PATHS=$(cpp -xc++ -v < /dev/null 2>&1 | \
173         awk '/search starts here:/{flag=1;next}/End of search list/{flag=0}flag' | \
174         sed -e "s/^ //" | tr '\n' ':' | sed -e 's/.$//')
175 %endif
176
177 mkdir -p build
178 cd build
179 cmake \
180     -DCMAKE_C_COMPILER=%__cc \
181     -DCMAKE_CXX_COMPILER=%__cxx \
182     -DCMAKE_INSTALL_PREFIX=%{install_prefix} \
183     -DCMAKE_BUILD_TYPE=Release \
184     -DLLVM_ENABLE_ASSERTIONS=No \
185     -DLLVM_TARGETS_TO_BUILD='X86;ARM;AArch64;BPF' \
186     -DLLVM_BUILD_LLVM_DYLIB=1 \
187     -DLLDB_DISABLE_LIBEDIT=1 \
188     -DLLDB_DISABLE_PYTHON=1 \
189     -DLLVM_TARGET_ARCH=%{ARCH} \
190     -DLLVM_HOST_TRIPLE=%{host_arch} \
191     -DLLDB_DISABLE_CURSES=1 \
192     -DLLVM_ENABLE_PROJECTS="clang;lldb;clang-tools-extra;compiler-rt" \
193     -DLLVM_BUILD_EXAMPLES=OFF \
194     -DLLVM_INCLUDE_EXAMPLES=OFF \
195     -DLLVM_BUILD_TESTS=OFF \
196     -DLLVM_INCLUDE_TESTS=OFF \
197     -DLLVM_ENABLE_DOXYGEN=OFF \
198     -DLLVM_BUILD_DOCS=OFF \
199     -DLLVM_INCLUDE_DOCS=OFF \
200     -DLLVM_OPTIMIZED_TABLEGEN=ON \
201 %ifarch armv7l armv7hl aarch64
202     -DC_INCLUDE_DIRS="${CPP_INCLUDE_PATHS}" \
203 %endif
204 %ifarch armv7l armv7hl
205     -DCMAKE_ASM_FLAGS="-mfpu=neon" \
206 %endif
207 %ifarch x86_64 aarch64
208     -DLLVM_LIBDIR_SUFFIX=64 \
209 %endif
210 %ifarch %ix86
211     -DCMAKE_C_FLAGS="-m32" \
212     -DCMAKE_CXX_FLAGS="-m32" \
213 %endif
214     -DLLVM_BINUTILS_INCDIR=/usr/include \
215     ../llvm
216
217 %if 0%{llvm_release_build}
218 make %{?jobs:-j%jobs}
219 %else
220 %if 0%{?jobs}>4
221 make -j4
222 %else
223 make %{?jobs:-j%jobs}
224 %endif
225 %endif
226
227 %install
228 cd build
229 %make_install
230 ln -sf %{install_prefix}/bin/clang++ %{buildroot}%{install_prefix}/bin/clang++-%{llvm_version}
231
232 # Compiler replacement hack
233 ln -sf %{install_prefix}/bin/clang-%{llvm_version} %{buildroot}%{_bindir}/gcc
234 ln -sf %{install_prefix}/bin/clang++-%{llvm_version} %{buildroot}%{_bindir}/g++
235
236 mkdir -p %{buildroot}%{bindir}
237 # copy lldb for sdk
238 mkdir -p %{buildroot}%{sdk_bin_dir}
239 mkdir -p %{buildroot}%{sdk_lib_dir}
240
241 mv %{buildroot}%{install_prefix}/bin/lldb %{buildroot}%{sdk_bin_dir}
242 mv %{buildroot}%{install_prefix}/bin/lldb-argdumper %{buildroot}%{sdk_bin_dir}
243 mv %{buildroot}%{install_prefix}/bin/lldb-server %{buildroot}%{sdk_bin_dir}
244
245 ln -sf %{sdk_bin_dir}/lldb %{buildroot}%{install_prefix}/bin/
246
247 cp -P %{buildroot}%{library_dir}/liblldb.so* %{buildroot}%{sdk_lib_dir}/
248
249 rm -rf %{buildroot}/usr/lib/debug/*
250
251 %post -n clang -p /sbin/ldconfig
252 %postun -n clang -p /sbin/ldconfig
253
254 %post -n lldb
255 echo "plugin load /usr/share/dotnet.tizen/netcoreapp/SOS/libsosplugin.so" > /root/.lldbinit
256
257 %clean
258 echo Cleaning %{buildroot}
259
260 %files
261 %manifest %{name}.manifest
262 %defattr(-,root,root,-)
263 %{install_prefix}/bin/bugpoint
264 %{install_prefix}/bin/llc
265 %{install_prefix}/bin/lli
266 %{install_prefix}/bin/llvm-ar
267 %{install_prefix}/bin/llvm-as
268 %{install_prefix}/bin/llvm-bcanalyzer
269 %{install_prefix}/bin/llvm-c-test
270 %{install_prefix}/bin/llvm-cat
271 %{install_prefix}/bin/llvm-config
272 %{install_prefix}/bin/llvm-cov
273 %{install_prefix}/bin/llvm-cvtres
274 %{install_prefix}/bin/llvm-cxxdump
275 %{install_prefix}/bin/llvm-cxxfilt
276 %{install_prefix}/bin/llvm-diff
277 %{install_prefix}/bin/llvm-dis
278 %{install_prefix}/bin/llvm-dlltool
279 %{install_prefix}/bin/llvm-dwarfdump
280 %{install_prefix}/bin/llvm-dwp
281 %{install_prefix}/bin/llvm-extract
282 %{install_prefix}/bin/llvm-lib
283 %{install_prefix}/bin/llvm-link
284 %{install_prefix}/bin/llvm-lto
285 %{install_prefix}/bin/llvm-lto2
286 %{install_prefix}/bin/llvm-mc
287 %{install_prefix}/bin/llvm-modextract
288 %{install_prefix}/bin/llvm-mt
289 %{install_prefix}/bin/llvm-nm
290 %{install_prefix}/bin/llvm-objdump
291 %{install_prefix}/bin/llvm-opt-report
292 %{install_prefix}/bin/llvm-pdbutil
293 %{install_prefix}/bin/llvm-profdata
294 %{install_prefix}/bin/llvm-ranlib
295 %{install_prefix}/bin/llvm-readelf
296 %{install_prefix}/bin/llvm-readobj
297 %{install_prefix}/bin/llvm-rtdyld
298 %{install_prefix}/bin/llvm-size
299 %{install_prefix}/bin/llvm-split
300 %{install_prefix}/bin/llvm-stress
301 %{install_prefix}/bin/llvm-strings
302 %{install_prefix}/bin/llvm-symbolizer
303 %{install_prefix}/bin/llvm-tblgen
304 %{install_prefix}/bin/llvm-xray
305 %{install_prefix}/bin/obj2yaml
306 %{install_prefix}/bin/opt
307 %{install_prefix}/bin/sancov
308 %{install_prefix}/bin/sanstats
309 %{install_prefix}/bin/scan-build
310 %{install_prefix}/bin/scan-view
311 %{install_prefix}/bin/verify-uselistorder
312 %{install_prefix}/bin/yaml2obj
313 %{install_prefix}/bin/diagtool
314 %{install_prefix}/bin/dsymutil
315 %{install_prefix}/bin/hmaptool
316 %{install_prefix}/bin/lldb-instr
317 %{install_prefix}/bin/lldb-vscode
318 %{install_prefix}/bin/llvm-addr2line
319 %{install_prefix}/bin/llvm-cfi-verify
320 %{install_prefix}/bin/llvm-cxxmap
321 %{install_prefix}/bin/llvm-elfabi
322 %{install_prefix}/bin/llvm-exegesis
323 %{install_prefix}/bin/llvm-ifs
324 %{install_prefix}/bin/llvm-install-name-tool
325 %{install_prefix}/bin/llvm-jitlink
326 %{install_prefix}/bin/llvm-lipo
327 %{install_prefix}/bin/llvm-mca
328 %{install_prefix}/bin/llvm-objcopy
329 %{install_prefix}/bin/llvm-rc
330 %{install_prefix}/bin/llvm-reduce
331 %{install_prefix}/bin/llvm-strip
332 %{install_prefix}/bin/llvm-undname
333 %{install_prefix}/bin/pp-trace
334
335 %files devel
336 %manifest %{name}.manifest
337 %defattr(-,root,root,-)
338 %{install_prefix}/include/llvm/*
339 %{install_prefix}/include/llvm-c/*
340 %{install_prefix}/share/*
341 %{library_dir}/cmake/llvm/*
342 %{library_dir}/libLTO*.so*
343 %{library_dir}/LLVMgold.so
344 %{library_dir}/libRemarks.so*
345
346 %files static-devel
347 %manifest %{name}.manifest
348 %defattr(-,root,root,-)
349 %{library_dir}/lib*.a
350
351 %files -n libllvm
352 %manifest %{name}.manifest
353 %defattr(-,root,root,-)
354 %{library_dir}/libLLVM*.so*
355
356 %files -n clang
357 %manifest %{name}.manifest
358 %defattr(-,root,root,-)
359 %{install_prefix}/bin/c-index-test
360 %{install_prefix}/bin/clang
361 %{install_prefix}/bin/clang++
362 %{install_prefix}/bin/clang-%{llvm_version}
363 %{install_prefix}/bin/clang++-%{llvm_version}
364 %{install_prefix}/bin/clang-apply-replacements
365 %{install_prefix}/bin/clang-change-namespace
366 %{install_prefix}/bin/clang-check
367 %{install_prefix}/bin/clang-cl
368 %{install_prefix}/bin/clang-cpp
369 %{install_prefix}/bin/clang-doc
370 %{install_prefix}/bin/clang-extdef-mapping
371 %{install_prefix}/bin/clang-move
372 %{install_prefix}/bin/clang-offload-wrapper
373 %{install_prefix}/bin/clang-refactor
374 %{install_prefix}/bin/clang-scan-deps
375 %{install_prefix}/bin/clang-format
376 %{install_prefix}/bin/clang-import-test
377 %{install_prefix}/bin/clang-include-fixer
378 %{install_prefix}/bin/clang-offload-bundler
379 %{install_prefix}/bin/clang-query
380 %{install_prefix}/bin/clang-rename
381 %{install_prefix}/bin/clang-reorder-fields
382 %{install_prefix}/bin/clang-tidy
383 %{install_prefix}/bin/clangd
384 %{install_prefix}/bin/git-clang-format
385 %{install_prefix}/bin/find-all-symbols
386 %{install_prefix}/bin/modularize
387 %{library_dir}/clang/%{version}/include/*
388 %{library_dir}/libclang*.so*
389 %{library_dir}/cmake/clang/*
390 %{install_prefix}/libexec/c++-analyzer
391 %{install_prefix}/libexec/ccc-analyzer
392
393 %files -n clang-gcc-replace
394 %manifest %{name}.manifest
395 %defattr(-,root,root,-)
396 %{_bindir}/gcc
397 %{_bindir}/g++
398
399 %files -n clang-devel
400 %manifest %{name}.manifest
401 %defattr(-,root,root,-)
402 %{install_prefix}/include/clang/*
403 %{install_prefix}/include/clang-c/*
404
405 %files -n lldb
406 %manifest %{name}.manifest
407 %defattr(-,root,root,-)
408 %{sdk_bin_dir}/lldb
409 %{install_prefix}/bin/lldb
410 %{sdk_bin_dir}/lldb-argdumper
411 %{sdk_bin_dir}/lldb-server
412 %{sdk_lib_dir}/liblldb*.so*
413
414 %files -n lldb-devel
415 %manifest %{name}.manifest
416 %defattr(-,root,root,-)
417 %{install_prefix}/include/lldb/*
418 %{library_dir}/liblldb*.so*
419
420 %files -n compiler-rt
421 %manifest %{name}.manifest
422 %defattr(-,root,root,-)
423 %{library_dir}/clang/%{version}/lib/linux/*
424 %{library_dir}/clang/%{version}/include/sanitizer/*
425 %{library_dir}/clang/%{version}/*