Home | History | Annotate | Download | only in grpc-grpc
      1 gRPC C++ - Building from source
      2 ===========================
      3 
      4 # Pre-requisites
      5 
      6 ## Linux
      7 
      8 ```sh
      9  $ [sudo] apt-get install build-essential autoconf libtool pkg-config
     10 ```
     11 
     12 If you plan to build from source and run tests, install the following as well:
     13 ```sh
     14  $ [sudo] apt-get install libgflags-dev libgtest-dev
     15  $ [sudo] apt-get install clang libc++-dev
     16 ```
     17 
     18 ## MacOS
     19 
     20 On a Mac, you will first need to
     21 install Xcode or
     22 [Command Line Tools for Xcode](https://developer.apple.com/download/more/)
     23 and then run the following command from a terminal:
     24 
     25 ```sh
     26  $ [sudo] xcode-select --install
     27 ```
     28 
     29 To build gRPC from source, you may need to install the following
     30 packages from [Homebrew](https://brew.sh):
     31 
     32 ```sh
     33  $ brew install autoconf automake libtool shtool
     34 ```
     35 
     36 If you plan to build from source and run tests, install the following as well:
     37 ```sh
     38  $ brew install gflags
     39 ```
     40 
     41 *Tip*: when building, 
     42 you *may* want to explicitly set the `LIBTOOL` and `LIBTOOLIZE`
     43 environment variables when running `make` to ensure the version
     44 installed by `brew` is being used:
     45 
     46 ```sh
     47  $ LIBTOOL=glibtool LIBTOOLIZE=glibtoolize make
     48 ```
     49 
     50 ## Windows
     51 
     52 To prepare for cmake + Microsoft Visual C++ compiler build
     53 - Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used).
     54 - Install [Git](https://git-scm.com/).
     55 - Install [CMake](https://cmake.org/download/).
     56 - Install [Active State Perl](https://www.activestate.com/activeperl/) (`choco install activeperl`) - *required by boringssl*
     57 - Install [Go](https://golang.org/dl/) (`choco install golang`) - *required by boringssl*
     58 - Install [yasm](http://yasm.tortall.net/) and add it to `PATH` (`choco install yasm`) - *required by boringssl*
     59 - (Optional) Install [Ninja](https://ninja-build.org/) (`choco install ninja`)
     60 
     61 ## Protoc
     62 
     63 By default gRPC uses [protocol buffers](https://github.com/google/protobuf),
     64 you will need the `protoc` compiler to generate stub server and client code.
     65 
     66 If you compile gRPC from source, as described below, the Makefile will
     67 automatically try compiling the `protoc` in third_party if you cloned the
     68 repository recursively and it detects that you do not already have 'protoc' compiler
     69 installed.
     70 
     71 If 'protoc' compiler has not been installed, following commands can be used for installation.
     72 
     73 ```sh
     74 $ cd grpc/third_party/protobuf
     75 $ sudo make install   # 'make' should have been run by core grpc
     76 ```
     77 
     78 # Clone the repository (including submodules)
     79 
     80 Before building, you need to clone the gRPC github repository and download submodules containing source code 
     81 for gRPC's dependencies (that's done by the `submodule` command or `--recursive` flag). The following commands will clone the gRPC
     82 repository at the latest stable version.
     83 
     84 ## Unix
     85 
     86 ```sh
     87  $ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
     88  $ cd grpc
     89  $ git submodule update --init
     90  ```
     91 
     92 ## Windows
     93 
     94 ```
     95 > @rem You can also do just "git clone --recursive -b THE_BRANCH_YOU_WANT https://github.com/grpc/grpc"
     96 > powershell git clone --recursive -b ((New-Object System.Net.WebClient).DownloadString(\"https://grpc.io/release\").Trim()) https://github.com/grpc/grpc
     97 > cd grpc
     98 > @rem To update submodules at later time, run "git submodule update --init"
     99 ```
    100 
    101 # Build from source
    102 
    103 In the C++ world, there's no "standard" build system that would work for in all supported use cases and on all supported platforms.
    104 Therefore, gRPC supports several major build systems, which should satisfy most users.
    105 
    106 Note that this section only covers the build of gRPC itself, not the installation. See the [How to use](https://github.com/grpc/grpc/tree/master/src/cpp#to-start-using-grpc-c) instructions
    107 for guidance on how to add gRPC as a dependency to a C++ application (there are several ways and system wide installation is often not the best choice).
    108 
    109 ## make (on UNIX systems)
    110 
    111 From the grpc repository root
    112 ```sh
    113  $ make
    114 ```
    115 
    116 ## bazel
    117 
    118 See [Installing Bazel](https://docs.bazel.build/versions/master/install.html) for instructions how to install bazel on your system.
    119 
    120 From the grpc repository root
    121 ```
    122 $ bazel build :all
    123 ```
    124 
    125 ## cmake: Windows, Using Visual Studio 2015 or 2017 (can only build with OPENSSL_NO_ASM).
    126 When using the "Visual Studio" generator,
    127 cmake will generate a solution (`grpc.sln`) that contains a VS project for 
    128 every target defined in `CMakeLists.txt` (+ few extra convenience projects
    129 added automatically by cmake). After opening the solution with Visual Studio 
    130 you will be able to browse and build the code.
    131 ```
    132 > @rem Run from grpc directory after cloning the repo with --recursive or updating submodules.
    133 > md .build
    134 > cd .build
    135 > cmake .. -G "Visual Studio 14 2015"
    136 > cmake --build . --config Release
    137 ```
    138 
    139 ## cmake: Windows, Using Ninja (faster build, supports boringssl's assembly optimizations).
    140 Please note that when using Ninja, you will still need Visual C++ (part of Visual Studio)
    141 installed to be able to compile the C/C++ sources.
    142 ```
    143 > @rem Run from grpc directory after cloning the repo with --recursive or updating submodules.
    144 > md .build
    145 > cd .build
    146 > call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64
    147 > cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release
    148 > cmake --build .
    149 ```
    150