Skip to content

Commit 804135f

Browse files
author
Jason Mobarak
authored
Merge pull request #11 from swift-nav/silverjam/vanilla-clang-6
Support for building vanilla clang 6 cross compiler
2 parents 5a68636 + d63df28 commit 804135f

20 files changed

+510
-112
lines changed

.after_failure.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
3+
set -x
4+
5+
if [[ -e /tmp/base.bash.log ]]; then
6+
cp /tmp/base.bash.log /tmp/$VARIANT-base.bash.log
7+
./publish.sh /tmp/$VARIANT-base.bash.log
8+
tail -n 200 /tmp/base.bash.log
9+
fi
10+
11+
if [[ -e /tmp/build.bash.log ]]; then
12+
cp /tmp/build.bash.log /tmp/$VARIANT-build.bash.log
13+
./publish.sh /tmp/$VARIANT-build.bash.log
14+
tail -n 200 /tmp/build.bash.log;
15+
fi
16+
17+
if [[ -e /tmp/build_example.bash.log ]]; then
18+
cp /tmp/build_example.bash.log /tmp/$VARIANT-build_example.bash.log
19+
./publish.sh /tmp/$VARIANT-build_example.bash.log
20+
tail -n 200 /tmp/build_example.bash.log;
21+
fi

.travis.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ fi
2727
done
2828
)&
2929
TICKER_PID=$!
30-
trap 'kill ${TICKER_PID:-} ${BUILD_PID:-}' EXIT
30+
trap 'kill ${TICKER_PID:-} ${BUILD_PID:-} &>/dev/null || :' EXIT
3131

3232
### base.bash
3333

@@ -41,9 +41,9 @@ fi
4141

4242
### build.bash
4343

44-
echo 'Running build of llvm-obfuscator... '
44+
echo "Running build of llvm-$VARIANT... "
4545

46-
make "ARCH=$ARCH" NO_TTY=y build &>/tmp/build.bash.log &
46+
make NO_TTY=y "ARCH=$ARCH" "VARIANT=$VARIANT" build &>/tmp/build.bash.log &
4747
BUILD_PID=$!
4848

4949
wait $BUILD_PID
@@ -52,7 +52,7 @@ echo 'DONE.'
5252

5353
### build_example.bash
5454

55-
if [[ $ARCH == *arm* ]]; then
55+
if [[ $ARCH == *arm* ]] && [[ $VARIANT == obfuscator ]]; then
5656

5757
echo -n 'Building example project... '
5858
make NO_TTY=y build-example &>/tmp/build_example.bash.log

.travis.yml

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,39 @@ branches:
1010
services:
1111
- docker
1212

13-
before_install:
14-
- pip install --user --upgrade awscli
15-
- sudo apt-get update
16-
- sudo apt-get install -y jq
17-
18-
script:
19-
- ./.travis.sh
20-
21-
after_success:
22-
- travis_wait tar -C output -cJf "llvm-obfuscator-$ARCH.txz" .
23-
- ./publish.sh llvm-obfuscator-$ARCH.txz
24-
25-
after_failure:
26-
- if [[ -e /tmp/base.bash.log ]]; then echo "*** base.bash.log ***"; fi
27-
- if [[ -e /tmp/base.bash.log ]]; then tail -n 500 /tmp/base.bash.log; fi
28-
- if [[ -e /tmp/build.bash.log ]]; then echo "*** build.bash.log ***"; fi
29-
- if [[ -e /tmp/build.bash.log ]]; then tail -n 500 /tmp/build.bash.log; fi
30-
- if [[ -e /tmp/build_example.bash.log ]]; then echo "*** build_example.bash.log ***"; fi
31-
- if [[ -e /tmp/build_example.bash.log ]]; then tail -n 500 /tmp/build_example.bash.log; fi
13+
matrix:
14+
include:
15+
- env:
16+
- VARIANT=obfuscator
17+
- ARCH=arm,x86
18+
before_install:
19+
- pip install --user --upgrade awscli
20+
- sudo apt-get update
21+
- sudo apt-get install -y jq
22+
script:
23+
- ./pull_ccache.bash --variant=$VARIANT --arch=$ARCH
24+
- VARIANT=$VARIANT ./.travis.sh
25+
after_success:
26+
- travis_wait tar -C output -cJf "llvm-$VARIANT-$ARCH.txz" .
27+
- ./publish.sh llvm-$VARIANT-$ARCH.txz
28+
after_failure:
29+
- ./.after_failure.sh
30+
31+
- env:
32+
- VARIANT=vanilla
33+
- ARCH=arm,x86
34+
before_install:
35+
- pip install --user --upgrade awscli
36+
- sudo apt-get update
37+
- sudo apt-get install -y jq
38+
script:
39+
- ./pull_ccache.bash --variant=$VARIANT --arch=$ARCH
40+
- VARIANT=$VARIANT ./.travis.sh
41+
after_success:
42+
- travis_wait tar -C output -cJf "llvm-$VARIANT-$ARCH.txz" .
43+
- ./publish.sh llvm-$VARIANT-$ARCH.txz
44+
after_failure:
45+
- ./.after_failure.sh
3246

