blob: 0b632f194450d77e37126ff5088c87d2dd97d1ed [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
Dan Cirulide3c6542015-02-25 12:50:09 -080012 $ git clone https://github.com/grpc/grpc.git
13 $ git submodule update --init
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080014
Abhishek Kumar2deb9862015-02-25 16:55:58 -080015 $ cd grpc
Abhishek Kumar87709362015-02-25 16:54:44 -080016
17 $ make
18 $ sudo make install
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080019
Nicolas Noblec70752a2015-02-12 17:01:52 -080020You don't need anything else than GNU Make, gcc and autotools. Under a Debian
21or Ubuntu system, this should boil down to the following packages:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080022
Dan Cirulide3c6542015-02-25 12:50:09 -080023 $ apt-get install build-essential autoconf libtool
Nicolas Noblec70752a2015-02-12 17:01:52 -080024
25Building the python wrapper requires the following:
26
27 # apt-get install python-all-dev python-virtualenv
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080028
Nicolas "Pixel" Noble522d7122015-02-19 01:28:02 +010029If you want to install in a different directory than the default /usr/lib, you can
30override it on the command line:
31
32 # make install prefix=/opt
33
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080034
35*******************************
36* More detailled instructions *
37*******************************
38
39Setting up dependencies
40=======================
41
42Dependencies to compile the libraries
43-------------------------------------
44
45grpc libraries have few external dependencies. If you need to compile and
46install them, they are present in the third_party directory if you have
47cloned the github repository recursively. If you didn't clone recursively,
48you can still get them later by running the following command:
49
50 $ git submodule update --init
nnoble0005b772014-12-10 16:25:34 -080051
nnoble69ac39f2014-12-12 15:43:38 -080052Note that the Makefile makes it much easier for you to compile from sources
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080053if you were to clone recursively our git repository: it will automatically
54compile zlib and OpenSSL, which are core requirements for grpc. Note this
55creates grpc libraries that will have zlib and OpenSSL built-in inside of them,
56which significantly increases the libraries' size.
57
58In order to decrease that size, you can manually install zlib and OpenSSL on
59your system, so that the Makefile can use them instead.
60
61Under a Debian or Ubuntu system, one can acquire the development package
62for zlib this way:
63
64 # apt-get install zlib1g-dev
65
66To the best of our knowledge, no distribution has an OpenSSL package that
67supports ALPN yet, so you would still have to depend on installing from source
68for that particular dependency if you want to reduce the libraries' size.
69
70The recommended version of OpenSSL that provides ALPN support is available
71at this URL:
72
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +010073 https://www.openssl.org/source/openssl-1.0.2.tar.gz
nnoble69ac39f2014-12-12 15:43:38 -080074
nnoble0005b772014-12-10 16:25:34 -080075
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080076Dependencies to compile and run the tests
77-----------------------------------------
nnoble0005b772014-12-10 16:25:34 -080078
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080079Compiling and running grpc plain-C tests dont't require any more dependency.
nnoble0005b772014-12-10 16:25:34 -080080
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080081
82Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and
Nicolas Noblec70752a2015-02-12 17:01:52 -080083gflags. Although gflags is provided in third_party, you will need to manually
84install that dependency on your system to run these tests.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080085
86Under a Debian or Ubuntu system, you can install the gtests and gflags packages
87using apt-get:
88
89 # apt-get install libgflags-dev libgtest-dev
90
Nicolas Noblec70752a2015-02-12 17:01:52 -080091However, protobuf 3.0.0 isn't in a debian package yet, but the Makefile will
92automatically try and compile the one present in third_party if you cloned the
93repository recursively, and that it detects your system is lacking it.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080094
95Compiling and installing protobuf 3.0.0 requires a few more dependencies in
Nicolas Noblec70752a2015-02-12 17:01:52 -080096itself, notably the autoconf suite. If you have apt-get, you can install
97these dependencies this way:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080098
Nicolas Noblec70752a2015-02-12 17:01:52 -080099 # apt-get install autoconf libtool
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800100
Nicolas "Pixel" Nobled66cba22015-02-14 02:59:12 +0100101If you want to run the tests using one of the sanitized configurations, you
102will need clang and its instrumented libc++:
103
104 # apt-get install clang libc++-dev
105
vjpai7cc2c302015-02-18 12:33:37 -0800106Mac-specific notes:
107-------------------
108
109For a Mac system, git is not available by default. You will first need to
110install Xcode from the Mac AppStore and then run the following command from a
111terminal:
112
113 $ sudo xcode-select --install
114
115You should also install "port" following the instructions at
116https://www.macports.org . This will reside in /opt/local/bin/port for
117most Mac installations. Do the "git submodule" command listed above.
118
119Then execute the following for all the needed build dependencies
120
121 $ sudo /opt/local/bin/port install autoconf automake libtool gflags cmake
122 $ mkdir ~/gtest
123 $ svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
124 $ mkdir mybuild
125 $ cd mybuild
126 $ cmake ../gtest-svn
127 $ make
128 $ make gtest.a gtest_main.a
129 $ sudo cp libgtest.a libgtest_main.a /opt/local/lib
130 $ sudo mkdir /opt/local/include/gtest
131 $ sudo cp -pr ../gtest-svn/include/gtest /opt/local/include/gtest
132
133We will also need to make openssl and install it appropriately
134
135 $ cd <git directory>
136 $ cd third_party/openssl
137 $ sudo make install
138 $ cd ../../
139
140If you are going to make changes and need to regenerate the projects file,
141you will need to install certain modules for python.
142
143 $ sudo easy_install simplejson mako
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800144
145A word on OpenSSL
146-----------------
nnoble0005b772014-12-10 16:25:34 -0800147
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800148Secure HTTP2 requires the TLS extension ALPN (see rfc 7301 and
nnoble0005b772014-12-10 16:25:34 -0800149http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +0100150relies on OpenSSL's implementation. OpenSSL 1.0.2 is the first released version
nnoble0005b772014-12-10 16:25:34 -0800151of OpenSSL that has ALPN support, and this explains our dependency on it.
152
nnoble69ac39f2014-12-12 15:43:38 -0800153Note that the Makefile supports compiling only the unsecure elements of grpc,
154and if you do not have OpenSSL and do not want it, you can still proceed
Abhishek Kumar6749e732015-02-10 10:59:52 -0800155with installing only the elements you require. However, we strongly recommend
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800156the use of encryption for all network traffic, and discourage the use of grpc
157without TLS.
nnoble69ac39f2014-12-12 15:43:38 -0800158
nnoble0005b772014-12-10 16:25:34 -0800159
160Compiling
161=========
162
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800163If you have all the dependencies mentioned above, you should simply be able
164to go ahead and run "make" to compile grpc's C and C++ libraries:
nnoble0005b772014-12-10 16:25:34 -0800165
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800166 $ make
nnoble0005b772014-12-10 16:25:34 -0800167
168
169Testing
170=======
171
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800172To build and run the tests, you can run the command:
nnoble0005b772014-12-10 16:25:34 -0800173
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800174 $ make test
175
176If you want to be able to run them in parallel, and get better output, you can
177also use the python tool we have written:
178
179 $ ./tools/run_tests/run_tests.py
nnoble0005b772014-12-10 16:25:34 -0800180
181
182Installing
183==========
184
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800185Once everything is compiled, you should be able to install grpc C and C++
nnoble0005b772014-12-10 16:25:34 -0800186libraries and headers:
187
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800188 # make install