Index: infra/bots/assets/clang_linux/create.py |
diff --git a/infra/bots/assets/clang_linux/create.py b/infra/bots/assets/clang_linux/create.py |
index ace0d6c957c0d0b431172a3bb174c1d110c6186b..a7c2484433c6723404e908c5f7bb8a413703c5a5 100755 |
--- a/infra/bots/assets/clang_linux/create.py |
+++ b/infra/bots/assets/clang_linux/create.py |
@@ -18,6 +18,7 @@ REPO = "https://llvm.googlesource.com/" |
BRANCH = "release_39" |
def create_asset(target_dir): |
+ # Build Clang, lld, compiler-rt (sanitizer support) and libc++. |
os.chdir(tempfile.mkdtemp()) |
subprocess.check_call(["git", "clone", "-b", BRANCH, REPO + "llvm"]) |
os.chdir("llvm/tools") |
@@ -35,14 +36,25 @@ def create_asset(target_dir): |
"-DCMAKE_INSTALL_PREFIX=" + target_dir, |
"-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON", |
"-DLLVM_ENABLE_TERMINFO=OFF"]) |
- subprocess.check_call(["cmake", "--build", "."]) |
- subprocess.check_call(["cmake", "--build", ".", "--target", "install"]) |
- subprocess.check_call(["cp", "bin/llvm-symbolizer", target_dir + "/bin"]) |
+ subprocess.check_call(["ninja", "install"]) |
+ # Copy a couple extra files we need. |
+ subprocess.check_call(["cp", "bin/llvm-symbolizer", target_dir + "/bin"]) |
libstdcpp = subprocess.check_output(["c++", |
"-print-file-name=libstdc++.so.6"]) |
subprocess.check_call(["cp", libstdcpp.strip(), target_dir + "/lib"]) |
+ # Finally, build libc++ for MSAN bots using the Clang we just built. |
+ os.mkdir("../msan_out") |
+ os.chdir("../msan_out") |
+ subprocess.check_call(["cmake", "..", "-G", "Ninja", |
+ "-DCMAKE_BUILD_TYPE=MinSizeRel", |
+ "-DCMAKE_C_COMPILER=" + target_dir + "/bin/clang", |
+ "-DCMAKE_CXX_COMPILER=" + target_dir + "/bin/clang++", |
+ "-DLLVM_USE_SANITIZER=MemoryWithOrigins"]) |
+ subprocess.check_call(["ninja", "cxx"]) |
+ subprocess.check_call(["cp", "-r", "lib", target_dir + "/msan"]) |
+ |
def main(): |
parser = argparse.ArgumentParser() |