An introductory guide for new FLAME developers

Field G. Van Zee
last updated on 6 October 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.

For a quick description of the contents of major directories, check out my
FLAME repository index.

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!