blob: a55389a02b5c3a1519a2f7c0feeb458a550b7530 [file] [log] [blame] [view]
Roger Meier5aaa0212010-11-04 12:20:05 +00001Apache Thrift
Roger Meier16fcad02014-03-16 21:12:11 +01002=============
Marc Slemko9de5a5c2006-08-23 22:34:00 +00003
Roger Meier16fcad02014-03-16 21:12:11 +01004Last Modified: 2014-03-16
Marc Slemko9de5a5c2006-08-23 22:34:00 +00005
Bryan Duxburydef30a62009-04-08 00:19:37 +00006License
7=======
8
9Licensed to the Apache Software Foundation (ASF) under one
10or more contributor license agreements. See the NOTICE file
11distributed with this work for additional information
12regarding copyright ownership. The ASF licenses this file
13to you under the Apache License, Version 2.0 (the
14"License"); you may not use this file except in compliance
15with the License. You may obtain a copy of the License at
16
17 http://www.apache.org/licenses/LICENSE-2.0
18
19Unless required by applicable law or agreed to in writing,
20software distributed under the License is distributed on an
21"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
22KIND, either express or implied. See the License for the
23specific language governing permissions and limitations
24under the License.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000025
26Introduction
27============
28
Mark Slee57cc25e2007-02-28 21:43:54 +000029Thrift is a lightweight, language-independent software stack with an
Mark Slee3303f362007-03-05 20:09:37 +000030associated code generation mechanism for RPC. Thrift provides clean
31abstractions for data transport, data serialization, and application
32level processing. The code generation system takes a simple definition
33language as its input and generates code across programming languages that
34uses the abstracted stack to build interoperable RPC clients and servers.
35
Mark Slee227ac2c2007-03-07 05:46:50 +000036Thrift is specifically designed to support non-atomic version changes
37across client and server code.
38
Mark Slee3303f362007-03-05 20:09:37 +000039For more details on Thrift's design and implementation, take a gander at
Roger Meier16fcad02014-03-16 21:12:11 +010040the Thrift whitepaper included in this distribution or at the README.md files
Mark Slee227ac2c2007-03-07 05:46:50 +000041in your particular subdirectory of interest.
Mark Slee3303f362007-03-05 20:09:37 +000042
Roger Meier5aaa0212010-11-04 12:20:05 +000043Hierarchy
Mark Slee3303f362007-03-05 20:09:37 +000044=========
45
46thrift/
47
48 compiler/
Randy Abernethyb92f6362015-08-30 10:56:35 -070049
Mark Slee3303f362007-03-05 20:09:37 +000050 Contains the Thrift compiler, implemented in C++.
51
52 lib/
Randy Abernethyb92f6362015-08-30 10:56:35 -070053
Mark Slee3303f362007-03-05 20:09:37 +000054 Contains the Thrift software library implementation, subdivided by
55 language of implementation.
56
57 cpp/
Jens Geyer0853ab62013-12-17 21:38:44 +010058 go/
Mark Slee3303f362007-03-05 20:09:37 +000059 java/
60 php/
61 py/
Mark Slee227ac2c2007-03-07 05:46:50 +000062 rb/
Mark Slee3303f362007-03-05 20:09:37 +000063
64 test/
65
66 Contains sample Thrift files and test code across the target programming
67 languages.
68
Mark Slee227ac2c2007-03-07 05:46:50 +000069 tutorial/
70
71 Contains a basic tutorial that will teach you how to develop software
72 using Thrift.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000073
74Requirements
75============
Mark Slee3303f362007-03-05 20:09:37 +000076
Roger Meiere9f00cb2014-05-30 14:35:34 +020077See http://thrift.apache.org/docs/install for an up-to-date list of build requirements.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000078
79Resources
80=========
81
82More information about Thrift can be obtained on the Thrift webpage at:
83
Roger Meier5aaa0212010-11-04 12:20:05 +000084 http://thrift.apache.org
Marc Slemko9de5a5c2006-08-23 22:34:00 +000085
86Acknowledgments
87===============
88
Greg Steinf0d35d22009-01-30 19:10:27 +000089Thrift was inspired by pillar, a lightweight RPC tool written by Adam D'Angelo,
90and also by Google's protocol buffers.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000091
Mark Slee54b7ab92007-03-06 00:06:27 +000092Installation
Marc Slemko9de5a5c2006-08-23 22:34:00 +000093============
94
Mark Slee57cc25e2007-02-28 21:43:54 +000095If you are building from the first time out of the source repository, you will
David Reissb72d19f2007-09-18 19:46:00 +000096need to generate the configure scripts. (This is not necessary if you
97downloaded a tarball.) From the top directory, do:
Marc Slemko9de5a5c2006-08-23 22:34:00 +000098
Roger Meiere9f00cb2014-05-30 14:35:34 +020099 ./bootstrap.sh
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000100
Mark Slee57cc25e2007-02-28 21:43:54 +0000101Once the configure scripts are generated, thrift can be configured.
102From the top directory, do:
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000103
Roger Meiere9f00cb2014-05-30 14:35:34 +0200104 ./configure
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000105
Mark Slee57cc25e2007-02-28 21:43:54 +0000106You may need to specify the location of the boost files explicitly.
Mark Slee3303f362007-03-05 20:09:37 +0000107If you installed boost in /usr/local, you would run configure as follows:
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000108
Roger Meiere9f00cb2014-05-30 14:35:34 +0200109 ./configure --with-boost=/usr/local
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000110
Mark Slee3303f362007-03-05 20:09:37 +0000111Note that by default the thrift C++ library is typically built with debugging
112symbols included. If you want to customize these options you should use the
113CXXFLAGS option in configure, as such:
Mark Slee29050782006-09-29 00:12:30 +0000114
Roger Meiere9f00cb2014-05-30 14:35:34 +0200115 ./configure CXXFLAGS='-g -O2'
116 ./configure CFLAGS='-g -O2'
117 ./configure CPPFLAGS='-DDEBUG_MY_FEATURE'
118
119To enable gcov required options -fprofile-arcs -ftest-coverage enable them:
120
121 ./configure --enable-coverage
Mark Slee29050782006-09-29 00:12:30 +0000122
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000123Run ./configure --help to see other configuration options
124
David Reissaea19c92007-08-29 23:17:32 +0000125Please be aware that the Python library will ignore the --prefix option
126and just install wherever Python's distutils puts it (usually along
David Reissd6832192007-09-05 00:47:32 +0000127the lines of /usr/lib/pythonX.Y/site-packages/). If you need to control
128where the Python modules are installed, set the PY_PREFIX variable.
129(DESTDIR is respected for Python and C++.)
David Reissaea19c92007-08-29 23:17:32 +0000130
Mark Slee227ac2c2007-03-07 05:46:50 +0000131Make thrift:
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000132
133 make
134
135From the top directory, become superuser and do:
136
137 make install
Mark Slee54b7ab92007-03-06 00:06:27 +0000138
Mark Slee227ac2c2007-03-07 05:46:50 +0000139Note that some language packages must be installed manually using build tools
140better suited to those languages (at the time of this writing, this applies
141to Java, Ruby, PHP).
142
Roger Meier16fcad02014-03-16 21:12:11 +0100143Look for the README.md file in the lib/<language>/ folder for more details on the
Mark Slee54b7ab92007-03-06 00:06:27 +0000144installation of each language library package.
Carl Yeksigiane2c5b2d2013-06-06 07:24:51 -0400145
146Testing
147=======
148
149There are a large number of client library tests that can all be run
150from the top-level directory.
151
152 make -k check
153
154This will make all of the libraries (as necessary), and run through
155the unit tests defined in each of the client libraries. If a single
156language fails, the make check will continue on and provide a synopsis
157at the end.
158
159To run the cross-language test suite, please run:
160
Roger Meier359036a2014-03-05 22:51:18 +0100161 make cross
Carl Yeksigiane2c5b2d2013-06-06 07:24:51 -0400162
163This will run a set of tests that use different language clients and
Jens Geyer0853ab62013-12-17 21:38:44 +0100164servers.