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

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

[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 //aos/config/aos.conf.
If you want to run the clang or gcc_4.8 amd64 code, add /opt/clang-3.5/lib64/ to
  LD_LIBRARY_PATH. Using the system gcc-compiled versions should just work.

[Compiling and Downloading]
Run //frc971/*/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_frc-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.
