0. Introduction

This readme contains some build instrucions and some notes on the layout
of this directory structure.

1. Build Process

The build process for this project should be straight forward.  Under the
directory ./user there is a file called user_libs.mk.  This file contains
two variables: THREAD_OBJS, SYSCALL_OBJS. Under the dictory ./user/user_tests
there is a file called user_tests.mk This file contains the variable UPROGS.
You should fill in the variables with the object files (e.g. foo.o) for the
associated library or user test programs.  Object files that get built into
your thread library, i.e. those built in the ./user/lib/thread directory,
should go into the THREAD_OBJS variable.  Object files that get built into
your syscall wrapper library, i.e. those build in the ./user/lib/syscall
directory, should go into the SYSCALL_OBJS variable.  User test programs
should be listed in the UPROGS variable similar to how ex_test is listed
there now.

You should only edit the .mk as far as Makefile stuff goes.  This file is
included in the necessary Makefiles which should be all set up to go. Details
on the directory structure can be found below.

2. Directory Structure

./
The only files you should ever even think about editing in the directory are
the Makefile, simics-linux.sh, and update.pl and that is only if you are
working from a non-andrew machine and need to use the ./update.pl web
mechanism.  If you are on a cluster machine, you should not have to edit these.

./lib
You don't need to touch this direcory or its subdirectories.

./user
This is where the fun happens.  You should not have to edit the Makefile here
but should have to edit user_libs.mk to get your libraries to build.

./user/inc
You can but include files here or in ./user/lib/inc.  This is the prefered
place for header files that only have to do with your test cases.

./user/lib
You will find even more fun in here, but shouldn't have to edit any of the
files that are directly in this tree.

./user/lib/inc
This is the prefered place to drop header files for your libraries.  Skeletons
for most of what you should need are provided.

./user/lib/syscall
This is where you should drop the files for your syscall wrappers.  You should
not have to edit this Makefile.

./user/lib/thread
This is where you should drop the file for your thread library, including
mutexes, condition variables, r/w locks, semaphores, and your thread safe
malloc wrapper.  You should not have to edit this Makefile

./user/410_tests
This is where we will stick our tests.  Don't touch this directory.

./user/user_tests
This is where you should put the source files for your tests.  You should not
have to edit the Makefile. You should add your tests to user_tests.mk

./user/temp
This is a directory where some temp files will go during the build process
that makes the ram disk.  You should not have to touch this directory.


