ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CMSDIST/gcc-toolfile.spec
Revision: 1.33
Committed: Wed Sep 1 08:24:00 2010 UTC (14 years, 8 months ago) by eulisse
Branch: MAIN
Changes since 1.32: +124 -122 lines
Log Message:
Refactoring of the toolfiles.

* There is now only three template toolfiles (cxxcompiler, ccompiler, f77compiler).
  The final toolfiles are obtained by the substitution of some well defined
  variables so that the combinatorial of all platforms is factorized.
  In particular:

  - OS_* variables are for operative system specific flags,
  - ARCH_* variables are for operative system + cpu architecture specific flags.
  - COMPILER_* are for compiler version specific flags.

  If you want to have some extremely customized architecture please add
  specific overrides at the end of the generic ones. Do not duplicate the
  toolfile.

File Contents

# User Rev Content
1 eulisse 1.33 ### RPM cms gcc-toolfile 11.0
2 eulisse 1.1
3     # gcc has a separate spec file for the generating a
4     # toolfile because gcc.spec could be not build because of the
5     # "--use-system-compiler" option.
6    
7     Source: none
8    
9 eulisse 1.33 %if "%(echo %cmsos | grep osx >/dev/null && echo true)" == "true"
10     Requires: gfortran-macosx
11     %endif
12    
13 eulisse 1.1 %prep
14     %build
15     %install
16     mkdir -p %i/etc/scram.d
17 eulisse 1.33
18     # Determine the GCC_ROOT if "use system compiler is used.
19 eulisse 1.1 if [ "X$GCC_ROOT" = X ]
20     then
21 eulisse 1.33 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     export G77_ROOT=$GFORTRAN_MACOSX_ROOT
25     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.33 export COMPILER_VERSION=`echo %cmsplatf | sed -e 's|.*gcc\([0-9]*\).*|\1|'`
33     export COMPILER_VERSION_MAJOR=`echo %cmsplatf | sed -e 's|.*gcc\([0-9]\).*|\1|'`
34     export COMPILER_VERSION_MINOR=`echo %cmsplatf | sed -e 's|.*gcc[0-9]\([0-9]\).*|\1|'`
35    
36     # Generic template for the toolfiles.
37     # *** USE @VARIABLE@ plus associated environment variable to customize. ***
38     # DO NOT DUPLICATE the toolfile template.
39 eulisse 1.1
40 muzaffar 1.22 cat << \EOF_TOOLFILE >%i/etc/scram.d/cxxcompiler.xml
41     <tool name="cxxcompiler" version="@GCC_VERSION@" type="compiler">
42     <client>
43 eulisse 1.33 <environment name="CXXCOMPILER_BASE" default="@GCC_ROOT@"/>
44     <environment name="GCCBINDIR" default="$CXXCOMPILER_BASE/bin"/>
45     <environment name="CXX" value="$GCCBINDIR/c++@COMPILER_NAME_SUFFIX@"/>
46 muzaffar 1.22 </client>
47 eulisse 1.33 <flags SCRAM_COMPILER_NAME="gcc@COMPILER_VERSION@"/>
48     <flags CCCOMPILER="gcc@COMPILER_VERSION_MAJOR@"/>
49     <flags MODULEFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
50     <flags CXXDEBUGFLAG="-g"/>
51     <flags CPPDEFINES="GNU_GCC"/>
52     <flags CPPDEFINES="_GNU_SOURCE"/>
53     <flags CXXSHAREDOBJECTFLAGS="-fPIC"/>
54     <flags CXXFLAGS="-O2 -pedantic -ansi -pthread -pipe"/>
55     <flags CXXFLAGS="@ARCH_CXXFLAGS@ @COMPILER_CXXFLAGS@"/>
56     <flags CXXFLAGS="-felide-constructors -fmessage-length=0 -ftemplate-depth-300"/>
57     <flags CXXFLAGS="-Wall -Wno-non-template-friend -Wno-long-long -Wimplicit -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=strict-overflow -fdiagnostics-show-option"/>
58     <flags LDFLAGS="@OS_LDFLAGS@"/>
59     <flags CXXSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
60     <flags SHAREDSUFFIX="@OS_SHAREDSUFFIX@"/>
61     <flags SCRAM_LANGUAGE_TYPE="C++"/>
62     <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="$GCC_BASE/@OS_LIB64DIR@" type="path"/>
63     <runtime name="@OS_RUNTIME_LDPATH_NAME@" value="$GCC_BASE/lib" type="path"/>
64 muzaffar 1.22 <runtime name="PATH" value="$GCC_BASE/bin" type="path"/>
65     </tool>
66 elmer 1.7 EOF_TOOLFILE
67 eulisse 1.33
68 muzaffar 1.22 cat << \EOF_TOOLFILE >%i/etc/scram.d/ccompiler.xml
69     <tool name="ccompiler" version="@GCC_VERSION@" type="compiler">
70     <client>
71 eulisse 1.33 <environment name="CCOMPILER_BASE" default="@GCC_ROOT@"/>
72     <environment name="GCCBINDIR" value="$CCOMPILER_BASE/bin"/>
73     <environment name="CC" value="$GCCBINDIR/gcc@COMPILER_NAME_SUFFIX@"/>
74 muzaffar 1.22 </client>
75 eulisse 1.33 <flags CDEBUGFLAG="-g"/>
76     <flags CSHAREDOBJECTFLAGS="-fPIC"/>
77     <flags CFLAGS="-pthread"/>
78     <flags CFLAGS="-O2"/>
79     <flags LDFLAGS="@OS_LDFLAGS@"/>
80     <flags CSHAREDFLAGS="@OS_SHAREDFLAGS@ @ARCH_SHAREDFLAGS@"/>
81     <flags SCRAM_COMPILER_NAME="gcc@COMPILER_VERSION@"/>
82     <flags SCRAM_LANGUAGE_TYPE="C"/>
83 muzaffar 1.22 </tool>
84 elmer 1.7 EOF_TOOLFILE
85 eulisse 1.33
86 muzaffar 1.22 cat << \EOF_TOOLFILE >%i/etc/scram.d/f77compiler.xml
87     <tool name="f77compiler" version="@GCC_VERSION@" type="compiler">
88     <lib name="gfortran"/>
89     <lib name="m"/>
90     <client>
91 eulisse 1.33 <environment name="F77COMPILER_BASE" default="@G77_ROOT@"/>
92     <environment name="FC" default="$F77COMPILER_BASE/bin/gfortran"/>
93 muzaffar 1.22 </client>
94 eulisse 1.33 <flags SCRAM_COMPILER_NAME="gcc@COMPILER_VERSION@"/>
95     <flags FFLAGS="-fno-second-underscore -Wunused -Wuninitialized -O2"/>
96     <flags FCO2FLAG="-O2"/>
97     <flags FCOPTIMISED="-O2"/>
98     <flags FCDEBUGFLAG="-g"/>
99     <flags FCSHAREDOBJECTFLAGS="-fPIC"/>
100     <flags SCRAM_LANGUAGE_TYPE="FORTRAN"/>
101 muzaffar 1.22 </tool>
102 elmer 1.7 EOF_TOOLFILE
103 eulisse 1.33
104     # NON-empty defaults
105     export COMPILER_EXEC_NAME="c++"
106    
107     # First of all handle OS specific options.
108     case %cmsplatf in
109     slc* )
110     export OS_SHAREDFLAGS="-Wl,-E"
111     export OS_SHAREDSUFFIX="so"
112     export OS_LIB64DIR="lib64"
113     export OS_LDFLAGS="-Wl,-E -Wl,--hash-style=gnu"
114     export OS_RUNTIME_LDPATH_NAME="LD_LIBRARY_PATH"
115     ;;
116     osx* )
117     export OS_SHAREDFLAGS="-shared -dynamic -single_module"
118     export OS_SHAREDSUFFIX="dylib"
119     export OS_LIB64DIR="lib"
120     export OS_RUNTIME_LDPATH_NAME="DYLD_LIBRARY_PATH"
121     ;;
122 eulisse 1.1 esac
123    
124 eulisse 1.33 # Then handle OS + architecture specific options (maybe we should enable more
125     # aggressive optimizations for amd64 as well??)
126 elmer 1.15 case %cmsplatf in
127 eulisse 1.33 osx*_ia32_* )
128     export ARCH_CXXFLAGS="-arch i386"
129     export ARCH_SHAREDFLAGS="-arch i386"
130     ;;
131     osx*_amd64_* )
132     export ARCH_CXXFLAGS="-arch x86_64"
133     export ARCH_SHAREDFLAGS="-arch x86_64"
134 elmer 1.15 ;;
135 eulisse 1.33 osx*_ppc32_* )
136     export ARCH_CXXFLAGS="-arch ppc"
137     export ARCH_SHAREDFLAGS="-arch ppc"
138 dsr 1.24 ;;
139 eulisse 1.33 slc* )
140     # For some reason on mac, some of the header do not compile if this is
141     # defined. Ignore for now.
142     export ARCH_CXXFLAGS="-Werror=overflow"
143 dsr 1.24 ;;
144 eulisse 1.33 esac
145    
146     # Then handle compiler specific options. E.g. enable
147     # optimizations as they become available in gcc.
148     case %cmsplatf in
149     *_gcc4[56789]* )
150     export COMPILER_CXXFLAGS="-ftree-vectorize"
151     ;;
152     esac
153    
154     case %cmsplatf in
155     *_gcc4[3456789]* )
156     export COMPILER_CXXFLAGS="-Werror=array-bounds -Werror=format-contains-nul"
157     ;;
158     esac
159    
160     # Handle here platform specific overrides. In case we
161     # want to tune something for a specific architecture.
162     case %cmsplatf in
163     osx10[56]*)
164     # On macosx we explicitly pick up a compiler version so that there is
165     # actually matching between the platform specified to cmsBuild and the
166     # compiler.
167     export COMPILER_NAME_SUFFIX="-$COMPILER_VERSION_MAJOR.$COMPILER_VERSION_MINOR"
168 dsr 1.24 ;;
169 elmer 1.15 esac
170    
171     # General substitutions
172 muzaffar 1.30 perl -p -i -e 's|\@([^@]*)\@|$ENV{$1}|g' %i/etc/scram.d/*.xml
173    
174 eulisse 1.1 %post
175 muzaffar 1.32 [ "X$RPM_INSTALL_PREFIX" == "X$CMS_INSTALL_PREFIX" ] || perl -p -i -e "s|$RPM_INSTALL_PREFIX|$CMS_INSTALL_PREFIX|g" $RPM_INSTALL_PREFIX/%{pkgrel}/etc/scram.d/*.xml
176     echo "GCC_TOOLFILE_ROOT='$CMS_INSTALL_PREFIX/%{pkgrel}'; export GCC_TOOLFILE_ROOT" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.sh
177     echo "setenv GCC_TOOLFILE_ROOT '$CMS_INSTALL_PREFIX/%{pkgrel}'" > $RPM_INSTALL_PREFIX/%{pkgrel}/etc/profile.d/init.csh