blob: 9c84431da548257a4a5dec04d3d19a753f21b997 [file] [log] [blame]
Valeriy Savchenkoe010d142020-06-04 18:34:34 +03001import argparse
2import os
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +03003import sys
Valeriy Savchenkoe010d142020-06-04 18:34:34 +03004
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +03005from subprocess import call, check_call, CalledProcessError
Valeriy Savchenko11f28782020-06-08 12:49:31 +03006from time import sleep
7from typing import List, Tuple
Valeriy Savchenkoe010d142020-06-04 18:34:34 +03008
9
10def main():
11 settings, rest = parse_arguments()
Valeriy Savchenko11f28782020-06-08 12:49:31 +030012 if settings.wait:
13 wait()
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030014 if settings.build_llvm or settings.build_llvm_only:
15 build_llvm()
16 if settings.build_llvm_only:
17 return
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030018 sys.exit(test(rest))
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030019
20
Valeriy Savchenko11f28782020-06-08 12:49:31 +030021def wait():
22 # It is an easy on CPU way of keeping the docker container running
23 # while the user has a terminal session in that container.
24 while True:
25 sleep(3600)
26
27
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030028def parse_arguments() -> Tuple[argparse.Namespace, List[str]]:
29 parser = argparse.ArgumentParser()
Valeriy Savchenko11f28782020-06-08 12:49:31 +030030 parser.add_argument('--wait', action='store_true')
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030031 parser.add_argument('--build-llvm', action='store_true')
32 parser.add_argument('--build-llvm-only', action='store_true')
33 return parser.parse_known_args()
34
35
Valeriy Savchenko061b5bf2020-06-08 12:47:21 +030036def build_llvm():
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030037 os.chdir('/build')
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030038 try:
Valeriy Savchenko061b5bf2020-06-08 12:47:21 +030039 if is_cmake_needed():
40 cmake()
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030041 ninja()
42 except CalledProcessError:
43 print("Build failed!")
44 sys.exit(1)
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030045
46
Valeriy Savchenko061b5bf2020-06-08 12:47:21 +030047def is_cmake_needed():
48 return "build.ninja" not in os.listdir()
49
50
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030051CMAKE_COMMAND = "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release " \
52 "-DCMAKE_INSTALL_PREFIX=/analyzer -DLLVM_TARGETS_TO_BUILD=X86 " \
Valeriy Savchenko089a0ad2020-07-13 15:48:07 +030053 "-DLLVM_ENABLE_PROJECTS=\"clang;openmp\" -DLLVM_BUILD_RUNTIME=OFF " \
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030054 "-DLLVM_ENABLE_TERMINFO=OFF -DCLANG_ENABLE_ARCMT=OFF " \
55 "-DCLANG_ENABLE_STATIC_ANALYZER=ON"
56
57
58def cmake():
59 check_call(CMAKE_COMMAND + ' /llvm-project/llvm', shell=True)
60
61
62def ninja():
63 check_call("ninja install", shell=True)
64
65
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030066def test(args: List[str]) -> int:
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030067 os.chdir("/projects")
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030068 return call("/scripts/SATest.py " + " ".join(args), shell=True)
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030069
70
71if __name__ == '__main__':
72 main()