blob: a0df57dcd35c86dd7be149256f91141833f7668b [file] [log] [blame]
Nicolas Noble6ae8ef12015-01-16 15:03:42 -08001These instructions only cover building grpc C and C++ libraries under
2typical unix systems. If you need more information, please try grpc's
3wiki pages:
nnoble0005b772014-12-10 16:25:34 -08004
Nicolas Noble6ae8ef12015-01-16 15:03:42 -08005 https://github.com/google/grpc/wiki
nnoble0005b772014-12-10 16:25:34 -08006
Nicolas Noble6ae8ef12015-01-16 15:03:42 -08007
8*************************
9* If you are in a hurry *
10*************************
11
Stanley Cheunga79a8962015-08-19 10:43:28 -070012On Linux (Debian):
13
Stanley Cheung581846b2015-09-04 12:04:17 -070014 Note: you will need to add the Debian 'jessie-backports' distribution to your sources
Stanley Cheunga79a8962015-08-19 10:43:28 -070015 file first.
16
17 Add the following line to your `/etc/apt/sources.list` file:
18
Stanley Cheung581846b2015-09-04 12:04:17 -070019 deb http://http.debian.net/debian jessie-backports main
Stanley Cheunga79a8962015-08-19 10:43:28 -070020
Stanley Cheung5329e4b2015-08-19 15:59:59 -070021 Install the gRPC library:
22
23 $ [sudo] apt-get install libgrpc-dev
Stanley Cheunga79a8962015-08-19 10:43:28 -070024
25OR
26
Dan Cirulide3c6542015-02-25 12:50:09 -080027 $ git clone https://github.com/grpc/grpc.git
Dan Ciruli4175d842015-02-25 16:24:22 -080028 $ cd grpc
Dan Cirulide3c6542015-02-25 12:50:09 -080029 $ git submodule update --init
Dan Ciruli4175d842015-02-25 16:24:22 -080030 $ make
Stanley Cheung5329e4b2015-08-19 15:59:59 -070031 $ [sudo] make install
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080032
Nicolas Noblec70752a2015-02-12 17:01:52 -080033You don't need anything else than GNU Make, gcc and autotools. Under a Debian
34or Ubuntu system, this should boil down to the following packages:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080035
Stanley Cheung5329e4b2015-08-19 15:59:59 -070036 $ [sudo] apt-get install build-essential autoconf libtool
Nicolas Noblec70752a2015-02-12 17:01:52 -080037
38Building the python wrapper requires the following:
39
Stanley Cheung5329e4b2015-08-19 15:59:59 -070040 $ [sudo] apt-get install python-all-dev python-virtualenv
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080041
Nicolas "Pixel" Noble522d7122015-02-19 01:28:02 +010042If you want to install in a different directory than the default /usr/lib, you can
43override it on the command line:
44
Stanley Cheung5329e4b2015-08-19 15:59:59 -070045 $ [sudo] make install prefix=/opt
Nicolas "Pixel" Noble522d7122015-02-19 01:28:02 +010046
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080047
48*******************************
49* More detailled instructions *
50*******************************
51
52Setting up dependencies
53=======================
54
55Dependencies to compile the libraries
56-------------------------------------
57
58grpc libraries have few external dependencies. If you need to compile and
59install them, they are present in the third_party directory if you have
60cloned the github repository recursively. If you didn't clone recursively,
61you can still get them later by running the following command:
62
63 $ git submodule update --init
nnoble0005b772014-12-10 16:25:34 -080064
nnoble69ac39f2014-12-12 15:43:38 -080065Note that the Makefile makes it much easier for you to compile from sources
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080066if you were to clone recursively our git repository: it will automatically
67compile zlib and OpenSSL, which are core requirements for grpc. Note this
68creates grpc libraries that will have zlib and OpenSSL built-in inside of them,
69which significantly increases the libraries' size.
70
71In order to decrease that size, you can manually install zlib and OpenSSL on
72your system, so that the Makefile can use them instead.
73
74Under a Debian or Ubuntu system, one can acquire the development package
75for zlib this way:
76
77 # apt-get install zlib1g-dev
78
79To the best of our knowledge, no distribution has an OpenSSL package that
80supports ALPN yet, so you would still have to depend on installing from source
81for that particular dependency if you want to reduce the libraries' size.
82
83The recommended version of OpenSSL that provides ALPN support is available
84at this URL:
85
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +010086 https://www.openssl.org/source/openssl-1.0.2.tar.gz
nnoble69ac39f2014-12-12 15:43:38 -080087
nnoble0005b772014-12-10 16:25:34 -080088
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080089Dependencies to compile and run the tests
90-----------------------------------------
nnoble0005b772014-12-10 16:25:34 -080091
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080092Compiling and running grpc plain-C tests dont't require any more dependency.
nnoble0005b772014-12-10 16:25:34 -080093
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080094
95Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and
Nicolas Noblec70752a2015-02-12 17:01:52 -080096gflags. Although gflags is provided in third_party, you will need to manually
97install that dependency on your system to run these tests.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080098
99Under a Debian or Ubuntu system, you can install the gtests and gflags packages
100using apt-get:
101
102 # apt-get install libgflags-dev libgtest-dev
103
Nicolas Noblec70752a2015-02-12 17:01:52 -0800104However, protobuf 3.0.0 isn't in a debian package yet, but the Makefile will
105automatically try and compile the one present in third_party if you cloned the
106repository recursively, and that it detects your system is lacking it.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800107
108Compiling and installing protobuf 3.0.0 requires a few more dependencies in
Nicolas Noblec70752a2015-02-12 17:01:52 -0800109itself, notably the autoconf suite. If you have apt-get, you can install
110these dependencies this way:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800111
Nicolas Noblec70752a2015-02-12 17:01:52 -0800112 # apt-get install autoconf libtool
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800113
Nicolas "Pixel" Nobled66cba22015-02-14 02:59:12 +0100114If you want to run the tests using one of the sanitized configurations, you
115will need clang and its instrumented libc++:
116
117 # apt-get install clang libc++-dev
118
vjpai7cc2c302015-02-18 12:33:37 -0800119Mac-specific notes:
120-------------------
121
122For a Mac system, git is not available by default. You will first need to
123install Xcode from the Mac AppStore and then run the following command from a
124terminal:
125
126 $ sudo xcode-select --install
127
128You should also install "port" following the instructions at
129https://www.macports.org . This will reside in /opt/local/bin/port for
130most Mac installations. Do the "git submodule" command listed above.
131
132Then execute the following for all the needed build dependencies
133
134 $ sudo /opt/local/bin/port install autoconf automake libtool gflags cmake
Jorge Canizales123e5d82015-07-22 21:11:41 -0700135 $ mkdir ~/gtest-svn
vjpai7cc2c302015-02-18 12:33:37 -0800136 $ svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
137 $ mkdir mybuild
138 $ cd mybuild
139 $ cmake ../gtest-svn
140 $ make
141 $ make gtest.a gtest_main.a
142 $ sudo cp libgtest.a libgtest_main.a /opt/local/lib
143 $ sudo mkdir /opt/local/include/gtest
144 $ sudo cp -pr ../gtest-svn/include/gtest /opt/local/include/gtest
145
146We will also need to make openssl and install it appropriately
147
148 $ cd <git directory>
149 $ cd third_party/openssl
vjpai37b9ec12015-08-10 10:02:09 -0700150 $ ./config
vjpai7cc2c302015-02-18 12:33:37 -0800151 $ sudo make install
152 $ cd ../../
153
154If you are going to make changes and need to regenerate the projects file,
155you will need to install certain modules for python.
156
157 $ sudo easy_install simplejson mako
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800158
Nicolas "Pixel" Noble5fc1adf2015-05-10 22:20:31 +0200159Mingw-specific notes:
160---------------------
161
162While gRPC compiles properly under mingw, some more preparation work is needed.
163The recommendation is to use msys2. The installation instructions are available
164at that address: http://msys2.github.io/
165
166Once this is installed, make sure you are using the following: MinGW-w64 Win64.
167You'll be required to install a few more packages:
168
169 $ pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-zlib autoconf automake libtool
170
171Please also install OpenSSL from that website:
172
173 http://slproweb.com/products/Win32OpenSSL.html
174
175The package Win64 OpenSSL v1.0.2a should do. At that point you should be able
176to compile gRPC with the following:
177
178 $ export LDFLAGS="-L/mingw64/lib -L/c/OpenSSL-Win64"
179 $ export CPPFLAGS="-I/mingw64/include -I/c/OpenSSL-Win64/include"
180 $ make
181
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800182A word on OpenSSL
183-----------------
nnoble0005b772014-12-10 16:25:34 -0800184
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800185Secure HTTP2 requires the TLS extension ALPN (see rfc 7301 and
nnoble0005b772014-12-10 16:25:34 -0800186http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +0100187relies on OpenSSL's implementation. OpenSSL 1.0.2 is the first released version
nnoble0005b772014-12-10 16:25:34 -0800188of OpenSSL that has ALPN support, and this explains our dependency on it.
189
nnoble69ac39f2014-12-12 15:43:38 -0800190Note that the Makefile supports compiling only the unsecure elements of grpc,
191and if you do not have OpenSSL and do not want it, you can still proceed
Abhishek Kumar6749e732015-02-10 10:59:52 -0800192with installing only the elements you require. However, we strongly recommend
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800193the use of encryption for all network traffic, and discourage the use of grpc
194without TLS.
nnoble69ac39f2014-12-12 15:43:38 -0800195
nnoble0005b772014-12-10 16:25:34 -0800196
197Compiling
198=========
199
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800200If you have all the dependencies mentioned above, you should simply be able
201to go ahead and run "make" to compile grpc's C and C++ libraries:
nnoble0005b772014-12-10 16:25:34 -0800202
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800203 $ make
nnoble0005b772014-12-10 16:25:34 -0800204
205
206Testing
207=======
208
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800209To build and run the tests, you can run the command:
nnoble0005b772014-12-10 16:25:34 -0800210
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800211 $ make test
212
213If you want to be able to run them in parallel, and get better output, you can
214also use the python tool we have written:
215
216 $ ./tools/run_tests/run_tests.py
nnoble0005b772014-12-10 16:25:34 -0800217
218
219Installing
220==========
221
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800222Once everything is compiled, you should be able to install grpc C and C++
nnoble0005b772014-12-10 16:25:34 -0800223libraries and headers:
224
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800225 # make install