ART: Remove compiler invocation from Checker
In anticipation of running Checker from run-test, this patch removes
code which compiles Java files as this will be handled by run-test.
It simultaneously adds support for verifying an entire directory of
annotated test files.
Change-Id: Id91c19c83fddade076c77789316d59f00893e63b
diff --git a/tools/checker.py b/tools/checker.py
index bca0707..bb2ac0c 100755
--- a/tools/checker.py
+++ b/tools/checker.py
@@ -77,7 +77,6 @@
import shutil
import sys
import tempfile
-from subprocess import check_call
class Logger(object):
@@ -689,11 +688,14 @@
def ParseArguments():
parser = argparse.ArgumentParser()
- parser.add_argument("test_file", help="the source of the test with checking annotations")
+ parser.add_argument("tested_file",
+ help="text file the checks should be verified against")
+ parser.add_argument("source_path", nargs="?",
+ help="path to file/folder with checking annotations")
parser.add_argument("--check-prefix", dest="check_prefix", default="CHECK", metavar="PREFIX",
- help="prefix of checks in the test file (default: CHECK)")
+ help="prefix of checks in the test files (default: CHECK)")
parser.add_argument("--list-groups", dest="list_groups", action="store_true",
- help="print a list of all groups found in the test output")
+ help="print a list of all groups found in the tested file")
parser.add_argument("--dump-group", dest="dump_group", metavar="GROUP",
help="print the contents of an output group")
parser.add_argument("-q", "--quiet", action="store_true",
@@ -701,42 +703,6 @@
return parser.parse_args()
-class cd:
- """Helper class which temporarily changes the working directory."""
-
- def __init__(self, newPath):
- self.newPath = newPath
-
- def __enter__(self):
- self.savedPath = os.getcwd()
- os.chdir(self.newPath)
-
- def __exit__(self, etype, value, traceback):
- os.chdir(self.savedPath)
-
-
-def CompileTest(inputFile, tempFolder):
- classFolder = tempFolder + "/classes"
- dexFile = tempFolder + "/test.dex"
- oatFile = tempFolder + "/test.oat"
- outputFile = tempFolder + "/test.cfg"
- os.makedirs(classFolder)
-
- # Build a DEX from the source file. We pass "--no-optimize" to dx to avoid
- # interference with its optimizations.
- check_call(["javac", "-d", classFolder, inputFile])
- check_call(["dx", "--dex", "--no-optimize", "--output=" + dexFile, classFolder])
-
- # Run dex2oat and export the HGraph. The output is stored into ${PWD}/art.cfg.
- with cd(tempFolder):
- check_call(["dex2oat", "-j1", "--dump-cfg=" + outputFile, "--compiler-backend=Optimizing",
- "--android-root=" + os.environ["ANDROID_HOST_OUT"],
- "--boot-image=" + os.environ["ANDROID_HOST_OUT"] + "/framework/core-optimizing.art",
- "--runtime-arg", "-Xnorelocate", "--dex-file=" + dexFile, "--oat-file=" + oatFile])
-
- return outputFile
-
-
def ListGroups(outputFilename):
outputFile = OutputFile(open(outputFilename, "r"))
for group in outputFile.groups:
@@ -757,13 +723,30 @@
Logger.fail("Group \"" + groupName + "\" not found in the output")
-def RunChecks(checkPrefix, checkFilename, outputFilename):
- checkBaseName = os.path.basename(checkFilename)
- outputBaseName = os.path.splitext(checkBaseName)[0] + ".cfg"
+def FindCheckFiles(path):
+ if not path:
+ Logger.fail("No source path provided")
+ elif os.path.isfile(path):
+ return [ path ]
+ elif os.path.isdir(path):
+ foundFiles = []
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ if os.path.splitext(file)[1] == ".java":
+ foundFiles.append(os.path.join(root, file))
+ return foundFiles
+ else:
+ Logger.fail("Source path \"" + path + "\" not found")
- checkFile = CheckFile(checkPrefix, open(checkFilename, "r"), checkBaseName)
+
+def RunChecks(checkPrefix, checkPath, outputFilename):
+ outputBaseName = os.path.basename(outputFilename)
outputFile = OutputFile(open(outputFilename, "r"), outputBaseName)
- checkFile.match(outputFile)
+
+ for checkFilename in FindCheckFiles(checkPath):
+ checkBaseName = os.path.basename(checkFilename)
+ checkFile = CheckFile(checkPrefix, open(checkFilename, "r"), checkBaseName)
+ checkFile.match(outputFile)
if __name__ == "__main__":
@@ -773,12 +756,11 @@
tempFolder = tempfile.mkdtemp()
try:
- outputFile = CompileTest(args.test_file, tempFolder)
if args.list_groups:
- ListGroups(outputFile)
+ ListGroups(args.tested_file)
elif args.dump_group:
- DumpGroup(outputFile, args.dump_group)
+ DumpGroup(args.tested_file, args.dump_group)
else:
- RunChecks(args.check_prefix, args.test_file, outputFile)
+ RunChecks(args.check_prefix, args.source_path, args.tested_file)
finally:
shutil.rmtree(tempFolder)