summaryrefslogblamecommitdiffstats
path: root/source-builder/config/llvm-common-1.cfg
blob: 629d2bfb3e032bf7ed9c840e9b79449cef0cfb29 (plain) (tree)



























































                                                                                               











                                              















                                                                                            
                          

                                                     
                         

                                                                
                                       

                                                                                    
                                 

                                                                                 
                            

                                                                       
                               

                                                                             
                               

                                                                             
                         


                                                              
                           


                                                                 
                            



















                                                                    
                       

                         
                                











                                                                                             
                                           










                                          
#
# 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}