2 %define llvm_release_build 1
4 %define llvm_version 10
7 Summary: The LLVM Project is a collection of modular and reusable compiler and toolchain technologies
10 Group: Development/Toolchain
12 Source0: %{name}-%{version}.tar.gz
13 Source1001: llvm.manifest
16 BuildRequires: python3
17 BuildRequires: python-devel
18 BuildRequires: patchelf
19 BuildRequires: binutils-devel
21 %if 0%{llvm_release_build}
25 Requires: libllvm = %{version}-%{release}
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"
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
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
44 %define library_dir %{install_prefix}/lib
45 %define sdk_lib_dir %{sdk_install_prefix}/lib
46 %define system_lib_dir /usr/lib
66 %define host_arch %{ARCH}-tizen-linux-gnu%{?ABI}
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
79 Summary: Libraries and Header Files for LLVM %{version}
80 Requires: %{name} = %{version}
83 This package contains library and header files needed to develop
84 new native programs that use the LLVM infrastructure.
87 Summary: Static libraries for LLVM
88 Requires: %{name} = %{version}
90 %description static-devel
91 This package contains static libraries needed to develop new
92 native programs that use the LLVM infrastructure.
95 Summary: LLVM shared libraries
97 %description -n libllvm
98 Shared libraries for the LLVM compiler infrastructure.
101 Summary: Clang %{version} (C Language family frontend for LLVM)
103 Requires: llvm = %{version}-%{release}
104 Provides: libclang.so.%{version}
106 %description -n clang
107 A new front-end for the C family of languages is in development.
109 %package -n clang-gcc-replace
110 Summary: Clang %{version} symlinks as gcc/g++
112 Requires: clang = %{version}-%{release}
115 %description -n clang-gcc-replace
116 Symlinks to replace gcc and g++ for compilation
118 %package -n clang-devel
119 Summary: Clang %{version} Development Library
120 Requires: clang = %{version}-%{release}
122 %description -n clang-devel
123 This package contains the clang (C language) frontend for LLVM.
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
136 %package -n lldb-devel
137 Summary: Development header files for LLDB
138 Requires: lldb = %{version}-%{release}
140 %description -n lldb-devel
141 The package contains header files for the LLDB debugger.
143 %package -n compiler-rt
144 Summary: Compiler runtime libraries
146 %description -n compiler-rt
147 Compiler runtime libraries
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")
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}
169 %{?asan:%gcc_unforce_options}
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/.$//')
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}" \
204 %ifarch armv7l armv7hl
205 -DCMAKE_ASM_FLAGS="-mfpu=neon" \
207 %ifarch x86_64 aarch64
208 -DLLVM_LIBDIR_SUFFIX=64 \
211 -DCMAKE_C_FLAGS="-m32" \
212 -DCMAKE_CXX_FLAGS="-m32" \
214 -DLLVM_BINUTILS_INCDIR=/usr/include \
217 %if 0%{llvm_release_build}
218 make %{?jobs:-j%jobs}
223 make %{?jobs:-j%jobs}
230 ln -sf %{install_prefix}/bin/clang++ %{buildroot}%{install_prefix}/bin/clang++-%{llvm_version}
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++
236 mkdir -p %{buildroot}%{bindir}
238 mkdir -p %{buildroot}%{sdk_bin_dir}
239 mkdir -p %{buildroot}%{sdk_lib_dir}
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}
245 ln -sf %{sdk_bin_dir}/lldb %{buildroot}%{install_prefix}/bin/
247 cp -P %{buildroot}%{library_dir}/liblldb.so* %{buildroot}%{sdk_lib_dir}/
249 rm -rf %{buildroot}/usr/lib/debug/*
251 %post -n clang -p /sbin/ldconfig
252 %postun -n clang -p /sbin/ldconfig
255 echo "plugin load /usr/share/dotnet.tizen/netcoreapp/SOS/libsosplugin.so" > /root/.lldbinit
258 echo Cleaning %{buildroot}
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
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*
347 %manifest %{name}.manifest
348 %defattr(-,root,root,-)
349 %{library_dir}/lib*.a
352 %manifest %{name}.manifest
353 %defattr(-,root,root,-)
354 %{library_dir}/libLLVM*.so*
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
393 %files -n clang-gcc-replace
394 %manifest %{name}.manifest
395 %defattr(-,root,root,-)
399 %files -n clang-devel
400 %manifest %{name}.manifest
401 %defattr(-,root,root,-)
402 %{install_prefix}/include/clang/*
403 %{install_prefix}/include/clang-c/*
406 %manifest %{name}.manifest
407 %defattr(-,root,root,-)
409 %{install_prefix}/bin/lldb
410 %{sdk_bin_dir}/lldb-argdumper
411 %{sdk_bin_dir}/lldb-server
412 %{sdk_lib_dir}/liblldb*.so*
415 %manifest %{name}.manifest
416 %defattr(-,root,root,-)
417 %{install_prefix}/include/lldb/*
418 %{library_dir}/liblldb*.so*
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}/*