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())