def _test_libgraal_truffle(extra_vm_arguments): def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config def is_truffle_fallback(arg): fallback_args = [ "-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime", "-Dgraalvm.ForcePolyglotInvalid=true" ] return arg in fallback_args newVmArgs = [arg for arg in vmArgs if not is_truffle_fallback(arg)] return (newVmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant(_unittest_config_participant) excluded_tests = environ.get("TEST_LIBGRAAL_EXCLUDE") if excluded_tests: with NamedTemporaryFile(prefix='blacklist.', mode='w', delete=False) as fp: fp.file.writelines([l + '\n' for l in excluded_tests.split()]) unittest_args = ["--blacklist", fp.name] else: unittest_args = [] unittest_args = unittest_args + ["--enable-timing", "--verbose"] compiler_log_file = "graal-compiler.log" mx_unittest.unittest(unittest_args + extra_vm_arguments + [ "-Dpolyglot.engine.AllowExperimentalOptions=true", "-Dpolyglot.engine.CompileImmediately=true", "-Dpolyglot.engine.BackgroundCompilation=false", "-Dpolyglot.engine.CompilationFailureAction=Throw", "-Dpolyglot.engine.TraceCompilation=true", "-Dpolyglot.log.file={0}". format(compiler_log_file), "-Dgraalvm.locatorDisabled=true", "truffle" ]) if exists(compiler_log_file): remove(compiler_log_file)
def mx_post_parse_cmd_line(opts): if _shouldRunTCKParticipant: mx_unittest.add_config_participant(_unittest_config_participant_tck) def _uses_truffle_dsl_processor(dist): for dep in dist.deps: if dep.name.startswith('TRUFFLE_DSL_PROCESSOR'): return True truffle_dsl_processors = set() def visit(dep, edge): if dep is not dist and dep.isJavaProject(): for ap in dep.annotation_processors(): if ap.name.startswith('TRUFFLE_DSL_PROCESSOR'): truffle_dsl_processors.add(ap) dist.walk_deps(visit=visit) return len(truffle_dsl_processors) != 0 for d in mx.dependencies(): if d.isJARDistribution(): if _uses_truffle_dsl_processor(d): d.set_archiveparticipant(TruffleArchiveParticipant())
def gate_body(args, tasks): with Task('Vm: GraalVM dist names', tasks, tags=['names']) as t: if t: mx_sdk_vm.verify_graalvm_configs(suites=['vm', 'vm-enterprise']) with Task('Vm: Basic GraalVM Tests', tasks, tags=[VmGateTasks.compiler]) as t: if t and mx_sdk_vm_impl.has_component('GraalVM compiler'): # 1. the build must be a GraalVM # 2. the build must be JVMCI-enabled since the 'GraalVM compiler' component is registered mx_sdk_vm_impl.check_versions( mx_sdk_vm_impl.graalvm_output(), graalvm_version_regex=mx_sdk_vm_impl.graalvm_version_regex, expect_graalvm=True, check_jvmci=True) if mx_sdk_vm_impl.has_component('LibGraal'): libgraal_location = mx_sdk_vm_impl.get_native_image_locations( 'LibGraal', 'jvmcicompiler') if libgraal_location is None: mx.warn( "Skipping libgraal tests: no library enabled in the LibGraal component" ) else: extra_vm_arguments = [ '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location) ] if args.extra_vm_argument: extra_vm_arguments += args.extra_vm_argument import mx_compiler # run avrora on the GraalVM binary itself with Task('LibGraal Compiler:GraalVM DaCapo-avrora', tasks, tags=[VmGateTasks.libgraal]) as t: if t: java_exe = join(mx_sdk_vm_impl.graalvm_home(), 'bin', 'java') mx.run([ java_exe, '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-jar', mx.library('DACAPO').get_path(True), 'avrora', '-n', '1' ]) # Ensure that fatal errors in libgraal route back to HotSpot vmargs = [ '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-XX:+PrintFlagsFinal', '-Dlibgraal.CrashAt=length,hashCode', '-Dlibgraal.CrashAtIsFatal=true' ] cmd = ["dacapo:avrora", "--tracker=none", "--" ] + vmargs + ["--", "--preserve"] out = mx.OutputCapture() exitcode, bench_suite, _ = mx_benchmark.gate_mx_benchmark( cmd, nonZeroIsFatal=False, out=out, err=out) if exitcode == 0: if 'CrashAtIsFatal: no fatalError function pointer installed' in out.data: # Executing a VM that does not configure fatal errors handling # in libgraal to route back through the VM. pass else: mx.abort( 'Expected following benchmark to result in non-zero exit code: ' + ' '.join(cmd)) else: if len(bench_suite.scratchDirs()) == 0: mx.abort( "No scratch dir found despite error being expected!" ) latest_scratch_dir = bench_suite.scratchDirs()[-1] seen_libjvmci_log = False hs_errs = glob.glob( join(latest_scratch_dir, 'hs_err_pid*.log')) if not hs_errs: mx.abort( 'Expected a file starting with "hs_err_pid" in test directory. Entries found=' + str(listdir(latest_scratch_dir))) for hs_err in hs_errs: mx.log("Verifying content of {}".format( join(latest_scratch_dir, hs_err))) with open(join(latest_scratch_dir, hs_err)) as fp: contents = fp.read() if 'libjvmci' in hs_err: seen_libjvmci_log = True if 'Fatal error: Forced crash' not in contents: mx.abort( 'Expected "Fatal error: Forced crash" to be in contents of ' + hs_err + ':' + linesep + contents) else: if 'Fatal error in JVMCI' not in contents: mx.abort( 'Expected "Fatal error in JVMCI" to be in contents of ' + hs_err + ':' + linesep + contents) if 'JVMCINativeLibraryErrorFile' in out.data and not seen_libjvmci_log: mx.abort( 'Expected a file matching "hs_err_pid*_libjvmci.log" in test directory. Entries found=' + str(listdir(latest_scratch_dir))) # Only clean up scratch dir on success for scratch_dir in bench_suite.scratchDirs(): mx.log( "Cleaning up scratch dir after gate task completion: {}" .format(scratch_dir)) mx.rmtree(scratch_dir) with Task('LibGraal Compiler:CTW', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx_compiler.ctw([ '-DCompileTheWorld.Config=Inline=false CompilationFailureAction=ExitVM', '-esa', '-XX:+EnableJVMCI', '-DCompileTheWorld.MultiThreaded=true', '-Dgraal.InlineDuringParsing=false', '-Dgraal.TrackNodeSourcePosition=true', '-DCompileTheWorld.Verbose=false', '-DCompileTheWorld.HugeMethodLimit=4000', '-DCompileTheWorld.MaxCompiles=150000', '-XX:ReservedCodeCacheSize=300m', ], extra_vm_arguments) mx_compiler.compiler_gate_benchmark_runner( tasks, extra_vm_arguments, prefix='LibGraal Compiler:') with Task('LibGraal Truffle:unittest', tasks, tags=[VmGateTasks.libgraal]) as t: if t: def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config def is_truffle_fallback(arg): fallback_args = [ "-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime", "-Dgraalvm.ForcePolyglotInvalid=true" ] return arg in fallback_args newVmArgs = [ arg for arg in vmArgs if not is_truffle_fallback(arg) ] return (newVmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant( _unittest_config_participant) excluded_tests = environ.get("TEST_LIBGRAAL_EXCLUDE") if excluded_tests: with NamedTemporaryFile(prefix='blacklist.', mode='w', delete=False) as fp: fp.file.writelines( [l + '\n' for l in excluded_tests.split()]) unittest_args = ["--blacklist", fp.name] else: unittest_args = [] unittest_args = unittest_args + [ "--enable-timing", "--verbose" ] compiler_log_file = "graal-compiler.log" mx_unittest.unittest(unittest_args + extra_vm_arguments + [ "-Dpolyglot.engine.AllowExperimentalOptions=true", "-Dpolyglot.engine.CompileImmediately=true", "-Dpolyglot.engine.BackgroundCompilation=false", "-Dpolyglot.engine.TraceCompilation=true", "-Dpolyglot.log.file={0}".format(compiler_log_file), "-Dgraalvm.locatorDisabled=true", "truffle" ]) if exists(compiler_log_file): remove(compiler_log_file) else: mx.warn("Skipping libgraal tests: component not enabled") gate_substratevm(tasks) gate_sulong(tasks) gate_python(tasks) gate_svm_sl_tck(tasks) gate_svm_truffle_tck_js(tasks)
# Needed for om.oracle.truffle.api.dsl.test.TestHelper#instrumentSlowPath vmArgs = vmArgs + [ '--add-opens=org.graalvm.truffle/com.oracle.truffle.api.nodes=ALL-UNNAMED' ] # This is required for the call to setAccessible in # TruffleTCK.testValueWithSource to work. vmArgs = vmArgs + [ '--add-opens=org.graalvm.truffle/com.oracle.truffle.polyglot=ALL-UNNAMED', '--add-modules=ALL-MODULE-PATH' ] return (vmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant(_unittest_config_participant) def sl(args): """run an SL program""" vmArgs, slArgs = mx.extract_VM_args(args) mx.run_java(vmArgs + _path_args([ "TRUFFLE_API", "com.oracle.truffle.sl", "com.oracle.truffle.sl.launcher" ]) + ["com.oracle.truffle.sl.launcher.SLMain"] + slArgs) def _truffle_gate_runner(args, tasks): jdk = mx.get_jdk(tag=mx.DEFAULT_JDK_TAG) with Task('Jackpot check', tasks) as t: if t: jackpot(['--fail-on-warnings'], suite=None, nonZeroIsFatal=True)
def gate_body(args, tasks): with Task('Vm: Basic GraalVM Tests', tasks, tags=[VmGateTasks.compiler]) as t: if t and mx_vm.has_component('GraalVM compiler'): # 1. the build must be a GraalVM # 2. the build must be JVMCI-enabled since the 'GraalVM compiler' component is registered mx_vm.check_versions( mx_vm.graalvm_output(), graalvm_version_regex=mx_vm.graalvm_version_regex, expect_graalvm=True, check_jvmci=True) with Task('Vm: GraalVM dist names', tasks, tags=[VmGateTasks.integration]) as t: if t: for suite, env_file_name, graalvm_dist_name in env_tests: out = mx.LinesOutputCapture() mx.run_mx([ '--no-warning', '--env', env_file_name, 'graalvm-dist-name' ], suite, out=out, err=out, env={}) mx.log( "Checking that the env file '{}' in suite '{}' produces a GraalVM distribution named '{}'" .format(env_file_name, suite.name, graalvm_dist_name)) if len(out.lines) != 1 or out.lines[0] != graalvm_dist_name: mx.abort( "Unexpected GraalVM dist name for env file '{}' in suite '{}'.\nExpected: '{}', actual: '{}'.\nDid you forget to update the registration of the GraalVM config?" .format(env_file_name, suite.name, graalvm_dist_name, '\n'.join(out.lines))) if mx_vm.has_component('LibGraal'): libgraal_location = mx_vm.get_native_image_locations( 'LibGraal', 'jvmcicompiler') if libgraal_location is None: mx.warn( "Skipping libgraal tests: no library enabled in the LibGraal component" ) else: extra_vm_arguments = [ '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location) ] if args.extra_vm_argument: extra_vm_arguments += args.extra_vm_argument import mx_compiler # run avrora on the GraalVM binary itself with Task('LibGraal Compiler:GraalVM DaCapo-avrora', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx.run([ join(mx_vm.graalvm_home(), 'bin', 'java'), '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-jar', mx.library('DACAPO').get_path(True), 'avrora' ]) with Task('LibGraal Compiler:CTW', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx_compiler.ctw([ '-DCompileTheWorld.Config=Inline=false CompilationFailureAction=ExitVM', '-esa', '-XX:+EnableJVMCI', '-DCompileTheWorld.MultiThreaded=true', '-Dgraal.InlineDuringParsing=false', '-Dgraal.TrackNodeSourcePosition=true', '-DCompileTheWorld.Verbose=false', '-XX:ReservedCodeCacheSize=300m', ], extra_vm_arguments) mx_compiler.compiler_gate_benchmark_runner( tasks, extra_vm_arguments, prefix='LibGraal Compiler:') with Task('LibGraal Truffle:unittest', tasks, tags=[VmGateTasks.libgraal]) as t: if t: def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config def is_truffle_fallback(arg): fallback_args = [ "-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime", "-Dgraalvm.ForcePolyglotInvalid=true" ] return arg in fallback_args newVmArgs = [ arg for arg in vmArgs if not is_truffle_fallback(arg) ] return (newVmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant( _unittest_config_participant) excluded_tests = environ.get("TEST_LIBGRAAL_EXCLUDE") if excluded_tests: with NamedTemporaryFile(prefix='blacklist.', mode='w', delete=False) as fp: fp.file.writelines( [l + '\n' for l in excluded_tests.split()]) unittest_args = ["--blacklist", fp.name] else: unittest_args = [] unittest_args = unittest_args + [ "--enable-timing", "--verbose" ] mx_unittest.unittest(unittest_args + extra_vm_arguments + [ "-Dgraal.TruffleCompileImmediately=true", "-Dgraal.TruffleBackgroundCompilation=false", "truffle" ]) else: mx.warn("Skipping libgraal tests: component not enabled") gate_substratevm(tasks) gate_sulong(tasks) gate_ruby(tasks) gate_python(tasks) gate_svm_truffle_tck_js(tasks)
] # the clang-format versions that can be used for formatting the test case C and C++ files clangFormatVersions = ['3.4'] # the basic LLVM dependencies for running the test cases and executing the mx commands basicLLVMDependencies = ['clang', 'clang++', 'opt', 'llc', 'llvm-as'] def _unittest_config_participant(config): (vmArgs, mainClass, mainClassArgs) = config vmArgs = getCommonUnitTestOptions() + vmArgs return (vmArgs, mainClass, mainClassArgs) add_config_participant(_unittest_config_participant) def _graal_llvm_gate_runner(args, tasks): """gate function""" executeGate() add_gate_runner(_suite, _graal_llvm_gate_runner) def executeGate(): """executes the TruffleLLVM gate tasks""" tasks = [] with Task('BasicChecks', tasks) as t: if t: runChecks()
for package in extraPackages: addedExports.setdefault(deployedModule.name + '/' + package, set()).update(junitModules + ['ALL-UNNAMED']) for moduleName, cpEntries in patches.iteritems(): vmArgs.append('-Xpatch:' + moduleName + '=' + os.pathsep.join(cpEntries)) vmArgs.extend(['-XaddExports:' + export + '=' + ','.join(sorted(targets)) for export, targets in addedExports.iteritems()]) if isJDK8: # Run the VM in a mode where application/test classes can # access JVMCI loaded classes. vmArgs.append('-XX:-UseJVMCIClassLoader') return (vmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant(_unittest_config_participant) mx_unittest.set_vm_launcher('JDK9 VM launcher', _unittest_vm_launcher, jdk) def _uniqify(alist): """ Processes given list to remove all duplicate entries, preserving only the first unique instance for each entry. :param list alist: the list to process :return: `alist` with all duplicates removed """ seen = set() return [e for e in alist if e not in seen and seen.add(e) is None] def _defined_packages(classpathEntry): """ Gets the packages defined by `classpathEntry`.
def gate_body(args, tasks): # all mx_sdk_vm_impl gate tasks can also be run as vm gate tasks if not args.all_suites: mx_sdk_vm_impl.gate_body(args, tasks) with Task('Vm: Basic GraalVM Tests', tasks, tags=[VmGateTasks.compiler]) as t: if t and mx_sdk_vm_impl.has_component('GraalVM compiler'): # 1. the build must be a GraalVM # 2. the build must be JVMCI-enabled since the 'GraalVM compiler' component is registered mx_sdk_vm_impl.check_versions( mx_sdk_vm_impl.graalvm_output(), graalvm_version_regex=mx_sdk_vm_impl.graalvm_version_regex, expect_graalvm=True, check_jvmci=True) if mx_sdk_vm_impl.has_component('LibGraal'): libgraal_location = mx_sdk_vm_impl.get_native_image_locations( 'LibGraal', 'jvmcicompiler') if libgraal_location is None: mx.warn( "Skipping libgraal tests: no library enabled in the LibGraal component" ) else: extra_vm_arguments = [ '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location) ] if args.extra_vm_argument: extra_vm_arguments += args.extra_vm_argument import mx_compiler # run avrora on the GraalVM binary itself with Task('LibGraal Compiler:GraalVM DaCapo-avrora', tasks, tags=[VmGateTasks.libgraal]) as t: if t: java_exe = join(mx_sdk_vm_impl.graalvm_home(), 'bin', 'java') mx.run([ java_exe, '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-jar', mx.library('DACAPO').get_path(True), 'avrora' ]) # Ensure that fatal errors in libgraal route back to HotSpot testdir = mkdtemp() try: cmd = [ java_exe, '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-Dlibgraal.CrashAt=length,hashCode', '-Dlibgraal.CrashAtIsFatal=true', '-jar', mx.library('DACAPO').get_path(True), 'avrora' ] out = mx.OutputCapture() exitcode = mx.run(cmd, cwd=testdir, nonZeroIsFatal=False, out=out) if exitcode == 0: if 'CrashAtIsFatal: no fatalError function pointer installed' in out.data: # Executing a VM that does not configure fatal errors handling # in libgraal to route back through the VM. pass else: mx.abort( 'Expected following command to result in non-zero exit code: ' + ' '.join(cmd)) else: hs_err = None testdir_entries = listdir(testdir) for name in testdir_entries: if name.startswith('hs_err_pid' ) and name.endswith('.log'): hs_err = join(testdir, name) if hs_err is None: mx.abort( 'Expected a file starting with "hs_err_pid" in test directory. Entries found=' + str(testdir_entries)) with open(join(testdir, hs_err)) as fp: contents = fp.read() if 'Fatal error in JVMCI' not in contents: mx.abort( 'Expected "Fatal error in JVMCI" to be in contents of ' + hs_err + ':' + linesep + contents) finally: mx.rmtree(testdir) with Task('LibGraal Compiler:CTW', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx_compiler.ctw([ '-DCompileTheWorld.Config=Inline=false CompilationFailureAction=ExitVM', '-esa', '-XX:+EnableJVMCI', '-DCompileTheWorld.MultiThreaded=true', '-Dgraal.InlineDuringParsing=false', '-Dgraal.TrackNodeSourcePosition=true', '-DCompileTheWorld.Verbose=false', '-DCompileTheWorld.HugeMethodLimit=4000', '-DCompileTheWorld.MaxCompiles=150000', '-XX:ReservedCodeCacheSize=300m', ], extra_vm_arguments) mx_compiler.compiler_gate_benchmark_runner( tasks, extra_vm_arguments, prefix='LibGraal Compiler:') with Task('LibGraal Truffle:unittest', tasks, tags=[VmGateTasks.libgraal]) as t: if t: def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config def is_truffle_fallback(arg): fallback_args = [ "-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime", "-Dgraalvm.ForcePolyglotInvalid=true" ] return arg in fallback_args newVmArgs = [ arg for arg in vmArgs if not is_truffle_fallback(arg) ] return (newVmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant( _unittest_config_participant) excluded_tests = environ.get("TEST_LIBGRAAL_EXCLUDE") if excluded_tests: with NamedTemporaryFile(prefix='blacklist.', mode='w', delete=False) as fp: fp.file.writelines( [l + '\n' for l in excluded_tests.split()]) unittest_args = ["--blacklist", fp.name] else: unittest_args = [] unittest_args = unittest_args + [ "--enable-timing", "--verbose" ] compiler_log_file = "graal-compiler.log" mx_unittest.unittest(unittest_args + extra_vm_arguments + [ "-Dpolyglot.engine.AllowExperimentalOptions=true", "-Dpolyglot.engine.CompileImmediately=true", "-Dpolyglot.engine.BackgroundCompilation=false", "-Dpolyglot.engine.TraceCompilation=true", "-Dpolyglot.log.file={0}".format(compiler_log_file), "-Dgraalvm.locatorDisabled=true", "truffle" ]) if exists(compiler_log_file): remove(compiler_log_file) else: mx.warn("Skipping libgraal tests: component not enabled") gate_substratevm(tasks) gate_sulong(tasks) gate_python(tasks) gate_svm_sl_tck(tasks) gate_svm_truffle_tck_js(tasks)
def gate_body(args, tasks): # all mx_sdk_vm_impl gate tasks can also be run as vm gate tasks mx_sdk_vm_impl.gate_body(args, tasks) with Task('Vm: Basic GraalVM Tests', tasks, tags=[VmGateTasks.compiler]) as t: if t and mx_sdk_vm_impl.has_component('GraalVM compiler'): # 1. the build must be a GraalVM # 2. the build must be JVMCI-enabled since the 'GraalVM compiler' component is registered mx_sdk_vm_impl.check_versions( mx_sdk_vm_impl.graalvm_output(), graalvm_version_regex=mx_sdk_vm_impl.graalvm_version_regex, expect_graalvm=True, check_jvmci=True) if mx_sdk_vm_impl.has_component('LibGraal'): libgraal_location = mx_sdk_vm_impl.get_native_image_locations( 'LibGraal', 'jvmcicompiler') if libgraal_location is None: mx.warn( "Skipping libgraal tests: no library enabled in the LibGraal component" ) else: extra_vm_arguments = [ '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location) ] if args.extra_vm_argument: extra_vm_arguments += args.extra_vm_argument import mx_compiler # run avrora on the GraalVM binary itself with Task('LibGraal Compiler:GraalVM DaCapo-avrora', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx.run([ join(mx_sdk_vm_impl.graalvm_home(), 'bin', 'java'), '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-jar', mx.library('DACAPO').get_path(True), 'avrora' ]) with Task('LibGraal Compiler:CTW', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx_compiler.ctw([ '-DCompileTheWorld.Config=Inline=false CompilationFailureAction=ExitVM', '-esa', '-XX:+EnableJVMCI', '-DCompileTheWorld.MultiThreaded=true', '-Dgraal.InlineDuringParsing=false', '-Dgraal.TrackNodeSourcePosition=true', '-DCompileTheWorld.Verbose=false', '-XX:ReservedCodeCacheSize=300m', ], extra_vm_arguments) mx_compiler.compiler_gate_benchmark_runner( tasks, extra_vm_arguments, prefix='LibGraal Compiler:') with Task('LibGraal Truffle:unittest', tasks, tags=[VmGateTasks.libgraal]) as t: if t: def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config def is_truffle_fallback(arg): fallback_args = [ "-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime", "-Dgraalvm.ForcePolyglotInvalid=true" ] return arg in fallback_args newVmArgs = [ arg for arg in vmArgs if not is_truffle_fallback(arg) ] return (newVmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant( _unittest_config_participant) excluded_tests = environ.get("TEST_LIBGRAAL_EXCLUDE") if excluded_tests: with NamedTemporaryFile(prefix='blacklist.', mode='w', delete=False) as fp: fp.file.writelines( [l + '\n' for l in excluded_tests.split()]) unittest_args = ["--blacklist", fp.name] else: unittest_args = [] unittest_args = unittest_args + [ "--enable-timing", "--verbose" ] compiler_log_file = "graal-compiler.log" mx_unittest.unittest(unittest_args + extra_vm_arguments + [ "-Dgraal.TruffleCompileImmediately=true", "-Dgraal.TruffleBackgroundCompilation=false", "-Dgraal.TraceTruffleCompilation=true", "-Dgraalvm.locatorDisabled=true", "-Dgraal.PrintCompilation=true", "-Dgraal.LogFile={0}". format(compiler_log_file), "truffle" ]) if exists(compiler_log_file): remove(compiler_log_file) else: mx.warn("Skipping libgraal tests: component not enabled") gate_substratevm(tasks) gate_sulong(tasks) gate_python(tasks) gate_svm_sl_tck(tasks) gate_svm_truffle_tck_js(tasks)
] # the clang-format versions that can be used for formatting the test case C and C++ files clangFormatVersions = [ '3.8', '3.9', '4.0', ] def _unittest_config_participant(config): (vmArgs, mainClass, mainClassArgs) = config libs = [mx_subst.path_substitutions.substitute('<path:SULONG_TEST_NATIVE>/<lib:sulongtest>')] vmArgs = getCommonOptions(True, libs) + vmArgs return (vmArgs, mainClass, mainClassArgs) add_config_participant(_unittest_config_participant) # Temporary set environment variables. By default LC_ALL, LANGUAGE, and LANG are set. class TemporaryEnv(object): def __init__(self, **kwargs): self.old_env = None self.extra_env = dict( LC_ALL='C', LANGUAGE='en_US:en', LANG='en_US.UTF-8', ) self.extra_env.update(kwargs) def __enter__(self): self.old_env = os.environ.copy()
def gate_body(args, tasks): with Task('Vm: Basic GraalVM Tests', tasks, tags=[VmGateTasks.compiler]) as t: if t and mx_vm.has_component('Graal compiler'): # 1. a full open-source build should be built with an open-source JDK but we allow Oracle JDK in non-strict mode as it is common on developer machines # 2. the build must be a GraalVM # 3. the build must be JVMCI-enabled since the 'Graal compiler' component is registered version_regex = mx_vm.openjdk_version_regex if args.strict_mode else mx_vm.anyjdk_version_regex mx_vm.check_versions( mx_vm.graalvm_output(), version_regex, graalvm_version_regex=mx_vm.graalvm_version_regex, expect_graalvm=True, check_jvmci=True) with Task('Vm: Sulong tests', tasks, tags=[VmGateTasks.sulong]) as t: if t and mx_vm.has_component('Sulong', fatalIfMissing=True): pass with Task('Vm: Graal.js tests', tasks, tags=[VmGateTasks.graal_js]) as t: if t and mx_vm.has_component('Graal.js', fatalIfMissing=True): pass with Task('Vm: Graal.nodejs tests', tasks, tags=[VmGateTasks.graal_nodejs]) as t: if t and mx_vm.has_component('Graal.nodejs', fatalIfMissing=True): pass with Task('Vm: TruffleRuby tests', tasks, tags=[VmGateTasks.truffleruby]) as t: if t and mx_vm.has_component('TruffleRuby', fatalIfMissing=True): pass with Task('Vm: FastR tests', tasks, tags=[VmGateTasks.fastr]) as t: if t and mx_vm.has_component('FastR', fatalIfMissing=True): pass with Task('Vm: Graal.Python tests', tasks, tags=[VmGateTasks.graalpython]) as t: if t and mx_vm.has_component('Graal.Python', fatalIfMissing=True): pass if mx_vm.has_component('LibGraal'): libgraal_location = mx_vm.get_native_image_locations( 'LibGraal', 'jvmcicompiler') if libgraal_location is None: mx.warn( "Skipping libgraal tests: no library enabled in the LibGraal component" ) else: extra_vm_argument = [ '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location) ] if args.extra_vm_argument: extra_vm_argument += args.extra_vm_argument import mx_compiler mx_compiler.compiler_gate_benchmark_runner(tasks, extra_vm_argument, prefix='LibGraal: ') with Task('Test LibGraal', tasks, tags=[VmGateTasks.libgraal]) as t: if t: def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config newVmArgs = [ arg for arg in vmArgs if arg != "-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime" ] return (newVmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant( _unittest_config_participant) excluded_tests = environ.get("TEST_LIBGRAAL_EXCLUDE") if excluded_tests: with NamedTemporaryFile(prefix='blacklist.', mode='w', delete=False) as fp: fp.file.writelines( [l + '\n' for l in excluded_tests.split()]) unittest_args = ["--blacklist", fp.name] else: unittest_args = [] unittest_args = unittest_args + [ "--enable-timing", "--verbose" ] mx_unittest.unittest(unittest_args + extra_vm_argument + [ "-Dgraal.TruffleCompileImmediately=true", "-Dgraal.TruffleBackgroundCompilation=false", "truffle" ]) with Task('LibGraal GraalVM smoke test', tasks, tags=[VmGateTasks.libgraal]) as t: if t: mx.run([ join(mx_vm.graalvm_home(), 'bin', 'java'), '-XX:+UseJVMCICompiler', '-XX:+UseJVMCINativeLibrary', '-jar', mx.library('DACAPO').get_path(True), 'avrora' ]) else: mx.warn("Skipping libgraal tests: component not enabled") gate_substratevm(tasks) gate_sulong(tasks) gate_ruby(tasks) gate_python(tasks)
if active_branch == primary_branch: return mx.command_function('deploy-binary')(args) else: mx.log('The active branch is "%s". Binaries are deployed only if the active branch is "%s".' % (active_branch, primary_branch)) return 0 def unittest_use_distribution_jars(config): """use the distribution jars instead of the class files""" vmArgs, mainClass, mainClassArgs = config cpIndex, _ = mx.find_classpath_arg(vmArgs) junitCP = [mx.classpath("com.oracle.mxtool.junit")] rubyCP = [mx.classpath(mx.distribution(distr)) for distr in rubyDists] vmArgs[cpIndex] = ":".join(junitCP + rubyCP) return (vmArgs, mainClass, mainClassArgs) mx_unittest.add_config_participant(unittest_use_distribution_jars) # Project and BuildTask classes class ArchiveProject(mx.ArchivableProject): def __init__(self, suite, name, deps, workingSets, theLicense, **args): mx.ArchivableProject.__init__(self, suite, name, deps, workingSets, theLicense) assert 'prefix' in args assert 'outputDir' in args def output_dir(self): return join(self.dir, self.outputDir) def archive_prefix(self): return self.prefix