示例#1
0
 def collect_unique_dependencies(self, path, benchmark):
     deps = super(ScalaDaCapoNativeImageBenchmarkSuite,
                  self).collect_dependencies(path)
     # if there are more versions of the same jar, we choose one and omit remaining from the classpath
     if benchmark in _scala_daCapo_exclude_lib:
         for lib in _scala_daCapo_exclude_lib[benchmark]:
             lib_path = mx.join(path, lib)
             if lib_path in deps:
                 deps.remove(mx.join(path, lib))
     return deps
示例#2
0
 def collect_group_dependencies(self, group, scala_version):
     if group == 'harness':
         if scala_version == 12:
             unpacked_renaissance = RenaissanceNativeImageBenchmarkSuite.renaissance_unpacked(self.suite)
             path = mx.join(unpacked_renaissance, 'renaissance-harness')
         else:
             path = RenaissanceNativeImageBenchmarkSuite.harness_path(self.suite)
     else:
         unpacked_renaissance = RenaissanceNativeImageBenchmarkSuite.renaissance_unpacked(self.suite)
         path = mx.join(unpacked_renaissance, 'benchmarks', group)
     return self.get_dependencies(path, group)
示例#3
0
 def collect_group_dependencies(self, group, requires_recompiled_harness):
     if group == 'harness':
         if requires_recompiled_harness:
             path = RenaissanceNativeImageBenchmarkSuite.harness_path(self.suite)
         else:
             unpacked_renaissance = RenaissanceNativeImageBenchmarkSuite.renaissance_unpacked(self.suite)
             path = mx.join(unpacked_renaissance, 'renaissance-harness')
     else:
         unpacked_renaissance = RenaissanceNativeImageBenchmarkSuite.renaissance_unpacked(self.suite)
         path = mx.join(unpacked_renaissance, 'benchmarks', group)
     return self.get_dependencies(path, group)
示例#4
0
    def _archivable_results(self, target_arch, use_relpath, single):
        def result(base_dir, file_path):
            assert not mx.isabs(file_path)
            archive_path = file_path if use_relpath else mx.basename(file_path)
            return mx.join(base_dir, file_path), archive_path

        yield result(mx.join(self.out_dir, target_arch), self._target)

        if not single:
            for header in os.listdir(mx.join(self.dir, self.include)):
                yield result(self.dir, mx.join(self.include, header))
    def _archivable_results(self, target_arch, use_relpath, single):
        out_dir_arch = self._install_dir
        for file_path in self.getResults():
            assert not mx.isabs(file_path)
            abs_path = mx.join(out_dir_arch, file_path)
            archive_path = file_path if use_relpath else mx.basename(file_path)

            # if test.skip exists the test should be skipped
            if mx.exists(mx.join(mx.dirname(abs_path), "test.skip")):
                continue

            yield abs_path, archive_path
示例#6
0
    def patches(self):
        """A list of patches that will be applied during a build."""
        os_arch_dir = mx.join(self.source_dirs()[0],
                              '{}-{}'.format(mx.get_os(), mx.get_arch()))
        if mx.exists(os_arch_dir):
            return [
                mx.join(os_arch_dir, patch)
                for patch in os.listdir(os_arch_dir)
            ]

        others_dir = mx.join(self.source_dirs()[0], 'others')
        return [mx.join(others_dir, patch) for patch in os.listdir(others_dir)]
示例#7
0
 def create_dacapo_classpath(self, dacapo_path, benchmark):
     dacapo_nested_resources = []
     dacapo_dat_resources = []
     dacapo_extracted = self.extract_dacapo(dacapo_path)
     benchmark_resources = self.benchmark_resources(benchmark)
     if benchmark_resources:
         for resource in benchmark_resources:
             dacapo_dat_resource = extract_archive(mx.join(dacapo_extracted, resource), benchmark)
             dat_resource_name = os.path.splitext(os.path.basename(resource))[0]
             dacapo_dat_resources.append(mx.join(dacapo_dat_resource, dat_resource_name))
             #collects nested jar files and classes directories
             dacapo_nested_resources += self.collect_nested_dependencies(dacapo_dat_resource)
     return dacapo_extracted, dacapo_dat_resources, dacapo_nested_resources
