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 |
export GCC_REALVERSION=`echo $GCC_VERSION | sed -e's|-.*||'`
|
40 |
export COMPILER_VERSION=`echo $LLVM_VERSION`
|
41 |
export COMPILER_VERSION_MAJOR=`echo $LLVM_VERSION | sed -e 's|\([0-9]\).*|\1|'`
|
42 |
export COMPILER_VERSION_MINOR=`echo $LLVM_VERSION | sed -e 's|[0-9].\([0-9]\).*|\1|'`
|
43 |
|
44 |
export GCC_ARCH=$(basename $(dirname `find $GCC_ROOT/include -mindepth 4 -maxdepth 4 -name bits`))
|
45 |
|
46 |
mkdir -p %i/etc/disabled/scram.d
|
47 |
# 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/disabled/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 |
<flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@/@GCC_ARCH@"/>
|
67 |
<flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@/backward"/>
|
68 |
<flags CXXFLAGS="-O2 -ansi -pthread -pipe"/>
|
69 |
<flags CXXFLAGS="@ARCH_CXXFLAGS@ @COMPILER_CXXFLAGS@"/>
|
70 |
<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 -Wreturn-type -Wunused -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 |
<flags LDFLAGS="@OS_LDFLAGS@ -L@GCC_ROOT@/lib64"/>
|
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 |
<runtime name="COMPILER_RUNTIME_OBJECTS" value="@GCC_ROOT@/lib/gcc/@GCC_ARCH@/@GCC_REALVERSION@"/>
|
83 |
<runtime name="PATH" value="@GCC_ROOT@/bin" type="path"/>
|
84 |
</tool>
|
85 |
EOF_TOOLFILE
|
86 |
|
87 |
cat << \EOF_TOOLFILE >%i/etc/disabled/scram.d/cxx-analyzer.xml
|
88 |
<tool name="cxxcompiler" version="@LLVM_VERSION@" type="compiler">
|
89 |
<client>
|
90 |
<environment name="CXXCOMPILER_BASE" default="@LLVM_ROOT@"/>
|
91 |
<environment name="GCCBINDIR" default="$CXXCOMPILER_BASE/bin"/>
|
92 |
<environment name="CXX" value="$GCCBINDIR/c++-analyzer"/>
|
93 |
</client>
|
94 |
<flags SCRAM_COMPILER_NAME="clang@COMPILER_VERSION@"/>
|
95 |
<flags CCCOMPILER="clang@COMPILER_VERSION_MAJOR@"/>
|
96 |
<flags MODULEFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
|
97 |
<flags CXXDEBUGFLAG="-g"/>
|
98 |
<flags CPPDEFINES="GNU_GCC"/>
|
99 |
<flags CPPDEFINES="_GNU_SOURCE"/>
|
100 |
<flags CXXSHAREDOBJECTFLAGS="-fPIC"/>
|
101 |
<flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@"/>
|
102 |
<flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@/@GCC_ARCH@"/>
|
103 |
<flags CPPFLAGS="-I@GCC_ROOT@/include/c++/@GCC_REALVERSION@/backward"/>
|
104 |
<flags CXXFLAGS="-O2 -ansi -pthread -pipe"/>
|
105 |
<flags CXXFLAGS="@ARCH_CXXFLAGS@ @COMPILER_CXXFLAGS@"/>
|
106 |
<flags CXXFLAGS="-fmessage-length=0 -ftemplate-depth-300"/>
|
107 |
# -Wno-non-template-friend removed since it's not supported, yet, by llvm.
|
108 |
<flags CXXFLAGS="-std=c++11 -Wall -Wno-long-long -Wreturn-type -Wunused -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"/>
|
109 |
<flags LDFLAGS="@OS_LDFLAGS@ -L@GCC_ROOT@/lib64"/>
|
110 |
<flags CXXSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
|
111 |
<flags SHAREDSUFFIX="@OS_SHAREDSUFFIX@"/>
|
112 |
<flags LD_UNIT="@OS_LD_UNIT@ @ARCH_LD_UNIT@"/>
|
113 |
<flags SCRAM_LANGUAGE_TYPE="C++"/>
|
114 |
<runtime name="@OS_RUNTIME_LDPATH_NAME@" value="$CXXCOMPILER_BASE/lib" type="path"/>
|
115 |
<runtime name="PATH" value="$CXXCOMPILER_BASE/bin" type="path"/>
|
116 |
<runtime name="@OS_RUNTIME_LDPATH_NAME@" value="@GCC_ROOT@/@ARCH_LIB64DIR@" type="path"/>
|
117 |
<runtime name="@OS_RUNTIME_LDPATH_NAME@" value="@GCC_ROOT@/lib" type="path"/>
|
118 |
<runtime name="COMPILER_RUNTIME_OBJECTS" value="@GCC_ROOT@/lib/gcc/@GCC_ARCH@/@GCC_REALVERSION@"/>
|
119 |
<runtime name="PATH" value="@GCC_ROOT@/bin" type="path"/>
|
120 |
</tool>
|
121 |
EOF_TOOLFILE
|
122 |
|
123 |
cat << \EOF_TOOLFILE >%i/etc/disabled/scram.d/ccompiler.xml
|
124 |
<tool name="ccompiler" version="@LLVM_VERSION@" type="compiler">
|
125 |
<client>
|
126 |
<environment name="CCOMPILER_BASE" default="@LLVM_ROOT@"/>
|
127 |
<environment name="GCCBINDIR" value="$CCOMPILER_BASE/bin"/>
|
128 |
<environment name="CC" value="$GCCBINDIR/clang@COMPILER_NAME_SUFFIX@"/>
|
129 |
</client>
|
130 |
<flags CDEBUGFLAG="-g"/>
|
131 |
<flags CSHAREDOBJECTFLAGS="-fPIC"/>
|
132 |
<flags CFLAGS="-pthread"/>
|
133 |
<flags CFLAGS="-O2"/>
|
134 |
<flags LDFLAGS="@OS_LDFLAGS@ -L@GCC_ROOT@/lib64"/>
|
135 |
<flags CSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
|
136 |
<flags SCRAM_COMPILER_NAME="clangc@COMPILER_VERSION@"/>
|
137 |
<flags SCRAM_LANGUAGE_TYPE="C"/>
|
138 |
</tool>
|
139 |
EOF_TOOLFILE
|
140 |
|
141 |
# Notice that on OSX we have a LIBDIR defined for f77compiler because gcc C++
|
142 |
# compiler (which comes from the system) does not know about where to find
|
143 |
# libgfortran.
|
144 |
cat << \EOF_TOOLFILE >%i/etc/disabled/scram.d/f77compiler.xml
|
145 |
<tool name="f77compiler" version="@GCC_VERSION@" type="compiler">
|
146 |
<lib name="gfortran"/>
|
147 |
<lib name="m"/>
|
148 |
<client>
|
149 |
<environment name="F77COMPILER_BASE" default="@G77_ROOT@"/>
|
150 |
<environment name="FC" default="$F77COMPILER_BASE/bin/gfortran"/>
|
151 |
@ARCH_FORTRAN_LIBDIR@
|
152 |
</client>
|
153 |
<flags SCRAM_COMPILER_NAME="clang@COMPILER_VERSION@"/>
|
154 |
<flags FFLAGS="-fno-second-underscore -Wunused -Wuninitialized -O2"/>
|
155 |
<flags FCO2FLAG="-O2"/>
|
156 |
<flags FCOPTIMISED="-O2"/>
|
157 |
<flags FCDEBUGFLAG="-g"/>
|
158 |
<flags FCSHAREDOBJECTFLAGS="-fPIC"/>
|
159 |
<flags SCRAM_LANGUAGE_TYPE="FORTRAN"/>
|
160 |
</tool>
|
161 |
EOF_TOOLFILE
|
162 |
|
163 |
# This is a toolfile to use llvm / clang as a library, not as a compiler.
|
164 |
cat << \EOF_TOOLFILE >%i/etc/scram.d/llvm.xml
|
165 |
<tool name="llvm" version="@LLVM_VERSION@">
|
166 |
<lib name="clang"/>
|
167 |
<client>
|
168 |
<environment name="LLVM_BASE" default="@LLVM_ROOT@"/>
|
169 |
<environment name="LIBDIR" default="$LLVM_BASE/lib"/>
|
170 |
<environment name="INCLUDE" default="$LLVM_BASE/include"/>
|
171 |
</client>
|
172 |
<flags LDFLAGS="-Wl,-undefined -Wl,suppress"/>
|
173 |
<flags CXXFLAGS="-D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS"/>
|
174 |
<flags CXXFLAGS="-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 "/>
|
175 |
<flags CXXFLAGS="-fomit-frame-pointer -fPIC -Wno-enum-compare "/>
|
176 |
<flags CXXFLAGS="-Wno-strict-aliasing -fno-rtti"/>
|
177 |
</tool>
|
178 |
EOF_TOOLFILE
|
179 |
|
180 |
# NON-empty defaults
|
181 |
export COMPILER_EXEC_NAME="clang++"
|
182 |
|
183 |
# First of all handle OS specific options.
|
184 |
case %cmsplatf in
|
185 |
slc* )
|
186 |
export OS_SHAREDFLAGS="-shared -Wl,-E"
|
187 |
export OS_SHAREDSUFFIX="so"
|
188 |
export OS_LDFLAGS="-Wl,-E -Wl,--hash-style=gnu"
|
189 |
export OS_RUNTIME_LDPATH_NAME="LD_LIBRARY_PATH"
|
190 |
;;
|
191 |
osx* )
|
192 |
export OS_SHAREDFLAGS="-shared -dynamic -single_module"
|
193 |
export OS_SHAREDSUFFIX="dylib"
|
194 |
export OS_LDFLAGS="-Wl,-commons -Wl,use_dylibs"
|
195 |
export OS_RUNTIME_LDPATH_NAME="DYLD_LIBRARY_PATH"
|
196 |
;;
|
197 |
esac
|
198 |
|
199 |
# Then handle OS + architecture specific options (maybe we should enable more
|
200 |
# aggressive optimizations for amd64 as well??)
|
201 |
case %cmsplatf in
|
202 |
osx*_ia32_* )
|
203 |
export ARCH_CXXFLAGS="-arch i386"
|
204 |
export ARCH_SHAREDFLAGS="-arch i386"
|
205 |
export ARCH_LIB64DIR="lib"
|
206 |
export ARCH_FORTRAN_LIBDIR='<environment name="LIBDIR" default="$F77COMPILER_BASE/lib/gcc/i686-apple-darwin10/4.2.1"/>'
|
207 |
;;
|
208 |
osx*_amd64_* )
|
209 |
export ARCH_CXXFLAGS="-arch x86_64"
|
210 |
export ARCH_SHAREDFLAGS="-arch x86_64"
|
211 |
export ARCH_LIB64DIR="lib"
|
212 |
export ARCH_FORTRAN_LIBDIR='<environment name="LIBDIR" default="$F77COMPILER_BASE/lib/gcc/i686-apple-darwin10/4.2.1/x86_64"/>'
|
213 |
;;
|
214 |
osx*_ppc32_* )
|
215 |
export ARCH_CXXFLAGS="-arch ppc"
|
216 |
export ARCH_SHAREDFLAGS="-arch ppc"
|
217 |
export ARCH_LIB64DIR="lib"
|
218 |
;;
|
219 |
slc*_amd64_* )
|
220 |
# For some reason on mac, some of the header do not compile if this is
|
221 |
# defined. Ignore for now.
|
222 |
export ARCH_CXXFLAGS="-Werror=overflow"
|
223 |
export ARCH_LIB64DIR="lib64"
|
224 |
export ARCH_LD_UNIT="-r -m elf_x86_64"
|
225 |
;;
|
226 |
slc*_ia32_* )
|
227 |
# For some reason on mac, some of the header do not compile if this is
|
228 |
# defined. Ignore for now.
|
229 |
export ARCH_CXXFLAGS="-Werror=overflow"
|
230 |
export ARCH_LIB64DIR="lib"
|
231 |
export ARCH_LD_UNIT="-r -m elf_i386"
|
232 |
;;
|
233 |
*)
|
234 |
echo "Unsupported."
|
235 |
exit 1
|
236 |
;;
|
237 |
esac
|
238 |
|
239 |
# Then handle compiler specific options. E.g. enable
|
240 |
# optimizations as they become available in gcc.
|
241 |
COMPILER_CXXFLAGS=
|
242 |
case %cmsplatf in
|
243 |
*_gcc4[56789]* )
|
244 |
COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS"
|
245 |
F77_MMD="-cpp -MMD"
|
246 |
;;
|
247 |
esac
|
248 |
|
249 |
case %cmsplatf in
|
250 |
*_gcc4[3456789]* )
|
251 |
COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -Werror=type-limits"
|
252 |
;;
|
253 |
esac
|
254 |
|
255 |
# Enable visibility inlines hidden. Should drastically remove
|
256 |
# the amount of symbols due to templates.
|
257 |
# FIXME: not enabled on linux, yet, change the case statement
|
258 |
# to *_gcc4[23456789]* when stable.
|
259 |
case %cmsplatf in
|
260 |
osx* )
|
261 |
COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -fvisibility-inlines-hidden"
|
262 |
;;
|
263 |
esac
|
264 |
|
265 |
export COMPILER_CXXFLAGS
|
266 |
|
267 |
# Handle here platform specific overrides. In case we
|
268 |
# want to tune something for a specific architecture.
|
269 |
case %cmsplatf in
|
270 |
osx10[56]*)
|
271 |
# On macosx we explicitly pick up a compiler version so that there is
|
272 |
# actually matching between the platform specified to cmsBuild and the
|
273 |
# compiler.
|
274 |
export COMPILER_NAME_SUFFIX="-$COMPILER_VERSION_MAJOR.$COMPILER_VERSION_MINOR"
|
275 |
;;
|
276 |
esac
|
277 |
|
278 |
# General substitutions
|
279 |
perl -p -i -e 's|\@([^@]*)\@|$ENV{$1}|g' %i/etc/scram.d/*.xml
|
280 |
perl -p -i -e 's|\@([^@]*)\@|$ENV{$1}|g' %i/etc/disabled/scram.d/*.xml
|
281 |
%post
|
282 |
%{relocateConfig}etc/disabled/scram.d/*.xml
|
283 |
%{relocateConfig}etc/scram.d/*.xml
|
284 |
echo "LLVM_GCC_TOOLFILE_ROOT='$CMS_INSTALL_PREFIX/%{pkgrel}'; export GCC_TOOLFILE_ROOT" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.sh
|
285 |
echo "setenv LLVM_GCC_TOOLFILE_ROOT '$CMS_INSTALL_PREFIX/%{pkgrel}'" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.csh
|