| Apache Thrift |
| |
| Last Modified: 2013-June-6 |
| |
| License |
| ======= |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| 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. |
| |
| Hierarchy |
| ========= |
| |
| 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 |
| ============ |
| |
| See http://wiki.apache.org/thrift/ThriftRequirements for |
| an up-to-date list of build requirements. |
| |
| Resources |
| ========= |
| |
| More information about Thrift can be obtained on the Thrift webpage at: |
| |
| http://thrift.apache.org |
| |
| Acknowledgments |
| =============== |
| |
| Thrift was inspired by pillar, a lightweight RPC tool written by Adam D'Angelo, |
| and also by Google's protocol buffers. |
| |
| Installation |
| ============ |
| |
| If you are building from the first time out of the source repository, you will |
| need to generate the configure scripts. (This is not necessary if you |
| downloaded a tarball.) 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='-DDEBUG_MY_FEATURE' |
| |
| Run ./configure --help to see other configuration options |
| |
| Please be aware that the Python library will ignore the --prefix option |
| and just install wherever Python's distutils puts it (usually along |
| the lines of /usr/lib/pythonX.Y/site-packages/). If you need to control |
| where the Python modules are installed, set the PY_PREFIX variable. |
| (DESTDIR is respected for Python and C++.) |
| |
| 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. |
| |
| Testing |
| ======= |
| |
| There are a large number of client library tests that can all be run |
| from the top-level directory. |
| |
| make -k check |
| |
| This will make all of the libraries (as necessary), and run through |
| the unit tests defined in each of the client libraries. If a single |
| language fails, the make check will continue on and provide a synopsis |
| at the end. |
| |
| To run the cross-language test suite, please run: |
| |
| sh test/test.sh |
| |
| This will run a set of tests that use different language clients and |
| servers. |