示例#8
0
文件: mx_native.py 项目: stiansols/mx
 def getArchivableResults(self, use_relpath=True, single=False):
     for target_arch in self.multiarch if self._use_multiarch else [mx.get_arch()]:
         toolchain = _Toolchain.for_(target_arch)
         target_arch_path = toolchain.target if self.multiarch else ''
         if toolchain.is_native or not single:
             for file_path, archive_path in self._archivable_results(target_arch, use_relpath, single):
                 yield file_path, mx.join(target_arch_path, archive_path)
示例#9
0
 def get_dependencies(self, group):
     deps = []
     for jar in list_jars(group):
         deps.append(
             RenaissanceNativeImageBenchmarkSuite.RenaissanceDependency(
                 os.path.basename(jar), mx.join(group, jar)))
     return deps
示例#10
0
def _build_aot_images(benchmarks):
    print('---------------- BEGIN BUILDING AOT IMAGES ----------------')
    output_dir = mx.join(_suite.get_output_root(), 'bin')
    mx.ensure_dir_exists(output_dir)
    for bench_name, bench in benchmarks.items():
        witness = mx.TimeStampFile(mx.join(output_dir, bench_name))
        if not witness.exists() or witness.isOlderThan(bench.src_file):
            cmd = [
                jdk.aot_image, '-cp', bench.classpath,
                '-H:Name={}'.format(bench_name),
                '-H:Class={}'.format(bench.class_file)
            ]
            cmd.extend(bench.build_args)
            print(' '.join(cmd))
            mx.run(cmd, cwd=output_dir)
    print('---------------- END BUILDING AOT IMAGES ----------------')
示例#11
0
def aot_benchmark(args):
    for bench in args:
        if bench not in _benchmarks:
            raise ValueError("'{}' is not an AOT benchmark.".format(bench))

    project = _get_project(_project_name)
    benchmarks = {bench: _benchmarks[bench]
                  for bench in args} if args else _benchmarks
    class_files = _build_aot_images(project, benchmarks)
    print('---------------- BEGIN RUNNING AOT BENCHMARKS ----------------')
    for bench in benchmarks:
        common_args = ['-XX:+PrintGC']
        print('------------ BEGIN {} BENCHMARK ------------'.format(
            bench.upper()))
        print('-------- BEGIN GRAAL RUN --------')
        graal_cmd = [jdk.java] + common_args
        graal_cmd.append(class_files[bench])
        graal_cmd.extend(benchmarks[bench][0])
        print(' '.join(graal_cmd))
        mx.run(graal_cmd, cwd=project.output_dir())
        print('-------- END GRAAL RUN --------')
        print('-------- BEGIN SVM RUN --------')
        svm_cmd = [mx.join('.', bench)] + common_args
        svm_cmd.append('10')  # set fixed number of warm up rounds
        svm_cmd.extend(benchmarks[bench][0][1:])
        print(' '.join(svm_cmd))
        mx.run(svm_cmd, cwd=project.output_dir())
        print('-------- END SVM RUN --------')
        print('------------ END {} BENCHMARK ------------'.format(
            bench.upper()))
    print('---------------- END RUNNING AOT BENCHMARKS ----------------')
示例#12
0
def extract_archive(path, extracted_name):
    extracted_archive = mx.join(mx.dirname(path), extracted_name)
    if not mx.exists(extracted_archive):
        # There can be multiple processes doing this so be atomic about it
        with mx.SafeDirectoryUpdater(extracted_archive, create=True) as sdu:
            with zipfile.ZipFile(path, 'r') as zf:
                zf.extractall(sdu.directory)
    return extracted_archive
def extract_archive(path, extracted_name):
    extracted_archive = mx.join(mx.dirname(path), extracted_name)
    if not mx.exists(extracted_archive):
        os.makedirs(extracted_archive)
        arc = zipfile.ZipFile(path, 'r')
        arc.extractall(extracted_archive)
        arc.close()
    return extracted_archive
