| 
					
				 | 
			
			
				@@ -1,217 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-These instructions only cover building grpc C and C++ libraries under 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-typical unix systems. If you need more information, please try grpc's 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-wiki pages: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  https://github.com/google/grpc/wiki 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-************************* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-* If you are in a hurry * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-************************* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-On Linux (Debian): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- Note: you will need to add the Debian 'jessie-backports' distribution to your sources 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- file first. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- Add the following line to your `/etc/apt/sources.list` file: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   deb http://http.debian.net/debian jessie-backports main 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- Install the gRPC library: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ [sudo] apt-get install libgrpc-dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-OR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ git clone https://github.com/grpc/grpc.git 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ cd grpc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ git submodule update --init 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ make  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ [sudo] make install 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-You don't need anything else than GNU Make, gcc and autotools. Under a Debian 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-or Ubuntu system, this should boil down to the following packages: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ [sudo] apt-get install build-essential autoconf libtool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Building the python wrapper requires the following: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ [sudo] apt-get install python-all-dev python-virtualenv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-If you want to install in a different directory than the default /usr/lib, you can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-override it on the command line: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- $ [sudo] make install prefix=/opt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-******************************* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-* More detailled instructions * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-******************************* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Setting up dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-======================= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Dependencies to compile the libraries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc libraries have few external dependencies. If you need to compile and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-install them, they are present in the third_party directory if you have 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-cloned the github repository recursively. If you didn't clone recursively, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-you can still get them later by running the following command: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ git submodule update --init 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Note that the Makefile makes it much easier for you to compile from sources 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if you were to clone recursively our git repository: it will automatically 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-compile zlib and OpenSSL, which are core requirements for grpc. Note this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-creates grpc libraries that will have zlib and OpenSSL built-in inside of them, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-which significantly increases the libraries' size. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-In order to decrease that size, you can manually install zlib and OpenSSL on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-your system, so that the Makefile can use them instead. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Under a Debian or Ubuntu system, one can acquire the development package 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-for zlib this way: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  # apt-get install zlib1g-dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-To the best of our knowledge, no distribution has an OpenSSL package that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-supports ALPN yet, so you would still have to depend on installing from source 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-for that particular dependency if you want to reduce the libraries' size. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The recommended version of OpenSSL that provides ALPN support is available 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-at this URL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  https://www.openssl.org/source/openssl-1.0.2.tar.gz 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Dependencies to compile and run the tests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				------------------------------------------ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Compiling and running grpc plain-C tests dont't require any more dependency. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-gflags. Although gflags is provided in third_party, you will need to manually 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-install that dependency on your system to run these tests. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Under a Debian or Ubuntu system, you can install the gtests and gflags packages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-using apt-get: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  # apt-get install libgflags-dev libgtest-dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-However, protobuf 3.0.0 isn't in a debian package yet, but the Makefile will 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-automatically try and compile the one present in third_party if you cloned the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-repository recursively, and that it detects your system is lacking it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Compiling and installing protobuf 3.0.0 requires a few more dependencies in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-itself, notably the autoconf suite. If you have apt-get, you can install 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-these dependencies this way: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  # apt-get install autoconf libtool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-If you want to run the tests using one of the sanitized configurations, you 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-will need clang and its instrumented libc++: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  # apt-get install clang libc++-dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Mac-specific notes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-For a Mac system, git is not available by default. You will first need to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-install Xcode from the Mac AppStore and then run the following command from a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-terminal: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ sudo xcode-select --install 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-You should also install "port" following the instructions at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-https://www.macports.org . This will reside in /opt/local/bin/port for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-most Mac installations. Do the "git submodule" command listed above. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Then execute the following for all the needed build dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ sudo /opt/local/bin/port install autoconf automake libtool gflags cmake 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ mkdir ~/gtest-svn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ mkdir mybuild 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ cd mybuild 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ cmake ../gtest-svn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ make 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ make gtest.a gtest_main.a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ sudo cp libgtest.a libgtest_main.a /opt/local/lib 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ sudo mkdir /opt/local/include/gtest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ sudo cp -pr ../gtest-svn/include/gtest /opt/local/include/gtest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-If you are going to make changes and need to regenerate the projects file, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-you will need to install certain modules for python. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ sudo easy_install simplejson mako 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Mingw-specific notes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-While gRPC compiles properly under mingw, some more preparation work is needed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The recommendation is to use msys2. The installation instructions are available 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-at that address: http://msys2.github.io/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Once this is installed, make sure you are using the following: MinGW-w64 Win64. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-You'll be required to install a few more packages: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-zlib autoconf automake libtool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Please also install OpenSSL from that website: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  http://slproweb.com/products/Win32OpenSSL.html 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The package Win64 OpenSSL v1.0.2a should do. At that point you should be able 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-to compile gRPC with the following: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ export LDFLAGS="-L/mingw64/lib -L/c/OpenSSL-Win64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ export CPPFLAGS="-I/mingw64/include -I/c/OpenSSL-Win64/include" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ make 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-A word on OpenSSL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				------------------ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Secure HTTP2 requires the TLS extension ALPN (see rfc 7301 and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-relies on OpenSSL's implementation. OpenSSL 1.0.2 is the first released version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-of OpenSSL that has ALPN support, and this explains our dependency on it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Note that the Makefile supports compiling only the unsecure elements of grpc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-and if you do not have OpenSSL and do not want it, you can still proceed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-with installing only the elements you require. However, we strongly recommend 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-the use of encryption for all network traffic, and discourage the use of grpc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-without TLS. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Compiling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-========= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-If you have all the dependencies mentioned above, you should simply be able 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-to go ahead and run "make" to compile grpc's C and C++ libraries: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ make 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Testing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-======= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-To build and run the tests, you can run the command: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ make test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-If you want to be able to run them in parallel, and get better output, you can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-also use the python tool we have written: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $ ./tools/run_tests/run_tests.py 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Installing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-========== 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Once everything is compiled, you should be able to install grpc C and C++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-libraries and headers: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  # make install 
			 |