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>.
You also have to follow the directions at
  <http://backports-master.debian.org/Instructions/>.
Then, run `apt-get install subversion git g++-multilib gcc-multilib ruby patch \
    make openjdk-6-jdk lib32event-dev`
  and `apt-get install -t squeeze-backports swig` (package lists correct for
  amd64 Squeeze; you might be able to get it to build on other
  versions/platforms/distributions (Ubuntu, Mint, ...) if you can find the
  right packages.
  You will have to accept the
    "WARNING: The following packages cannot be authenticated!" warning for the
    "libevent-2.0-5 lib32event-2.0-5 libevent-core-2.0-5 lib32event-core-2.0-5 \
      libevent-extra-2.0-5 libevent-pthreads-2.0-5 libevent-openssl-2.0-5 \
      libevent-dev lib32event-extra-2.0-5 lib32event-pthreads-2.0-5 \
      lib32event-openssl-2.0-5 lib32event-dev" packages.

(On 64-bit Ubuntu Precise Pangolin:
`apt-get install subversion git g++-multilib gcc-multilib ruby patch \
    make openjdk-6-jdk default-jdk libevent-dev:i386 libevent-2.0-5:i386`)

Also run `apt-get install powerpc-wrs-vxworks` if you want to be able to build
  the cRIO code too.
  NOTE: This is in *addition* to the above commands.
  You will have to accept the
    "WARNING: The following packages cannot be authenticated!" warning for the
    "powerpc-wrs-vxworks" package.
If you want to actually download code to a robot (it will only work on amd64
  Squeeze), then 
  (1) do `apt-get install ncftp rsync socat`.
      socat is used for the netconsole.sh tool that is used to talk to the cRIO.
  (2) Set the IP address of the downloading machine to be on the same subnet.
      ifconfig eth0 10.9.71.22
      This will need to be redone when the computer Ethernet connection is
      reset.  For example, it is reset by disconnecting and reconnecting 
      the Ethernet cable or power cycling the robot.  Check it with
      ifconfig eth0

[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 `./build.sh` from src/frc971/atom_code/ and src/frc971/crio/.
Use `./build.sh deploy` to download to a robot.

[Communicating with the cRIO]
Use netconsole.sh to communicate directly with the cRIO.  
frc971/2013/trunk/src/aos/crio/bin/netconsole.sh 
Use "reboot" from within netconsole.sh will reboot the cRIO.  ^C will
stop it the netconsole.sh command.  "version" will tell you the the
VxWorks and WIND versions and "help" will give you a list of VxWorks
commands that you can use.
