Revision: | 1.74 |
Committed: | Thu Dec 6 06:36:51 2012 UTC (12 years, 4 months ago) by davidlt |
Branch: | MAIN |
CVS Tags: | cmsbuild_20130311_1500-61X-osx107, cmsbuild_20130311_1424-61X-osx108-gcc472, cmsbuild_20130327-61X-slc6, cmsbuild_20130405_1715-61X-gcc472, dmendezlForCMSSW_6_1_2_SLHC1-slc5_amd64_gcc472, CMSSW_6_1_2_SLHC1-slc5_amd64_gcc472, CMSSW_6_1_2_SLHC1, davidltForCMSSW_6_1_2_SLHC1-slc5_amd64_gcc472, eulisseForCMSSW_6_1_2-slc6_amd64_gcc472, dmendezlForCMSSW_6_1_2-slc6_amd64_gcc472, dm20130327-61X-slc6, dgmlForCMSSW_6_1_2-osx107_amd64_gcc472, dgmlForCMSSW_6_1_2-osx108_amd64_gcc472, CMSSW_6_1_2, ForCMSSW_6_1_2-slc6_amd64_gcc472, dgmlForCMSSW_6_1_2-slc5_amd64_gcc472, dmendezl_20130312_1520-slc6, dmendezl_20130311_1500-61X-osx107, dmendezl_20130311_1424-61X-osx108-gcc472, eulisse_20130311_0939-61X, geForCMSSW_6_1_2-slc5_amd64_gcc472, eulisse_20130405_1715-61X-gcc472, eulisse_20130304_1715-61X-osx107, eulisse_20130304_1715-61X-osx108-gcc472, eulisse_20130304_1714_61X-slc6, CMSSW_6_1_1-osx108_amd64_gcc472, CMSSW_6_1_1-osx107_amd64_gcc472, daForCMSSW_6_1_1-osx108_amd64_gcc472, daForCMSSW_6_1_1-osx107_amd64_gcc472, CMSSW_6_1_1_SLHCphase2tk1-slc5_amd64_gcc472, CMSSW_6_1_1_SLHCphase2tk1, daForCMSSW_6_1_1_SLHCphase2tk1-slc5_amd64_gcc472, CMSSW_6_1_1_SLHCphase1tk1-slc5_amd64_gcc472, CMSSW_6_1_1_SLHCphase1tk1, daForCMSSW_6_1_1_SLHCphase1tk1-slc5_amd64_gcc472, davidlt_20130225_1102-62X-next, davidlt_20130225_1025-62X, davidlt_20130222_1635-62X-next, davidlt_20130222_1633-62X, davidlt_20130220_1737-62X-next, davidlt_20130220_1735-62X, daForCMSSW_6_2_0_pre2-osx107_amd64_gcc472, daForCMSSW_6_2_0_pre2-osx108_amd64_gcc472, ForCMSSW_6_2_0_pre2-slc6_amd64_gcc472, CMS_CONDWEB_DEV, CMS_CONDWEB_0_2, CMSSW_6_2_0_pre2-slc5_amd64_gcc472, CMSSW_6_2_0_pre2, CMS_CONDWEB_0_1, daForCMSSW_6_2_0_pre2-slc5_amd64_gcc472, CMSSW_6_1_1-slc5_amd64_gcc472, CMSSW_6_1_1, daForCMSSW_6_1_1-slc5_amd64_gcc472, davidlt_20130212_1424-62X-next, davidlt_20130212_1424-62X, davidlt_20130212_1020-62X-next, davidlt_20130212_1001-62X, daForCMSSW_6_1_0_SLHC-slc5_amd64_gcc472, davidlt_20130209_1053-61X-osx107-gcc472, davidlt_20130209_1051-61X-osx108-gcc472, davidlt_20130209_1109-61X-slc6-gcc472, davidlt_20130208_1428-62X-next, davidlt_20130208_1427-62X, davidlt_20130207_2033-61X-gcc472, davidlt_20130207_1856-62X, davidlt_20130206_2133-62X-next, davidlt_20130206_2129-62X-osx107-gcc472, davidlt_20130207_1345-62X-osx108-gcc472, davidlt_20130206_2133-62X-gcc472-next, davidlt_20130206_1150-62X-osx107-gcc472, davidlt_20130206_1150-62X-osx108-gcc472, davidlt_20130206_1149-62X-gcc472-next, davidlt_20130206_1149-62X, davidlt_20130206_0923-62X-osx107-gcc472, davidlt_20130206_0922-62X-osx108-gcc472, davidlt_20130206_0922-62X-gcc472-next, davidlt_20130206_0909-62X, davidlt_20130205_2014-62X-osx108-gcc472, davidlt_20130205_1941-62X-osx107-gcc472, davidlt_20130205_1942-62X-gcc472-next, davidlt_20130205_1939-62X, geForCMSSW_6_2_0_pre1-osx108_amd64_gcc472, geForCMSSW_6_2_0_pre1-osx107_amd64_gcc472, CMSSW_6_2_0_pre1, geForCMSSW_6_2_0_pre1-slc5_amd64_gcc472, ForCMSSW_6_1_0-slc6_amd64_gcc472, eulisse_20130128_1430-62X-gcc472-next, eulisse_20130128_1430-62X-slc6-gcc472, eulisse_20130128_1430-62X, eulisse_20130128_1043-62X, davidlt_20130116_1037-62X-osx108-gcc472, davidlt_20130116_1009-62X-osx107-gcc472, davidlt_20130116_1008-62X-slc6-gcc472, davidlt_20130116_1043-62X, cms_adminFor-slc5_amd64_gcc472, eulisse_20130112_1105-62X, eulisse_20130112_0044-62X, eulisse_20130109_2108-62X-gcc472, eulisse_20121231_1245-61X-gcc472, eulisse_20121230_2125-61X-gcc472, CMSSW_6_1_0-osx107, CMSSW_6_1_0-osx108, CMSSW_6_1_0, eulisse_20121217_2120-61X-gcc472, eulisse_20121217_2135-61X-gcc472, eulisse_20121217_2127-61X-slc6-gcc472, eulisse_20121217_2059-61X-osx107-gcc472, eulisse_20121217_1941-61X-osx107-gcc472, eulisse_20121216_1036-61X-gcc472, eulisse_20121214_2046-61X-osx108-gcc472, eulisse_20121214_2022-61X-gcc472, eulisse_20121214_1049-61X-osx107-gcc472, eulisse_20121214_1044-61X-slc6-gcc472, eulisse_20121214_1009-61X-gcc472, eulisse_20121213_2246-61X-osx107-gcc472, eulisse_20121213_2133-61X-slc6-gcc472, eulisse_20121213_1659-61X-gcc472, davidlt_20121212_1833-61X-osx107-gcc472, davidlt_20121212_1832-61X-osx108-gcc472, davidlt_20121212_1831-61X-slc6-gcc472, davidlt_20121212_1831-61X-gcc472, CMSSW_6_1_0_pre8-slc5_amd64_gcc472, CMSSW_6_1_0_pre8, daForCMSSW_6_1_0_pre8-osx108_amd64_gcc472, daForCMSSW_6_1_0_pre8-osx107_amd64_gcc472, daForCMSSW_6_1_0_pre8-slc5_amd64_gcc472, davidlt_20121207_1047-61X-osx107-gcc472, davidlt_20121207_1046-61X-osx108-gcc472, davidlt_20121207_1045-61X-slc6-gcc472, davidlt_20121207_1045-61X-gcc472, davidlt_20121206_0901-61X-osx107-gcc472, davidlt_20121206_1159-61X-osx108-gcc472, davidlt_20121206_0900-61X-slc6-gcc472, davidlt_20121206_0859-61X-gcc472 |
Changes since 1.73: | +1 -1 lines |
Log Message: | Add to CXXFLAGS: -Werror=switch -Werror=conversion-null -Werror=unused-variable |
# | User | Rev | Content |
---|---|---|---|
1 | muzaffar | 1.71 | ### RPM cms gcc-toolfile 12.0 |
2 | eulisse | 1.1 | |
3 | muzaffar | 1.64 | # gcc has a separate spec file for the generating a |
4 | eulisse | 1.1 | # toolfile because gcc.spec could be not build because of the |
5 | # "--use-system-compiler" option. | ||
6 | |||
7 | Source: none | ||
8 | |||
9 | eulisse | 1.60 | %if "%(case %cmsplatf in (osx*_*_gcc421) echo true ;; (*) echo false ;; esac)" == "true" |
10 | elmer | 1.51 | Requires: gfortran-macosx |
11 | %endif | ||
12 | |||
13 | eulisse | 1.1 | %prep |
14 | %build | ||
15 | %install | ||
16 | mkdir -p %i/etc/scram.d | ||
17 | elmer | 1.51 | |
18 | fwyzard | 1.54 | # Determine the GCC_ROOT if "use system compiler" is used. |
19 | eulisse | 1.1 | if [ "X$GCC_ROOT" = X ] |
20 | then | ||
21 | elmer | 1.51 | export GCC_PATH=`which gcc` || exit 1 |
22 | export GCC_ROOT=`echo $GCC_PATH | sed -e 's|/bin/gcc||'` | ||
23 | export GCC_VERSION=`gcc -v 2>&1 | grep "gcc version" | sed 's|[^0-9]*\([0-9].[0-9].[0-9]\).*|\1|'` || exit 1 | ||
24 | fwyzard | 1.54 | export G77_ROOT=$GCC_ROOT |
25 | elmer | 1.51 | else |
26 | export GCC_PATH | ||
27 | export GCC_ROOT | ||
28 | export GCC_VERSION | ||
29 | export G77_ROOT=$GCC_ROOT | ||
30 | eulisse | 1.1 | fi |
31 | |||
32 | eulisse | 1.60 | case %cmsplatf in |
33 | osx*_*_gcc421) | ||
34 | fwyzard | 1.56 | # on Mac OS X, override G77_ROOT with GFORTRAN_MACOSX_ROOT |
35 | export G77_ROOT=$GFORTRAN_MACOSX_ROOT | ||
36 | eulisse | 1.60 | ;; |
37 | osx*) | ||
38 | export G77_ROOT=$GCC_ROOT | ||
39 | ;; | ||
40 | esac | ||
41 | fwyzard | 1.56 | |
42 | eulisse | 1.61 | case %cmsplatf in |
43 | slc*_*_gcc4[012345]*) ;; | ||
44 | *) export ARCH_FFLAGS="-cpp" ;; | ||
45 | esac | ||
46 | |||
47 | elmer | 1.51 | export COMPILER_VERSION=`echo %cmsplatf | sed -e 's|.*gcc\([0-9]*\).*|\1|'` |
48 | export COMPILER_VERSION_MAJOR=`echo %cmsplatf | sed -e 's|.*gcc\([0-9]\).*|\1|'` | ||
49 | export COMPILER_VERSION_MINOR=`echo %cmsplatf | sed -e 's|.*gcc[0-9]\([0-9]\).*|\1|'` | ||
50 | |||
51 | # Generic template for the toolfiles. | ||
52 | # *** USE @VARIABLE@ plus associated environment variable to customize. *** | ||
53 | # DO NOT DUPLICATE the toolfile template. | ||
54 | eulisse | 1.1 | |
55 | muzaffar | 1.71 | cat << \EOF_TOOLFILE >%i/etc/scram.d/gcc-cxxcompiler.xml |
56 | <tool name="gcc-cxxcompiler" version="@GCC_VERSION@" type="compiler"> | ||
57 | muzaffar | 1.22 | <client> |
58 | muzaffar | 1.71 | <environment name="GCC_CXXCOMPILER_BASE" default="@GCC_ROOT@"/> |
59 | <environment name="CXX" value="$GCC_CXXCOMPILER_BASE/bin/c++@COMPILER_NAME_SUFFIX@"/> | ||
60 | muzaffar | 1.22 | </client> |
61 | muzaffar | 1.71 | <flags CPPDEFINES="GNU_GCC _GNU_SOURCE @OS_CPPDEFINES@ @ARCH_CPPDEFINES@ @COMPILER_CPPDEFINES@"/> |
62 | <flags CXXSHAREDOBJECTFLAGS="-fPIC @OS_CXXSHAREDOBJECTFLAGS@ @ARCH_CXXSHAREDOBJECTFLAGS@ @COMPILER_CXXSHAREDOBJECTFLAGS@"/> | ||
63 | davidlt | 1.73 | <flags CXXFLAGS="-O2 -pedantic -pthread -pipe -Wno-vla @OS_CXXFLAGS@ @ARCH_CXXFLAGS@ @COMPILER_CXXFLAGS@"/> |
64 | elmer | 1.51 | <flags CXXFLAGS="-felide-constructors -fmessage-length=0 -ftemplate-depth-300"/> |
65 | davidlt | 1.74 | <flags CXXFLAGS="-Wall -Wno-non-template-friend -Wno-long-long -Wreturn-type -Wunused -Wparentheses -Wno-deprecated -Werror=return-type -Werror=missing-braces -Werror=unused-value -Werror=address -Werror=format -Werror=sign-compare -Werror=write-strings -Werror=delete-non-virtual-dtor -Werror=maybe-uninitialized -Werror=strict-aliasing -Werror=narrowing -Werror=uninitialized -Werror=unused-but-set-variable -Werror=reorder -Werror=unused-variable -Werror=conversion-null -Werror=switch -fdiagnostics-show-option"/> |
66 | muzaffar | 1.71 | <flags LDFLAGS="@OS_LDFLAGS@ @ARCH_LDFLAGS@ @COMPILER_LDFLAGS@"/> |
67 | <flags CXXSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@ @COMPILER_SHAREDFLAGS@"/> | ||
68 | <flags LD_UNIT="@OS_LD_UNIT@ @ARCH_LD_UNIT@ @COMPILER_LD_UNIT@"/> | ||
69 | <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="$GCC_CXXCOMPILER_BASE/@ARCH_LIB64DIR@" type="path"/> | ||
70 | <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="$GCC_CXXCOMPILER_BASE/lib" type="path"/> | ||
71 | <runtime name="PATH" value="$GCC_CXXCOMPILER_BASE/bin" type="path"/> | ||
72 | muzaffar | 1.22 | </tool> |
73 | elmer | 1.7 | EOF_TOOLFILE |
74 | elmer | 1.51 | |
75 | muzaffar | 1.71 | cat << \EOF_TOOLFILE >%i/etc/scram.d/gcc-ccompiler.xml |
76 | <tool name="gcc-ccompiler" version="@GCC_VERSION@" type="compiler"> | ||
77 | muzaffar | 1.22 | <client> |
78 | muzaffar | 1.71 | <environment name="GCC_CCOMPILER_BASE" default="@GCC_ROOT@"/> |
79 | <environment name="CC" value="$GCC_CCOMPILER_BASE/bin/gcc@COMPILER_NAME_SUFFIX@"/> | ||
80 | muzaffar | 1.22 | </client> |
81 | muzaffar | 1.71 | <flags CSHAREDOBJECTFLAGS="-fPIC @OS_CSHAREDOBJECTFLAGS@ @ARCH_CSHAREDOBJECTFLAGS@ @COMPILER_CSHAREDOBJECTFLAGS@"/> |
82 | <flags CFLAGS="-O2 -pthread @OS_CFLAGS@ @ARCH_CFLAGS@ @COMPILER_CFLAGS@"/> | ||
83 | muzaffar | 1.22 | </tool> |
84 | elmer | 1.7 | EOF_TOOLFILE |
85 | elmer | 1.51 | |
86 | # Notice that on OSX we have a LIBDIR defined for f77compiler because gcc C++ | ||
87 | # compiler (which comes from the system) does not know about where to find | ||
88 | # libgfortran. | ||
89 | muzaffar | 1.71 | cat << \EOF_TOOLFILE >%i/etc/scram.d/gcc-f77compiler.xml |
90 | <tool name="gcc-f77compiler" version="@GCC_VERSION@" type="compiler"> | ||
91 | muzaffar | 1.22 | <lib name="gfortran"/> |
92 | <lib name="m"/> | ||
93 | <client> | ||
94 | muzaffar | 1.71 | <environment name="GCC_F77COMPILER_BASE" default="@G77_ROOT@"/> |
95 | <environment name="FC" default="$GCC_F77COMPILER_BASE/bin/gfortran"/> | ||
96 | elmer | 1.51 | @ARCH_FORTRAN_LIBDIR@ |
97 | muzaffar | 1.22 | </client> |
98 | muzaffar | 1.71 | <flags FFLAGS="-fno-second-underscore -Wunused -Wuninitialized -O2 @OS_FFLAGS@ @ARCH_FFLAGS@ @COMPILER_FFLAGS@"/> |
99 | <flags FOPTIMISEDFLAGS="-O2 @OS_FOPTIMISEDFLAGS@ @ARCH_FOPTIMISEDFLAGS@ @COMPILER_FOPTIMISEDFLAGS@"/> | ||
100 | <flags FSHAREDOBJECTFLAGS="-fPIC @OS_FSHAREDOBJECTFLAGS@ @ARCH_FSHAREDOBJECTFLAGS@ @COMPILER_FSHAREDOBJECTFLAGS@"/> | ||
101 | fwyzard | 1.50 | </tool> |
102 | EOF_TOOLFILE | ||
103 | elmer | 1.51 | |
104 | # NON-empty defaults | ||
105 | # First of all handle OS specific options. | ||
106 | case %cmsplatf in | ||
107 | slc* ) | ||
108 | export OS_SHAREDFLAGS="-shared -Wl,-E" | ||
109 | export OS_LDFLAGS="-Wl,-E -Wl,--hash-style=gnu" | ||
110 | export OS_RUNTIME_LDPATH_NAME="LD_LIBRARY_PATH" | ||
111 | ;; | ||
112 | osx* ) | ||
113 | export OS_SHAREDFLAGS="-shared -dynamic -single_module" | ||
114 | export OS_LDFLAGS="-Wl,-commons -Wl,use_dylibs" | ||
115 | eulisse | 1.67 | export OS_RUNTIME_LDPATH_NAME="DYLD_LIBRARY_PATH" |
116 | elmer | 1.51 | ;; |
117 | eulisse | 1.1 | esac |
118 | |||
119 | elmer | 1.51 | # Then handle OS + architecture specific options (maybe we should enable more |
120 | # aggressive optimizations for amd64 as well??) | ||
121 | elmer | 1.15 | case %cmsplatf in |
122 | eulisse | 1.60 | osx*_amd64_gcc421 ) |
123 | elmer | 1.51 | export ARCH_CXXFLAGS="-arch x86_64" |
124 | export ARCH_SHAREDFLAGS="-arch x86_64" | ||
125 | export ARCH_LIB64DIR="lib" | ||
126 | muzaffar | 1.71 | export ARCH_FORTRAN_LIBDIR='<environment name="LIBDIR" default="$GCC_F77COMPILER_BASE/lib/gcc/i686-apple-darwin10/4.2.1/x86_64"/>' |
127 | elmer | 1.15 | ;; |
128 | eulisse | 1.60 | osx*) |
129 | export ARCH_CXXFLAGS="-arch x86_64" | ||
130 | export ARCH_SHAREDFLAGS="-arch x86_64" | ||
131 | elmer | 1.51 | export ARCH_LIB64DIR="lib" |
132 | dsr | 1.24 | ;; |
133 | eulisse | 1.65 | slc*) |
134 | elmer | 1.51 | # For some reason on mac, some of the header do not compile if this is |
135 | # defined. Ignore for now. | ||
136 | export ARCH_CXXFLAGS="-Werror=overflow" | ||
137 | export ARCH_LIB64DIR="lib64" | ||
138 | export ARCH_LD_UNIT="-r -m elf_x86_64" | ||
139 | muzaffar | 1.35 | ;; |
140 | elmer | 1.51 | *) |
141 | echo "Unsupported." | ||
142 | exit 1 | ||
143 | ;; | ||
144 | esac | ||
145 | |||
146 | # Then handle compiler specific options. E.g. enable | ||
147 | # optimizations as they become available in gcc. | ||
148 | COMPILER_CXXFLAGS= | ||
149 | elmer | 1.58 | |
150 | # Set the following for all gcc < 4.6. gcc46 claims it is no longer needed | ||
151 | # This is perhaps the case also for the earlier versions, but leave it | ||
152 | # there for now. | ||
153 | case %cmsplatf in | ||
154 | *_gcc4[2345]* ) | ||
155 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -Wimplicit" | ||
156 | ;; | ||
157 | esac | ||
158 | |||
159 | # The following causes problems for gcc46 and boost 1.45.0 so downgrade it | ||
160 | case %cmsplatf in | ||
161 | *_gcc4[2345]* ) | ||
162 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -Werror=strict-overflow" | ||
163 | ;; | ||
164 | *_gcc4[6789]* ) | ||
165 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -Wstrict-overflow" | ||
166 | ;; | ||
167 | esac | ||
168 | |||
169 | |||
170 | elmer | 1.51 | case %cmsplatf in |
171 | *_gcc4[56789]* ) | ||
172 | davidlt | 1.69 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -std=c++0x -msse3 -ftree-vectorize -Wno-strict-overflow" |
173 | elmer | 1.51 | ;; |
174 | esac | ||
175 | |||
176 | case %cmsplatf in | ||
177 | *_gcc4[3456789]* ) | ||
178 | eulisse | 1.63 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -Werror=array-bounds -Werror=format-contains-nul -Werror=type-limits" |
179 | elmer | 1.51 | ;; |
180 | esac | ||
181 | |||
182 | # Enable visibility inlines hidden. Should drastically remove | ||
183 | # the amount of symbols due to templates. | ||
184 | # FIXME: not enabled on linux, yet, change the case statement | ||
185 | # to *_gcc4[23456789]* when stable. | ||
186 | case %cmsplatf in | ||
187 | osx* ) | ||
188 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -fvisibility-inlines-hidden" | ||
189 | eulisse | 1.45 | ;; |
190 | muzaffar | 1.59 | *_gcc4[56789]* ) |
191 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -fvisibility-inlines-hidden" | ||
192 | ;; | ||
193 | elmer | 1.51 | esac |
194 | |||
195 | eulisse | 1.70 | # More customizations when using gcc 4.7.x |
196 | # See: https://hypernews.cern.ch/HyperNews/CMS/get/edmFramework/2955.html | ||
197 | case %cmsplatf in | ||
198 | *_gcc4[789]*) | ||
199 | COMPILER_CXXFLAGS="$COMPILER_CXXFLAGS -fno-math-errno --param vect-max-version-for-alias-checks=50 -fipa-pta" | ||
200 | ;; | ||
201 | esac | ||
202 | |||
203 | elmer | 1.51 | export COMPILER_CXXFLAGS |
204 | |||
205 | # Handle here platform specific overrides. In case we | ||
206 | # want to tune something for a specific architecture. | ||
207 | case %cmsplatf in | ||
208 | eulisse | 1.60 | osx*_*_gcc421) |
209 | elmer | 1.51 | # On macosx we explicitly pick up a compiler version so that there is |
210 | # actually matching between the platform specified to cmsBuild and the | ||
211 | # compiler. | ||
212 | export COMPILER_NAME_SUFFIX="-$COMPILER_VERSION_MAJOR.$COMPILER_VERSION_MINOR" | ||
213 | dsr | 1.24 | ;; |
214 | elmer | 1.15 | esac |
215 | |||
216 | # General substitutions | ||
217 | elmer | 1.51 | perl -p -i -e 's|\@([^@]*)\@|$ENV{$1}|g' %i/etc/scram.d/*.xml |
218 | |||
219 | eulisse | 1.1 | %post |
220 | muzaffar | 1.52 | %{relocateConfig}etc/scram.d/*.xml |
221 | elmer | 1.51 | echo "GCC_TOOLFILE_ROOT='$CMS_INSTALL_PREFIX/%{pkgrel}'; export GCC_TOOLFILE_ROOT" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.sh |
222 | echo "setenv GCC_TOOLFILE_ROOT '$CMS_INSTALL_PREFIX/%{pkgrel}'" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.csh |