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 python unzip bzip2 default-jdk`
  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 tcl` 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.
