1#!/bin/sh -x
2
3# Usage:
4# build-lldb-llvm-clang <revision> [Debug|Release|BuildAndIntegration]
5# build-lldb-llvm-clang <llvm-revision> <clang-revision> [Debug|Release|BuildAndIntegration]
6
7LLVM_REVISION=$1
8CLANG_REVISION=$2
9LLVM_CONFIGURATION=$3
10
11if [ "$LLVM_REVISION" = "" ]; then
12	echo "Usage:\n    build-lldb-llvm-clang <llvm-revision> [<clang-revision> Debug|Release||BuildAndIntegration]"
13	exit 1
14fi
15
16if [ "$CLANG_REVISION" = "" ]; then
17	$CLANG_REVISION = $LLVM_REVISION
18fi
19
20# Checkout LLVM
21svn co -q -r $LLVM_REVISION http://llvm.org/svn/llvm-project/llvm/trunk llvm
22
23# change directory to "./llvm"
24cd llvm
25
26# Checkout Clang
27# change directory to "./llvm/tools"
28cd tools
29svn co -q -r $CLANG_REVISION http://llvm.org/svn/llvm-project/cfe/trunk clang
30
31# change directory to "./llvm"
32cd ..
33for patch_file in ../scripts/llvm.*.diff
34do
35	echo "Applying patch from '$patch_file'"
36    patch -p0 < "$patch_file"
37done
38
39# change directory to "./llvm/tools/clang"
40cd tools/clang
41for patch_file in ../../../scripts/clang.*.diff
42do
43	echo "Applying patch from '$patch_file'"
44    patch -p0 < "$patch_file"
45done
46
47# change directory to "./"
48cd ../../..
49pwd
50
51if [ "$LLVM_CONFIGURATION" = "Debug" ]; then
52	# Configure "Debug+Asserts" build
53	mkdir llvm-debug
54	cd llvm-debug
55	../llvm/configure --enable-targets=x86_64,arm 
56	make -j8 clang-only VERBOSE=1 PROJECT_NAME='llvm'
57	make -j8 tools-only VERBOSE=1 PROJECT_NAME='llvm' EDIS_VERSION=1
58elif [ "$LLVM_CONFIGURATION" = "Release" ]; then
59	# Configure "Release" build
60	mkdir llvm-release
61	cd llvm-release
62	../llvm/configure --enable-targets=x86_64,arm --enable-optimized --disable-assertions
63	make -j8 clang-only VERBOSE=1 PROJECT_NAME='llvm'
64	make -j8 tools-only VERBOSE=1 PROJECT_NAME='llvm' EDIS_VERSION=1
65elif [ "$LLVM_CONFIGURATION" = "BuildAndIntegration" ]; then
66	# Don't configure or build for "BuildAndIntegration", this configuration 
67	# is a preparation step for a build submission
68	
69	# Remove all patches, and the llvm and clang "test" directories
70	rm -rf ./scripts/*.diff ./llvm/test ./llvm/tools/clang/test
71else
72	echo "checked out llvm (revision $LLVM_REVISION) and clang (revision $CLANG_REVISION)."
73	exit 0
74fi
75