Modern C Compiler, ROOT, Geant
Introduction
So you want a modern C compiler and/or some other tool. As of this writing (2 November 2016) the normal desktop machines have
gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
as the default compiler. This is not recent enough for much of the HEP code ecosystem.
Modern C compilers can be found in a repository called "SFT" which is maintained by CERN, and distributed via something called CVMFS which is installed on stoomboot machines and most of the desktop machines (older ones may not have it). You can check whether you have it with:
ls /cvmfs/sft.cern.ch
if you don't get an error (and it says "lcg") then you're good. What you'll need to do to set up the compiler is:
- figure out what kind of platform you'll be running on
- poke around in SFT to find out what the current release is
- run the setup script
- compile your code and win the Nobel Prize.
Figure out your platform
You'll generally need to compile for a specific platform; go (one of) the machine(s) on which you'll be running your code and type
cat /etc/issue
Today on one of the stoomboot worker nodes, it says
Scientific Linux CERN SLC release 6.8 (Carbon) Kernel \r on an \m
Remember that first line, that tells you the platform, you'll need it shortly.
Poke around in SFT and find the relevant release and compiler
stbc-022:lcg> ls /cvmfs/sft.cern.ch/lcg app dev external LCG85b lcgjenkins mapfile.txt mapfile.txt.05042016 mapfile.txt.16092016 nightlies releases-javier updatemapfile.py contrib etc hepsoft lcgcmake mapfile.ts mapfile.txt.01052016 mapfile.txt.13042016 mapfile.txt.18082016 releases root-training-setup.sh views
Note the LCG85b ... this is generally a listing of the latest full release; when there is a new release, the tag gets updated, so you might see LCG91, LCG93c, etc instead. Whatever it is, this is the latest release (there are many older releases available btw).
You can search for gcc in that LCG85b file, but it's easier to look at the file system. Note the "LCG_85b" at the end of the "ls" command ... change this to whatever you find the most recent release to be!
stbc-022:LCG_85b> cd /cvmfs/sft.cern.ch/lcg/releases/LCG_85b stbc-022:LCG_85b> ls 4suite curl GSL jupyter_console m4 oracle pylint root_numpy urllib3 AIDA cx_oracle gtest jupyter_core MarkupSafe pacparser pyminuit rootpy uuid astroid cycler hepdata_converter lapack matplotlib pandas pyparsing rpy2 valgrind autoconf Davix hepdata_validator LCGCMT MCGenerators pathlib2 pyqt scikitlearn vdt automake decorator HepMC lcgenv messaging pathos pyqt5 scipy vectorclass backports distribute hepmc3 LCG_externals_x86_64-centos7-gcc49-dbg.txt metakernel pcre pytest setuptools wcwidth blas doxygen HepPDT LCG_externals_x86_64-centos7-gcc49-opt.txt mistune pexpect Python simplegeneric wheel Boost eigen igprof LCG_externals_x86_64-slc6-gcc49-dbg.txt mock pickleshare python_dateutil singledispatch widgetsnbextension castor elasticsearch ipykernel LCG_externals_x86_64-slc6-gcc49-opt.txt mpich2 pip pytimber sip xapian ccache entrypoints ipython LCG_generators_x86_64-centos7-gcc49-dbg.txt multiprocessing pkg_config pytools six XercesC certifi expat ipython_genutils LCG_generators_x86_64-centos7-gcc49-opt.txt mysql prettytable pytz soqt xqilla clhep fastjet ipywidgets LCG_generators_x86_64-slc6-gcc49-dbg.txt mysql_python processing pyxml spark xrootd CMake fftw3 java LCG_generators_x86_64-slc6-gcc49-opt.txt nbconvert prompt_toolkit pyyaml sqlalchemy xrootd_python cmaketools fjcontrib jemalloc lcov nbformat ptyprocess pyzmq sqlite yamlcpp cmmnbuild freetype Jinja2 lhapdfsets networkx py QMtest stomppy zeromq cmt frontier_client joblib libaio neurobayes py2neo qt storm zlib coin3d gcc jpype libsvm neurobayes_expert py4j qt5 subprocess32 configparser Geant4 json libtool ninja pyanalysis qtconsole swig COOL genshi jsonc libunwind nose pyapigitlab qwt sympy CORAL gmp jsoncpp libxml2 notebook pydot R tbb CouchDB gperftools jsonschema libxslt numexpr pygments RELAX terminado coverage graphviz jupyter logilabcommon numpy pygraphics requests tornado CppUnit Grid jupyter_client lxml openssl pygsi ROOT traitlets
There is a lot of stuff in here that might be interesting to you (eg ROOT). See that gcc is also listed, list that directory to see the options:
stbc-022:LCG_85b> ls gcc 4.9.3 stbc-022:LCG_85b> ls gcc/4.9.3 x86_64-centos7 x86_64-slc6
So gcc 4.9.3 is there, and there are two versions. Now the /etc/issue business above becomes relevant: it said "Scientific Linux CERN SLC release 6.8" which corresponds to the "slc6" version here, so that's the one you want to use in this example.
stbc-022:LCG_85b> ls gcc/4.9.3/x86_64-slc6 bin include lib lib64 libexec setup.csh setup.csh~ setup.sh setup.sh~ share
Run the setup script
You want that setup.sh file ..
source /cvmfs/sft.cern.ch/lcg/releases/LCG_put_release_here/gcc/4.9.3/x86_64-slc6/setup.sh
Note where it says LCG_put_release_here you'll need to put the release version you found (LCG_93c or whatever).
Compile your code
Now you'll have the right stuff in your path, etc to use this version of gcc:
stbc-022:x86_64-slc6> gcc --version gcc (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. stbc-022:x86_64-slc6> g++ --version g++ (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Enjoy that prize. Don't forget to mention the PDP group in your speech.