blob: f1e7aa7bf432d064456ebf85a9ef9ada6c363dd0 [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
12A typical unix installation won't require any more steps than running:
13
14 $ make
15 # make install
16
Nicolas Noblec70752a2015-02-12 17:01:52 -080017You don't need anything else than GNU Make, gcc and autotools. Under a Debian
18or Ubuntu system, this should boil down to the following packages:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080019
Nicolas Noblec70752a2015-02-12 17:01:52 -080020 # apt-get install build-essential autoconf libtool
21
22Building the python wrapper requires the following:
23
24 # apt-get install python-all-dev python-virtualenv
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080025
26
27*******************************
28* More detailled instructions *
29*******************************
30
31Setting up dependencies
32=======================
33
34Dependencies to compile the libraries
35-------------------------------------
36
37grpc libraries have few external dependencies. If you need to compile and
38install them, they are present in the third_party directory if you have
39cloned the github repository recursively. If you didn't clone recursively,
40you can still get them later by running the following command:
41
42 $ git submodule update --init
nnoble0005b772014-12-10 16:25:34 -080043
nnoble69ac39f2014-12-12 15:43:38 -080044Note that the Makefile makes it much easier for you to compile from sources
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080045if you were to clone recursively our git repository: it will automatically
46compile zlib and OpenSSL, which are core requirements for grpc. Note this
47creates grpc libraries that will have zlib and OpenSSL built-in inside of them,
48which significantly increases the libraries' size.
49
50In order to decrease that size, you can manually install zlib and OpenSSL on
51your system, so that the Makefile can use them instead.
52
53Under a Debian or Ubuntu system, one can acquire the development package
54for zlib this way:
55
56 # apt-get install zlib1g-dev
57
58To the best of our knowledge, no distribution has an OpenSSL package that
59supports ALPN yet, so you would still have to depend on installing from source
60for that particular dependency if you want to reduce the libraries' size.
61
62The recommended version of OpenSSL that provides ALPN support is available
63at this URL:
64
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +010065 https://www.openssl.org/source/openssl-1.0.2.tar.gz
nnoble69ac39f2014-12-12 15:43:38 -080066
nnoble0005b772014-12-10 16:25:34 -080067
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080068Dependencies to compile and run the tests
69-----------------------------------------
nnoble0005b772014-12-10 16:25:34 -080070
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080071Compiling and running grpc plain-C tests dont't require any more dependency.
nnoble0005b772014-12-10 16:25:34 -080072
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080073
74Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and
Nicolas Noblec70752a2015-02-12 17:01:52 -080075gflags. Although gflags is provided in third_party, you will need to manually
76install that dependency on your system to run these tests.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080077
78Under a Debian or Ubuntu system, you can install the gtests and gflags packages
79using apt-get:
80
81 # apt-get install libgflags-dev libgtest-dev
82
Nicolas Noblec70752a2015-02-12 17:01:52 -080083However, protobuf 3.0.0 isn't in a debian package yet, but the Makefile will
84automatically try and compile the one present in third_party if you cloned the
85repository recursively, and that it detects your system is lacking it.
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080086
87Compiling and installing protobuf 3.0.0 requires a few more dependencies in
Nicolas Noblec70752a2015-02-12 17:01:52 -080088itself, notably the autoconf suite. If you have apt-get, you can install
89these dependencies this way:
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080090
Nicolas Noblec70752a2015-02-12 17:01:52 -080091 # apt-get install autoconf libtool
Nicolas Noble6ae8ef12015-01-16 15:03:42 -080092
Nicolas "Pixel" Nobled66cba22015-02-14 02:59:12 +010093If you want to run the tests using one of the sanitized configurations, you
94will need clang and its instrumented libc++:
95
96 # apt-get install clang libc++-dev
97
vjpai7cc2c302015-02-18 12:33:37 -080098Mac-specific notes:
99-------------------
100
101For a Mac system, git is not available by default. You will first need to
102install Xcode from the Mac AppStore and then run the following command from a
103terminal:
104
105 $ sudo xcode-select --install
106
107You should also install "port" following the instructions at
108https://www.macports.org . This will reside in /opt/local/bin/port for
109most Mac installations. Do the "git submodule" command listed above.
110
111Then execute the following for all the needed build dependencies
112
113 $ sudo /opt/local/bin/port install autoconf automake libtool gflags cmake
114 $ mkdir ~/gtest
115 $ svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
116 $ mkdir mybuild
117 $ cd mybuild
118 $ cmake ../gtest-svn
119 $ make
120 $ make gtest.a gtest_main.a
121 $ sudo cp libgtest.a libgtest_main.a /opt/local/lib
122 $ sudo mkdir /opt/local/include/gtest
123 $ sudo cp -pr ../gtest-svn/include/gtest /opt/local/include/gtest
124
125We will also need to make openssl and install it appropriately
126
127 $ cd <git directory>
128 $ cd third_party/openssl
129 $ sudo make install
130 $ cd ../../
131
132If you are going to make changes and need to regenerate the projects file,
133you will need to install certain modules for python.
134
135 $ sudo easy_install simplejson mako
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800136
137A word on OpenSSL
138-----------------
nnoble0005b772014-12-10 16:25:34 -0800139
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800140Secure HTTP2 requires the TLS extension ALPN (see rfc 7301 and
nnoble0005b772014-12-10 16:25:34 -0800141http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation
Nicolas "Pixel" Nobled5660212015-01-23 20:35:49 +0100142relies on OpenSSL's implementation. OpenSSL 1.0.2 is the first released version
nnoble0005b772014-12-10 16:25:34 -0800143of OpenSSL that has ALPN support, and this explains our dependency on it.
144
nnoble69ac39f2014-12-12 15:43:38 -0800145Note that the Makefile supports compiling only the unsecure elements of grpc,
146and if you do not have OpenSSL and do not want it, you can still proceed
Abhishek Kumar6749e732015-02-10 10:59:52 -0800147with installing only the elements you require. However, we strongly recommend
Abhishek Kumar3dd9df92015-02-10 10:16:41 -0800148the use of encryption for all network traffic, and discourage the use of grpc
149without TLS.
nnoble69ac39f2014-12-12 15:43:38 -0800150
nnoble0005b772014-12-10 16:25:34 -0800151
152Compiling
153=========
154
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800155If you have all the dependencies mentioned above, you should simply be able
156to go ahead and run "make" to compile grpc's C and C++ libraries:
nnoble0005b772014-12-10 16:25:34 -0800157
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800158 $ make
nnoble0005b772014-12-10 16:25:34 -0800159
160
161Testing
162=======
163
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800164To build and run the tests, you can run the command:
nnoble0005b772014-12-10 16:25:34 -0800165
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800166 $ make test
167
168If you want to be able to run them in parallel, and get better output, you can
169also use the python tool we have written:
170
171 $ ./tools/run_tests/run_tests.py
nnoble0005b772014-12-10 16:25:34 -0800172
173
174Installing
175==========
176
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800177Once everything is compiled, you should be able to install grpc C and C++
nnoble0005b772014-12-10 16:25:34 -0800178libraries and headers:
179
Nicolas Noble6ae8ef12015-01-16 15:03:42 -0800180 # make install