This file contains instructions on how to set up a computer to build the code.

[OS]
Most of these instructions assume 64 bit Debian Squeeze.

[Install Packages]
First, you have to download and follow the directions in
  <http://robotics.mvla.net/files/frc971/packages/frc971.list>.
Then, run `apt-get install python3`.
The build script will tell you what other packages to install when you run it.
  It's pretty smart about not checking for things it doesn't need, so you might
  want to build 'deploy all' to see everything it wants.
  You will have to accept the
    "WARNING: The following packages cannot be authenticated!" warning for
    various packages downloaded from our package repository.
  This works for amd64 Wheezy, no guarantees or support for anything else.

[Running Locally]
If you want to be able to run the realtime code on your development machine
  without just disabling the realtime part (set the AOS_NO_REALTIME environment
  variable), follow the directions in /src/aos/config/aos.conf.

[Compiling and Downloading]
Run src/frc971/{atom_code,crio}/build.sh.
  Give it clean, tests, or deploy as a first argument to do something other
    than just build.
  Each action (build (the default), clean, tests, or deploy) has a different
    default set of versions of the code it builds. You can change those by
    passing another argument. Some popular ones are 'all' (build everything),
        'clang-amd64-none' (the most basic one for local testing), and
        'gcc-arm-nodebug' (the one that gets downloaded). See its --help for
        more details.

[Communicating with the cRIO]
Use netconsole (in the amd64 outputs directories) to communicate directly with
  the cRIO.
Use "reboot" from within netconsole.sh will reboot the cRIO.  ^C will
  stop the netconsole program.  "version" will tell you the the
  VxWorks and WIND versions and "help" will give you a list of VxWorks
  commands that you can use.
Make sure your computer is on the right subnet first.
