%bcond_without sys_llvm %bcond_with check %global maj_ver 17 %global min_ver 0 %global patch_ver 6 %global bolt_version %{maj_ver}.%{min_ver}.%{patch_ver} %global bolt_srcdir llvm-project-%{bolt_version}.src %if %{with sys_llvm} %global pkg_name llvm-bolt %global install_prefix %{_prefix} %else %global pkg_name llvm-bolt%{maj_ver} %global install_prefix %{_libdir}/llvm%{maj_ver} %endif %global install_bindir %{install_prefix}/bin %global install_libdir %{install_prefix}/lib %global install_docdir %{install_prefix}/share/doc %global max_link_jobs 2 Name: %{pkg_name} Version: %{bolt_version} Release: 1 Summary: BOLT is a post-link optimizer developed to speed up large applications License: Apache 2.0 URL: https://github.com/llvm/llvm-project/tree/main/bolt Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{bolt_version}/%{bolt_srcdir}.tar.xz Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{bolt_version}/%{bolt_srcdir}.tar.xz.sig # BOLT is not respecting the component split of LLVM and requires some private # headers in order to compile itself. Try to disable as much libraries as # possible in order to reduce build time. #Patch0: rm-llvm-libs.diff BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: cmake BuildRequires: ninja-build BuildRequires: zlib-devel BuildRequires: python3-lit BuildRequires: python3-psutil BuildRequires: doxygen %description BOLT is a post-link optimizer developed to speed up large applications. It achieves the improvements by optimizing application's code layout based on execution profile gathered by sampling profiler, such as Linux perf tool. %package doc Summary: Documentation for BOLT BuildArch: noarch Requires: %{name} = %{version}-%{release} %description doc Documentation for the BOLT optimizer %prep %autosetup -n %{bolt_srcdir} -p1 %build %{cmake} -G Ninja -S llvm \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \ -DCMAKE_SKIP_RPATH=ON \ -DLLVM_DIR=%{install_libdir}/cmake/llvm \ -DLLVM_TABLEGEN_EXE=%{install_bindir}/llvm-tblgen \ -DLLVM_BUILD_UTILS:BOOL=ON \ -DBOLT_INCLUDE_DOCS:BOOL=ON \ -DLLVM_INCLUDE_TESTS:BOOL=ON \ -DBUILD_SHARED_LIBS:BOOL=OFF \ -DLLVM_LINK_LLVM_DYLIB:BOOL=OFF \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DBOLT_INCLUDE_TESTS:BOOL=ON \ -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ -DLLVM_ENABLE_PROJECTS="bolt" \ -DLLVM_PARALLEL_LINK_JOBS=%{max_link_jobs} \ %ifarch %ix86 x86_64 -DLLVM_TARGETS_TO_BUILD="X86" %endif %ifarch aarch64 -DLLVM_TARGETS_TO_BUILD="AArch64" %endif # Set LD_LIBRARY_PATH now because we skip rpath generation and the build uses # some just built libraries. export LD_LIBRARY_PATH=%{_builddir}/%{bolt_srcdir}/%{_vpath_builddir}/%{_lib} %ninja_build bolt %install %ninja_install bolt # Remove extera llvm files. find %{buildroot}%{install_prefix} \ ! -name "llvm-bolt" \ ! -name "merge-fdata" \ ! -name "perf2bolt" \ ! -name "llvm-boltdiff" \ ! -name "llvm-bolt-heatmap" \ ! -name "libbolt_rt_hugify.a" \ ! -name "libbolt_rt_instr.a" \ -type f,l -exec rm -f '{}' \; # Remove files installed during the build phase. rm -f %{buildroot}/%{_builddir}/%{bolt_srcdir}/%{_vpath_builddir}/%{_lib}/lib*.a # There currently is not support upstream for building html doc from BOLT install -d %{buildroot}%{install_docdir} mv bolt/README.md bolt/docs/*.md %{buildroot}%{install_docdir} %check %if %{with check} %ifarch aarch64 # Failing test cases on aarch64 rm bolt/test/cache+-deprecated.test bolt/test/bolt-icf.test bolt/test/R_ABS.pic.lld.cpp %endif export LD_LIBRARY_PATH=%{_builddir}/%{bolt_srcdir}//%{_vpath_builddir}/%{_lib} export DESTDIR=%{buildroot} %ninja_build check-bolt # Remove files installed during the check phase. rm -f %{buildroot}/%{_builddir}/%{bolt_srcdir}/%{_vpath_builddir}/%{_lib}/lib*.a %endif %files %license bolt/LICENSE.TXT %{install_bindir}/llvm-bolt %{install_bindir}/llvm-boltdiff %{install_bindir}/merge-fdata %{install_bindir}/perf2bolt %{install_bindir}/llvm-bolt-heatmap %ifarch x86_64 %{install_libdir}/libbolt_rt_hugify.a %{install_libdir}/libbolt_rt_instr.a %endif %exclude %{_builddir}/%{bolt_srcdir}/lib/* %files doc %doc %{install_docdir} %changelog * Mon Dec 4 2023 zhoujing 17.0.6-1 - Update to 17.0.6 * Thu Jun 15 2023 Xiong Zhou 0-2.20211016.gitb72f753 - Type:backport - ID:NA - SUG:NA - DESC: Handle data at the beginning of a function when disassembling and building CFG. * Mon Dec 19 2022 liyancheng <412998149@qq.com> 0-1.20211016.gitb72f753 - Type:fix - ID:NA - SUG:NA - DESC: Add debuginfo package and delete rpath in binary * Mon Nov 29 2021 liyancheng <412998149@qq.com> - Type:Init - ID:NA - SUG:NA - DESC:Init llvm-bolt repository