14514f5e3Sopenharmony_ci#!/usr/bin/env python
24514f5e3Sopenharmony_ci# -*- coding: utf-8 -*-
34514f5e3Sopenharmony_ci"""
44514f5e3Sopenharmony_ciCopyright (c) 2024 Huawei Device Co., Ltd.
54514f5e3Sopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License");
64514f5e3Sopenharmony_ciyou may not use this file except in compliance with the License.
74514f5e3Sopenharmony_ciYou may obtain a copy of the License at
84514f5e3Sopenharmony_ci
94514f5e3Sopenharmony_ci    http://www.apache.org/licenses/LICENSE-2.0
104514f5e3Sopenharmony_ci
114514f5e3Sopenharmony_ciUnless required by applicable law or agreed to in writing, software
124514f5e3Sopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS,
134514f5e3Sopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144514f5e3Sopenharmony_ciSee the License for the specific language governing permissions and
154514f5e3Sopenharmony_cilimitations under the License.
164514f5e3Sopenharmony_ci
174514f5e3Sopenharmony_ciDescription: Use ark to execute workload test suite
184514f5e3Sopenharmony_ci"""
194514f5e3Sopenharmony_ci
204514f5e3Sopenharmony_ciimport sys
214514f5e3Sopenharmony_ciimport re
224514f5e3Sopenharmony_ciimport os
234514f5e3Sopenharmony_ci
244514f5e3Sopenharmony_ciHELP = """
254514f5e3Sopenharmony_cipython prerun_proc.py __VAR__=value ... default_js_scr.js
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_cilets assume that default_js_scr.js have next lines
284514f5e3Sopenharmony_ci
294514f5e3Sopenharmony_ci```
304514f5e3Sopenharmony_ci    const __MULTIPLIER__ = 1
314514f5e3Sopenharmony_ci    let start1 = new Date().getTime();
324514f5e3Sopenharmony_ci    for (let i = 0; i < __MULTIPLIER__ * 10000; i++) {
334514f5e3Sopenharmony_ci        SetAddSmi();
344514f5e3Sopenharmony_ci    }
354514f5e3Sopenharmony_ci    print("__MULTIPLIER__ = " + __MULTIPLIER__)
364514f5e3Sopenharmony_ci```
374514f5e3Sopenharmony_ci
384514f5e3Sopenharmony_ciAfter execution
394514f5e3Sopenharmony_ci```
404514f5e3Sopenharmony_cipython prerun_proc.py __MULTIPLIER__=3 ... default_js_scr.js
414514f5e3Sopenharmony_ci```
424514f5e3Sopenharmony_ci
434514f5e3Sopenharmony_ciyou will see in default_js_scr.js
444514f5e3Sopenharmony_ci```
454514f5e3Sopenharmony_ci    const __MULTIPLIER__ = 3
464514f5e3Sopenharmony_ci    let start1 = new Date().getTime();
474514f5e3Sopenharmony_ci    for (let i = 0; i < __MULTIPLIER__ * 10000; i++) {
484514f5e3Sopenharmony_ci        SetAddSmi();
494514f5e3Sopenharmony_ci    }
504514f5e3Sopenharmony_ci    print("__MULTIPLIER__ = " + __MULTIPLIER__)
514514f5e3Sopenharmony_ci```
524514f5e3Sopenharmony_ci
534514f5e3Sopenharmony_ciSo after executing you will see next line:
544514f5e3Sopenharmony_ci```
554514f5e3Sopenharmony_ci__MULTIPLIER__ = 3
564514f5e3Sopenharmony_ci```
574514f5e3Sopenharmony_ci
584514f5e3Sopenharmony_ci"""
594514f5e3Sopenharmony_ci
604514f5e3Sopenharmony_ci
614514f5e3Sopenharmony_cidef get_args():
624514f5e3Sopenharmony_ci    vars_to_replace = {}
634514f5e3Sopenharmony_ci    script_name = ""
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_ci    for arg in sys.argv[1:]:
664514f5e3Sopenharmony_ci        if(re.search("^__.*__=.*$", arg)):
674514f5e3Sopenharmony_ci            (var, val) = arg.split('=')
684514f5e3Sopenharmony_ci            vars_to_replace[var] = val
694514f5e3Sopenharmony_ci        elif(re.search("^.*.js$", arg)):
704514f5e3Sopenharmony_ci            if(script_name != ""):
714514f5e3Sopenharmony_ci                raise RuntimeError("More then on script to preprocess")
724514f5e3Sopenharmony_ci            else:
734514f5e3Sopenharmony_ci                script_name = arg
744514f5e3Sopenharmony_ci        elif(arg == "-h" or arg == "--help"):
754514f5e3Sopenharmony_ci            print(HELP)
764514f5e3Sopenharmony_ci            exit(0)
774514f5e3Sopenharmony_ci        else:
784514f5e3Sopenharmony_ci            raise RuntimeError(f"{arg} is wrong argument, please look at help")
794514f5e3Sopenharmony_ci
804514f5e3Sopenharmony_ci    if(script_name == ""):
814514f5e3Sopenharmony_ci        raise RuntimeError("There is no script to preprocess")
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_ci    if(len(vars_to_replace) == 0):
844514f5e3Sopenharmony_ci        raise RuntimeError("No vars to replace")
854514f5e3Sopenharmony_ci
864514f5e3Sopenharmony_ci    return script_name, vars_to_replace
874514f5e3Sopenharmony_ci
884514f5e3Sopenharmony_ci
894514f5e3Sopenharmony_cidef main():
904514f5e3Sopenharmony_ci    script_name, vars_to_replace = get_args()
914514f5e3Sopenharmony_ci    data = []
924514f5e3Sopenharmony_ci
934514f5e3Sopenharmony_ci    status = os.stat(script_name)
944514f5e3Sopenharmony_ci    fd = os.open(script_name, os.O_RDWR | os.O_CREAT, status.st_mode)
954514f5e3Sopenharmony_ci    with os.fdopen(fd, 'r') as script_file:
964514f5e3Sopenharmony_ci        data = script_file.readlines()
974514f5e3Sopenharmony_ci
984514f5e3Sopenharmony_ci    for i, _ in enumerate(data):
994514f5e3Sopenharmony_ci        for var in vars_to_replace.items():
1004514f5e3Sopenharmony_ci            if(re.search(f"const {var} =", data[i].strip())):
1014514f5e3Sopenharmony_ci                val = data.get(i)
1024514f5e3Sopenharmony_ci                data[i] = val[:val.find("=") + 1] + ' ' + vars_to_replace.get(var) + ';\n'
1034514f5e3Sopenharmony_ci
1044514f5e3Sopenharmony_ci    fd = os.open(script_name, os.O_RDWR | os.O_CREAT, status.st_mode)
1054514f5e3Sopenharmony_ci    with os.fdopen(fd, 'w') as script_file:
1064514f5e3Sopenharmony_ci        script_file.seek(0)
1074514f5e3Sopenharmony_ci        script_file.writelines(data)
1084514f5e3Sopenharmony_ci        script_file.truncate()
1094514f5e3Sopenharmony_ci
1104514f5e3Sopenharmony_ciif (__name__ == "__main__"):
1114514f5e3Sopenharmony_ci    main()