1 | <HTML> |
---|
2 | <TITLE> |
---|
3 | </TITLE> |
---|
4 | |
---|
5 | <BODY> |
---|
6 | <TABLE WIDTH="100%"><TR> |
---|
7 | <TD> |
---|
8 | |
---|
9 | |
---|
10 | <A HREF="index.html"> |
---|
11 | <IMG SRC="../../../../resources/html/IconsGIF/Contents.gif" ALT="Contents"></A> |
---|
12 | <A> |
---|
13 | <IMG SRC="../../../../resources/html/IconsGIF/PreviousGR.gif" ALT="Previous"></A> |
---|
14 | <A HREF="histogramming.html"> |
---|
15 | <IMG SRC="../../../../resources/html/IconsGIF/Next.gif" ALT="Next"></A> |
---|
16 | </TD> |
---|
17 | <TD ALIGN="Right"> |
---|
18 | <FONT SIZE="-1" COLOR="#238E23"> |
---|
19 | <B>Geant4 User's Guide</B> |
---|
20 | <BR> |
---|
21 | <B>For Application Developers</B> |
---|
22 | <BR> |
---|
23 | <B>Appendix</B> |
---|
24 | </FONT> |
---|
25 | </TD> |
---|
26 | </TR></TABLE> |
---|
27 | <BR><BR> |
---|
28 | |
---|
29 | <P ALIGN="Center"> |
---|
30 | <FONT SIZE="+3" COLOR="#238E23"> |
---|
31 | <A name="10.1"> |
---|
32 | <B>10.1 Tips for Program Compilation</B></A> |
---|
33 | </FONT> |
---|
34 | <BR><BR> |
---|
35 | |
---|
36 | <HR ALIGN="Center" SIZE="7%"> |
---|
37 | <BR><BR> |
---|
38 | |
---|
39 | <!-- ============================================== Section --> |
---|
40 | |
---|
41 | This section is dedicated to illustrate and justify some of the options |
---|
42 | used and fixed by default in the compilation of the Geant4 toolkit. It |
---|
43 | is also meant to be a simple guide for the user/installer to avoid or |
---|
44 | overcome problems which may occur on some compilers. Solutions proposed |
---|
45 | here are based on the experience gained while porting the Geant4 code |
---|
46 | to different architectures/compilers and are specific to the OS's and |
---|
47 | compiler's version valid at the current time of writing of this manual. |
---|
48 | <P> |
---|
49 | It's well known that each compiler adopts its own internal techniques |
---|
50 | to produce the object code, which in the end might be more or less |
---|
51 | perfomant and more or less optimised, depending on several factors also |
---|
52 | related to the system architecture which it applies to. A peculiarity |
---|
53 | of C++ compilers nowadays is the way templated instances are treated |
---|
54 | during the compilation/linkage process. Some C++ compilers need to |
---|
55 | store temporarily template instantiation files (object files or |
---|
56 | temporary source code files) in a "template repository" or directory |
---|
57 | that can be specified as unique or not directly from the compilation |
---|
58 | command (probably historically coming from the old cfront-based |
---|
59 | implementation of the C++ compiler). |
---|
60 | <P> |
---|
61 | After the installation of the libraries, we strongly suggest to always |
---|
62 | distinguish between the installation directory (identified by $G4INSTALL) |
---|
63 | and the working directory (identified by $G4WORKDIR), in order not to |
---|
64 | alter the installation area for the template repository. |
---|
65 | <P> |
---|
66 | In Geant4, the path to the template repository (for those compilers which |
---|
67 | make use of it) is specified by the environment variable $G4TREP, which |
---|
68 | is fixed and points by default to |
---|
69 | <KBD>$G4WORKDIR/tmp/$G4SYSTEM/g4.ptrepository/</KBD>, where |
---|
70 | <KBD>$G4SYSTEM</KBD> identifies the system-architecture/compiler |
---|
71 | currently used and <KBD>$G4WORKDIR</KBD> is the |
---|
72 | path to the user working directory for Geant4. |
---|
73 | <P> |
---|
74 | A secondary template repository <KBD>$G4TREP/exec</KBD> is created by |
---|
75 | default and |
---|
76 | can be used when building executables to isolate the main repository |
---|
77 | used for building the libraries in case of clashes provoked by |
---|
78 | conflicting class-names. This secondary template repository can be |
---|
79 | activated by defining in the environment (or in the GNUmakefile related |
---|
80 | to the test/example to be built) the flag <KBD>G4EXEC_BUILD</KBD>; |
---|
81 | once activated, the secondary repository will become the read/write one, |
---|
82 | while the primary repository will be considered read-only. |
---|
83 | <P> |
---|
84 | At the current time, only few compilers still make use of a template |
---|
85 | repository. A good recommendation valid in general such compilers is to |
---|
86 | make use of a single template repository (specified by the |
---|
87 | <KBD>$G4TREP</KBD> environment variable) for building all Geant4 libraries; |
---|
88 | then use a secondary template repository (<KBD>$G4TREP/exec</KBD>, together |
---|
89 | with the <KBD>$G4EXEC_BUILD</KBD> flag) |
---|
90 | when building any kind of example or application.<BR> |
---|
91 | It's always good practise to clean-up the secondary template repository |
---|
92 | from time to time. |
---|
93 | |
---|
94 | <HR> |
---|
95 | <A name="10.1.3"> |
---|
96 | <H2>10.1.3 Sun</H2></A> |
---|
97 | <P> |
---|
98 | OS: SunOS<BR> |
---|
99 | Compiler: CC<BR> |
---|
100 | <P> |
---|
101 | The default optimisation level is <KBD>-O2</KBD>.<BR> |
---|
102 | Since version 5.0 of the compiler, native-STL is supported and ISO/ANSI |
---|
103 | compliance is required. |
---|
104 | |
---|
105 | <HR> |
---|
106 | <A name="10.1.4"> |
---|
107 | <H2>10.1.4 Unix/Linux - g++</H2></A> |
---|
108 | <P> |
---|
109 | OS: Linux<BR> |
---|
110 | Compiler: GNU/gcc<BR> |
---|
111 | <P> |
---|
112 | Strict ISO/ANSI compilation is forced (<tt>-ansi -pedantic</tt> compiler flags), also |
---|
113 | code is compiled with high verbosity diagnostics (<tt>-Wall</tt> flag). |
---|
114 | The default optimisation level is <KBD>-O2</KBD>.<BR> |
---|
115 | NOTE:<BR> |
---|
116 | Additional compilation options (<TT>-march=pentium4 -mfpmath=sse</TT>) to adopt |
---|
117 | Pentium4 chip specific floating-point operations on the SSE unit, can be activated |
---|
118 | by uncommenting the relevant part in the <TT>Linux-g++.gmk</TT> configuration script. |
---|
119 | By doing so, it has been verified a greater stability of results, making possible |
---|
120 | reproducibility of exact outputs between debug, non-optimised and optimised runs. |
---|
121 | A little performance improvement (in the order of 2%) can also be achieved in some |
---|
122 | cases. To be considered that binaries built using these chip-specific options will |
---|
123 | NOT be portable cross platforms; generated applications will only run on Pentium4-based |
---|
124 | architectures. |
---|
125 | |
---|
126 | <HR> |
---|
127 | <A name="10.1.5"> |
---|
128 | <H2>10.1.5 Windows - MS Visual C++</H2></A> |
---|
129 | OS: MS/Windows<BR> |
---|
130 | Compiler: MS-VC++<BR> |
---|
131 | <P> |
---|
132 | Since version .NET 7.0 of the compiler, ISO/ANSI compliance is required.<BR> |
---|
133 | See <A HREF="../../../InstallationGuide/html/PCMachines/pcMachines.html#3.1">section 3.1</A> |
---|
134 | of the Installation Guide for more detailed information.<BR> |
---|
135 | See also <A HREF="buildFile.html">section 10.6</A> for more tips. |
---|
136 | |
---|
137 | <HR> |
---|
138 | <A name="10.1.6"> |
---|
139 | <H2>10.1.6 MacOS-X - g++</H2></A> |
---|
140 | OS: MacOS/Darwin<BR> |
---|
141 | Compiler: GNU/gcc<BR> |
---|
142 | <P> |
---|
143 | The setup adopted for the <TT>g++</TT> compiler on MacOS resembles in |
---|
144 | great part the one for Linux systems.<BR> |
---|
145 | The default optimisation level in this case is <KBD>-O2</KBD>.<BR> |
---|
146 | Dynamic libraries (<TT>.dylib</TT>) are supported as well; once built, in |
---|
147 | order to run the generated application, the user must specify the absolute |
---|
148 | path in the system where they're installed with the <TT>DYLD_LIBRARY_PATH</TT> |
---|
149 | system variable. |
---|
150 | |
---|
151 | <HR> |
---|
152 | <A HREF="../../../../Authors/html/subjectsToAuthors.html"> |
---|
153 | <I>About the authors</I></A> |
---|
154 | |
---|
155 | </BODY> |
---|
156 | </HTML> |
---|