Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 1 | import argparse |
| 2 | import os |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 3 | import sys |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 4 | |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 5 | from subprocess import call, check_call, CalledProcessError |
Valeriy Savchenko | 11f2878 | 2020-06-08 12:49:31 +0300 | [diff] [blame] | 6 | from time import sleep |
| 7 | from typing import List, Tuple |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 8 | |
| 9 | |
| 10 | def main(): |
| 11 | settings, rest = parse_arguments() |
Valeriy Savchenko | 11f2878 | 2020-06-08 12:49:31 +0300 | [diff] [blame] | 12 | if settings.wait: |
| 13 | wait() |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 14 | if settings.build_llvm or settings.build_llvm_only: |
| 15 | build_llvm() |
| 16 | if settings.build_llvm_only: |
| 17 | return |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 18 | sys.exit(test(rest)) |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 19 | |
| 20 | |
Valeriy Savchenko | 11f2878 | 2020-06-08 12:49:31 +0300 | [diff] [blame] | 21 | def 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 Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 28 | def parse_arguments() -> Tuple[argparse.Namespace, List[str]]: |
| 29 | parser = argparse.ArgumentParser() |
Valeriy Savchenko | 11f2878 | 2020-06-08 12:49:31 +0300 | [diff] [blame] | 30 | parser.add_argument('--wait', action='store_true') |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 31 | 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 Savchenko | 061b5bf | 2020-06-08 12:47:21 +0300 | [diff] [blame] | 36 | def build_llvm(): |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 37 | os.chdir('/build') |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 38 | try: |
Valeriy Savchenko | 061b5bf | 2020-06-08 12:47:21 +0300 | [diff] [blame] | 39 | if is_cmake_needed(): |
| 40 | cmake() |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 41 | ninja() |
| 42 | except CalledProcessError: |
| 43 | print("Build failed!") |
| 44 | sys.exit(1) |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 45 | |
| 46 | |
Valeriy Savchenko | 061b5bf | 2020-06-08 12:47:21 +0300 | [diff] [blame] | 47 | def is_cmake_needed(): |
| 48 | return "build.ninja" not in os.listdir() |
| 49 | |
| 50 | |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 51 | CMAKE_COMMAND = "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release " \ |
| 52 | "-DCMAKE_INSTALL_PREFIX=/analyzer -DLLVM_TARGETS_TO_BUILD=X86 " \ |
Valeriy Savchenko | 089a0ad | 2020-07-13 15:48:07 +0300 | [diff] [blame] | 53 | "-DLLVM_ENABLE_PROJECTS=\"clang;openmp\" -DLLVM_BUILD_RUNTIME=OFF " \ |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 54 | "-DLLVM_ENABLE_TERMINFO=OFF -DCLANG_ENABLE_ARCMT=OFF " \ |
| 55 | "-DCLANG_ENABLE_STATIC_ANALYZER=ON" |
| 56 | |
| 57 | |
| 58 | def cmake(): |
| 59 | check_call(CMAKE_COMMAND + ' /llvm-project/llvm', shell=True) |
| 60 | |
| 61 | |
| 62 | def ninja(): |
| 63 | check_call("ninja install", shell=True) |
| 64 | |
| 65 | |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 66 | def test(args: List[str]) -> int: |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 67 | os.chdir("/projects") |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame] | 68 | return call("/scripts/SATest.py " + " ".join(args), shell=True) |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 69 | |
| 70 | |
| 71 | if __name__ == '__main__': |
| 72 | main() |