def translate(self, cc_db, extra_args: List[str] = []) -> RustFile: extensionless_file, _ = os.path.splitext(self.path) # help plumbum find rust ld_lib_path = get_rust_toolchain_libpath() if 'LD_LIBRARY_PATH' in pb.local.env: ld_lib_path += ':' + pb.local.env['LD_LIBRARY_PATH'] # run the transpiler transpiler = get_cmd_or_die(c.TRANSPILER) args = [ cc_db, "--prefix-function-names", "rust_", "--overwrite-existing", ] if self.disable_incremental_relooper: args.append("--no-incremental-relooper") if self.disallow_current_block: args.append("--fail-on-multiple") if self.translate_const_macros: args.append("--translate-const-macros") if self.reorganize_definitions: args.append("--reorganize-definitions") if self.emit_build_files: args.append("--emit-build-files") if self.logLevel == 'DEBUG': args.append("--log-level=debug") args.append("--") args.extend(extra_args) # Add -isysroot on MacOS to get SDK directory if on_mac(): try: xcrun = pb.local["xcrun"] args.append("-isysroot" + xcrun("--show-sdk-path").strip()) except pb.CommandNotFound: pass with pb.local.env(RUST_BACKTRACE='1', LD_LIBRARY_PATH=ld_lib_path): # log the command in a format that's easy to re-run translation_cmd = "LD_LIBRARY_PATH=" + ld_lib_path + " \\\n" translation_cmd += str(transpiler[args]) logging.debug("translation command:\n %s", translation_cmd) retcode, stdout, stderr = (transpiler[args]).run( retcode=None) logging.debug("stdout:\n%s", stdout) logging.debug("stderr:\n%s", stderr) if retcode != 0: raise NonZeroReturn(stderr) return RustFile(extensionless_file + ".rs")
def translate(self, cc_db, ld_lib_path, extra_args: List[str] = []) -> RustFile: extensionless_file, _ = os.path.splitext(self.path) # run the transpiler transpiler = get_cmd_or_die(c.TRANSPILER) args = [ cc_db, "--prefix-function-names", "rust_", "--overwrite-existing", ] if self.disable_incremental_relooper: args.append("--no-incremental-relooper") if self.disallow_current_block: args.append("--fail-on-multiple") if self.translate_const_macros: args.append("--translate-const-macros") if self.reorganize_definitions: args.append("--reorganize-definitions") if self.emit_build_files: args.append("--emit-build-files") if self.logLevel == 'DEBUG': args.append("--log-level=debug") args.append("--") args.extend(extra_args) with pb.local.env(RUST_BACKTRACE='1', LD_LIBRARY_PATH=ld_lib_path): # log the command in a format that's easy to re-run translation_cmd = "LD_LIBRARY_PATH=" + ld_lib_path + " \\\n" translation_cmd += str(transpiler[args]) logging.debug("translation command:\n %s", translation_cmd) retcode, stdout, stderr = (transpiler[args]).run(retcode=None) logging.debug("stdout:\n%s", stdout) logging.debug("stderr:\n%s", stderr) if retcode != 0: raise NonZeroReturn(stderr) return RustFile(extensionless_file + ".rs")
def translate(self) -> RustFile: c_file_path, _ = os.path.splitext(self.path) extensionless_file, _ = os.path.splitext(c_file_path) rust_src = extensionless_file + ".rs" # help plumbum find rust ld_lib_path = get_rust_toolchain_libpath() if 'LD_LIBRARY_PATH' in pb.local.env: ld_lib_path += ':' + pb.local.env['LD_LIBRARY_PATH'] # run the importer ast_importer = get_cmd_or_die(c.AST_IMPO) args = [ self.path, "--prefix-function-names", "rust_", ] if self.enable_relooper: args.append("--reloop-cfgs") # args.append("--use-c-loop-info") # args.append("--use-c-multiple-info") if self.disallow_current_block: args.append("--fail-on-multiple") with pb.local.env(RUST_BACKTRACE='1', LD_LIBRARY_PATH=ld_lib_path): # log the command in a format that's easy to re-run translation_cmd = "LD_LIBRARY_PATH=" + ld_lib_path + " \\\n" translation_cmd += str(ast_importer[args] > rust_src) logging.debug("translation command:\n %s", translation_cmd) retcode, stdout, stderr = (ast_importer[args] > rust_src).run( retcode=None) logging.debug("stdout:\n%s", stdout) if retcode != 0: raise NonZeroReturn(stderr) return RustFile(extensionless_file + ".rs")