3347
env:
3448
global:
@@ -44,5 +58,3 @@ env:
4458
- secure: "T1wlLXyhfGnMNMPtHv2FspxsWG09hVZgaucSJ6IxN+PZBbgjLb/TMSlqqLXfIzx6s0SuQIzX1xZE8lb/uOzfLtjmxBdc4dGYLW+qR4AwkghQl2DGMK+hzGAi9ZbeCGKWtX7cN4WxLN1tpcTyQBCC8LcnP0xVxd+7Znytdezmlr86ce2d8dmUo+kyLdN+vhEUnch9zhMpuZI+TxV2HQqCS/6e31myP+3Xzw3B6o6uF8dYZ0QlWlNU4KjUNNAD7cLqkxNd38E7wFrQJdyrk03/hZanatl2mcL7Te5Uxo5sWN5WteTNwq8dCKXiEXpkEqP1++4wWTQDeQWoPjHlhHzO4MxGAdEUnlFWafsV78OJvr/gwV0UxDFmfadPwGG/xPPJMyNJjXwDyeztswknbVaNZdbRXp3m7Iri+bWCvOZE9N7rGde/5q0JOz9rwJXRDMPnp7+lyupHQQIdswNpkFraHz3eZ/h4n+Dkr3RtkW0M6ZpPR+/r18uD7jwm/Ye73E9wzq1b6sL0knX/OEwBv3FVvaBaA4SWzb1glDlru8BKnZfVIZ/UxYas6FqGN6H9ROyCHtva86ffv7HvvnB/gUqcOfY5si7WvtPVApIc9kfILcSWEchRWTHQIeUOdEUBfoq8/Km0BL6gguOO9Ge9zzOrdo0NThh8x7NoE0DhHdQctJY="
4559
# DOCKER_PASS
4660
- secure: "qEmUT+mBsHjLkrBYMZWiLl8+ZXq9UAv+DyMDww+N74hPtGiZxMqLuVIFq94qR/WhiI9zd7k+tjhy6TcgD8rpKoQnQSGXcotFGq6typ3UWEV0ekt40IMV5nBqopqGGIBVIHNfXjq0OTeYTF2eGncpNnznJHAQi8Dvj7vD99y5GA5RoZGSdsiqTyxBGMvZ0cE0QApkb1MH3lBVRzBuh6dotpa1RBlGR+i2xbcH3nAqy5RB38wZgMedAPnlUfg+uB+IQiF8+hbuSmHzADiabNLBkkB/UCOz59k/JkaeN+2gnyP6/so+SpOe1BKfpxKBcN74O4n056ZLDBRjTod2YSc49dKqxhZhQijwNJfFi3Tt5iNrFYdU3KPeqqfNLoQKmbBTKjGXbxHHXm3lnUuCTZH0Yd9QGKSAwn5kxDRy6DuyNMUGwFtu8YxzirwTJiQR6ayodMCMWjZCXuxUc0I5I2Y64CsofRWkuMbznjE4wJwptVPzTwIxkZnMt+aWVoQTXBtZVpiHf4CTJb65dyLDXeMOwhYnKzwLUrvvHHpOm7GygvAbbeDAzHumTDvt7s5nl2VwHNLmTK3TizvvpQCucIjG8M8dEd7iu4VRZh/rxGxV9MJ2qUNETa6hnfX+Z2xaLTcgYAG5z7p60sThPfFfYLopdJL1dO5eA/EncPzuQuh087w="
47-
matrix:
48-
- ARCH=x86,arm

