blob: b4a53bbba1bc58ba0d408501a07bca344c090f39 [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
14 Note: you will need to add the Debian 'unstable' distribution to your source
15 file first.
16
17 Add the following line to your `/etc/apt/sources.list` file:
18
19 deb http://ftp.us.debian.org/debian unstable main contrib non-free
20
21 Install the gRPC library
22 $ sudo apt-get install libgrpc-dev
23
24OR
25
Dan Cirulide3c6542015-02-25 12:50:09 -080026 $ git clone https://github.com/grpc/grpc.git
Dan Ciruli4175d842015-02-25 16:24:22 -080027 $ cd grpc
Dan Cirulide3c6542015-02-25 12:50:09 -080028 $ git submodule update --init
Dan Ciruli4175d842015-02-25 16:24:22 -080029 $ make
30 $ sudo make install
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080031
Nicolas Noblec70752a2015-02-12 17:01:52 -080032You don't need anything else than GNU Make, gcc and autotools. Under a Debian
33or Ubuntu system, this should boil down to the following packages:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080034
Stanley Cheungdbeb1cd2015-08-19 08:20:06 -070035 $ apt-get install build-essential autoconf libtool
Nicolas Noblec70752a2015-02-12 17:01:52 -080036
37Building the python wrapper requires the following:
38
Stanley Cheungdbeb1cd2015-08-19 08:20:06 -070039 $ apt-get install python-all-dev python-virtualenv
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080040
Nicolas "Pixel" Noble522d7122015-02-19 01:28:02 +010041If you want to install in a different directory than the default /usr/lib, you can
42override it on the command line:
43
Stanley Cheungdbeb1cd2015-08-19 08:20:06 -070044 $ make install prefix=/opt
Nicolas "Pixel" Noble522d7122015-02-19 01:28:02 +010045
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080046
47*******************************
48* More detailled instructions *
49*******************************
50
51Setting up dependencies
52=======================
53
54Dependencies to compile the libraries
55-------------------------------------
56
57grpc libraries have few external dependencies. If you need to compile and
58install them, they are present in the third_party directory if you have
59cloned the github repository recursively. If you didn't clone recursively,
60you can still get them later by running the following command:
61
62 $ git submodule update --init
nnoble0005b772014-12-10 16:25:34 -080063
nnoble69ac39f2014-12-12 15:43:38 -080064Note that the Makefile makes it much easier for you to compile from sources
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080065if you were to clone recursively our git repository: it will automatically
66compile zlib and OpenSSL, which are core requirements for grpc. Note this
67creates grpc libraries that will have zlib and OpenSSL built-in inside of them,
68which significantly increases the libraries' size.
69
70In order to decrease that size, you can manually install zlib and OpenSSL on
71your system, so that the Makefile can use them instead.
72
73Under a Debian or Ubuntu system, one can acquire the development package
74for zlib this way:
75
76 # apt-get install zlib1g-dev
77
78To the best of our knowledge, no distribution has an OpenSSL package that
79supports ALPN yet, so you would still have to depend on installing from source
80for that particular dependency if you want to reduce the libraries' size.
81
82The recommended version of OpenSSL that provides ALPN support is available
83at this URL:
84
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +010085 https://www.openssl.org/source/openssl-1.0.2.tar.gz
nnoble69ac39f2014-12-12 15:43:38 -080086
nnoble0005b772014-12-10 16:25:34 -080087
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080088Dependencies to compile and run the tests
89-----------------------------------------
nnoble0005b772014-12-10 16:25:34 -080090
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080091Compiling and running grpc plain-C tests dont't require any more dependency.
nnoble0005b772014-12-10 16:25:34 -080092
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080093
94Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and
Nicolas Noblec70752a2015-02-12 17:01:52 -080095gflags. Although gflags is provided in third_party, you will need to manually
96install that dependency on your system to run these tests.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080097
98Under a Debian or Ubuntu system, you can install the gtests and gflags packages
99using apt-get:
100
101 # apt-get install libgflags-dev libgtest-dev
102
Nicolas Noblec70752a2015-02-12 17:01:52 -0800103However, protobuf 3.0.0 isn't in a debian package yet, but the Makefile will
104automatically try and compile the one present in third_party if you cloned the
105repository recursively, and that it detects your system is lacking it.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800106
107Compiling and installing protobuf 3.0.0 requires a few more dependencies in
Nicolas Noblec70752a2015-02-12 17:01:52 -0800108itself, notably the autoconf suite. If you have apt-get, you can install
109these dependencies this way:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800110
Nicolas Noblec70752a2015-02-12 17:01:52 -0800111 # apt-get install autoconf libtool
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800112
Nicolas "Pixel" Nobled66cba22015-02-14 02:59:12 +0100113If you want to run the tests using one of the sanitized configurations, you
114will need clang and its instrumented libc++:
115
116 # apt-get install clang libc++-dev
117
vjpai7cc2c302015-02-18 12:33:37 -0800118Mac-specific notes:
119-------------------
120
121For a Mac system, git is not available by default. You will first need to
122install Xcode from the Mac AppStore and then run the following command from a
123terminal:
124
125 $ sudo xcode-select --install
126
127You should also install "port" following the instructions at
128https://www.macports.org . This will reside in /opt/local/bin/port for
129most Mac installations. Do the "git submodule" command listed above.
130
131Then execute the following for all the needed build dependencies
132
133 $ sudo /opt/local/bin/port install autoconf automake libtool gflags cmake
Jorge Canizales123e5d82015-07-22 21:11:41 -0700134 $ mkdir ~/gtest-svn
vjpai7cc2c302015-02-18 12:33:37 -0800135 $ svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
136 $ mkdir mybuild
137 $ cd mybuild
138 $ cmake ../gtest-svn
139 $ make
140 $ make gtest.a gtest_main.a
141 $ sudo cp libgtest.a libgtest_main.a /opt/local/lib
142 $ sudo mkdir /opt/local/include/gtest
143 $ sudo cp -pr ../gtest-svn/include/gtest /opt/local/include/gtest
144
145We will also need to make openssl and install it appropriately
146
147 $ cd <git directory>
148 $ cd third_party/openssl
vjpai37b9ec12015-08-10 10:02:09 -0700149 $ ./config
vjpai7cc2c302015-02-18 12:33:37 -0800150 $ sudo make install
151 $ cd ../../
152
153If you are going to make changes and need to regenerate the projects file,
154you will need to install certain modules for python.
155
156 $ sudo easy_install simplejson mako
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800157
Nicolas "Pixel" Noble5fc1adf2015-05-10 22:20:31 +0200158Mingw-specific notes:
159---------------------
160
161While gRPC compiles properly under mingw, some more preparation work is needed.
162The recommendation is to use msys2. The installation instructions are available
163at that address: http://msys2.github.io/
164
165Once this is installed, make sure you are using the following: MinGW-w64 Win64.
166You'll be required to install a few more packages:
167
168 $ pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-zlib autoconf automake libtool
169
170Please also install OpenSSL from that website:
171
172 http://slproweb.com/products/Win32OpenSSL.html
173
174The package Win64 OpenSSL v1.0.2a should do. At that point you should be able
175to compile gRPC with the following:
176
177 $ export LDFLAGS="-L/mingw64/lib -L/c/OpenSSL-Win64"
178 $ export CPPFLAGS="-I/mingw64/include -I/c/OpenSSL-Win64/include"
179 $ make
180
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800181A word on OpenSSL
182-----------------
nnoble0005b772014-12-10 16:25:34 -0800183
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800184Secure HTTP2 requires the TLS extension ALPN (see rfc 7301 and
nnoble0005b772014-12-10 16:25:34 -0800185http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +0100186relies on OpenSSL's implementation. OpenSSL 1.0.2 is the first released version
nnoble0005b772014-12-10 16:25:34 -0800187of OpenSSL that has ALPN support, and this explains our dependency on it.
188
nnoble69ac39f2014-12-12 15:43:38 -0800189Note that the Makefile supports compiling only the unsecure elements of grpc,
190and if you do not have OpenSSL and do not want it, you can still proceed
Abhishek Kumar6749e732015-02-10 10:59:52 -0800191with installing only the elements you require. However, we strongly recommend
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800192the use of encryption for all network traffic, and discourage the use of grpc
193without TLS.
nnoble69ac39f2014-12-12 15:43:38 -0800194
nnoble0005b772014-12-10 16:25:34 -0800195
196Compiling
197=========
198
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800199If you have all the dependencies mentioned above, you should simply be able
200to go ahead and run "make" to compile grpc's C and C++ libraries:
nnoble0005b772014-12-10 16:25:34 -0800201
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800202 $ make
nnoble0005b772014-12-10 16:25:34 -0800203
204
205Testing
206=======
207
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800208To build and run the tests, you can run the command:
nnoble0005b772014-12-10 16:25:34 -0800209
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800210 $ make test
211
212If you want to be able to run them in parallel, and get better output, you can
213also use the python tool we have written:
214
215 $ ./tools/run_tests/run_tests.py
nnoble0005b772014-12-10 16:25:34 -0800216
217
218Installing
219==========
220
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800221Once everything is compiled, you should be able to install grpc C and C++
nnoble0005b772014-12-10 16:25:34 -0800222libraries and headers:
223
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800224 # make install