ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CMSDIST/llvm-gcc-toolfile.spec
Revision: 1.6
Committed: Wed Mar 30 12:19:05 2011 UTC (14 years, 1 month ago) by eulisse
Branch: MAIN
CVS Tags: sm110412-for43X, pe20110412a-for43X, pe20110411a-for43X, pe20110331b-for43X-ports, pe20110331b-for43X, pe20110331a-for43X-ports, pe20110331a-for43X
Changes since 1.5: +1 -0 lines
Log Message:
Move to llvm 2.9 RC3.

* Hack the compiler lookup path to make it work with gold.

File Contents

# User Rev Content
1 eulisse 1.1 ### RPM cms llvm-gcc-toolfile 11.0
2    
3     Requires: llvm
4     %if "%(echo %cmsos | grep osx >/dev/null && echo true)" == "true"
5     Requires: gfortran-macosx
6     %endif
7     Source: none
8    
9     %if "%(echo %cmsos | grep osx >/dev/null && echo true)" == "true"
10     Requires: gfortran-macosx
11     %else
12     Requires: gcc
13     %endif
14    
15     %prep
16     %build
17     %install
18     mkdir -p %i/etc/scram.d
19    
20     export LLVM_PATH
21     export LLVM_ROOT
22     export LLVM_VERSION
23    
24     # Determine the GCC_ROOT if "use system compiler is used. We still need this
25     # because we need to pick up libstdc++ from the gcc installation since clang
26     # does not ship its own and because clang does not provide a fortran compiler.
27     if [ "X$GCC_ROOT" = X ]
28     then
29     export GCC_PATH=`which gcc` || exit 1
30     export GCC_ROOT=`echo $GCC_PATH | sed -e 's|/bin/gcc||'`
31     export GCC_VERSION=`gcc -v 2>&1 | grep "gcc version" | sed 's|[^0-9]*\([0-9].[0-9].[0-9]\).*|\1|'` || exit 1
32     export G77_ROOT=$GFORTRAN_MACOSX_ROOT
33     else
34     export GCC_PATH
35     export GCC_ROOT
36     export GCC_VERSION
37     export G77_ROOT=$GCC_ROOT
38     fi
39    
40     export GCC_REALVERSION=`echo $GCC_VERSION | sed -e's|-.*||'`
41     export COMPILER_VERSION=`echo $LLVM_VERSION`
42     export COMPILER_VERSION_MAJOR=`echo $LLVM_VERSION | sed -e 's|\([0-9]\).*|\1|'`
43     export COMPILER_VERSION_MINOR=`echo $LLVM_VERSION | sed -e 's|[0-9].\([0-9]\).*|\1|'`
44    
45 eulisse 1.2 export GCC_ARCH=$(basename $(dirname `find $GCC_ROOT/include -mindepth 4 -maxdepth 4 -name bits`))
46    
47 eulisse 1.1 # Generic template for the toolfiles.
48     # *** USE @VARIABLE@ plus associated environment variable to customize. ***
49     # DO NOT DUPLICATE the toolfile template.
50    
51     cat << \EOF_TOOLFILE >%i/etc/scram.d/cxxcompiler.xml
52     <tool name="cxxcompiler" version="@LLVM_VERSION@" type="compiler">
53     <client>
54     <environment name="CXXCOMPILER_BASE" default="@LLVM_ROOT@"/>
55     <environment name="GCCBINDIR" default="$CXXCOMPILER_BASE/bin"/>
56     <environment name="CXX" value="$GCCBINDIR/clang++@COMPILER_NAME_SUFFIX@"/>
57     </client>
58     <flags SCRAM_COMPILER_NAME="clang@COMPILER_VERSION@"/>
59     <flags CCCOMPILER="clang@COMPILER_VERSION_MAJOR@"/>
60     <flags MODULEFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
61     <flags CXXDEBUGFLAG="-g"/>
62     <flags CPPDEFINES="GNU_GCC"/>
63     <flags CPPDEFINES="_GNU_SOURCE"/>
64     <flags CXXSHAREDOBJECTFLAGS="-fPIC"/>
65     <flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@"/>
66 eulisse 1.2 <flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@/@GCC_ARCH@"/>
67 eulisse 1.1 <flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@/backward"/>
68 elmer 1.5 <flags CXXFLAGS="-O2 -ansi -pthread -pipe"/>
69 eulisse 1.1 <flags CXXFLAGS="@ARCH_CXXFLAGS@ @COMPILER_CXXFLAGS@"/>
70 eulisse 1.4 <flags CXXFLAGS="-fmessage-length=0 -ftemplate-depth-300"/>
71     # -Wno-non-template-friend removed since it's not supported, yet, by llvm.
72     <flags CXXFLAGS="-Wall -Wno-long-long -Wimplicit -Wreturn-type -Wunused -Wparentheses -Wsign-compare -Wno-deprecated -Werror=return-type -Werror=missing-braces -Werror=unused-value -Werror=address -Werror=format -Werror=write-strings -Werror=strict-overflow -fdiagnostics-show-option"/>
73 eulisse 1.1 <flags LDFLAGS="@OS_LDFLAGS@"/>
74     <flags CXXSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
75     <flags SHAREDSUFFIX="@OS_SHAREDSUFFIX@"/>
76     <flags LD_UNIT="@OS_LD_UNIT@ @ARCH_LD_UNIT@"/>
77     <flags SCRAM_LANGUAGE_TYPE="C++"/>
78     <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="$CXXCOMPILER_BASE/lib" type="path"/>
79     <runtime name="PATH" value="$CXXCOMPILER_BASE/bin" type="path"/>
80     <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="@GCC_ROOT@/@ARCH_LIB64DIR@" type="path"/>
81     <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="@GCC_ROOT@/lib" type="path"/>
82 eulisse 1.6 <runtime name="COMPILER_RUNTIME_OBJECTS" value="@GCC_ROOT@/lib/gcc/@GCC_ARCH@/@GCC_REALVERSION@"/>
83 eulisse 1.1 <runtime name="PATH" value="@GCC_ROOT@/bin" type="path"/>
84     </tool>
85     EOF_TOOLFILE
86    
87     cat << \EOF_TOOLFILE >%i/etc/scram.d/ccompiler.xml
88     <tool name="ccompiler" version="@LLVM_VERSION@" type="compiler">
89     <client>
90     <environment name="CCOMPILER_BASE" default="@LLVM_ROOT@"/>
91     <environment name="GCCBINDIR" value="$CCOMPILER_BASE/bin"/>
92     <environment name="CC" value="$GCCBINDIR/clang@COMPILER_NAME_SUFFIX@"/>
93     </client>
94     <flags CDEBUGFLAG="-g"/>
95     <flags CSHAREDOBJECTFLAGS="-fPIC"/>
96     <flags CFLAGS="-pthread"/>
97     <flags CFLAGS="-O2"/>
98     <flags LDFLAGS="@OS_LDFLAGS@"/>
99     <flags CSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
100     <flags SCRAM_COMPILER_NAME="clangc@COMPILER_VERSION@"/>
101     <flags SCRAM_LANGUAGE_TYPE="C"/>
102     </tool>
103     EOF_TOOLFILE
104    
105     # Notice that on OSX we have a LIBDIR defined for f77compiler because gcc C++
106     # compiler (which comes from the system) does not know about where to find
107     # libgfortran.
108     cat << \EOF_TOOLFILE >%i/etc/scram.d/f77compiler.xml
109     <tool name="f77compiler" version="@GCC_VERSION@" type="compiler">
110     <lib name="gfortran"/>
111     <lib name="m"/>
112     <client>
113     <environment name="F77COMPILER_BASE" default="@G77_ROOT@"/>
114     <environment name="FC" default="$F77COMPILER_BASE/bin/gfortran"/>
115     @ARCH_FORTRAN_LIBDIR@
116     </client>
117     <flags SCRAM_COMPILER_NAME="clang@COMPILER_VERSION@"/>
118     <flags FFLAGS="-fno-second-underscore -Wunused -Wuninitialized -O2"/>
119     <flags FCO2FLAG="-O2"/>
120     <flags FCOPTIMISED="-O2"/>
121     <flags FCDEBUGFLAG="-g"/>
122     <flags FCSHAREDOBJECTFLAGS="-fPIC"/>
123     <flags SCRAM_LANGUAGE_TYPE="FORTRAN"/>
124     </tool>
125     EOF_TOOLFILE
126    
127     # NON-empty defaults
128     export COMPILER_EXEC_NAME="clang++"
129    
130     # First of all handle OS specific options.
131     case %cmsplatf in
132     slc* )
133     export OS_SHAREDFLAGS="-shared -Wl,-E"
134     export OS_SHAREDSUFFIX="so"
135     export OS_LDFLAGS="-Wl,-E -Wl,--hash-style=gnu"
136     export OS_RUNTIME_LDPATH_NAME="LD_LIBRARY_PATH"
137     ;;
138     osx* )
139     export OS_SHAREDFLAGS="-shared -dynamic -single_module"
140     export OS_SHAREDSUFFIX="dylib"
141     export OS_LDFLAGS="-Wl,-commons -Wl,use_dylibs"
142     export OS_RUNTIME_LDPATH_NAME="DYLD_LIBRARY_PATH"
143     ;;
144     esac
145    
146     # Then handle OS + architecture specific options (maybe we should enable more
147     # aggressive optimizations for amd64 as well??)
148     case %cmsplatf in
149     osx*_ia32_* )
150     export ARCH_CXXFLAGS="-arch i386"
151     export ARCH_SHAREDFLAGS="-arch i386"
152     export ARCH_LIB64DIR="lib"
153     export ARCH_FORTRAN_LIBDIR='<environment name="LIBDIR" default="$F77COMPILER_BASE/lib/gcc/i686-apple-darwin10/4.2.1"/>'
154     ;;
155     osx*_amd64_* )
156     export ARCH_CXXFLAGS="-arch x86_64"
157     export ARCH_SHAREDFLAGS="-arch x86_64"
158     export ARCH_LIB64DIR="lib"
159     export ARCH_FORTRAN_LIBDIR='<environment name="LIBDIR" default="$F77COMPILER_BASE/lib/gcc/i686-apple-darwin10/4.2.1/x86_64"/>'
160     ;;
161     osx*_ppc32_* )
162     export ARCH_CXXFLAGS="-arch ppc"
163     export ARCH_SHAREDFLAGS="-arch ppc"
164     export ARCH_LIB64DIR="lib"
165     ;;
166     slc*_amd64_* )
167     # For some reason on mac, some of the header do not compile if this is
168     # defined. Ignore for now.
169     export ARCH_CXXFLAGS="-Werror=overflow"
170     export ARCH_LIB64DIR="lib64"
171     export ARCH_LD_UNIT="-r -m elf_x86_64"
172     ;;
173     slc*_ia32_* )
174     # For some reason on mac, some of the header do not compile if this is
175     # defined. Ignore for now.
176     export ARCH_CXXFLAGS="-Werror=overflow"
177     export ARCH_LIB64DIR="lib"
178     export ARCH_LD_UNIT="-r -m elf_i386"
179     ;;
180     *)
181     echo "Unsupported."
182     exit 1
183     ;;
184     esac
185    
186     # Then handle compiler specific options. E.g. enable
187     # optimizations as they become available in gcc.
188     COMPILER_CXXFLAGS=
189     case %cmsplatf in
190     *_gcc4[56789]* )
191     COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -std=c++0x -ftree-vectorize"
192     F77_MMD="-cpp -MMD"
193     ;;
194     esac
195    
196     case %cmsplatf in
197     *_gcc4[3456789]* )
198     COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -Werror=type-limits"
199     ;;
200     esac
201    
202     # Enable visibility inlines hidden. Should drastically remove
203     # the amount of symbols due to templates.
204     # FIXME: not enabled on linux, yet, change the case statement
205     # to *_gcc4[23456789]* when stable.
206     case %cmsplatf in
207     osx* )
208     COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -fvisibility-inlines-hidden"
209     ;;
210     esac
211    
212     export COMPILER_CXXFLAGS
213    
214     # Handle here platform specific overrides. In case we
215     # want to tune something for a specific architecture.
216     case %cmsplatf in
217     osx10[56]*)
218     # On macosx we explicitly pick up a compiler version so that there is
219     # actually matching between the platform specified to cmsBuild and the
220     # compiler.
221     export COMPILER_NAME_SUFFIX="-$COMPILER_VERSION_MAJOR.$COMPILER_VERSION_MINOR"
222     ;;
223     esac
224    
225     # General substitutions
226     perl -p -i -e 's|\@([^@]*)\@|$ENV{$1}|g' %i/etc/scram.d/*.xml
227    
228     %post
229 eulisse 1.3 %{relocateConfig}etc/scram.d/*.xml
230 eulisse 1.1 echo "LLVM_GCC_TOOLFILE_ROOT='$CMS_INSTALL_PREFIX/%{pkgrel}'; export GCC_TOOLFILE_ROOT" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.sh
231     echo "setenv LLVM_GCC_TOOLFILE_ROOT '$CMS_INSTALL_PREFIX/%{pkgrel}'" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.csh