[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/NVRAMStatistic/autogen_v2/startup.py b/mcu/tools/NVRAMStatistic/autogen_v2/startup.py
new file mode 100644
index 0000000..368b245
--- /dev/null
+++ b/mcu/tools/NVRAMStatistic/autogen_v2/startup.py
@@ -0,0 +1,269 @@
+import os
+import subprocess
+import re
+import sys
+import platform
+from sys import argv
+
+file_out_path = ""
+editor_file_path = [os.path.join("./interface/service/nvram"),os.path.join( "./custom/protocol/common/ps")]
+info_file_path = os.path.join(file_out_path, "bin", "log")
+inc_file_path = os.path.join(file_out_path, "tmp")
+editor_file = []
+def_file = []
+lid_stu_map = {}
+
+def nvram_gen_open_file(file_path, file_name, mode="r"):
+ file_pathname = os.path.join(file_path, file_name)
+ if mode == "r":
+ # file not exist.
+ if not os.access(file_pathname, os.F_OK):
+ printf("error: %s not exist." % file_pathname)
+ sys.exit(2)
+ # file not read.
+ if not os.access(file_pathname, os.R_OK):
+ printf("error: %s exist, but it cannot be read." % file_pathname)
+ sys.exit(2)
+ elif mode == "w+":
+ # floder not write.
+ if not os.access(file_path, os.F_OK):
+ printf("error: folder no exist: %s" % file_path)
+ sys.exit(2)
+ try:
+ fd = open(file_pathname, mode)
+ except:
+ printf("error: open file error.")
+ printf("file_pathname: %s , mode: %s" % (file_pathname, mode))
+ raise
+
+ return fd
+
+def printf(strs, file=sys.stdout, end="\n", flush=False):
+ strs_val = strs + end
+ file.write(strs_val)
+ if flush:
+ file.flush()
+
+
+def gen_editor_data_item():
+ """ parse editor file name, create and write nvram_editor_data_item.c """
+ global editor_file
+ """ list containing the names of the entries in the directory given by path. """
+ for editor in editor_file_path:
+ if not os.access(editor, os.F_OK):
+ printf("error: %s not exist." % editor)
+ sys.exit(2)
+ if not os.access(editor, os.R_OK):
+ printf("error: %s exist, but it cannot be read." % editor)
+ sys.exit(2)
+ dirs = os.listdir(editor)
+ """ check filename, find editor files name saved to list. """
+ editor_pat = re.compile("nvram_editor\.h$")
+ def_pat = re.compile("nvram_def\.h$")
+ for item in dirs:
+ if editor_pat.search(item):
+ editor_file.append(item)
+ if def_pat.search(item):
+ def_file.append(item)
+
+ editor_file.append("nvram_editor_data_item.h")
+ editor_file.sort()
+ """ write include file to file. """
+ fd = nvram_gen_open_file(file_out_path, "nvram_editor_data_item.c", "w+")
+ for item in editor_file:
+ printf("#include \"%s\"" % item, file=fd, flush=True)
+
+ fd.close()
+
+
+def gen_gcc_option():
+ """ parse macro in info.log, save to list, write macro to gcc_option.h """
+ define_data = []
+ """ parse macro in info.log """
+ fd = nvram_gen_open_file(info_file_path, "info.log", "r")
+ for each_line in fd:
+ if each_line.isspace():
+ continue
+ if each_line.count("[ COMMON INCLUDE PATH ]") != 0:
+ break
+ if (each_line.count("[") != 0) or (each_line.count("]") != 0):
+ continue
+ item = each_line.replace("=", " ")
+ item = item.strip() # remove trailing characters "\n \r \t"
+ define_data.append(item)
+ fd.close()
+ # add compile option for nvram gen
+ define_data.append("__NVRAM_INTERNAL_LID_DESCRIPTION_ENABLE__")
+ define_data.append("__NV_GEN_FULL_LID__")
+
+ """ write define macro to file. """
+ fd = nvram_gen_open_file(file_out_path, "gcc_option.h", "w+")
+ printf("#ifndef __GCC_OPTION_H__", file=fd, flush=True)
+ printf("#define __GCC_OPTION_H__", file=fd, flush=True)
+ printf("", file=fd, flush=True)
+
+ for item in define_data:
+ printf("#define %s" % item, file=fd, flush=True)
+
+ printf("", file=fd, flush=True)
+ printf("#endif", file=fd, flush=True)
+ fd.close()
+
+def find_include_path_win(gcc, out_path):
+ """ create gcc preprocessor command and run (win)"""
+ # create gcc preprocess command
+ gcc_command = "\"./" + gcc + "\"" + " -DGEN_FOR_PC -E -imacros gcc_option.h -fno-strict-aliasing -fshort-enums"
+
+ fd = nvram_gen_open_file(inc_file_path, "~inc.tmp.tmp", "r")
+ for each_line in fd:
+ item = each_line.strip() # remove trailing characters "\n \r \t"
+ if os.path.exists(item): # check existing path
+ gcc_command = gcc_command + " -I " + item
+ fd.close()
+
+ fd_com = nvram_gen_open_file(file_out_path, "gcc_com.mak", "w+")
+ printf("all:", file=fd_com)
+ printf("\t%s" % gcc_command+" "+out_path+"/nvram_auto_gen/nvram_editor_data_item.c"+" -o "+out_path+"/nvram_auto_gen/nvram_editor_data_item.i", file=fd_com)
+ fd_com.close()
+
+ printf("===============win gcc file build======================")
+ printf("\".\\tools\\MSYS\\bin\\make.exe\" -f "+out_path+"/nvram_auto_gen/gcc_com.mak")
+ p = subprocess.Popen("\".\\tools\\MSYS\\bin\\make.exe\" -f "+out_path+"/nvram_auto_gen/gcc_com.mak", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ outs, errs = p.communicate()
+ printf("gcc run log:")
+ if p.returncode != 0: # run fail
+ printf("gcc run fail! ")
+ printf("exit code = %d" % p.returncode)
+ printf("outs:")
+ printf(str(outs))
+ printf("errs:")
+ printf(str(errs))
+ else:
+ printf("gcc run pass! ")
+ printf("outs:")
+ printf(str(outs))
+
+def find_include_path():
+ """ create gcc preprocessor command and run """
+ # create gcc preprocess command
+ option_path = os.path.join(file_out_path, "gcc_option.h")
+ gcc_command = "gcc -DGEN_FOR_PC -E -C -imacros {} -fno-strict-aliasing -fshort-enums".format(option_path)
+
+ fd = nvram_gen_open_file(inc_file_path, "~inc.tmp.tmp", "r")
+ for each_line in fd:
+ item = each_line.strip() # remove trailing characters "\n \r \t"
+ if os.path.exists(item): # check existing path
+ gcc_command = gcc_command + " -I " + item
+ fd.close()
+ gcc_command = gcc_command + " " + file_out_path + "/nvram_editor_data_item.c" + " -o " + file_out_path + "/nvram_editor_data_item.i"
+
+ # shell run : gcc preprocess
+ printf("===============linux gcc build======================")
+ # printf("gcc command = %s" % gcc_command)
+ p = subprocess.Popen(gcc_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ outs, errs = p.communicate()
+ printf("gcc run log:")
+ if p.returncode != 0: # run fail
+ printf("gcc run fail! ")
+ printf("exit code = %d" % p.returncode)
+ printf("outs:")
+ printf(outs)
+ printf("errs:")
+ printf(errs)
+ else:
+ printf("gcc run pass! ")
+ printf("outs:")
+ printf(outs)
+
+
+def parse_lid_stu_map():
+ """ parse lid struct name in nvram_editor_data_item.i, save to lid_stu_map dict """
+ global lid_stu_map
+ fd = nvram_gen_open_file(file_out_path, "nvram_editor_data_item.i", "r")
+ strs = fd.read()
+ fd.close()
+
+ """ all non-overlapping matches, return string list """
+ """
+ string format example:
+ LID_BIT "000" NVRAM_EF_STATIC_APPLMN_LID nvram_ef_static_applmn_struct *
+ or
+ LID_BIT MULTIPLE_LID "000" NVRAM_EF_EL1_MPRADJTBL_LID nvrm_el1_mqr_struct *
+ """
+ re_list = re.findall("LID_BIT[\s(MULTIPLE_LID)]*\"[0-9]{3}\"\s*NVRAM_EF_\w*_LID\s*\w*\s*\*", strs)
+
+ for item in re_list:
+ strs = re.sub("LID_BIT[\s(MULTIPLE_LID)]*\"[0-9]{3}\"\s*", "", item, count=1)
+ strs = re.sub("\s*\*", "", strs, count=1)
+ dict = re.split("\s*", strs)
+ lid_stu_map[dict[1]] = dict[0] # add to dict
+ # for i in lid_stu_map.items():
+ # printf(i)
+
+
+def gen_lid_stu_file():
+ """ gen nvram_lid_stu_tmp.h file """
+ fd = nvram_gen_open_file(file_out_path, "nvram_lid_stu_tmp.h", "w+")
+
+ printf("#ifndef __NVRAM_LID_STU_TMP_H__", file=fd, flush=True)
+ printf("#define __NVRAM_LID_STU_TMP_H__", file=fd, flush=True)
+ printf("", file=fd, flush=True)
+ printf("#include \"%s\"" % "nvram_group_editor.h" , file=fd, flush=True)
+ printf("#include \"%s\"" % "nvram_group_def.h", file=fd, flush=True)
+ printf("", file=fd, flush=True)
+ printf("/*\n * Variables\n */", file=fd, flush=True)
+ printf("", file=fd, flush=True)
+ for item in lid_stu_map.keys():
+ printf("static ", file=fd, end="", flush=True)
+ printf("%s " % item, file=fd, end="", flush=True)
+ printf("%s" % item + "_var", file=fd, end="", flush=True)
+ printf(" = {0};", file=fd, end="\n", flush=True)
+ printf("", file=fd, flush=True)
+ printf("#endif", file=fd, flush=True)
+
+
+def main(out_path, gcc):
+ global file_out_path
+ global info_file_path
+ global inc_file_path
+ file_out_path = os.path.join(out_path, "nvram_auto_gen")
+ info_file_path = os.path.join(out_path, "bin", "log")
+ inc_file_path = os.path.join(out_path, "tmp")
+ printf("file_out_path = %s" % file_out_path)
+ printf("info_file_path = %s" % info_file_path)
+ printf("inc_file_path = %s" % inc_file_path)
+
+ printf("run gen_editor_data_item()")
+ # gen_editor_data_item()
+ editor_file = os.path.join(file_out_path, "nvram_editor_data_item.c")
+ with open(editor_file, "w") as fd:
+ fd.write('#include "nvram_group_editor.h"')
+ printf("run gen_gcc_option()")
+ gen_gcc_option()
+ printf("run find_include_path()")
+ if platform.system() == "Windows": # windows
+ find_include_path_win(gcc, out_path)
+ elif platform.system() == "Linux": # linux
+ find_include_path()
+ else:
+ printf("platform error: platform is not windows or linux!")
+ printf("platform.system() = %s" % platform.system())
+ sys.exit(1)
+ printf("run parse_lid_stu_map()")
+ parse_lid_stu_map()
+ printf("run gen_lid_stu_file()")
+ gen_lid_stu_file()
+
+
+if __name__ == '__main__':
+ printf("out path = %s" % argv[1])
+ printf("gcc = %s" % argv[2])
+ # printf("platfrom = %s" % argv[3])
+ # if len(argv) != 4:
+ # printf("command error:")
+ # printf("Example command: startup.py ./build/MT6885_SP/NLWCTG gcc platfrom" )
+ #else:
+ main(argv[1], argv[2])
+
+
+