Dockerfile renamed to Dockerfile.base

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,28 @@ RUN apt-get update \
2323
&& wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \
2424
&& echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main" \
2525
>/etc/apt/sources.list.d/llvm40.list \
26+
&& echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-6.0 main" \
27+
>/etc/apt/sources.list.d/llvm60.list \
2628
&& apt-get update \
27-
&& apt-get upgrade \
29+
&& apt-get upgrade -y \
2830
&& apt-get install -y libcurl4-openssl-dev \
2931
build-essential \
3032
bison \
3133
flex \
3234
ninja-build \
33-
llvm-4.0 \
34-
llvm-4.0-dev \
35-
clang-4.0 \
3635
git \
36+
m4 \
37+
gperf \
38+
gawk \
39+
ncurses-dev \
40+
texinfo \
41+
help2man \
3742
binutils-dev \
43+
libpthread-stubs0-dev \
44+
libtinfo-dev \
3845
python \
46+
python-dev \
47+
ccache \
3948
binutils-multiarch-dev \
4049
g++-4.8-arm-linux-gnueabihf \
4150
gcc-4.8-arm-linux-gnueabihf \
@@ -57,10 +66,9 @@ RUN apt-get update \
5766
&& tar -xzf cmake-3.10.1.tar.gz \
5867
&& cd cmake-3.10.1 \
5968
&& ./configure \
60-
&& make -j4 \
61-
&& make install \
69+
&& make -j8 \
70+
&& make -j8 install \
6271
&& cd .. && rm -rf cmake-* \
63-
&& apt-get clean \
64-
&& rm -rf /var/lib/apt/lists/*
72+
&& apt-get clean
6573

6674
# EOF

Dockerfile.obfuscator

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Copyright (C) 2017-2018 Swift Navigation Inc.
2+
# Contact: Swift Navigation <[email protected]>
3+
#
4+
# This source is subject to the license found in the file 'LICENSE' which must
5+
# be be distributed together with this source. All other rights reserved.
6+
#
7+
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
8+
# EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
9+
# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
10+
11+
ARG DOCKER_NAMETAG
12+
FROM $DOCKER_NAMETAG
13+
14+
RUN apt-get install -y llvm-4.0 llvm-4.0-dev clang-4.0 libclang-4.0-dev

Dockerfile.vanilla

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Copyright (C) 2017-2018 Swift Navigation Inc.
2+
# Contact: Swift Navigation <[email protected]>
3+
#
4+
# This source is subject to the license found in the file 'LICENSE' which must
5+
# be be distributed together with this source. All other rights reserved.
6+
#
7+
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
8+
# EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
9+
# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
10+
11+
ARG DOCKER_NAMETAG
12+
FROM $DOCKER_NAMETAG
13+
14+
RUN apt-get install -y llvm-6.0 llvm-6.0-dev clang-6.0 libclang-6.0-dev

Makefile

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ SCRIPTS := .travis.sh \
55
publish.sh \
66
run_build_shell.bash \
77
stage_sysroot.bash \
8+
do_clang_build.bash \
9+
push_ccache.bash \
10+
pull_ccache.bash \
11+
s3_download.bash \
812

913
all: check base build
1014

@@ -27,7 +31,7 @@ base: check-base
2731
$(CURDIR)/base.bash $(NO_TTY_ARG)
2832

2933
build: check-build
30-
$(CURDIR)/build.bash $(NO_TTY_ARG) --arch=$(ARCH)
34+
$(CURDIR)/build.bash $(NO_TTY_ARG) --arch=$(ARCH) --variant=$(VARIANT)
3135

3236
stage: check-stage_sysroot
3337
$(CURDIR)/stage_sysroot.bash $(NO_TTY_ARG)
@@ -38,7 +42,25 @@ build-example: check-build_example
3842
run: check-run_build_shell
3943
$(CURDIR)/run_build_shell.bash $(NO_TTY_ARG)
4044

41-
clean:
45+
clean-vanilla-build:
46+
docker volume rm vanilla-llvm-build || :
47+
docker volume rm vanilla-llvm-ccache || :
48+
49+
clean-vanilla-src:
50+
docker volume rm vanilla-llvm || :
51+
52+
clean-vanilla: clean-vanilla-build clean-vanilla-src
53+
54+
clean-obfuscator-build:
4255
docker volume rm obfuscator-llvm-build || :
56+
docker volume rm obfuscator-llvm-ccache || :
57+
58+
clean-obfuscator-src:
4359
docker volume rm obfuscator-llvm || :
60+
61+
clean-obfuscator: clean-obfuscator-build clean-obfuscator-src
62+
63+
clean-build: clean-vanilla clean-obfuscator
64+
65+
clean: clean-build
4466
sudo rm -rf output/*

base.bash

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,16 @@ fi
5656

5757
docker build \
5858
--force-rm --no-cache \
59-
-f Dockerfile -t "$DOCKER_NAMETAG" .
59+
-f Dockerfile.base -t "$DOCKER_NAMETAG" .
6060

61-
if [[ -n "${DOCKER_USER:-}" ]] && [[ -n "${DOCKER_PASS:-}" ]]; then
62-
echo "$DOCKER_PASS" | docker login --username="$DOCKER_USER" --password-stdin
63-
docker push "$DOCKER_NAMETAG"
64-
else
65-
echo "WARNING: not pushing new image to Docker Hub..." >&2
66-
fi
61+
docker build \
62+
--force-rm --no-cache \
63+
--build-arg "DOCKER_NAMETAG=$DOCKER_NAMETAG" \
64+
-f Dockerfile.vanilla -t "$DOCKER_NAMETAG-vanilla" .
65+
66+
docker build \
67+
--force-rm --no-cache \
68+
--build-arg "DOCKER_NAMETAG=$DOCKER_NAMETAG" \
69+
-f Dockerfile.obfuscator -t "$DOCKER_NAMETAG-obfuscator" .
70+
71+
./push.bash

build.bash

Lines changed: 63 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,42 +23,70 @@ NO_TTY=
2323
while [[ $# -gt 0 ]]; do
2424
case $1 in
2525

26-
--arch=x86) ARCH="X86"; shift ;;
27-
--arch=arm) ARCH="ARM"; shift ;;
28-
--arch=arm,x86) ARCH="ARM\\;X86"; shift ;;
29-
--arch=x86,arm) ARCH="X86\\;ARM"; shift ;;
26+
--arch=x86) ARCH="X86"; shift ;;
27+
--arch=arm) ARCH="ARM"; shift ;;
28+
--arch=arm,x86) ARCH="ARM\\;X86"; shift ;;
29+
--arch=x86,arm) ARCH="ARM\\;X86"; shift ;;
3030

31-
--verbose) VERBOSE="-v"; shift ;;
32-
--no-tty) NO_TTY=--no-tty; shift ;;
31+
--variant=vanilla) VARIANT="vanilla"; shift ;;
32+
--variant=obfuscator) VARIANT="obfuscator"; shift ;;
3333

34-
*) shift ;;
34+
--verbose) VERBOSE="-v"; shift ;;
35+
--no-tty) NO_TTY=--no-tty; shift ;;
36+
37+
*) shift ;;
3538
esac
3639
done
3740

3841
if [[ -z "${ARCH:-}" ]]; then
39-
echo "Error: must specify --arch=<arm|x86>"
42+
echo "Error: must specify --arch=<arm|x86|arm,x86|x86,arm>"
4043
exit 1
4144
fi
4245

43-
set -x
44-
# -DLLVM_BUILD_TOOLS:BOOL=FALSE \
46+
if [[ -z "${VARIANT:-}" ]]; then
47+
echo "Error: must a variant to build --variant=<vanilla|obfuscator>"
48+
exit 1
49+
fi
50+
51+
CXX_FLAGS="-L/toolchain/x86/x86_64-buildroot-linux-gnu/sysroot/lib \
52+
-L/toolchain/x86/x86_64-buildroot-linux-gnu/sysroot/usr/lib \
53+
-I/toolchain/x86/lib/gcc/x86_64-buildroot-linux-gnu/6.4.0/plugin/include"
54+
55+
if [[ "$VARIANT" == "obfuscator" ]]; then
56+
LLVM_REPO="https://github.com/obfuscator-llvm/obfuscator.git"
57+
LLVM_BRANCH="llvm-4.0"
58+
CLANG_REPO=""
59+
CLANG_TOOLS_EXTRA_REPO=""
60+
CPP_WRAPPER_DEFINE="-DCMAKE_CXX_COMPILER=/bin/cpp_wrapper"
61+
PATCH_COMMAND="{ git apply /patches/*.patch || : ; }"
62+
COMPILE_CPP_WRAPPER="cp -v /this_dir/cpp_wrapper.c /work/cpp_wrapper.c \
63+
&& gcc -std=c99 -O3 -Wall /work/cpp_wrapper.c -o /bin/cpp_wrapper"
64+
else
65+
LLVM_REPO="https://github.com/llvm-mirror/llvm.git"
66+
CLANG_REPO="https://github.com/llvm-mirror/clang.git"
67+
CLANG_TOOLS_EXTRA_REPO="https://github.com/llvm-mirror/clang-tools-extra.git"
68+
LLVM_BRANCH="release_60"
69+
CPP_WRAPPER_DEFINE="-DCMAKE_CXX_COMPILER=/toolchain/x86/bin/x86_64-linux-g++"
70+
PATCH_COMMAND="true"
71+
COMPILE_CPP_WRAPPER="true"
72+
CXX_FLAGS+=" -I/work/$VARIANT-llvm/tools/clang/include"
73+
CXX_FLAGS+=" -I/work/build/tools/clang/include"
74+
fi
4575

4676
CMAKE_COMMAND="\
4777
cmake -G Ninja \
48-
/work/obfuscator-llvm \
49-
-DCMAKE_INSTALL_PREFIX=/opt/llvm-obfuscator \
78+
/work/$VARIANT-llvm \
79+
-DCMAKE_INSTALL_PREFIX=/opt/llvm-$VARIANT \
5080
-DLLVM_TARGETS_TO_BUILD=$ARCH \
51-
-DCMAKE_CXX_FLAGS='-DENDIAN_LITTLE=1 -I/toolchain/x86/lib/gcc/x86_64-buildroot-linux-gnu/6.4.0/plugin/include' \
81+
-DCMAKE_CXX_FLAGS='-DENDIAN_LITTLE=1 $CXX_FLAGS' \
82+
-DLLVM_CCACHE_BUILD=ON \
83+
$CPP_WRAPPER_DEFINE \
5284
-DCMAKE_C_COMPILER=/toolchain/x86/bin/x86_64-linux-gcc \
53-
-DCMAKE_CXX_COMPILER=/bin/cpp_wrapper \
5485
-DCMAKE_BUILD_TYPE=Release \
5586
-DLLVM_BINUTILS_INCDIR=/usr/include \
56-
-DLLDB_DISABLE_CURSES:BOOL=TRUE \
5787
-DLLVM_ENABLE_TERMINFO=0 \
5888
-DLLVM_INCLUDE_TESTS=OFF"
5989

60-
PATCH_COMMAND="{ git apply /patches/*.patch || : ; }"
61-
6290
if [[ -z "$NO_TTY" ]]; then
6391
INTERACTIVE=("-i" "-t")
6492
else
@@ -70,23 +98,21 @@ docker run ${INTERACTIVE[@]:-} --rm \
7098
-v "$PWD/output/opt:/opt" \
7199
-v "$PWD/patches:/patches" \
72100
-v "$PWD:/this_dir" \
73-
-v obfuscator-llvm:/work/obfuscator-llvm \
74-
-v obfuscator-llvm-build:/work/build \
75-
"$DOCKER_NAMETAG" \
76-
/bin/bash -c "if [ ! -d /work/obfuscator-llvm/.git ]; then \
77-
git clone --depth=1 --single-branch -b llvm-4.0 \
78-
https://github.com/obfuscator-llvm/obfuscator.git \
79-
obfuscator-llvm;
80-
else \
81-
(cd /work/obfuscator-llvm && git pull); \
82-
fi \
83-
&& cp -v /this_dir/cpp_wrapper.c /work/cpp_wrapper.c \
84-
&& gcc -std=c99 -O3 -Wall /work/cpp_wrapper.c -o /bin/cpp_wrapper \
85-
&& cd /work/obfuscator-llvm \
86-
&& $PATCH_COMMAND \
87-
&& cd /work/build \
88-
&& $CMAKE_COMMAND \
89-
&& ninja $VERBOSE \
90-
&& ninja $VERBOSE install"
91-
92-
./stage_sysroot.bash $NO_TTY
101+
-v $VARIANT-llvm-ccache:/work/ccache \
102+
-v $VARIANT-llvm:/work/$VARIANT-llvm \
103+
-v $VARIANT-llvm-build:/work/build \
104+
-e VARIANT=$VARIANT -e ARCH=$ARCH \
105+
-e VERBOSE=$VERBOSE -e NO_TTY=$NO_TTY \
106+
-e CPP_WRAPPER_DEFINE=$CPP_WRAPPER_DEFINE \
107+
-e CMAKE_COMMAND="$CMAKE_COMMAND" \
108+
-e LLVM_REPO=$LLVM_REPO \
109+
-e LLVM_BRANCH=$LLVM_BRANCH \
110+
-e CLANG_REPO=$CLANG_REPO \
111+
-e CLANG_TOOLS_EXTRA_REPO=$CLANG_TOOLS_EXTRA_REPO \
112+
-e PATCH_COMMAND=$PATCH_COMMAND \
113+
-e COMPILE_CPP_WRAPPER=$COMPILE_CPP_WRAPPER \
114+
-e CCACHE_DIR=/work/ccache \
115+
"$DOCKER_NAMETAG-$VARIANT" \
116+
/bin/bash -c "/this_dir/do_clang_build.bash"
117+
118+
./stage_sysroot.bash $NO_TTY "--variant=$VARIANT"

build_tag

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v17

0 commit comments

Comments
 (0)