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