• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2019 Google Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15################################################################################
16
17FROM gcr.io/oss-fuzz-base/base-builder
18MAINTAINER mhl@fb.com
19
20# Install packages we need to build dependencies
21RUN apt-get update && \
22    apt-get install -y \
23    make \
24    autoconf \
25    automake \
26    libtool \
27    sudo \
28    wget \
29    gcc \
30    g++ \
31    python \
32    python-dev
33
34# We need a newer version of CMake than is available in the base builder image
35RUN wget https://github.com/Kitware/CMake/releases/download/v3.15.2/cmake-3.15.2.tar.gz && \
36    tar xzf cmake-3.15.2.tar.gz && \
37    cd cmake-3.15.2 && \
38    export CC=clang && \
39    export CXX=clang++ && \
40    CXXFLAGS="" && \
41    CFLAGS="" && \
42    ./bootstrap && \
43    make -j$(nproc) && \
44    make install && \
45    cd .. && \
46    rm -rf cmake-3.15.2
47
48# Install and build boost from source so we can have it use libc++
49RUN wget https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz && \
50    tar xzf boost_1_70_0.tar.gz && \
51    cd boost_1_70_0 && \
52    ./bootstrap.sh --with-toolset=clang && \
53    ./b2 clean && \
54    ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" -j$(nproc) install && \
55    cd .. && \
56    rm -rf boost_1_70_0
57
58# Build gflags/glog/gtest from source so we use libc++ and avoid incompatibilities with the std::string ABI breaking changes
59RUN sudo apt-get purge libgflags-dev
60
61RUN wget https://github.com/gflags/gflags/archive/v2.2.2.tar.gz && \
62    tar xzf v2.2.2.tar.gz && \
63    cd gflags-2.2.2 && \
64    mkdir build && \
65    cd build && \
66    export CC=clang && \
67    export CXX=clang++ && \
68    export CXXFLAGS="-stdlib=libc++" && \
69    cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && \
70    make -j$(nproc) && \
71    sudo make install && \
72    cd ../../ && \
73    rm -rf gflags-2.2.2
74
75RUN wget https://github.com/google/glog/archive/v0.4.0.tar.gz && \
76    tar xzf v0.4.0.tar.gz && \
77    cd glog-0.4.0 && \
78    export CC=clang && \
79    export CXX=clang++ && \
80    export CXXFLAGS="-stdlib=libc++" && \
81    mkdir build && \
82    cd build && \
83    cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_VERBOSE_MAKEFILE=ON .. && \
84    make -j$(nproc) && \
85    sudo make install && \
86    cd ../.. && \
87    rm -rf glog-0.4.0
88
89RUN wget https://github.com/google/googletest/archive/release-1.8.1.tar.gz && \
90    tar xzf release-1.8.1.tar.gz && \
91    cd googletest-release-1.8.1 && \
92    export CC=clang && \
93    export CXX=clang++ && \
94    export CXXFLAGS="-stdlib=libc++" && \
95    mkdir build && \
96    cd build && \
97    cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_VERBOSE_MAKEFILE=ON .. && \
98    make -j$(nproc) && \
99    sudo make install && \
100    cd ../.. && \
101    rm -rf googletest-release-1.8.1
102
103# Build and install zstd from source so we have it available for proxygen
104RUN wget https://github.com/facebook/zstd/releases/download/v1.4.2/zstd-1.4.2.tar.gz && \
105    tar xzf zstd-1.4.2.tar.gz && \
106    cd zstd-1.4.2 && \
107    export CC=clang && \
108    export CXX=clang++ && \
109    export CXXFLAGS="-stdlib=libc++" && \
110    sudo make -j$(nproc) install && \
111    cd .. && \
112    rm -rf zstd-1.4.2
113
114# Build and install `fmt` needed by folly
115RUN wget https://github.com/fmtlib/fmt/archive/6.0.0.tar.gz && \
116    tar xzf 6.0.0.tar.gz && \
117    cd fmt-6.0.0 && \
118    export CC=clang && \
119    export CXX=clang++ && \
120    export CXXFLAGS="-stdlib=libc++" && \
121    mkdir build && \
122    cd build && \
123    cmake .. && \
124    make -j$(nproc) && \
125    sudo make install && \
126    cd ../.. && \
127    rm -rf fmt-6.0.0
128
129# Replicate `install-dependencies` from the proxygen `build.sh` script
130RUN apt-get install -y \
131    git \
132    flex \
133    bison \
134    libkrb5-dev \
135    libsasl2-dev \
136    libnuma-dev \
137    pkg-config \
138    libssl-dev \
139    libcap-dev \
140    gperf \
141    libevent-dev \
142    libtool \
143    libjemalloc-dev \
144    unzip \
145    libiberty-dev \
146    liblzma-dev \
147    zlib1g-dev \
148    binutils-dev \
149    libsodium-dev \
150    libdouble-conversion-dev \
151    libunwind8-dev
152
153# Install patchelf so we can fix path to libunwind
154RUN apt-get install patchelf
155
156# Fetch source and copy over files
157RUN git clone --depth 1 https://github.com/facebook/proxygen.git proxygen
158WORKDIR proxygen
159COPY build.sh $SRC/