示例#14
0
文件: mx_native.py 项目: stiansols/mx
    def __init__(self, suite, name, subDir, srcDirs, deps, workingSets, d, kind, **kwargs):
        self.deliverable = kwargs.pop('deliverable', name.split('.')[-1])
        if srcDirs:
            mx.abort('"sourceDirs" is not supported for default native projects')
        srcDirs += [self.include, self.src]
        super(DefaultNativeProject, self).__init__(suite, name, subDir, srcDirs, deps, workingSets, d, **kwargs)
        try:
            self._kind = self._kinds[kind]
        except KeyError:
            mx.abort('"native" should be one of {}, but "{}" is given'.format(list(self._kinds.keys()), kind))

        include_dir = mx.join(self.dir, self.include)
        if next(os.walk(include_dir))[1]:
            mx.abort('include directory must have a flat structure')

        self.include_dirs = [include_dir]
        if kind == 'static_lib':
            self.libs = [mx.join(self.out_dir, mx.get_arch(), self._target)]
示例#15
0
 def get_dependencies(self, group):
     deps = []
     for f in os.listdir(group):
         f_path = mx.join(group, f)
         if os.path.isfile(f_path) and f.endswith('.jar'):
             deps.append(
                 RenaissanceNativeImageBenchmarkSuite.
                 RenaissanceDependency(os.path.basename(f), f_path))
     return deps
示例#16
0
 def renaissance_unpacked(self):
     renaissance_unpacked = mx.join(mx.dirname(self.renaissancePath()),
                                    'renaissance.extracted')
     if not mx.exists(renaissance_unpacked):
         os.makedirs(renaissance_unpacked)
         arc = zipfile.ZipFile(self.renaissancePath(), 'r')
         arc.extractall(renaissance_unpacked)
         arc.close()
     return renaissance_unpacked
    def _archivable_results(self, target_arch, use_relpath, single):
        def result(base_dir, file_path):
            assert not mx.isabs(file_path)
            archive_path = file_path if use_relpath else mx.basename(file_path)
            return mx.join(base_dir, file_path), archive_path

        out_dir_arch = mx.join(self.out_dir, target_arch)
        for _result in self.getResults():
            yield result(out_dir_arch, _result)
示例#18
0
 def __init__(self,
              args,
              project,
              target_arch=mx.get_arch(),
              ninja_targets=None):
     super(NinjaBuildTask, self).__init__(args, project, target_arch)
     self._reason = None
     self._manifest = mx.join(self.out_dir, Ninja.default_manifest)
     self.ninja = Ninja(self.out_dir,
                        self.parallelism,
                        targets=ninja_targets)
示例#19
0
 def get_dependencies(self, path, group):
     deps = []
     for jar in list_jars(path):
         deps.append(
             RenaissanceNativeImageBenchmarkSuite.RenaissanceDependency(
                 os.path.basename(jar), mx.join(path, jar)))
     if group in _renaissance_exclude_lib:
         for lib in _renaissance_exclude_lib[group]:
             lib_dep = RenaissanceNativeImageBenchmarkSuite.RenaissanceDependency(
                 lib, mx.join(path, lib))
             if lib_dep in deps:
                 deps.remove(lib_dep)
     if group in _renaissance_additional_lib:
         for lib in _renaissance_additional_lib[group]:
             lib_path = RenaissanceNativeImageBenchmarkSuite.renaissance_additional_lib(
                 self.suite, lib)
             deps.append(
                 RenaissanceNativeImageBenchmarkSuite.
                 RenaissanceDependency(os.path.basename(lib_path),
                                       lib_path))
     return deps
示例#20
0
            class LibtoolNativeProject(mx.NativeProject,  # pylint: disable=too-many-ancestors
                                       mx_native.NativeDependency):
                include_dirs = property(lambda self: [mx.join(self.getOutput(), 'include')])
                libs = property(lambda self: [next(self.getArchivableResults(single=True))[0]])

                def getArchivableResults(self, use_relpath=True, single=False):
                    for file_path, archive_path in super(LibtoolNativeProject, self).getArchivableResults(use_relpath):
                        path_in_lt_objdir = mx.basename(mx.dirname(file_path)) == '.libs'
                        yield file_path, mx.basename(archive_path) if path_in_lt_objdir else archive_path
                        if single:
                            assert path_in_lt_objdir, 'the first build result must be from LT_OBJDIR'
                            break
