def _espresso_gate_runner(args, tasks): # Jackpot configuration is inherited from Truffle. with Task('Jackpot', tasks, tags=[EspressoTags.jackpot]) as t: if t: jackpot(['--fail-on-warnings'], suite=None, nonZeroIsFatal=True) with Task('Espresso: GraalVM dist names', tasks, tags=['names']) as t: if t: mx_sdk_vm.verify_graalvm_configs(suites=['espresso']) mokapot_header_gate_name = 'Verify consistency of mokapot headers' with Task(mokapot_header_gate_name, tasks, tags=[EspressoTags.verify]) as t: if t: import mx_sdk_vm_impl run_instructions = "$ mx --dynamicimports=/substratevm --native-images=lib:espresso gate --all-suites --task '{}'".format(mokapot_header_gate_name) if mx_sdk_vm_impl._skip_libraries(espresso_library_config): mx.abort("""\ The registration of the Espresso library ('lib:espresso') is skipped. Please run this gate as follows: {}""".format(run_instructions)) errors = False mokapot_dir = join(mx.project('com.oracle.truffle.espresso.mokapot').dir, 'include') libespresso_dir = mx.project(mx_sdk_vm_impl.GraalVmNativeImage.project_name(espresso_library_config)).get_output_root() for header in ['libespresso_dynamic.h', 'graal_isolate_dynamic.h']: committed_header = join(mokapot_dir, header) if not mx.exists(committed_header): mx.abort("Cannot locate '{}'. Was the file moved or renamed?".format(committed_header)) generated_header = join(libespresso_dir, header) if not mx.exists(generated_header): mx.abort("Cannot locate '{}'. Did you forget to build? Example:\n'mx --dynamicimports=/substratevm --native-images=lib:espresso build'".format(generated_header)) committed_header_copyright = [] with open(committed_header, 'r') as committed_header_file: for line in committed_header_file.readlines(): if line == '/*\n' or line.startswith(' *') or line == '*/\n': committed_header_copyright.append(line) else: break with open(generated_header, 'r') as generated_header_file: generated_header_lines = [] for line in generated_header_file.readlines(): # Ignore definitions that are not needed for Espresso if not line.startswith("typedef") or "(*Espresso_" in line or "__graal" in line or "(*graal_" in line: generated_header_lines.append(line) else: newline = generated_header_lines.pop() # Remove newline before ignored declaration assert newline == "\n" errors = errors or mx.update_file(committed_header, ''.join(committed_header_copyright + generated_header_lines), showDiff=True) if errors: mx.abort("""\ One or more header files in the include dir of the mokapot project ('{committed}/') do not match those generated by Native Image ('{generated}/'). To fix the issue, run this gate locally: {instructions} And adapt the code to the modified headers in '{committed}'. """.format(committed=os.path.relpath(mokapot_dir, _suite.vc_dir), generated=os.path.relpath(libespresso_dir, _suite.vc_dir), instructions=run_instructions))
def _run_espresso(args=None, cwd=None, nonZeroIsFatal=True): if mx_sdk_vm_impl._skip_libraries(espresso_library_config): # no libespresso, we can only run with the espresso launcher _run_espresso_launcher(args, cwd, nonZeroIsFatal) else: _run_java_truffle(args, cwd, nonZeroIsFatal)