#region LLVM installation cd llvm %cmake_install cd - mkdir -p %{buildroot}/%{_bindir} %if %{without compat_build} # Fix some man pages ln -s llvm-config.1 %{buildroot}%{_mandir}/man1/llvm-config%{exec_suffix}-%{__isa_bits}.1 # Install binaries needed for lit tests %global test_binaries llvm-isel-fuzzer llvm-opt-fuzzer for f in %{test_binaries} do install -m 0755 llvm/%{_vpath_builddir}/bin/$f %{buildroot}%{_bindir} done %multilib_fix_c_header --file %{install_includedir}/llvm/Config/llvm-config.h # Install libraries needed for unittests %global build_libdir llvm/%{_vpath_builddir}/%{_lib} install %{build_libdir}/libLLVMTestingSupport.a %{buildroot}%{_libdir} install %{build_libdir}/libLLVMTestingAnnotations.a %{buildroot}%{_libdir} %if %{with gold} # Add symlink to lto plugin in the binutils plugin directory. %{__mkdir_p} %{buildroot}%{_libdir}/bfd-plugins/ ln -s -t %{buildroot}%{_libdir}/bfd-plugins/ ../LLVMgold.so %endif %else # Add version suffix to binaries for f in %{buildroot}/%{install_bindir}/*; do filename=`basename $f` ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename%{exec_suffix} done # Move header files mkdir -p %{buildroot}/%{pkg_includedir} ln -s ../../../%{install_includedir}/llvm %{buildroot}/%{pkg_includedir}/llvm ln -s ../../../%{install_includedir}/llvm-c %{buildroot}/%{pkg_includedir}/llvm-c # Fix multi-lib %multilib_fix_c_header --file %{install_includedir}/llvm/Config/llvm-config.h # Create ld.so.conf.d entry mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{pkg_name_llvm}-%{_arch}.conf << EOF %{install_libdir} EOF # Add version suffix to man pages and move them to mandir. mkdir -p %{buildroot}/%{_mandir}/man1 for f in %{build_install_prefix}/share/man/man1/*; do filename=`basename $f | cut -f 1 -d '.'` mv $f %{buildroot}%{_mandir}/man1/$filename%{exec_suffix}.1 done # Remove opt-viewer, since this is just a compatibility package. rm -Rf %{build_install_prefix}/share/opt-viewer %endif # llvm-config special casing. llvm-config is managed by update-alternatives. # the original file must remain available for compatibility with the CMake # infrastructure. Without compat, cmake points to the symlink, with compat it # points to the original file. %if %{without compat_build} mv %{buildroot}/%{install_bindir}/llvm-config %{buildroot}/%{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} # We still maintain a versionned symlink for consistency across llvm versions. # This is specific to the non-compat build and matches the exec prefix for # compat builds. An isa-agnostic versionned symlink is also maintained in the (un)install # steps. (cd %{buildroot}/%{install_bindir} ; ln -s llvm-config%{exec_suffix}-%{__isa_bits} llvm-config-%{maj_ver}-%{__isa_bits} ) # ghost presence touch %{buildroot}%{_bindir}/llvm-config-%{maj_ver} %else rm %{buildroot}%{_bindir}/llvm-config%{exec_suffix} (cd %{buildroot}/%{install_bindir} ; ln -s llvm-config llvm-config%{exec_suffix}-%{__isa_bits} ) %endif # ghost presence touch %{buildroot}%{_bindir}/llvm-config%{exec_suffix} mkdir -p %{buildroot}%{pkg_datadir}/llvm/cmake cp -Rv cmake/* %{buildroot}%{pkg_datadir}/llvm/cmake cd .. #endregion #region CLANG installation %if %{with compat_build} # TODO(kkleine): I don't know if the removal of every binary # below is what we want to do in big-merge for compat packages. # Re-evaluate this! # Remove binaries/other files rm -Rf %{buildroot}%{install_bindir} rm -Rf %{buildroot}%{install_prefix}/share rm -Rf %{buildroot}%{install_prefix}/libexec # Remove scanview-py helper libs rm -Rf %{buildroot}%{install_prefix}/lib/{libear,libscanbuild} %else # File in the macros file for other packages to use. We are not doing this # in the compat package, because the version macros would # conflict with # eachother if both clang and the clang compat package were installed together. install -p -m0644 -D %{SOURCE2005} %{buildroot}%{_rpmmacrodir}/macros.%{pkg_name_clang} sed -i -e "s|@@CLANG_MAJOR_VERSION@@|%{maj_ver}|" \ -e "s|@@CLANG_MINOR_VERSION@@|%{min_ver}|" \ -e "s|@@CLANG_PATCH_VERSION@@|%{patch_ver}|" \ %{buildroot}%{_rpmmacrodir}/macros.%{pkg_name_clang} # install clang python bindings mkdir -p %{buildroot}%{python3_sitelib}/clang/ # If we don't default to true here, we'll see this error: # install: omitting directory 'bindings/python/clang/__pycache__' # NOTE: this only happens if we include the gdb plugin of libomp. # Remove the plugin with command and we're good: rm -rf %{buildroot}/%{_datarootdir}/gdb install -p -m644 clang/bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/ || true %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/clang # install scanbuild-py to python sitelib. mv %{buildroot}%{_prefix}/%{_lib}/{libear,libscanbuild} %{buildroot}%{python3_sitelib} %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/{libear,libscanbuild} # Fix permissions of scan-view scripts chmod a+x %{buildroot}%{_datadir}/scan-view/{Reporter.py,startfile.py} # multilib fix %multilib_fix_c_header --file %{_includedir}/clang/Config/config.h # Move emacs integration files to the correct directory mkdir -p %{buildroot}%{_emacs_sitestartdir} for f in clang-format.el clang-rename.el clang-include-fixer.el; do mv %{buildroot}{%{_datadir}/clang,%{_emacs_sitestartdir}}/$f done # remove editor integrations (bbedit, sublime, emacs, vim) rm -vf %{buildroot}%{_datadir}/clang/clang-format-bbedit.applescript rm -vf %{buildroot}%{_datadir}/clang/clang-format-sublime.py* # TODO: Package html docs rm -Rvf %{buildroot}%{_docdir}/LLVM/clang/html rm -Rvf %{buildroot}%{_docdir}/LLVM/clang-tools/html rm -Rvf %{buildroot}%{_datadir}/clang/clang-doc-default-stylesheet.css rm -Rvf %{buildroot}%{_datadir}/clang/index.js # TODO: What are the Fedora guidelines for packaging bash autocomplete files? rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh # Create Manpage symlinks ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++.1.gz ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang-%{maj_ver}.1.gz ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++-%{maj_ver}.1.gz # Add clang++-{version} symlink ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} # Fix permission chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* %endif # Create sub-directories in the clang resource directory that will be # populated by other packages mkdir -p %{buildroot}%{install_libdir}/clang/%{maj_ver}/{include,lib,share}/ %if 0%{?fedora} == 38 # Install config file mkdir -p %{buildroot}%{_sysconfdir}/%{name}/ mv %{SOURCE2006} %{buildroot}%{_sysconfdir}/%{name}/%{_target_platform}.cfg %endif %if %{without compat_build} # Add a symlink in /usr/bin to clang-format-diff ln -s %{_datadir}/clang/clang-format-diff.py %{buildroot}%{_bindir}/clang-format-diff %endif # Install config file for clang %if %{maj_ver} >=18 mkdir -p %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/ echo "--gcc-triple=%{_arch}-redhat-linux" >> %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/clang.cfg %endif #endregion #region COMPILER-RT installation %if %{without compat_build} %ifarch ppc64le # Fix install path on ppc64le so that the directory name matches the triple used # by clang. mv %{buildroot}%{_prefix}/lib/clang/%{maj_ver}/lib/powerpc64le-redhat-linux-gnu %{buildroot}%{_prefix}/lib/clang/%{maj_ver}/lib/ppc64le-redhat-linux-gnu %endif %endif #endregion #region OPENMP installation %if %{without compat_build} # Remove static libraries with equivalent shared libraries rm -rf %{buildroot}%{_libdir}/libarcher_static.a # Remove the openmp gdb plugin for now rm -rf %{buildroot}/%{_datarootdir}/gdb # # TODO(kkleine): These was added to avoid a permission issue # chmod go+w %{buildroot}/%{_datarootdir}/gdb/python/ompd/ompdModule.so # chmod +w %{buildroot}/%{_datarootdir}/gdb/python/ompd/ompdModule.so # Remove files that we don't package, yet. rm %{buildroot}%{install_bindir}/llvm-omp-device-info rm %{buildroot}%{install_bindir}/llvm-omp-kernel-replay %endif #endregion #region LLD installation # Remove LLD's HTML documentation files rm -Rvf %{buildroot}%{_docdir}/LLVM/lld/html # This is generated by Patch1 during build and (probably) must be removed afterward rm %{buildroot}%{install_includedir}/mach-o/compact_unwind_encoding.h %if %{with compat_build} # Add version suffix to binaries mkdir -p %{buildroot}%{_bindir} for f in %{buildroot}/%{install_bindir}/*; do filename=`basename $f` ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename-%{maj_ver} done %else # Required when using update-alternatives: # https://docs.fedoraproject.org/en-US/packaging-guidelines/Alternatives/ touch %{buildroot}%{_bindir}/ld install -D -m 644 -t %{buildroot}%{_mandir}/man1/ %{src_tarball_dir}/lld/docs/ld.lld.1 %post -n %{pkg_name_lld} %{_sbindir}/update-alternatives --install %{_bindir}/ld ld %{_bindir}/ld.lld 1 %postun -n %{pkg_name_lld} if [ $1 -eq 0 ] ; then %{_sbindir}/update-alternatives --remove ld %{_bindir}/ld.lld fi %endif #endregion