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 | |
| 5 | from typing import List, Tuple |
| 6 | |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame^] | 7 | from subprocess import call, check_call, CalledProcessError |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 8 | |
| 9 | |
| 10 | def 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 Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame^] | 16 | sys.exit(test(rest)) |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 17 | |
| 18 | |
| 19 | def 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 | |
| 26 | def build_llvm() -> None: |
| 27 | os.chdir('/build') |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame^] | 28 | try: |
| 29 | cmake() |
| 30 | ninja() |
| 31 | except CalledProcessError: |
| 32 | print("Build failed!") |
| 33 | sys.exit(1) |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 34 | |
| 35 | |
| 36 | CMAKE_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 | |
| 43 | def cmake(): |
| 44 | check_call(CMAKE_COMMAND + ' /llvm-project/llvm', shell=True) |
| 45 | |
| 46 | |
| 47 | def ninja(): |
| 48 | check_call("ninja install", shell=True) |
| 49 | |
| 50 | |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame^] | 51 | def test(args: List[str]) -> int: |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 52 | os.chdir("/projects") |
Valeriy Savchenko | e30706a | 2020-06-05 11:47:35 +0300 | [diff] [blame^] | 53 | return call("/scripts/SATest.py " + " ".join(args), shell=True) |
Valeriy Savchenko | e010d14 | 2020-06-04 18:34:34 +0300 | [diff] [blame] | 54 | |
| 55 | |
| 56 | if __name__ == '__main__': |
| 57 | main() |