blob: add5cdbe5202b3b2583a8af61b4db56486c04d62 [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/
49 Contains the Thrift compiler, implemented in C++.
50
51 lib/
52 Contains the Thrift software library implementation, subdivided by
53 language of implementation.
54
55 cpp/
Jens Geyer0853ab62013-12-17 21:38:44 +010056 go/
Mark Slee3303f362007-03-05 20:09:37 +000057 java/
58 php/
59 py/
Mark Slee227ac2c2007-03-07 05:46:50 +000060 rb/
Mark Slee3303f362007-03-05 20:09:37 +000061
62 test/
63
64 Contains sample Thrift files and test code across the target programming
65 languages.
66
Mark Slee227ac2c2007-03-07 05:46:50 +000067 tutorial/
68
69 Contains a basic tutorial that will teach you how to develop software
70 using Thrift.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000071
72Requirements
73============
Mark Slee3303f362007-03-05 20:09:37 +000074
Roger Meiere9f00cb2014-05-30 14:35:34 +020075See http://thrift.apache.org/docs/install for an up-to-date list of build requirements.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000076
77Resources
78=========
79
80More information about Thrift can be obtained on the Thrift webpage at:
81
Roger Meier5aaa0212010-11-04 12:20:05 +000082 http://thrift.apache.org
Marc Slemko9de5a5c2006-08-23 22:34:00 +000083
84Acknowledgments
85===============
86
Greg Steinf0d35d22009-01-30 19:10:27 +000087Thrift was inspired by pillar, a lightweight RPC tool written by Adam D'Angelo,
88and also by Google's protocol buffers.
Marc Slemko9de5a5c2006-08-23 22:34:00 +000089
Mark Slee54b7ab92007-03-06 00:06:27 +000090Installation
Marc Slemko9de5a5c2006-08-23 22:34:00 +000091============
92
Mark Slee57cc25e2007-02-28 21:43:54 +000093If you are building from the first time out of the source repository, you will
David Reissb72d19f2007-09-18 19:46:00 +000094need to generate the configure scripts. (This is not necessary if you
95downloaded a tarball.) From the top directory, do:
Marc Slemko9de5a5c2006-08-23 22:34:00 +000096
Roger Meiere9f00cb2014-05-30 14:35:34 +020097 ./bootstrap.sh
Marc Slemko9de5a5c2006-08-23 22:34:00 +000098
Mark Slee57cc25e2007-02-28 21:43:54 +000099Once the configure scripts are generated, thrift can be configured.
100From the top directory, do:
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000101
Roger Meiere9f00cb2014-05-30 14:35:34 +0200102 ./configure
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000103
Mark Slee57cc25e2007-02-28 21:43:54 +0000104You may need to specify the location of the boost files explicitly.
Mark Slee3303f362007-03-05 20:09:37 +0000105If you installed boost in /usr/local, you would run configure as follows:
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000106
Roger Meiere9f00cb2014-05-30 14:35:34 +0200107 ./configure --with-boost=/usr/local
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000108
Mark Slee3303f362007-03-05 20:09:37 +0000109Note that by default the thrift C++ library is typically built with debugging
110symbols included. If you want to customize these options you should use the
111CXXFLAGS option in configure, as such:
Mark Slee29050782006-09-29 00:12:30 +0000112
Roger Meiere9f00cb2014-05-30 14:35:34 +0200113 ./configure CXXFLAGS='-g -O2'
114 ./configure CFLAGS='-g -O2'
115 ./configure CPPFLAGS='-DDEBUG_MY_FEATURE'
116
117To enable gcov required options -fprofile-arcs -ftest-coverage enable them:
118
119 ./configure --enable-coverage
Mark Slee29050782006-09-29 00:12:30 +0000120
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000121Run ./configure --help to see other configuration options
122
David Reissaea19c92007-08-29 23:17:32 +0000123Please be aware that the Python library will ignore the --prefix option
124and just install wherever Python's distutils puts it (usually along
David Reissd6832192007-09-05 00:47:32 +0000125the lines of /usr/lib/pythonX.Y/site-packages/). If you need to control
126where the Python modules are installed, set the PY_PREFIX variable.
127(DESTDIR is respected for Python and C++.)
David Reissaea19c92007-08-29 23:17:32 +0000128
Mark Slee227ac2c2007-03-07 05:46:50 +0000129Make thrift:
Marc Slemko9de5a5c2006-08-23 22:34:00 +0000130
131 make
132
133From the top directory, become superuser and do:
134
135 make install
Mark Slee54b7ab92007-03-06 00:06:27 +0000136
Mark Slee227ac2c2007-03-07 05:46:50 +0000137Note that some language packages must be installed manually using build tools
138better suited to those languages (at the time of this writing, this applies
139to Java, Ruby, PHP).
140
Roger Meier16fcad02014-03-16 21:12:11 +0100141Look for the README.md file in the lib/<language>/ folder for more details on the
Mark Slee54b7ab92007-03-06 00:06:27 +0000142installation of each language library package.
Carl Yeksigiane2c5b2d2013-06-06 07:24:51 -0400143
144Testing
145=======
146
147There are a large number of client library tests that can all be run
148from the top-level directory.
149
150 make -k check
151
152This will make all of the libraries (as necessary), and run through
153the unit tests defined in each of the client libraries. If a single
154language fails, the make check will continue on and provide a synopsis
155at the end.
156
157To run the cross-language test suite, please run:
158
Roger Meier359036a2014-03-05 22:51:18 +0100159 make cross
Carl Yeksigiane2c5b2d2013-06-06 07:24:51 -0400160
161This will run a set of tests that use different language clients and
Jens Geyer0853ab62013-12-17 21:38:44 +0100162servers.