blob: 8a1f59e3afa8c61d3b6b248430acadddb875f791 [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
5from typing import List, Tuple
6
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +03007from subprocess import call, check_call, CalledProcessError
Valeriy Savchenkoe010d142020-06-04 18:34:34 +03008
9
10def main():
11 settings, rest = parse_arguments()
12 if settings.build_llvm or settings.build_llvm_only:
13 build_llvm()
14 if settings.build_llvm_only:
15 return
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030016 sys.exit(test(rest))
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030017
18
19def parse_arguments() -> Tuple[argparse.Namespace, List[str]]:
20 parser = argparse.ArgumentParser()
21 parser.add_argument('--build-llvm', action='store_true')
22 parser.add_argument('--build-llvm-only', action='store_true')
23 return parser.parse_known_args()
24
25
26def build_llvm() -> None:
27 os.chdir('/build')
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030028 try:
29 cmake()
30 ninja()
31 except CalledProcessError:
32 print("Build failed!")
33 sys.exit(1)
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030034
35
36CMAKE_COMMAND = "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release " \
37 "-DCMAKE_INSTALL_PREFIX=/analyzer -DLLVM_TARGETS_TO_BUILD=X86 " \
38 "-DLLVM_ENABLE_PROJECTS=clang -DLLVM_BUILD_RUNTIME=OFF " \
39 "-DLLVM_ENABLE_TERMINFO=OFF -DCLANG_ENABLE_ARCMT=OFF " \
40 "-DCLANG_ENABLE_STATIC_ANALYZER=ON"
41
42
43def cmake():
44 check_call(CMAKE_COMMAND + ' /llvm-project/llvm', shell=True)
45
46
47def ninja():
48 check_call("ninja install", shell=True)
49
50
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030051def test(args: List[str]) -> int:
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030052 os.chdir("/projects")
Valeriy Savchenkoe30706a2020-06-05 11:47:35 +030053 return call("/scripts/SATest.py " + " ".join(args), shell=True)
Valeriy Savchenkoe010d142020-06-04 18:34:34 +030054
55
56if __name__ == '__main__':
57 main()