示例#21
0
    def generate_manifest(self, path):
        unsupported_source_files = list(
            set(self._source['files'].keys()) - {'.h', '.c', '.cc', '.S'})
        if unsupported_source_files:
            mx.abort(
                '{} source files are not supported by default native projects'.
                format(unsupported_source_files))

        with NinjaManifestGenerator(self, open(path, 'w')) as gen:
            gen.comment("Toolchain configuration")
            gen.include(mx.join(self.toolchain.get_output(),
                                'toolchain.ninja'))
            gen.newline()
            gen.variables(cflags=[
                mx_subst.path_substitutions.substitute(cflag)
                for cflag in self.cflags
            ])
            if self._kind != self._kinds['static_lib']:
                gen.variables(
                    ldflags=[
                        mx_subst.path_substitutions.substitute(ldflag)
                        for ldflag in self.ldflags
                    ],
                    ldlibs=self.ldlibs,
                )
            gen.include_dirs(
                collections.OrderedDict.fromkeys(
                    # remove the duplicates while maintaining the ordering
                    [mx.dirname(h_file) for h_file in self.h_files] + list(
                        itertools.chain.from_iterable(
                            getattr(d, 'include_dirs', [])
                            for d in self.buildDependencies))).keys())

            gen.comment('Compiled project sources')
            object_files = [gen.cc(f) for f in self.c_files]
            gen.newline()
            object_files += [gen.cxx(f) for f in self.cxx_files]
            gen.newline()
            object_files += [gen.asm(f) for f in self.asm_sources]
            gen.newline()

            gen.comment('Project deliverable')
            if self._kind == self._kinds['static_lib']:
                gen.ar(self._target, object_files)
            else:
                link = gen.linkxx if self.cxx_files else gen.link
                dep_libs = list(
                    itertools.chain.from_iterable(
                        getattr(d, 'libs', [])
                        for d in self.buildDependencies))
                link(self._target, object_files + dep_libs)
示例#22
0
        def get_dependencies(self, path, group):
            deps = []
            for jar in list_jars(path):
                deps.append(
                    RenaissanceNativeImageBenchmarkSuite.RenaissanceDependency(
                        os.path.basename(jar), mx.join(path, jar)))

            if self.suite.version() in ["0.9.0", "0.10.0", "0.11.0"]:
                if group == 'apache-spark':
                    # breeze jar is replaced with a patched jar because of IncompatibleClassChange errors due to a bug in the Scala compiler
                    invalid_bytecode_jar = 'breeze_2.11-0.11.2.jar'
                    lib_dep = RenaissanceNativeImageBenchmarkSuite.RenaissanceDependency(
                        invalid_bytecode_jar,
                        mx.join(path, invalid_bytecode_jar))
                    if lib_dep in deps:
                        deps.remove(lib_dep)
                    lib_path = RenaissanceNativeImageBenchmarkSuite.renaissance_additional_lib(
                        self.suite, 'SPARK_BREEZE_PATCHED')
                    deps.append(
                        RenaissanceNativeImageBenchmarkSuite.
                        RenaissanceDependency(os.path.basename(lib_path),
                                              lib_path))
            return deps
示例#23
0
文件: mx_native.py 项目: stiansols/mx
    def _ninja_deps(cls):  # pylint: disable=no-self-argument
        deps = []

        try:
            subprocess.check_output(['ninja', '--version'], stderr=subprocess.STDOUT)
        except OSError:
            dep = mx.library('NINJA', False)
            if dep:
                deps.append(dep.qualifiedName())
                Ninja.binary = mx.join(dep.get_path(False), 'ninja')
            else:
                # necessary until GR-13214 is resolved
                mx.warn('Make `ninja` binary available via PATH to build native projects.')

        try:
            import ninja_syntax  # pylint: disable=unused-variable, unused-import
        except ImportError:
            dep = mx.library('NINJA_SYNTAX')
            deps.append(dep.qualifiedName())
            module_path = mx.join(dep.get_path(False), 'ninja_syntax-{}'.format(dep.version))
            mx.ensure_dir_exists(module_path)  # otherwise, import machinery will ignore it
            sys.path.append(module_path)

        return deps
