170 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Docker
		
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Docker
		
	
	
	
| # Copyright 2019 Google Inc.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #      http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| FROM gcr.io/oss-fuzz-base/base-builder
 | |
| 
 | |
| # Install packages we need to build dependencies
 | |
| RUN apt-get update && \
 | |
|     apt-get install -y \
 | |
|     make \
 | |
|     autoconf \
 | |
|     automake \
 | |
|     libtool \
 | |
|     sudo \
 | |
|     wget \
 | |
|     gcc \
 | |
|     g++ \
 | |
|     python \
 | |
|     python-dev \
 | |
|     cmake \
 | |
|     ninja-build
 | |
| 
 | |
| # Install and build boost from source so we can have it use libc++
 | |
| RUN wget https://sourceforge.net/projects/boost/files/boost/1.70.0/boost_1_70_0.tar.gz && \
 | |
|     tar xzf boost_1_70_0.tar.gz && \
 | |
|     cd boost_1_70_0 && \
 | |
|     ./bootstrap.sh --with-toolset=clang && \
 | |
|     ./b2 clean && \
 | |
|     ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" -j$(nproc) install && \
 | |
|     cd .. && \
 | |
|     rm -rf boost_1_70_0
 | |
| 
 | |
| # Build gflags/glog/gtest from source so we use libc++ and avoid incompatibilities with the std::string ABI breaking changes
 | |
| RUN sudo apt-get purge libgflags-dev
 | |
| 
 | |
| RUN wget https://github.com/gflags/gflags/archive/v2.2.2.tar.gz && \
 | |
|     tar xzf v2.2.2.tar.gz && \
 | |
|     cd gflags-2.2.2 && \
 | |
|     mkdir build && \
 | |
|     cd build && \
 | |
|     export CC=clang && \
 | |
|     export CXX=clang++ && \
 | |
|     export CXXFLAGS="-stdlib=libc++" && \
 | |
|     cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && \
 | |
|     make -j$(nproc) && \
 | |
|     sudo make install && \
 | |
|     cd ../../ && \
 | |
|     rm -rf gflags-2.2.2
 | |
| 
 | |
| RUN wget https://github.com/google/glog/archive/v0.4.0.tar.gz && \
 | |
|     tar xzf v0.4.0.tar.gz && \
 | |
|     cd glog-0.4.0 && \
 | |
|     export CC=clang && \
 | |
|     export CXX=clang++ && \
 | |
|     export CXXFLAGS="-stdlib=libc++" && \
 | |
|     mkdir build && \
 | |
|     cd build && \
 | |
|     cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_VERBOSE_MAKEFILE=ON .. && \
 | |
|     make -j$(nproc) && \
 | |
|     sudo make install && \
 | |
|     cd ../.. && \
 | |
|     rm -rf glog-0.4.0
 | |
| 
 | |
| RUN wget https://github.com/google/googletest/archive/release-1.8.1.tar.gz && \
 | |
|     tar xzf release-1.8.1.tar.gz && \
 | |
|     cd googletest-release-1.8.1 && \
 | |
|     export CC=clang && \
 | |
|     export CXX=clang++ && \
 | |
|     export CXXFLAGS="-stdlib=libc++" && \
 | |
|     mkdir build && \
 | |
|     cd build && \
 | |
|     cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_VERBOSE_MAKEFILE=ON .. && \
 | |
|     make -j$(nproc) && \
 | |
|     sudo make install && \
 | |
|     cd ../.. && \
 | |
|     rm -rf googletest-release-1.8.1
 | |
| 
 | |
| # Build and install zstd from source so we have it available for proxygen
 | |
| RUN wget https://github.com/facebook/zstd/releases/download/v1.4.2/zstd-1.4.2.tar.gz && \
 | |
|     tar xzf zstd-1.4.2.tar.gz && \
 | |
|     cd zstd-1.4.2 && \
 | |
|     export CC=clang && \
 | |
|     export CXX=clang++ && \
 | |
|     export CXXFLAGS="-stdlib=libc++" && \
 | |
|     sudo make -j$(nproc) install && \
 | |
|     cd .. && \
 | |
|     rm -rf zstd-1.4.2
 | |
| 
 | |
| # Get double conversion
 | |
| RUN git clone --single-branch https://github.com/google/double-conversion.git double-conversion && \
 | |
|     cd double-conversion/double-conversion && \
 | |
|     cmake -GNinja ../ && \
 | |
|     ninja && \
 | |
|     ninja install
 | |
| 
 | |
| # Build and install `fmt` needed by folly
 | |
| RUN wget https://github.com/fmtlib/fmt/archive/6.0.0.tar.gz && \
 | |
|     tar xzf 6.0.0.tar.gz && \
 | |
|     cd fmt-6.0.0 && \
 | |
|     export CC=clang && \
 | |
|     export CXX=clang++ && \
 | |
|     export CXXFLAGS="-stdlib=libc++" && \
 | |
|     mkdir build && \
 | |
|     cd build && \
 | |
|     cmake .. && \
 | |
|     make -j$(nproc) && \
 | |
|     sudo make install && \
 | |
|     cd ../.. && \
 | |
|     rm -rf fmt-6.0.0
 | |
|     
 | |
| # Build and install `gperf` (>= 3.1)
 | |
| RUN wget http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz && \
 | |
|     rm -rf gperf-3.1 | true && \
 | |
|     tar xzvf gperf-3.1.tar.gz && \
 | |
|     cd gperf-3.1 && \
 | |
|     export CC=gcc && \
 | |
|     export CXX=g++ && \
 | |
|     export CXXFLAGS="" && \
 | |
|     export CFLAGS_TMP="$CFLAGS" && \
 | |
|     unset CFLAGS && \
 | |
|     ./configure && \
 | |
|     make -j1 V=s && \
 | |
|     sudo make install && \
 | |
|     export CFLAGS="$CFLAGS_TMP" && \
 | |
|     unset CFLAGS_TMP && \
 | |
|     cd .. && \
 | |
|     rm -rf gperf-3.1
 | |
| 
 | |
| # Replicate `install-dependencies` from the proxygen `build.sh` script
 | |
| RUN apt-get install -y \
 | |
|     git \
 | |
|     flex \
 | |
|     bison \
 | |
|     libkrb5-dev \
 | |
|     libsasl2-dev \
 | |
|     libnuma-dev \
 | |
|     pkg-config \
 | |
|     libssl-dev \
 | |
|     libcap-dev \
 | |
|     libevent-dev \
 | |
|     libtool \
 | |
|     libjemalloc-dev \
 | |
|     unzip \
 | |
|     libiberty-dev \
 | |
|     liblzma-dev \
 | |
|     zlib1g-dev \
 | |
|     binutils-dev \
 | |
|     libsodium-dev \
 | |
|     libunwind8-dev
 | |
| 
 | |
| # Install patchelf so we can fix path to libunwind
 | |
| RUN apt-get install patchelf
 | |
| 
 | |
| # Fetch source and copy over files
 | |
| RUN git clone --depth 1 https://github.com/facebook/proxygen.git proxygen
 | |
| WORKDIR proxygen
 | |
| COPY build.sh $SRC/
 |