Thrift (Thrift IDL and RPC tool)

Mark Slee (mcslee@facebook.com)
Marc Kwiatkowski (marc@facebook.com)
Aditya Agarwal (aditya@facebook.com)

Last Modified: 2007-Mar-06

Thrift is distributed under the Thrift open source software license.
Please see the included LICENSE file.

Introduction
============

Thrift is a lightweight, language-independent software stack with an
associated code generation mechanism for RPC. Thrift provides clean
abstractions for data transport, data serialization, and application
level processing. The code generation system takes a simple definition
language as its input and generates code across programming languages that
uses the abstracted stack to build interoperable RPC clients and servers.

Thrift is specifically designed to support non-atomic version changes
across client and server code.

For more details on Thrift's design and implementation, take a gander at
the Thrift whitepaper included in this distribution or at the README files
in your particular subdirectory of interest.

Heirarchy
=========

thrift/

  compiler/
    Contains the Thrift compiler, implemented in C++.

  lib/
    Contains the Thrift software library implementation, subdivided by
    language of implementation.

    cpp/
    java/
    php/
    py/
    rb/

  test/

    Contains sample Thrift files and test code across the target programming
    languages.

  tutorial/

    Contains a basic tutorial that will teach you how to develop software
    using Thrift.

Requirements
============

Thrift requires boost shared pointers from boost-1.33.1 or greater, see:
http://www.boost.org/libs/smart_ptr/smart_ptr.htm

Some portions of Thrift also depend upon libevent, see:
http://monkey.org/~provos/libevent/

These libraries are open source and may be freely obtained, but they are not
provided as a part of this distribution.

Resources
=========

More information about Thrift can be obtained on the Thrift webpage at:

     http://developers.facebook.com/thrift

Acknowledgments
===============

Thrift was inspired by pillar, a lightweight RPC tool written by Adam D'Angelo.

Installation
============

If you are building from the first time out of the source repository, you will
need to generate the configure scripts.  From the top directory, do:

	./bootstrap.sh

Once the configure scripts are generated, thrift can be configured.
From the top directory, do:

	./configure

You may need to specify the location of the boost files explicitly.
If you installed boost in /usr/local, you would run configure as follows:

	./configure --with-boost=/usr/local

Note that by default the thrift C++ library is typically built with debugging
symbols included. If you want to customize these options you should use the
CXXFLAGS option in configure, as such:

        ./configure CXXFLAGS='-g -O2'
        ./configure CFLAGS='-g -O2'
        ./configure CPPFLAGS='-g -O2'

Run ./configure --help to see other configuration options

Make thrift:

	make

From the top directory, become superuser and do:

	make install

Note that some language packages must be installed manually using build tools
better suited to those languages (at the time of this writing, this applies
to Java, Ruby, PHP).

Look for the README file in the lib/<language>/ folder for more details on the
installation of each language library package.