示例#24
0
文件: mx_native.py 项目: stiansols/mx
    def _source(self):
        source_tree = []
        source_files = collections.defaultdict(list)

        for source_dir in self.source_dirs():
            for root, _, files in os.walk(source_dir):
                rel_root = os.path.relpath(root, self.dir)
                source_tree.append(rel_root)

                # group files by extension
                grouping = collections.defaultdict(list)
                for f in files:
                    grouping[os.path.splitext(f)[1]].append(mx.join(rel_root, f))
                for ext in grouping.keys():
                    source_files[ext] += grouping[ext]

        return dict(tree=source_tree, files=source_files)
 def create_classpath(self, benchmark):
     dacapo_nested_resources = []
     dacapo_dat_resources = []
     dacapo_extracted = self.extract_dacapo()
     benchmark_resources = _dacapo_resources[benchmark]
     if benchmark_resources:
         for resource in benchmark_resources:
             dacapo_dat_resource = extract_archive(
                 mx.join(dacapo_extracted, resource), benchmark)
             dacapo_dat_resources.append(dacapo_dat_resource)
             #collects nested jar files and classes directories
             dacapo_nested_resources += self.collect_nested_dependencies(
                 dacapo_dat_resource)
     dacapo_jars = self.collect_dependencies(
         os.path.join(dacapo_extracted, 'jar'))
     cp = ':'.join([dacapo_extracted] + dacapo_jars + dacapo_dat_resources +
                   dacapo_nested_resources)
     return cp
    def __init__(self,
                 suite,
                 name,
                 deps,
                 workingSets,
                 subDir,
                 buildRef=True,
                 buildSharedObject=False,
                 bundledLLVMOnly=False,
                 ninja_install_targets=None,
                 max_jobs=8,
                 cmakeConfigVariant=None,
                 **args):

        if bundledLLVMOnly and mx.get_env('CLANG_CC', None):
            self.ignore = "Environment variable 'CLANG_CC' is set but project specifies 'bundledLLVMOnly'"
        if 'buildDependencies' not in args:
            args['buildDependencies'] = []
        if 'sdk:LLVM_TOOLCHAIN' not in args['buildDependencies']:
            args['buildDependencies'].append('sdk:LLVM_TOOLCHAIN')
        self.buildRef = buildRef
        self.buildSharedObject = buildSharedObject
        self.current_variant = None
        self.cmake_config_variant = cmakeConfigVariant or {}
        super(SulongCMakeTestSuite,
              self).__init__(suite,
                             name,
                             deps,
                             workingSets,
                             subDir,
                             ninja_install_targets=ninja_install_targets
                             or ["install"],
                             max_jobs=max_jobs,
                             **args)
        self._install_dir = mx.join(self.out_dir, "result")
        # self._ninja_targets = self.getResults()
        _config = self._cmake_config_raw
        _module_path = mx.Suite._pop_list(_config, 'CMAKE_MODULE_PATH', self)
        _module_path.append('<path:com.oracle.truffle.llvm.tests.cmake>')
        _config['CMAKE_MODULE_PATH'] = ';'.join(_module_path)
        _config[
            'SULONG_MODULE_PATH'] = '<path:com.oracle.truffle.llvm.tests.cmake>'
        self._init_cmake = False
示例#27
0
def _build_aot_images(project, benchmarks):
    print('---------------- BEGIN BUILDING AOT IMAGES ----------------')
    output_dir = project.output_dir()
    class_files = {}
    for bench in benchmarks:
        bench_class, (bench_src, _) = project.find_classes_with_annotations(
            None, ['@AOTBench("{}")'.format(bench)]).popitem()
        class_files[bench] = bench_class
        witness = mx.TimeStampFile(mx.join(output_dir, bench))
        if not witness.exists() or witness.isOlderThan(bench_src):
            cmd = [
                jdk.aot_image, '-cp', '.', '-H:Name={}'.format(bench),
                '-H:Class={}'.format(bench_class)
            ]
            cmd.extend(benchmarks[bench][1])
            print(' '.join(cmd))
            mx.run(cmd, cwd=output_dir)
    print('---------------- END BUILDING AOT IMAGES ----------------')
    return class_files
