%bcond_without clang %bcond_without polly %bcond_without compiler Summary: Low Level Virtual Machine (LLVM) Name: llvm Version: 8.0.1 Release: 1 License: NCSA Group: Development/Other Url: http://llvm.org/ Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/llvm-8.0.1.src.tar.xz Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/cfe-8.0.1.src.tar.xz Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/clang-tools-extra-8.0.1.src.tar.xz Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/polly-8.0.1.src.tar.xz Source4: https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/compiler-rt-8.0.1.src.tar.xz Source1000: llvm.rpmlintrc Source1010: clang-gcc-wrapper.macros Source1011: clang-gcc-wrapper.sh Patch0: cfe-%{version}-i586-unknown-linux-gnu.patch # fvar-tracking-assignments and fno-var-tracking-assignments Patch1: ignore_group.patch BuildRequires: binutils-devel BuildRequires: bison BuildRequires: chrpath BuildRequires: cmake BuildRequires: flex BuildRequires: graphviz BuildRequires: groff BuildRequires: libstdc++-devel BuildRequires: libtool BuildRequires: pkgconfig(libffi) BuildRequires: pkgconfig(libtirpc) BuildRequires: sed BuildRequires: tcl BuildRequires: zip Requires: libstdc++-devel %description LVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations of all sorts, including those that require extensive interprocedural analysis. LLVM is also a great target for front-end development for conventional or research programming languages, including those which require compile-time, link-time, or run-time optimization for effective implementation, proper tail calls or garbage collection. %files %doc LICENSE.TXT %{_bindir}/bugpoint %{_bindir}/dsymutil %{_bindir}/llc %{_bindir}/lli %{_bindir}/llvm* %exclude %{_bindir}/llvm-config %{_bindir}/obj2yaml %{_bindir}/opt %{_bindir}/sancov %{_bindir}/sanstats %{_bindir}/verify-uselistorder %{_bindir}/yaml2obj %{_datadir}/opt-viewer %if %{with compiler} %{_bindir}/find-all-symbols %{_bindir}/modularize %endif #---------------------------------------------------------------------------- %define plugins %mklibname %{name}-plugins %package -n %{plugins} Summary: LLVM plugins Group: System/Libraries Provides: %{name}-plugins = %{EVRD} Conflicts: %{_lib}llvm3.8 < 3.8.0-2 Conflicts: %{_lib}llvm-devel < 3.8.0-2 %description -n %{plugins} LLVM plugins. %files -n %{plugins} %{_libdir}/BugpointPasses.so %{_libdir}/LLVMHello.so %{_libdir}/LLVMgold.so #---------------------------------------------------------------------------- %define major 8 %define maj_min %{major}.0 %define maj_api %{maj_min}.1 %define libname %mklibname %name %{major} %package -n %{libname} Summary: LLVM shared libraries Group: System/Libraries Requires: %{plugins} Conflicts: llvm < 3.0-4 %description -n %{libname} Shared libraries for the LLVM compiler infrastructure. This is needed by programs that are dynamically linked against libLLVM. %files -n %{libname} %{_libdir}/libLLVM-%{major}.so %{_libdir}/libLLVM-%{maj_api}.so #---------------------------------------------------------------------------- %define lto_maj %{major} %define liblto %mklibname lto %{lto_maj} %package -n %{liblto} Summary: LLVM shared library Group: System/Libraries Conflicts: %{_lib}llvm-plugins < 6.0.0-3 %description -n %{liblto} Shared library for the LLVM compiler infrastructure. %files -n %{liblto} %{_libdir}/libLTO.so.%{lto_maj}* #---------------------------------------------------------------------------- %define devname %mklibname %name -d %package -n %{devname} Summary: Development files for LLVM Group: Development/Other Provides: llvm-devel = %{EVRD} Requires: %{libname} = %{EVRD} Requires: %{liblto} = %{EVRD} Requires: %{name} = %{EVRD} Requires: llvm-polly = %{EVRD} Obsoletes: llvm-polly-devel < %{EVRD} Provides: llvm-polly-devel = %{EVRD} Conflicts: llvm < 3.0-7 Conflicts: %{_lib}llvm3.0 < 3.0-9 Conflicts: %{_lib}llvm-plugins < 6.0.0-3 %description -n %{devname} This package contains the development files for LLVM. %files -n %{devname} %{_bindir}/%{name}-config %{_includedir}/%{name} %{_includedir}/%{name}-c %{_libdir}/cmake/%{name}/* %{_libdir}/libLLVM*.a %{_libdir}/libLLVM.so %{_libdir}/libLTO.so %{_libdir}/libOptRemarks.so* %if %{with polly} %{_includedir}/polly %{_libdir}/cmake/polly/*.cmake %{_libdir}/libPolly*.a %endif %if %{with compiler} %{_libdir}/libfindAllSymbols.a %endif #---------------------------------------------------------------------------- %package doc Summary: Documentation for LLVM Group: Books/Computer books Requires: %{name} = %{EVRD} BuildArch: noarch %description doc Documentation for the LLVM compiler infrastructure. %files doc %doc README.txt %doc docs/tutorial %doc examples #---------------------------------------------------------------------------- %if %{with polly} %package polly Summary: Polyhedral optimizations for LLVM License: MIT Group: Development/Other %description polly Polly is a polyhedral optimizer for LLVM. Using an abstract mathematical representation it analyzes and optimizes the memory access pattern of a program. This includes data-locality optimizations for cache locality as well as automatic parallelization for thread-level and SIMD parallelism. Our overall goal is an integrated optimizer for data-locality and parallelism that takes advantage of multi-cores, cache hierarchies, short vector instructions as well as dedicated accelerators. %files polly %{_bindir}/pollycc %{_bindir}/pollyc++ %{_libdir}/LLVMPolly.so %endif #---------------------------------------------------------------------------- %if %{with clang} %define clang_maj 8 %define clang_api %{maj_api} %define libclang %mklibname clang %{clang_maj} %define gcc_version %(gcc -dumpversion) # TODO: %%{_bindir}/clang is linked against static libclang.a, could it be # linked against libclang.so instead, like llvm-* are against livLLVM.so? %package -n clang Summary: A C language family front-end for LLVM License: NCSA Group: Development/Other # TODO: is this requires:llvm needed, or just legacy from fedora pkg layout? Requires: llvm = %{EVRD} # clang requires gcc, clang++ requires libstdc++-devel Requires: gcc Requires: libstdc++-devel >= %{gcc_version} %description -n clang clang: noun 1. A loud, resonant, metallic sound. 2. The strident call of a crane or goose. 3. C-language family front-end toolkit. The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler. Its tools are built as libraries and designed to be loosely-coupled and extensible. %files -n clang %{_bindir}/c-index-test %{_bindir}/clang* %{_bindir}/diagtool %{_bindir}/hmaptool %{_datadir}/clang/bash-autocomplete.sh %{_datadir}/clang/clang-include-fixer.el %{_datadir}/clang/clang-include-fixer.py %{_datadir}/clang/clang-rename.el %{_datadir}/clang/clang-rename.py %{_datadir}/clang/clang-tidy-diff.py %{_datadir}/clang/run-clang-tidy.py %{_datadir}/clang/run-find-all-symbols.py %{_libdir}/clang/ %{_datadir}/clang/clang-gcc-wrapper.sh %{_sys_macros_dir}/clang-gcc-wrapper.macros #---------------------------------------------------------------------------- %package -n %{libclang} Summary: Shared library for clang Group: System/Libraries %description -n %{libclang} Shared libraries for the clang compiler. This is needed by programs that are dynamically linked against libclang. %files -n %{libclang} %{_libdir}/libclang.so.%{clang_maj} %{_libdir}/libclang-%{clang_maj}.so %{_libdir}/libclang-%{maj_api}.so #---------------------------------------------------------------------------- %define devclang %mklibname clang -d %package -n %{devclang} Summary: Development files for clang Group: Development/Other Requires: %{libclang} = %{EVRD} Provides: clang-devel = %{EVRD} Conflicts: llvm-devel < 3.1 Obsoletes: clang-devel < 3.1 %description -n %{devclang} This package contains header files and libraries needed for using libclang. %files -n %{devclang} %dir %{_datadir}/clang/ %{_includedir}/clang %{_includedir}/clang-c %{_libdir}/cmake/clang/ClangConfig.cmake %{_libdir}/cmake/clang/ClangTargets-relwithdebinfo.cmake %{_libdir}/cmake/clang/ClangTargets.cmake %{_libdir}/libclang*.a %{_libdir}/libclang.so #---------------------------------------------------------------------------- %package -n clang-analyzer Summary: A source code analysis framework License: NCSA Group: Development/Other Requires: clang = %{EVRD} # not picked up automatically since files are currently not instaled # in standard Python hierarchies yet Requires: python %description -n clang-analyzer The Clang Static Analyzer consists of both a source code analysis framework and a standalone tool that finds bugs in C and Objective-C programs. The standalone tool is invoked from the command-line, and is intended to run in tandem with a build of a project or code base. %files -n clang-analyzer %{_bindir}/scan-build %{_bindir}/scan-view %{_datadir}/scan-build/ %{_datadir}/scan-view/ %{_mandir}/man1/scan-build.1.* %{_prefix}/libexec/c++-analyzer %{_prefix}/libexec/ccc-analyzer %endif #---------------------------------------------------------------------------- %prep %setup -qn %{name}-%{version}.src -a1 -a2 -a3 -a4 %if %{with clang} rm -rf tools/clang mv cfe-%{version}.src tools/clang mv clang-tools-extra-%{version}.src tools/clang/tools/extra pushd tools/clang %patch0 -p1 -b .gnu~ %patch1 -p1 ignore_group.patch popd %endif %if %{with polly} mv polly-%{version}.src tools/polly %endif %if %{with compiler} mv compiler-rt-%{version}.src projects/compiler-rt %endif %build # Build with gcc/g++, not clang if it happens to be installed export CC=gcc export CXX=g++ export LD=ld.gold # A couple more fixes from OMV + a workaround for a bug (?) in GCC 4.9: # https://llvm.org/bugs/show_bug.cgi?id=20080 and # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659 # (-fno-devirtualize) # # compiler-rt assumes off_t is 64 bits -- make sure this is true even on # 32 bit OSes %ifarch %ix86 # compiler-rt doesn't support ix86 with x<6 either export CFLAGS="%{optflags} -march=i686 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -g1" export CXXFLAGS="%{optflags} -march=i686 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -fno-devirtualize -g1" %else export CXXFLAGS="%{optflags} -fno-devirtualize -g1" %endif %ifarch %ix86 # Fix noexecstack for i in projects/compiler-rt/lib/builtins/i386/*.S; do cat >>$i <<'EOF' #if defined(__linux__) && defined(__ELF__) .section .note.GNU-stack,"",%progbits #endif EOF done %endif %cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DBUILD_SHARED_LIBS:BOOL=OFF \ %ifarch %_build_arch -DLLVM_LIBDIR_SUFFIX="64" \ %else -DLLVM_LIBDIR_SUFFIX="" \ %endif %if %{with polly} -DWITH_POLLY:BOOL=ON \ -DLINK_POLLY_INTO_TOOLS:BOOL=ON \ %endif -DLLVM_ENABLE_FFI:BOOL=ON \ -DLLVM_ENABLE_RTTI:BOOL=ON \ -DLLVM_BINUTILS_INCDIR=%{_includedir} \ -DLLVM_INCLUDE_UTILS:BOOL=ON \ -DLLVM_BUILD_LLVM_DYLIB=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DOCAMLFIND=NOTFOUND %make %install %makeinstall_std -C build %if %{with polly} # [From OMV] # Polly bits as described on # http://polly.llvm.org/example_load_Polly_into_clang.html cat >%{buildroot}%{_bindir}/pollycc <<'EOF' #!/bin/sh exec %{_bindir}/clang -O3 -Xclang -load -Xclang %{_libdir}/LLVMPolly.so "$@" EOF cat >%{buildroot}%{_bindir}/pollyc++ <<'EOF' #!/bin/sh exec %{_bindir}/clang++ -O3 -Xclang -load -Xclang %{_libdir}/LLVMPolly.so "$@" EOF chmod 0755 %{buildroot}%{_bindir}/pollycc %{buildroot}%{_bindir}/pollyc++ %endif %if %{with clang} # Clang - Git integration. Not needed. rm -f %{buildroot}%{_bindir}/git-clang-format # Remove editor integration files rm -f %{buildroot}%{_datadir}/clang/clang-format* # Symlinks for libclang to maintain compatibility with the older releases. ln -s %{_libdir}/libclang.so.%{clang_maj} %{buildroot}%{_libdir}/libclang-%{clang_maj}.so ln -s %{_libdir}/libclang.so.%{clang_maj} %{buildroot}%{_libdir}/libclang-%{maj_api}.so #add clang-tblgen cp -a build/bin/clang-tblgen %{buildroot}%{_bindir} # install clang-gcc-wrapper install -D -m 0644 %{SOURCE1011} %{buildroot}%{_datadir}/clang/ mkdir -p %{buildroot}%{_sys_macros_dir} install -m 0644 %{SOURCE1010} %{buildroot}%{_sys_macros_dir}/ %endif # Install libraries used for testing cp -a build/%{_lib}/BugpointPasses.so %{buildroot}%{_libdir} cp -a build/%{_lib}/LLVMHello.so %{buildroot}%{_libdir}