What is this, exactly?
======================
* An Objective-C interface (src/runtime) for creating and reading protobuf messages.
* Source for Obj-C protobuf compiler (src/compiler), which allows us to compile protobuf source (.proto) into compiled Obj-C source. This is built and installed as protoc-gen-objc.
* A number of .proto files (src/proto) that define the interface we use when interfacing with Dropcam devices and certain services. These are compiled using the compiler.
* A script (compile_proto.sh) which generates the compiled Obj-C source and places it in src/gen_proto.

Prerequisites
=============
* Homebrew, to install the following dependencies. Installing it to ~/homebrew is suggested. See https://wiki.corp.google.com/twiki/bin/view/Main/MacRoadWarrior#Homebrew for more details. No matter where you install it, set HOMEBREW to the root Homebrew directory.
* Protobuf, to compile the Obj-C compiler. Protobuf 2.6.0 is requried and as of this writing, it is the current version provided via Homebrew.
* autoconf, to run the autogen script.

`brew install protobuf`

`brew install autoconf automake libevent`

Generating Compiled Protobuf Source
=====================================
`./compile_proto.sh`

How does it work?
=================
* compile_proto.sh runs build.sh
* build.sh builds protoc-gen-objc, the Obj-C protbuf compiler, and installs it in bin.
* Then, compile_proto.sh runs protoc, the generic protobuf compiler provided by protobuf, using protoc-gen-objc as a plugin. All .proto source in src/proto is compiled into Obj-C, and is output to src/gen_proto.
