167 lines
4.5 KiB
INI

#
# LLVM Common Support.
#
# This configuration file configure's, make's and install's LLVM and some of
# it projects.
#
%include %{_configdir}/checks.cfg
#
# The package description.
#
Name: rtems-llvm-%{llvm_version}-%{_host}-%{release}
Summary: LLVM v%{llvm_version} on host %{_host}
Version: %{llvm_version}
Release: %{release}
URL: http://llvm.org/
#
# The LLVM version depends on the type of build we are doing.
#
%if %{rsb_released}
%define rtems_llvm_version %{rsb_version}
%else
%define rtems_llvm_version %{rtems_version}
%endif
#
# LLVM Download URL.
#
%define llvm_url https://github.com/llvm/llvm-project/releases/download/llvmorg-%{llvm_version}
#
# Packages
#
%source set cfe %{llvm_url}/cfe-%{llvm_version}.src.tar.xz
%source set clang-tools-extra %{llvm_url}/clang-tools-extra-%{llvm_version}.src.tar.xz
%source set compiler-rt %{llvm_url}/compiler-rt-%{llvm_version}.src.tar.xz
%source set libcxx %{llvm_url}/libcxx-%{llvm_version}.src.tar.xz
%source set libcxxabi %{llvm_url}/libcxxabi-%{llvm_version}.src.tar.xz
%source set libunwind %{llvm_url}/libunwind-%{llvm_version}.src.tar.xz
%source set lld %{llvm_url}/lld-%{llvm_version}.src.tar.xz
%source set lldb %{llvm_url}/lldb-%{llvm_version}.src.tar.xz
%source set llvm %{llvm_url}/llvm-%{llvm_version}.src.tar.xz
%source set openmp %{llvm_url}/openmp-%{llvm_version}.src.tar.xz
#
# Build LLDB on all hosts except MacOS as it reqires a codesign login key of
# name 'llvm'.
#
%if %{_build_os} != darwin
%define with_llvm_lldb 1
%endif
%if %{defined with_llvm_lldb}
%define lldb_codesign_identity -DLLDB_CODESIGN_IDENTITY=llvm
%else
%define lldb_codesign_identity %{nil}
%endif
%if %{_build_os} == win32
%define llvm_build_tools CXX=clang++ CC=clang
%else
%define llvm_build_tools %{nil}
%endif
%if %{defined with_llvm_verbose}
%define llvm_verbose VERBOSE=1
%else
%define llvm_verbose %{nil}
%endif
#
# Prepare the source code.
#
%prep
# save the build top directory and cd back to it rather than
# using 'cd ..' because some shells change $PWD to a symlink's
# target location and 'cd ..' fails.
build_top=$(pwd)
llvm_source=%{?llvm_external:%{llvm_expand_name}}%{!?llvm_external:"llvm-%{llvm_version}"}
# llvm is a collection of separate packages, download them and then create
# the source tree.
source_dir_llvm=${llvm_source}
%source setup llvm -q -E
%{__mv} llvm-%{llvm_version}.src ${source_dir_llvm}
%source setup cfe -q -E
%{__mv} cfe-%{llvm_version}.src ${source_dir_llvm}/tools/clang
%source setup clang-tools-extra -q -E
%{__mv} clang-tools-extra-%{llvm_version}.src ${source_dir_llvm}/tools/clang/extra
%source setup compiler-rt -q -E
%{__mv} compiler-rt-%{llvm_version}.src ${source_dir_llvm}/projects/compiler-rt
%source setup libcxx -q -E
%{__mv} libcxx-%{llvm_version}.src ${source_dir_llvm}/projects/libcxx
%source setup libcxxabi -q -E
%{__mv} libcxxabi-%{llvm_version}.src ${source_dir_llvm}/projects/libcxxabi
%source setup libunwind -q -E
%{__mv} libunwind-%{llvm_version}.src ${source_dir_llvm}/projects/libunwind
%source setup lld -q -E
%{__mv} lld-%{llvm_version}.src ${source_dir_llvm}/tools/lld
%if %{defined with_llvm_lldb}
%source setup lldb -q -E
%{__mv} lldb-%{llvm_version}.src ${source_dir_llvm}/tools/lldb
%endif
%source setup openmp -q -E
%{__mv} openmp-%{llvm_version}.src ${source_dir_llvm}/tools/openmp
%patch setup llvm -p1
cd ${build_top}
%build
build_top=$(pwd)
# SWIG will be built and installed into %{swig_prefix} if defined
# so add it as a path.
%if %{defined swig_prefix}
export PATH=%{swig_prefix}/bin:$PATH
%endif
%{build_directory}
mkdir -p ${build_dir}
cd ${build_dir}
%{llvm_build_tools} \
%{__cmake} -Wno-dev \
-G "Unix Makefiles" \
-DCMAKE_COLOR_MAKEFILE=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DPACKAGE_VERSION="%{llvm_version} (%{llvm_version_message})" \
%{lldb_codesign_identity} \
../${source_dir_llvm}
version_inc="tools/clang/include/clang/Basic/Version.inc"
%{__cat} ${version_inc} | \
sed -e 's/CLANG_VERSION_STRING "[0-9]*\.[0-9]*\.[0-9]*/& \(%{llvm_version_message}\)/g' \
> ${version_inc}.tmp
%{__mv} ${version_inc}.tmp ${version_inc}
%{__make} %{?_smp_mflags} %{llvm_verbose}
cd ${build_top}
%install
build_top=$(pwd)
%{__rmdir} $SB_BUILD_ROOT
cd ${build_dir}
%{__make} DESTDIR=$SB_BUILD_ROOT install
cd ${build_top}