示例#28
0
 def __init__(self, vm, bm_suite, args):
     self.bmSuite = bm_suite
     self.benchmark_suite_name = bm_suite.benchSuiteName(args) if len(inspect.getargspec(bm_suite.benchSuiteName).args) > 1 else bm_suite.benchSuiteName() # pylint: disable=deprecated-method
     self.benchmark_name = bm_suite.benchmarkName()
     self.extra_image_build_arguments = bm_suite.extra_image_build_argument(self.benchmark_name, args)
     self.extra_run_args = bm_suite.extra_run_arg(self.benchmark_name, args)
     self.extra_agent_run_args = bm_suite.extra_agent_run_arg(self.benchmark_name, args)
     self.extra_profile_run_args = bm_suite.extra_profile_run_arg(self.benchmark_name, args)
     self.extra_agent_profile_run_args = bm_suite.extra_agent_profile_run_arg(self.benchmark_name, args)
     self.benchmark_output_dir = bm_suite.benchmark_output_dir(self.benchmark_name, args)
     self.pgo_iteration_num = None
     self.params = ['extra-image-build-argument', 'extra-run-arg', 'extra-agent-run-arg', 'extra-profile-run-arg',
                    'extra-agent-profile-run-arg', 'benchmark-output-dir', 'stages', 'skip-agent-assertions']
     self.profile_file_extension = '.iprof'
     self.stages = bm_suite.stages(args)
     self.last_stage = self.stages[-1]
     self.skip_agent_assertions = bm_suite.skip_agent_assertions(self.benchmark_name, args)
     self.root_dir = self.benchmark_output_dir if self.benchmark_output_dir else mx.join(mx.suite('vm').dir, 'mxbuild')
     self.executable_suffix = ('-' + self.benchmark_name) if self.benchmark_name else ''
     self.executable, self.classpath_arguments, self.system_properties, self.image_run_args = NativeImageVM.extract_benchmark_arguments(args)
     self.executable_name = (os.path.splitext(os.path.basename(self.executable[1]))[0] + self.executable_suffix if self.executable[0] == '-jar' else self.executable[0] + self.executable_suffix).lower()
     self.final_image_name = self.executable_name + '-' + vm.config_name()
     self.output_dir = mx.join(os.path.abspath(self.root_dir), 'native-image-bench-' + self.executable_name + '-' + vm.config_name())
     self.profile_path_no_extension = os.path.join(self.output_dir, self.executable_name)
     self.latest_profile_path = self.profile_path_no_extension + '-latest' + self.profile_file_extension
     self.config_dir = os.path.join(self.output_dir, 'config')
     self.log_dir = self.output_dir
     self.base_image_build_args = [os.path.join(mx_sdk_vm_impl.graalvm_home(fatalIfMissing=True), 'bin', 'native-image')]
     self.base_image_build_args += ['--no-fallback', '--no-server', '-g', '--allow-incomplete-classpath']
     self.base_image_build_args += ['-J-ea', '-J-esa', '-H:+VerifyGraalGraphs', '-H:+VerifyPhases'] if vm.is_gate else []
     self.base_image_build_args += self.system_properties
     self.base_image_build_args += self.classpath_arguments
     self.base_image_build_args += self.executable
     self.base_image_build_args += ['-H:Path=' + self.output_dir]
     self.base_image_build_args += ['-H:ConfigurationFileDirectories=' + self.config_dir]
     if vm.is_llvm:
         self.base_image_build_args += ['-H:CompilerBackend=llvm', '-H:Features=org.graalvm.home.HomeFinderFeature', '-H:DeadlockWatchdogInterval=0']
     self.base_image_build_args += self.extra_image_build_arguments
示例#29
0
def _run(benchmarks):
    print('---------------- BEGIN RUNNING AOT BENCHMARKS ----------------')
    for bench_name, bench in benchmarks.items():
        common_args = ['-XX:+PrintGC']
        print('------------ BEGIN {} BENCHMARK ------------'.format(
            bench_name.upper()))
        print('-------- BEGIN GRAAL RUN --------')
        graal_cmd = [jdk.java, '-cp', bench.classpath] + common_args
        graal_cmd.append(bench.class_file)
        graal_cmd.extend(bench.runtime_args)
        print(' '.join(graal_cmd))
        mx.run(graal_cmd, cwd=_suite.get_output_root())
        print('-------- END GRAAL RUN --------')
        print('-------- BEGIN SVM RUN --------')
        svm_cmd = [mx.join('bin', bench_name)] + common_args
        svm_cmd.append('10')  # set fixed number of warm up rounds
        svm_cmd.extend(bench.runtime_args[1:])
        print(' '.join(svm_cmd))
        mx.run(svm_cmd, cwd=_suite.get_output_root())
        print('-------- END SVM RUN --------')
        print('------------ END {} BENCHMARK ------------'.format(
            bench_name.upper()))
    print('---------------- END RUNNING AOT BENCHMARKS ----------------')
示例#30
0
 def collect_dependencies(path):
     deps = []
     for f in list_jars(path):
         deps.append(mx.join(path, f))
     return deps