""" If the build* function is passed the compiler argument, for example, 'llvm-gcc', it is passed as a make variable to the make command. Otherwise, we check the LLDB_CC environment variable; if it is defined, it is passed as a make variable to the make command. If neither the compiler keyword argument nor the LLDB_CC environment variable is specified, no CC make variable is passed to the make command. The Makefile gets to define the default CC being used. Same idea holds for LLDB_ARCH environment variable, which maps to the ARCH make variable. """ import os import platform import lldbtest def getArchitecture(): """Returns the architecture in effect the test suite is running with.""" return os.environ["ARCH"] if "ARCH" in os.environ else "" def getCompiler(): """Returns the compiler in effect the test suite is running with.""" return os.environ["CC"] if "CC" in os.environ else "clang" def getArchFlag(): """Returns the flag required to specify the arch""" compiler = getCompiler() if compiler is None: return "" elif "gcc" in compiler: archflag = "-m" elif "clang" in compiler: archflag = "-arch " else: archflag = None return (" ARCHFLAG=" + archflag) if archflag else "" def getMake(): """Returns the name for GNU make""" if platform.system() == "FreeBSD": return "gmake " else: return "make " def getArchSpec(architecture): """ Helper function to return the key-value string to specify the architecture used for the make system. """ arch = architecture if architecture else None if not arch and "ARCH" in os.environ: arch = os.environ["ARCH"] # Note the leading space character. return (" ARCH=" + arch) if arch else "" def getCCSpec(compiler): """ Helper function to return the key-value string to specify the compiler used for the make system. """ cc = compiler if compiler else None if not cc and "CC" in os.environ: cc = os.environ["CC"] # Note the leading space character. return (" CC=" + cc) if cc else "" def getCmdLine(d): """ Helper function to return a properly formatted command line argument(s) string used for the make system. """ # If d is None or an empty mapping, just return an empty string. if not d: return "" cmdline = " ".join(["%s='%s'" % (k, v) for k, v in d.items()]) # Note the leading space character. return " " + cmdline def buildDefault(sender=None, architecture=None, compiler=None, dictionary=None, clean=True): """Build the binaries the default way.""" if clean: lldbtest.system(["/bin/sh", "-c", getMake() + "clean" + getCmdLine(dictionary) + ";" + getMake() + getArchSpec(architecture) + getCCSpec(compiler) + getCmdLine(dictionary)], sender=sender) else: lldbtest.system(["/bin/sh", "-c", getMake() + getArchSpec(architecture) + getCCSpec(compiler) + getCmdLine(dictionary)], sender=sender) # True signifies that we can handle building default. return True def buildDwarf(sender=None, architecture=None, compiler=None, dictionary=None, clean=True): """Build the binaries with dwarf debug info.""" if clean: lldbtest.system(["/bin/sh", "-c", getMake() + "clean" + getCmdLine(dictionary) + ";" + getMake() + "MAKE_DSYM=NO" + getArchSpec(architecture) + getCCSpec(compiler) + getCmdLine(dictionary)], sender=sender) else: lldbtest.system(["/bin/sh", "-c", getMake() + "MAKE_DSYM=NO" + getArchSpec(architecture) + getCCSpec(compiler) + getCmdLine(dictionary)], sender=sender) # True signifies that we can handle building dwarf. return True def cleanup(sender=None, dictionary=None): """Perform a platform-specific cleanup after the test.""" #import traceback #traceback.print_stack() if os.path.isfile("Makefile"): lldbtest.system(["/bin/sh", "-c", getMake() + "clean" + getCmdLine(dictionary)], sender=sender) # True signifies that we can handle cleanup. return True