1e509ee18Sopenharmony_ci#!/usr/bin/env python3 2e509ee18Sopenharmony_ci# coding: utf-8 3e509ee18Sopenharmony_ci 4e509ee18Sopenharmony_ci""" 5e509ee18Sopenharmony_ciCopyright (c) 2021 Huawei Device Co., Ltd. 6e509ee18Sopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License"); 7e509ee18Sopenharmony_ciyou may not use this file except in compliance with the License. 8e509ee18Sopenharmony_ciYou may obtain a copy of the License at 9e509ee18Sopenharmony_ci 10e509ee18Sopenharmony_ci http://www.apache.org/licenses/LICENSE-2.0 11e509ee18Sopenharmony_ci 12e509ee18Sopenharmony_ciUnless required by applicable law or agreed to in writing, software 13e509ee18Sopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS, 14e509ee18Sopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15e509ee18Sopenharmony_ciSee the License for the specific language governing permissions and 16e509ee18Sopenharmony_cilimitations under the License. 17e509ee18Sopenharmony_ci 18e509ee18Sopenharmony_ciDescription: Generate javascript byte code using es2abc 19e509ee18Sopenharmony_ci""" 20e509ee18Sopenharmony_ci 21e509ee18Sopenharmony_ciimport os 22e509ee18Sopenharmony_ciimport subprocess 23e509ee18Sopenharmony_ciimport platform 24e509ee18Sopenharmony_ciimport argparse 25e509ee18Sopenharmony_ci 26e509ee18Sopenharmony_ci 27e509ee18Sopenharmony_cidef parse_args(): 28e509ee18Sopenharmony_ci parser = argparse.ArgumentParser() 29e509ee18Sopenharmony_ci parser.add_argument('--src-js', 30e509ee18Sopenharmony_ci help='js source file') 31e509ee18Sopenharmony_ci parser.add_argument('--dst-file', 32e509ee18Sopenharmony_ci help='the converted target file') 33e509ee18Sopenharmony_ci parser.add_argument('--frontend-tool-path', 34e509ee18Sopenharmony_ci help='path of the frontend conversion tool') 35e509ee18Sopenharmony_ci parser.add_argument('--extension', 36e509ee18Sopenharmony_ci help='source file extension') 37e509ee18Sopenharmony_ci parser.add_argument("--debug", action='store_true', 38e509ee18Sopenharmony_ci help='whether add debuginfo') 39e509ee18Sopenharmony_ci parser.add_argument("--module", action='store_true', 40e509ee18Sopenharmony_ci help='whether is module') 41e509ee18Sopenharmony_ci parser.add_argument("--commonjs", action='store_true', 42e509ee18Sopenharmony_ci help='whether is commonjs') 43e509ee18Sopenharmony_ci parser.add_argument("--merge-abc", action='store_true', 44e509ee18Sopenharmony_ci help='whether is merge abc') 45e509ee18Sopenharmony_ci parser.add_argument("--generate-patch", action='store_true', 46e509ee18Sopenharmony_ci help='generate patch abc') 47e509ee18Sopenharmony_ci parser.add_argument("--dump-symbol-table", 48e509ee18Sopenharmony_ci help='dump symbol table of base abc') 49e509ee18Sopenharmony_ci parser.add_argument("--input-symbol-table", 50e509ee18Sopenharmony_ci help='input symbol table for patch abc') 51e509ee18Sopenharmony_ci arguments = parser.parse_args() 52e509ee18Sopenharmony_ci return arguments 53e509ee18Sopenharmony_ci 54e509ee18Sopenharmony_ci 55e509ee18Sopenharmony_cidef run_command(cmd, execution_path): 56e509ee18Sopenharmony_ci print(" ".join(cmd) + " | execution_path: " + execution_path) 57e509ee18Sopenharmony_ci proc = subprocess.Popen(cmd, cwd=execution_path) 58e509ee18Sopenharmony_ci proc.wait() 59e509ee18Sopenharmony_ci 60e509ee18Sopenharmony_ci 61e509ee18Sopenharmony_cidef gen_abc_info(input_arguments): 62e509ee18Sopenharmony_ci frontend_tool_path = input_arguments.frontend_tool_path 63e509ee18Sopenharmony_ci 64e509ee18Sopenharmony_ci (path, name) = os.path.split(frontend_tool_path) 65e509ee18Sopenharmony_ci 66e509ee18Sopenharmony_ci cmd = [os.path.join("./", name, "es2abc"), 67e509ee18Sopenharmony_ci '--output', input_arguments.dst_file, 68e509ee18Sopenharmony_ci input_arguments.src_js] 69e509ee18Sopenharmony_ci 70e509ee18Sopenharmony_ci if input_arguments.extension: 71e509ee18Sopenharmony_ci cmd += ['--extension', input_arguments.extension] 72e509ee18Sopenharmony_ci if input_arguments.dump_symbol_table: 73e509ee18Sopenharmony_ci cmd += ['--dump-symbol-table', input_arguments.dump_symbol_table] 74e509ee18Sopenharmony_ci if input_arguments.input_symbol_table: 75e509ee18Sopenharmony_ci cmd += ['--input-symbol-table', input_arguments.input_symbol_table] 76e509ee18Sopenharmony_ci if input_arguments.debug: 77e509ee18Sopenharmony_ci src_index = cmd.index(input_arguments.src_js) 78e509ee18Sopenharmony_ci cmd.insert(src_index, '--debug-info') 79e509ee18Sopenharmony_ci if input_arguments.module: 80e509ee18Sopenharmony_ci src_index = cmd.index(input_arguments.src_js) 81e509ee18Sopenharmony_ci cmd.insert(src_index, '--module') 82e509ee18Sopenharmony_ci if input_arguments.commonjs: 83e509ee18Sopenharmony_ci src_index = cmd.index(input_arguments.src_js) 84e509ee18Sopenharmony_ci cmd.insert(src_index, '--commonjs') 85e509ee18Sopenharmony_ci if input_arguments.merge_abc: 86e509ee18Sopenharmony_ci src_index = cmd.index(input_arguments.src_js) 87e509ee18Sopenharmony_ci cmd.insert(src_index, '--merge-abc') 88e509ee18Sopenharmony_ci if input_arguments.generate_patch: 89e509ee18Sopenharmony_ci src_index = cmd.index(input_arguments.src_js) 90e509ee18Sopenharmony_ci cmd.insert(src_index, '--generate-patch') 91e509ee18Sopenharmony_ci # insert d.ts option to cmd later 92e509ee18Sopenharmony_ci run_command(cmd, path) 93e509ee18Sopenharmony_ci 94e509ee18Sopenharmony_ci 95e509ee18Sopenharmony_ciif __name__ == '__main__': 96e509ee18Sopenharmony_ci gen_abc_info(parse_args())