Don't depend on system gcc when building LLVM
Test: ./busytown-build.sh
Bug: 199423807
Change-Id: Icd846460324339aa31054f9292f11e2d899e2fc1
diff --git a/busytown-build.sh b/busytown-build.sh
index 370b749..979c7b0 100755
--- a/busytown-build.sh
+++ b/busytown-build.sh
@@ -22,11 +22,8 @@
# For why we run a 2-stage bootstrap, see
# https://llvm.org/docs/BuildingADistribution.html#general-distribution-guidance
-echo "Trivially succeeding to prevent musket turndown, until we resolve b/206804351"
-exit 0
-
# find script
-SCRIPT_DIR="$(cd $(dirname $0) && pwd)"
+SCRIPT_DIR=$(cd "$(dirname $0)" && pwd)
cd $SCRIPT_DIR
LLVM_PROJECT=$SCRIPT_DIR
@@ -36,8 +33,10 @@
if [ "$OUT_DIR" == "" ]; then
OUT_DIR="$ROOT/out"
fi
+rm -rf $OUT_DIR
mkdir -p "$OUT_DIR"
-export OUT_DIR="$(cd $OUT_DIR && pwd)"
+OUT_DIR="$(cd $OUT_DIR && pwd)"
+export OUT_DIR
if [ "$DIST_DIR" == "" ]; then
DIST_DIR="$OUT_DIR/dist"
@@ -48,6 +47,11 @@
PREBUILTS=$ROOT/prebuilts
BIN_PATH=$PREBUILTS/build-tools/linux-x86/bin
+# We need a host clang to build the stage1 clang to build the stage2 clang
+# (build machines have a very old gcc by default)
+HOST_SYSROOT=$PREBUILTS/clang/host/linux-x86/clang-r437112b
+HOST_CLANG_BIN=$HOST_SYSROOT/bin
+
# Add prebuilts (especially ninja) to PATH
# (cmake won't run if ninja is not on PATH)
export PATH=$BIN_PATH:$PATH
@@ -55,19 +59,32 @@
CMAKE=$PREBUILTS/cmake/linux-x86/bin/cmake
NINJA=$BIN_PATH/ninja
-CMAKE_COMMON_OPTS="\
- -G Ninja \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_ENABLE_ASSERTIONS=OFF \
- -DLLVM_ENABLE_TERMINFO=OFF \
- -DLLVM_INCLUDE_GO_TESTS=OFF \
- -DLLVM_ENABLE_Z3_SOLVER=OFF \
- -DCOMPILER_RT_BUILD_BUILTINS=ON \
- -DLLVM_ENABLE_THREADS=ON \
- -DLLVM_OPTIMIZED_TABLEGEN=ON \
- -DLLVM_ENABLE_PROJECTS=clang;lld;libcxx;libcxxabi;compiler-rt \
- -DLLVM_BUILD_LLVM_DYLIB=OFF \
- -DLLVM_LINK_LLVM_DYLIB=OFF"
+LINKER_FLAGS=(-fuse-ld=lld -static-libstdc++)
+
+CMAKE_COMMON_OPTS=(
+ -G Ninja
+ -DCMAKE_BUILD_TYPE=Release
+ -DLLVM_ENABLE_ASSERTIONS=OFF
+ -DLLVM_ENABLE_TERMINFO=OFF
+ -DLLVM_INCLUDE_GO_TESTS=OFF
+ -DLLVM_ENABLE_Z3_SOLVER=OFF
+ -DCOMPILER_RT_BUILD_BUILTINS=ON
+ -DLLVM_ENABLE_THREADS=ON
+ -DLLVM_OPTIMIZED_TABLEGEN=ON
+ -DLLVM_ENABLE_PROJECTS="clang;lld;libcxx;libcxxabi;compiler-rt"
+ -DLLVM_BUILD_LLVM_DYLIB=OFF
+ -DLLVM_LINK_LLVM_DYLIB=OFF
+ -DLLVM_ENABLE_LIBCXX=ON
+)
+
+function cmakeBinArgs() {
+ binDir=$1
+ echo "\
+ -DCMAKE_C_COMPILER=$binDir/clang \
+ -DCMAKE_CXX_COMPILER=$binDir/clang++ \
+ -DCMAKE_LINKER=$binDir/ld.lld \
+ -DCMAKE_AR=$binDir/llvm-ar"
+}
function stage1build() {
STAGE1=$OUT_DIR/stage1
@@ -82,9 +99,13 @@
# this is just for the next step.
$CMAKE \
+ $(cmakeBinArgs $HOST_CLANG_BIN) \
-DCMAKE_INSTALL_PREFIX=$STAGE1 \
-DLLVM_TARGETS_TO_BUILD=Native \
- $CMAKE_COMMON_OPTS \
+ -DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAGS[*]}" \
+ -DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAGS[*]}" \
+ -DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAGS[*]}" \
+ "${CMAKE_COMMON_OPTS[@]}" \
$LLVM_PROJECT/llvm
$NINJA install
@@ -104,12 +125,12 @@
# available targets, according to package.py documentation
$CMAKE \
+ $(cmakeBinArgs $STAGE1/bin) \
-DCMAKE_INSTALL_PREFIX=$DIST_DIR \
- -DCMAKE_C_COMPILER=$STAGE1/bin/clang \
- -DCMAKE_CXX_COMPILER=$STAGE1/bin/clang++ \
- -DCMAKE_LINKER=$STAGE1/bin/ld.lld \
- -DCMAKE_AR=$STAGE1/bin/llvm-ar \
- $CMAKE_COMMON_OPTS \
+ "${CMAKE_COMMON_OPTS[@]}" \
+ -DCMAKE_EXE_LINKER_FLAGS="-static-libstdc++" \
+ -DCMAKE_SHARED_LINKER_FLAGS="-static-libstdc++" \
+ -DCMAKE_MODULE_LINKER_FLAGS="-static-libstdc++" \
$LLVM_PROJECT/llvm
$NINJA install
@@ -118,4 +139,6 @@
}
stage1build
-stage2build
+
+echo "Skipping stage 2 build for now: b/213465361"
+# stage2build