Docs: refer to illinois.edu, not uiuc.edu
[charm.git] / doc / charm++ / compile.tex
1 The {\tt charmc} program, located in ``charm/bin'', standardizes 
2 compiling and linking procedures
3 among various machines and operating systems.  ``charmc'' is
4 a general-purpose tool for compiling and
5 linking, not only restricted to \charmpp{} programs.
6
7 Charmc can perform the following tasks.  The (simplified) syntax for
8 each of these modes is shown.  Caution: in reality, one almost always
9 has to add some command-line options in addition to the simplified
10 syntax shown below.  The options are described next.
11
12 \begin{alltt}
13  * Compile C                        charmc -o pgm.o pgm.c
14  * Compile C++                      charmc -o pgm.o pgm.C
15  * Link                             charmc -o pgm   obj1.o obj2.o obj3.o...
16  * Compile + Link                   charmc -o pgm   src1.c src2.ci src3.C
17  * Create Library                   charmc -o lib.a obj1.o obj2.o obj3.o...
18  * CPM preprocessing                charmc -gen-cpm file.c
19  * Translate Charm++ Interface File charmc file.ci
20 \end{alltt}
21
22 Charmc automatically figures out where the charm lib and include
23 directories are --- at no point do you have to configure this
24 information.  However, the code that finds the lib and include
25 directories can be confused if you remove charmc from its normal
26 directory, or rearrange the directory tree.  Thus, the files in the
27 \kw{charm/bin}, \kw{charm/include}, and \kw{charm/lib} directories 
28 must be left where they are relative to each other.  
29
30 The following command-line options are available to users of charmc:
31
32 \begin{description}
33
34 \item[{\tt -o} {\em output-file}:]
35
36 Output file name.  Note: charmc only ever produces one output file at
37 a time.  Because of this, you cannot compile multiple source files at
38 once, unless you then link or archive them into a single output-file.
39 If exactly one source-file is specified, then an output file will be
40 selected by default using the obvious rule (eg, if the input file if
41 pgm.c, the output file is pgm.o).  If multiple input files are
42 specified, you must manually specify the name of the output file,
43 which must be a library or executable.
44
45 \item[{\tt -c}:]
46
47 Ignored.  There for compatibility with {\tt cc}.
48
49 \item[{\tt -D{\em symbol}[={\em value}]}:]
50
51 Defines preprocessor variables from the command line at compile time.
52
53 \item[{\tt -I}:]
54
55 Add a directory to the search path for preprocessor include files.
56
57 \item[{\tt -g}:]
58
59 Causes compiled files to include debugging information.
60
61 \item[{\tt -L*}:]
62
63 Add a directory to the search path for libraries selected by
64 the {\tt -l} command.
65
66 \item[{\tt -l*}:]
67
68 Specifies libraries to link in.
69
70 \item[{\tt -module {\em m1}[,{\em m2}[,...]]}]
71 Specifies additional \charmpp{} modules to link in. 
72 Similar to {\tt -l}, but also registers \charmpp{} parallel objects.
73 See the library's documentation for whether to use {\tt -l} or {\tt -module}.
74
75 \item[{\tt -optimize}:]
76
77 Causes files to be compiled with maximum optimization.
78
79 \item[{\tt -no-optimize}:]
80
81 If this follows -O on the command line, it turns optimization back off.
82 This is just a convenience for simple-minded makefiles.
83
84 \item[{\tt -production}:]
85
86 Enable architecture-specific production-mode features. For instance,
87 use available hardware features more aggressively. It's probably a bad
88 idea to build some objects with this, and others without.
89
90 \item[{\tt -s}:]
91
92 Strip the executable of debugging symbols.  Only meaningful when
93 producing an executable.
94
95 \item[{\tt -verbose}:]
96
97 All commands executed by charmc are echoed to stdout.
98
99 \item[{\tt -seq}:]
100
101 Indicates that we're compiling sequential code.  On parallel machines
102 with front ends, this option also means that the code is for the front
103 end.  This option is only valid with C and C++ files.
104
105 \item[{\tt -use-fastest-cc}:]
106
107 Some environments provide more than one C compiler (cc and gcc, for
108 example).  Usually, charmc prefers the less buggy of the two.  This
109 option causes charmc to switch to the most aggressive compiler,
110 regardless of whether it's buggy or not.
111
112 \item[{\tt -use-reliable-cc}:]
113
114 Some environments provide more than one C compiler (cc and gcc, for
115 example).  Usually, charmc prefers the less buggy of the two, but
116 not always.  This option causes charmc to switch to the most reliable
117 compiler, regardless of whether it produces slow code or not.
118
119 \item[{\tt -language \{converse|charm++|sdag|ampi|fem|f90charm\}}:]
120
121 When linking with charmc, one must specify the ``language''.  This
122 is just a way to help charmc include the right libraries.  Pick the
123 ``language'' according to this table:
124
125 \begin{itemize}
126 \item{{\bf Charm++} if your program includes \charmpp{}, C++, and C.}
127 \item{{\bf Converse} if your program includes C or C++.}
128 \item{{\bf sdag} if your program includes structured dagger.}
129 \item{{\bf f90charm} if your program includes f90 Charm interface.}
130 \end{itemize}
131
132 \item[{\tt -balance} {\em seed load-balance-strategy}:]
133
134 When linking any \converse{} program (including any \charmpp{} or sdag program),
135 one must include a seed load-balancing
136 library.  There are currently three to choose from: {\tt rand}, {\tt
137 test}, and {\tt neighbor} are supported.  Default is {\tt -balance rand}.
138
139 When linking with {\tt neighbor} seed load balancer, one can also specify
140 a virtual tolpogy for constructing neighbors during run-time using 
141 {\tt +LBTopo topo}, where {\em topo} can be one of (a) ring, (b) mesh2d,
142 (c) mesh3d and (d) graph. The default is mesh2d.
143
144 \item[{\tt -tracemode} {\em tracing-mode}:]
145
146 Selects the desired degree of tracing for \charmpp{} programs.
147 See the \charmpp{} manual and the \projections{} manuals for
148 more information.  Currently supported modes are {\tt none}, {\tt
149 summary}, and {\tt projections}. Default is {\tt -tracemode none}.
150
151
152 \item[{\tt -memory} {\em memory-mode}:]
153 Selects the implementation of \kw{malloc} and \kw{free}
154 to use.  Select a memory mode from the table below.
155
156 \begin{itemize}
157 \item{{\bf os} Use the operating system's standard memory routines.}
158 \item{{\bf gnu} Use a set of GNU memory routines.}
159 \item{{\bf paranoid} Use an error-checking set of routines.
160 These routines will detect common mistakes such as buffer
161 overruns, underruns, double-deletes, and use-after-delete.
162 The extra checks slow down programs, so this version should
163 not be used in production code.}
164 \item{{\bf verbose} Use a tracing set of memory routines.
165 Every memory-related call results in a line printed to 
166 standard out. This version is useful for detecting memory leaks.}
167 \item{{\bf default} Use the default, which depends on the version of \charmpp.}
168 \end{itemize}
169
170
171 \item[{\tt -c++} {\em C++ compiler}:]
172
173 Forces the specified C++ compiler to be used.
174
175 \item[{\tt -cc} {\em C-compiler}:]
176
177 Forces the specified C compiler to be used.
178
179 \item[{\tt -cp} {\em copy-file}:]
180
181 Creates a copy of the output file in {\em copy-file}.
182
183 \item[{\tt -cpp-option} {\em options}:]
184
185 Options passed to the C pre-processor.
186
187 \item[{\tt -ld} {\em linker}:]
188
189 Use this option only when compiling programs that do not include C++
190 modules.  Forces charmc to use the specified linker.
191
192 \item[{\tt -ld++} {\em linker}:]
193
194 Use this option only when compiling programs that include C++
195 modules.  Forces charmc to use the specified linker.
196
197 \item[{\tt -ld++-option} {\em options}:]
198
199 Options passed to the linker for {\tt -language charm++}.
200
201 \item[{\tt -ld-option} {\em options}:]
202
203 Options passed to the linker for {\tt -language converse}.
204
205 \item[{\tt -ldro-option} {\em options}:]
206
207 Options passes to the linker when linking {\tt .o} files.
208
209
210 \end{description}