brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · c8dfc1a Raw
78 lines · python
1import argparse2import os3import sys4 5from subprocess import call, check_call, CalledProcessError6from time import sleep7from typing import List, Tuple8 9 10def main():11    settings, rest = parse_arguments()12    cmake_opts = ["-D" + cmd for cmd in settings.D]13    if settings.wait:14        wait()15    if settings.build_llvm or settings.build_llvm_only:16        build_llvm(cmake_opts)17    if settings.build_llvm_only:18        return19    sys.exit(test(rest))20 21 22def wait():23    # It is an easy on CPU way of keeping the docker container running24    # while the user has a terminal session in that container.25    while True:26        sleep(3600)27 28 29def parse_arguments() -> Tuple[argparse.Namespace, List[str]]:30    parser = argparse.ArgumentParser()31    parser.add_argument("--wait", action="store_true")32    parser.add_argument("--build-llvm", action="store_true")33    parser.add_argument("--build-llvm-only", action="store_true")34    parser.add_argument("-D", action="append", default=[])35    return parser.parse_known_args()36 37 38def build_llvm(cmake_options):39    os.chdir("/build")40    try:41        if is_cmake_needed():42            cmake(cmake_options)43        ninja()44    except CalledProcessError:45        print("Build failed!")46        sys.exit(1)47 48 49def is_cmake_needed():50    return "build.ninja" not in os.listdir()51 52 53CMAKE_COMMAND = (54    "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release "55    "-DCMAKE_INSTALL_PREFIX=/analyzer -DLLVM_TARGETS_TO_BUILD=X86 "56    '-DLLVM_ENABLE_PROJECTS="clang;openmp" -DLLVM_BUILD_RUNTIME=OFF '57    "-DCLANG_ENABLE_STATIC_ANALYZER=ON"58)59 60 61def cmake(cmake_options):62    check_call(63        CMAKE_COMMAND + " ".join(cmake_options) + " /llvm-project/llvm", shell=True64    )65 66 67def ninja():68    check_call("ninja install", shell=True)69 70 71def test(args: List[str]) -> int:72    os.chdir("/projects")73    return call("/scripts/SATest.py " + " ".join(args), shell=True)74 75 76if __name__ == "__main__":77    main()78