An introductory guide for new
FLAME developers
Field G. Van Zee
last updated on 2 March 2006
We use subversion for
source and version control. It is very much like
CVS, but
without all of the annoyances and brokenness that comes from
its ancestry with the old RCS
system. I have written a quick-reference guide at
http://www.cs.utexas.edu/users/field/svn_qref.html
with links to the subversion
homepage and the official O'Reilly
subversion book (accessible online for free). Please look at the book
sections that I list near the top of my quick reference--they give a good
introduction to using subversion, and source control in general.
The repository is located on
the UTCS filesystem in "~field/repos/flame".
Please look at your ~/.bash_profile
and define the SVN_EDITOR
environment variable
to your choice of editor. This program will be
launched when you commit changes so that you can make log entries for that
revision, so be sure it's an editor you're comfortable with.
Let me take a moment to explain the directory structure that I recommend using
to manage your FLAME code and libraries. All directories below are relative to
$HOME (or ~field if we're referring to my own layout).
| flame | The root directory for FLAME code, libraries, and work products. |
| flame/include | Default location where FLAME headers get copied during installation. |
| flame/lib | Default location where FLAME libraries get copied during installation. Related libraries may also reside here. |
| flame/lib/goto | A place to collect GotoBLAS libraries. |
| flame/lib/blas | Home to the netlib BLAS code (for reference only). |
| flame/lib/lapack | Home to the netlib LAPACK code (for reference only). |
| flame/working | Contains your checked-out working copy of the FLAME repository. |
| flame/export | Contains exported copies of the FLAME repository. |
In general, I recommend you mirror this layout in your own home directory.
You should also populate your flame/lib/goto directory with the libraries
that I keep in the corresponding ~field/flame/lib/goto. (Notice that you do not
need to copy over the contents of flame/export or flame/working. You also do not
need to worry about the libflame* files in flame/lib and the files in
flame/include as fresh versions of these files will be placed there you run
"make install".)
Also, you should create a symbolic link in flame/lib to the actual Goto library
you wish to use. An example of creating this symbolic link is:
$ cd $HOME/flame/lib
$ ln -s goto/libgoto_northwood-32-r0.99-3.so ./libgoto.so
Replace
"libgoto_northwood-32-r0.99-3.so" with the name of the actual library file
appropriate for your architecture.
Now that we have the directory structure in place, let's check out the FLAME
source code. Here's a few steps that will get you up and running:
$ cd $HOME
$ cd flame/working
$ svn checkout svn+ssh://galley.cs.utexas.edu/u/field/repos/flame/trunk
(the checkout will take a few
moments)
$ cd trunk
Notice that you can use any
UTCS host; it doesn't have to be galley.
As you
make changes to your working copy, use 'svn status' to see your local
modifications. When you are happy with your changes, you may commit them with 'svn
commit'. PLEASE TEST YOUR CHANGES BEFORE COMMITTING THEM! To pull in others
users' changes (if there are any), use 'svn update'. With all three of these
commands, your current working directory matters. Specifically, all three of
these commands are recursive by default, and the effects of the commands only
apply to the items in the current directory, and any items found in any
subdirectory of the current directory. So, if you're at the root level of your
checked-out working copy, then these commands apply to your entire working copy,
all the way down to the "leaf" directories. If you're in some subdirectory,
these commands only apply to the corresponding subdirectory.
To see the difference between a file or files with local modifications and the
files as they were when you checked them out, use 'svn diff' or 'svn diff
<file>'.
An 'svn log' (or better yet, 'svn log | less') will show you all commit log
entries relevant to your current location in the source tree. Go to the root
level and use 'svn log' to see all log entries.
That's about it for now. Please do not hesitate to
ask for help if you
have any trouble or questions!