%global _trivial .0 %global _buildid .1 %global llvm_version_new 21 %global llvm_version_compat 20 Name: llvm%{llvm_version_new}-bootstrap Version: 21.1.0 Release: 1%{dist}%{?_trivial}%{?_buildid} Summary: The LLVM Compiler Infrastructure, minimal namespaced bootstrap version License: Apache-2.0 AND NCSA URL: https://llvm.org/ Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/llvm-project-%{version}.src.tar.xz Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/llvm-project-%{version}.src.tar.xz.sig # Amazon Patches Patch1000: 0001-add-amazon-triplets-as-recognized-clang-toolchain-in.patch BuildRequires: cmake %if 0%{?amzn} == 2023 BuildRequires: gcc14 BuildRequires: gcc14-c++ %else BuildRequires: gcc BuildRequires: gcc-c++ %endif BuildRequires: ninja-build BuildRequires: zlib-devel BuildRequires: libxml2-devel BuildRequires: python3-devel BuildRequires: openssl-devel BuildRequires: gmp-devel BuildRequires: libtool BuildRequires: binutils-devel BuildRequires: clang%{llvm_version_compat} BuildRequires: lld%{llvm_version_compat} BuildRequires: llvm%{llvm_version_compat} BuildRequires: compiler-rt%{llvm_version_compat} %global toolchain clang Requires: zlib Requires: libxml2 %if 0%{?amzn} == 2023 Requires: gcc14 gcc14-c++ %else Requires: gcc gcc-c++ %endif # Disable all debug package generation as this is a minimal bootstrap package. %global debug_package %{nil} %define debuginfo %{nil} %define __strip %{nil} # Allow installed but not packaged files, which is useful for a bootstrap build. %define _unpackaged_files_terminate_build 0 %define __brp_llvm_compile_lto_elf %{nil} %description This package contains a minimal bootstrap build of the LLVM 19 compiler infrastructure. It is intentionally small, providing just the necessary components to build a more complete, intermediate bootstrap package. %prep %autosetup -p1 -n llvm-project-%{version}.src %build export CFLAGS="$(echo %{optflags} | sed -e 's|fno-openmp-implicit-rpath||g')" export CXXFLAGS="$(echo %{optflags} | sed -e 's|fno-openmp-implicit-rpath||g')" export LDFLAGS="$(echo %{optflags} | sed -e 's|fno-openmp-implicit-rpath||g')" export CC=clang-%{llvm_version_compat} export CXX=clang++-%{llvm_version_compat} export LD=lld-%{llvm_version_compat} export PATH="%{_libdir}/llvm-%{llvm_version_compat}/bin:$PATH" %cmake -S llvm -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_FLAGS="${CFLAGS}" \ -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ -DCMAKE_INSTALL_PREFIX=%{_libdir}/llvm-%{llvm_version_new} \ -DLLVM_ENABLE_PROJECTS="clang;lld" \ -DLLVM_BUILD_TESTS=OFF \ -DLLVM_BUILD_DOCS=OFF \ -DLLVM_TOOL_LLD_BUILD=ON \ -DLLVM_TOOL_CLANG_BUILD=ON \ -DCMAKE_C_COMPILER=%{_libdir}/llvm%{llvm_version_compat}/bin/clang \ -DCMAKE_CXX_COMPILER=%{_libdir}/llvm%{llvm_version_compat}/bin/clang++ \ -DCLANG_DEFAULT_C_STDLIB=glibc \ -DCLANG_DEFAULT_CXX_STDLIB=libstdc++ \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DBUILD_SHARED_LIBS=OFF \ -DLLVM_ENABLE_LTO=OFF \ -DLLVM_TOOL_LLVM_GOLD_BUILD=OFF \ -DCMAKE_C_COMPILER_TARGET="%{_arch}-amazon-linux" \ -DCMAKE_CXX_COMPILER_TARGET="%{_arch}-amazon-linux" \ -DCLANG_DEFAULT_C_STDLIB=glibc \ -DCLANG_DEFAULT_CXX_STDLIB=libstdc++ \ -DCLANG_DEFAULT_LINKER=lld-%{llvm_version_new} %cmake_build %install export PATH="%{_libdir}/llvm-%{llvm_version_new}/bin:$PATH" # Perform the install using the new versioned prefix. %cmake_install # Fix ambiguous python and perl shebangs. find %{buildroot}%{_libdir}/llvm-%{llvm_version_new} -type f -exec sed -i -e '1s|#!/usr/bin/env python$|#!/usr/bin/python3|' \ -e '1s|#!/usr/bin/env python3$|#!/usr/bin/python3|' \ -e '1s|#!/usr/bin/env perl$|#!/usr/bin/perl|' {} + # Create symlinks to the core tools in %{_bindir} # Use absolute paths to prevent broken links on 64-bit systems. install -d %{buildroot}%{_bindir} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/clang %{buildroot}%{_bindir}/clang-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/clang %{buildroot}%{_bindir}/clang++-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/lld %{buildroot}%{_bindir}/lld-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/lld %{buildroot}%{_bindir}/ld.lld-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/llvm-ar %{buildroot}%{_bindir}/llvm-ar-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/llvm-nm %{buildroot}%{_bindir}/llvm-nm-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/llvm-objdump %{buildroot}%{_bindir}/llvm-objdump-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/llvm-readelf %{buildroot}%{_bindir}/llvm-readelf-%{llvm_version_new} ln -sf %{_libdir}/llvm-%{llvm_version_new}/bin/llvm-strip %{buildroot}%{_bindir}/llvm-strip-%{llvm_version_new} # Copy the license file to the correct location install -d %{buildroot}%{_defaultlicensedir}/%{name} install -m 644 LICENSE.TXT %{buildroot}%{_defaultlicensedir}/%{name}/LICENSE.TXT %files %license %{_defaultlicensedir}/%{name}/LICENSE.TXT %{_bindir}/*-%{llvm_version_new} %dir %{_libdir}/llvm-%{llvm_version_new}/ %{_libdir}/llvm-%{llvm_version_new}/bin/* %{_libdir}/llvm-%{llvm_version_new}/lib/* %{_libdir}/llvm-%{llvm_version_new}/libexec/* %{_libdir}/llvm-%{llvm_version_new}/include/* %{_libdir}/llvm-%{llvm_version_new}/share/* %{_libdir}/llvm-%{llvm_version_new}/lib/cmake/* %changelog