\section{\charmpp{} and \converse{} Internals}

\subsubsection{How is the Charm++ source code organized and built?}

All the Charm++ core source code is soft-linked into the
{\tt charm/<archname>/tmp}
directory when you run the build script. The libraries and frameworks are
under {\tt charm/<archname>/tmp/libs}, in either {\tt ck-libs} or
{\tt conv-libs}.

\subsubsection{I just changed the Charm++ core. How do I recompile Charm++?}

cd into the {\tt charm/<archname>/tmp} directory and make. If you want to
compile only a subset of the entire set of libraries, you can specify it to
make. For example, to compile only the Charm++ RTS, type {\em make charm++}.

\subsubsection{Do we have a {\em \#define charm\_version} somewhere? If not,
which version number should I use for the current version?}

<br>Yes, there is a Charm++ version number defined in macro<tt>CHARM\_VERSION</tt>.


%<li>
%<b>How do you use </b><tt>UsrToEnv</tt><b>? The compiler complains
%</b><tt>implicit
%declaration of function</tt><b>. If I include </b><tt>envelope.h</tt><b>
%it gives several weird errors.</b></li>

%<br>To use <tt>UsrToEnv</tt>, include
%<tt>envelope.h</tt>.
%<tt>envelope.h</tt>
%is to be used for C++ programs only. And since it uses Converse functions,
%one needs to include
%<tt>converse.h</tt> before
%<tt>envelope.h</tt> as
%well.

%<li>
%<b>How can one determine if two messages are identical or not? We get the
%size of the message and compare from start to end. The problem is that
%one particular field is expected to be different and envelopes may be different.
%So we want to compare the messages excluding the envelope and some particular
%fields of the message.</b></li>

%<br>You can use EnvToUsr(env) to get the message pointer after the envelope,
%then use memcmp on the parts of the message you want to match.</ol>
