| Roger Meier | 5aaa021 | 2010-11-04 12:20:05 +0000 | [diff] [blame] | 1 | Apache Thrift | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 2 |  | 
| Roger Meier | 5aaa021 | 2010-11-04 12:20:05 +0000 | [diff] [blame] | 3 | Last Modified: 2010-Nov-04 | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 4 |  | 
| Bryan Duxbury | def30a6 | 2009-04-08 00:19:37 +0000 | [diff] [blame] | 5 | License | 
|  | 6 | ======= | 
|  | 7 |  | 
|  | 8 | Licensed to the Apache Software Foundation (ASF) under one | 
|  | 9 | or more contributor license agreements. See the NOTICE file | 
|  | 10 | distributed with this work for additional information | 
|  | 11 | regarding copyright ownership. The ASF licenses this file | 
|  | 12 | to you under the Apache License, Version 2.0 (the | 
|  | 13 | "License"); you may not use this file except in compliance | 
|  | 14 | with the License. You may obtain a copy of the License at | 
|  | 15 |  | 
|  | 16 | http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 17 |  | 
|  | 18 | Unless required by applicable law or agreed to in writing, | 
|  | 19 | software distributed under the License is distributed on an | 
|  | 20 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | 21 | KIND, either express or implied. See the License for the | 
|  | 22 | specific language governing permissions and limitations | 
|  | 23 | under the License. | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 24 |  | 
|  | 25 | Introduction | 
|  | 26 | ============ | 
|  | 27 |  | 
| Mark Slee | 57cc25e | 2007-02-28 21:43:54 +0000 | [diff] [blame] | 28 | Thrift is a lightweight, language-independent software stack with an | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 29 | associated code generation mechanism for RPC. Thrift provides clean | 
|  | 30 | abstractions for data transport, data serialization, and application | 
|  | 31 | level processing. The code generation system takes a simple definition | 
|  | 32 | language as its input and generates code across programming languages that | 
|  | 33 | uses the abstracted stack to build interoperable RPC clients and servers. | 
|  | 34 |  | 
| Mark Slee | 227ac2c | 2007-03-07 05:46:50 +0000 | [diff] [blame] | 35 | Thrift is specifically designed to support non-atomic version changes | 
|  | 36 | across client and server code. | 
|  | 37 |  | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 38 | For more details on Thrift's design and implementation, take a gander at | 
|  | 39 | the Thrift whitepaper included in this distribution or at the README files | 
| Mark Slee | 227ac2c | 2007-03-07 05:46:50 +0000 | [diff] [blame] | 40 | in your particular subdirectory of interest. | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 41 |  | 
| Roger Meier | 5aaa021 | 2010-11-04 12:20:05 +0000 | [diff] [blame] | 42 | Hierarchy | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 43 | ========= | 
|  | 44 |  | 
|  | 45 | thrift/ | 
|  | 46 |  | 
|  | 47 | compiler/ | 
|  | 48 | Contains the Thrift compiler, implemented in C++. | 
|  | 49 |  | 
|  | 50 | lib/ | 
|  | 51 | Contains the Thrift software library implementation, subdivided by | 
|  | 52 | language of implementation. | 
|  | 53 |  | 
|  | 54 | cpp/ | 
|  | 55 | java/ | 
|  | 56 | php/ | 
|  | 57 | py/ | 
| Mark Slee | 227ac2c | 2007-03-07 05:46:50 +0000 | [diff] [blame] | 58 | rb/ | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 59 |  | 
|  | 60 | test/ | 
|  | 61 |  | 
|  | 62 | Contains sample Thrift files and test code across the target programming | 
|  | 63 | languages. | 
|  | 64 |  | 
| Mark Slee | 227ac2c | 2007-03-07 05:46:50 +0000 | [diff] [blame] | 65 | tutorial/ | 
|  | 66 |  | 
|  | 67 | Contains a basic tutorial that will teach you how to develop software | 
|  | 68 | using Thrift. | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 69 |  | 
|  | 70 | Requirements | 
|  | 71 | ============ | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 72 |  | 
| David Reiss | fc30667 | 2009-03-20 07:15:04 +0000 | [diff] [blame] | 73 | See http://wiki.apache.org/thrift/ThriftRequirements for | 
|  | 74 | an up-to-date list of build requirements. | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 75 |  | 
|  | 76 | Resources | 
|  | 77 | ========= | 
|  | 78 |  | 
|  | 79 | More information about Thrift can be obtained on the Thrift webpage at: | 
|  | 80 |  | 
| Roger Meier | 5aaa021 | 2010-11-04 12:20:05 +0000 | [diff] [blame] | 81 | http://thrift.apache.org | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 82 |  | 
|  | 83 | Acknowledgments | 
|  | 84 | =============== | 
|  | 85 |  | 
| Greg Stein | f0d35d2 | 2009-01-30 19:10:27 +0000 | [diff] [blame] | 86 | Thrift was inspired by pillar, a lightweight RPC tool written by Adam D'Angelo, | 
|  | 87 | and also by Google's protocol buffers. | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 88 |  | 
| Mark Slee | 54b7ab9 | 2007-03-06 00:06:27 +0000 | [diff] [blame] | 89 | Installation | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 90 | ============ | 
|  | 91 |  | 
| Mark Slee | 57cc25e | 2007-02-28 21:43:54 +0000 | [diff] [blame] | 92 | If you are building from the first time out of the source repository, you will | 
| David Reiss | b72d19f | 2007-09-18 19:46:00 +0000 | [diff] [blame] | 93 | need to generate the configure scripts.  (This is not necessary if you | 
|  | 94 | downloaded a tarball.)  From the top directory, do: | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 95 |  | 
|  | 96 | ./bootstrap.sh | 
|  | 97 |  | 
| Mark Slee | 57cc25e | 2007-02-28 21:43:54 +0000 | [diff] [blame] | 98 | Once the configure scripts are generated, thrift can be configured. | 
|  | 99 | From the top directory, do: | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 100 |  | 
|  | 101 | ./configure | 
|  | 102 |  | 
| Mark Slee | 57cc25e | 2007-02-28 21:43:54 +0000 | [diff] [blame] | 103 | You may need to specify the location of the boost files explicitly. | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 104 | If you installed boost in /usr/local, you would run configure as follows: | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 105 |  | 
|  | 106 | ./configure --with-boost=/usr/local | 
|  | 107 |  | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 108 | Note that by default the thrift C++ library is typically built with debugging | 
|  | 109 | symbols included. If you want to customize these options you should use the | 
|  | 110 | CXXFLAGS option in configure, as such: | 
| Mark Slee | 2905078 | 2006-09-29 00:12:30 +0000 | [diff] [blame] | 111 |  | 
| Mark Slee | 3303f36 | 2007-03-05 20:09:37 +0000 | [diff] [blame] | 112 | ./configure CXXFLAGS='-g -O2' | 
| Mark Slee | 57cc25e | 2007-02-28 21:43:54 +0000 | [diff] [blame] | 113 | ./configure CFLAGS='-g -O2' | 
| David Reiss | aea19c9 | 2007-08-29 23:17:32 +0000 | [diff] [blame] | 114 | ./configure CPPFLAGS='-DDEBUG_MY_FEATURE' | 
| Mark Slee | 2905078 | 2006-09-29 00:12:30 +0000 | [diff] [blame] | 115 |  | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 116 | Run ./configure --help to see other configuration options | 
|  | 117 |  | 
| David Reiss | aea19c9 | 2007-08-29 23:17:32 +0000 | [diff] [blame] | 118 | Please be aware that the Python library will ignore the --prefix option | 
|  | 119 | and just install wherever Python's distutils puts it (usually along | 
| David Reiss | d683219 | 2007-09-05 00:47:32 +0000 | [diff] [blame] | 120 | the lines of /usr/lib/pythonX.Y/site-packages/).  If you need to control | 
|  | 121 | where the Python modules are installed, set the PY_PREFIX variable. | 
|  | 122 | (DESTDIR is respected for Python and C++.) | 
| David Reiss | aea19c9 | 2007-08-29 23:17:32 +0000 | [diff] [blame] | 123 |  | 
| Mark Slee | 227ac2c | 2007-03-07 05:46:50 +0000 | [diff] [blame] | 124 | Make thrift: | 
| Marc Slemko | 9de5a5c | 2006-08-23 22:34:00 +0000 | [diff] [blame] | 125 |  | 
|  | 126 | make | 
|  | 127 |  | 
|  | 128 | From the top directory, become superuser and do: | 
|  | 129 |  | 
|  | 130 | make install | 
| Mark Slee | 54b7ab9 | 2007-03-06 00:06:27 +0000 | [diff] [blame] | 131 |  | 
| Mark Slee | 227ac2c | 2007-03-07 05:46:50 +0000 | [diff] [blame] | 132 | Note that some language packages must be installed manually using build tools | 
|  | 133 | better suited to those languages (at the time of this writing, this applies | 
|  | 134 | to Java, Ruby, PHP). | 
|  | 135 |  | 
| Mark Slee | 54b7ab9 | 2007-03-06 00:06:27 +0000 | [diff] [blame] | 136 | Look for the README file in the lib/<language>/ folder for more details on the | 
|  | 137 | installation of each language library package. |