blob: bd04f07cea516ebcb14a9c6c67977190866ead20 [file] [log] [blame]
Craig Tiller6169d5f2016-03-31 07:46:18 -07001# Copyright 2015, Google Inc.
Craig Tiller32173c52016-03-17 14:12:45 -07002# All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions are
6# met:
7#
8# * Redistributions of source code must retain the above copyright
9# notice, this list of conditions and the following disclaimer.
10# * Redistributions in binary form must reproduce the above
11# copyright notice, this list of conditions and the following disclaimer
12# in the documentation and/or other materials provided with the
13# distribution.
14# * Neither the name of Google Inc. nor the names of its
15# contributors may be used to endorse or promote products derived from
16# this software without specific prior written permission.
17#
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30FROM debian:jessie
31
32# Install Git and basic packages.
33RUN apt-get update && apt-get install -y \
34 autoconf \
35 autotools-dev \
36 build-essential \
37 bzip2 \
38 ccache \
39 curl \
40 gcc \
41 gcc-multilib \
42 git \
43 golang \
44 gyp \
45 lcov \
46 libc6 \
47 libc6-dbg \
48 libc6-dev \
49 libgtest-dev \
50 libtool \
51 make \
52 perl \
53 strace \
54 python-dev \
55 python-setuptools \
56 python-yaml \
57 telnet \
58 unzip \
59 wget \
60 zip && apt-get clean
61
62#================
63# Build profiling
64RUN apt-get update && apt-get install -y time && apt-get clean
65
siddharthshukla0589e532016-07-07 16:08:01 +020066#====================
67# Python dependencies
68
69# Install dependencies
70
71RUN apt-get update && apt-get install -y \
72 python-all-dev \
73 python3-all-dev \
74 python-pip
75
76# Install Python packages from PyPI
77RUN pip install pip --upgrade
78RUN pip install virtualenv
79RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
80
Craig Tiller32173c52016-03-17 14:12:45 -070081#=================
82# C++ dependencies
83RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev clang && apt-get clean
84
Craig Tillera4134152016-03-17 16:02:51 -070085#=================
Craig Tillerc2c026e2016-03-18 08:28:21 -070086# Update clang to a version with improved tsan and fuzzing capabilities
Craig Tillera4134152016-03-17 16:02:51 -070087
88RUN apt-get update && apt-get -y install python cmake && apt-get clean
89
90RUN git clone -n -b release_38 http://llvm.org/git/llvm.git && \
91 cd llvm && git checkout ad57503 && cd ..
92RUN git clone -n -b release_38 http://llvm.org/git/clang.git && \
93 cd clang && git checkout ad2c56e && cd ..
94RUN git clone -n -b release_38 http://llvm.org/git/compiler-rt.git && \
95 cd compiler-rt && git checkout 3176922 && cd ..
96RUN git clone -n -b release_38 \
97 http://llvm.org/git/clang-tools-extra.git && cd clang-tools-extra && \
98 git checkout c288525 && cd ..
99RUN git clone -n -b release_38 http://llvm.org/git/libcxx.git && \
100 cd libcxx && git checkout fda3549 && cd ..
101RUN git clone -n -b release_38 http://llvm.org/git/libcxxabi.git && \
102 cd libcxxabi && git checkout 8d4e51d && cd ..
103
104RUN mv clang llvm/tools
105RUN mv compiler-rt llvm/projects
106RUN mv clang-tools-extra llvm/tools/clang/tools
107RUN mv libcxx llvm/projects
108RUN mv libcxxabi llvm/projects
109
110RUN mkdir llvm-build
111RUN cd llvm-build && cmake \
112 -DCMAKE_BUILD_TYPE:STRING=Release \
113 -DCMAKE_INSTALL_PREFIX:STRING=/usr \
114 -DLLVM_TARGETS_TO_BUILD:STRING=X86 \
115 ../llvm
116RUN make -C llvm-build -j 12 && make -C llvm-build install && rm -rf llvm-build
117
Craig Tiller9812c6f2016-03-17 14:46:18 -0700118# Prepare ccache
119RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
120RUN ln -s /usr/bin/ccache /usr/local/bin/g++
121RUN ln -s /usr/bin/ccache /usr/local/bin/cc
122RUN ln -s /usr/bin/ccache /usr/local/bin/c++
123RUN ln -s /usr/bin/ccache /usr/local/bin/clang
124RUN ln -s /usr/bin/ccache /usr/local/bin/clang++
125
Craig Tiller9812c6f2016-03-17 14:46:18 -0700126
127RUN mkdir /var/local/jenkins
128
Craig Tiller32173c52016-03-17 14:12:45 -0700129RUN clang++ -c -g -O2 -std=c++11 llvm/lib/Fuzzer/*.cpp -IFuzzer
130RUN ar ruv libFuzzer.a Fuzzer*.o
131RUN mv libFuzzer.a /usr/lib
132RUN rm -f Fuzzer*.o
Craig Tiller32173c52016-03-17 14:12:45 -0700133# Define the default command.
134CMD ["bash"]