parseLog.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #!/usr/bin/python3
  2. import sys
  3. toolchain_list = ["ARM", "GCC", "ARMCLANG"]
  4. core_list = ["cortexM0l", "cortexM3l", "cortexM4l", "cortexM4lf", "cortexM7l", "cortexM7lfsp", "cortexM7lfdp",
  5. "ARMv8MBLl", "ARMv8MMLl", "ARMv8MMLlfsp", "ARMv8MMLlfdp", "ARMv8MMLld", "ARMv8MMLldfsp", "ARMv8MMLldfdp" ]
  6. test_list = ["MPS2", "FVP", "Simulator"]
  7. error = 1
  8. def parseLog(toolchain, core, test):
  9. if toolchain not in toolchain_list:
  10. print ("Error: Unkown toolchain '{0}'".format(toolchain))
  11. return error
  12. if core not in core_list:
  13. print ("Error: Unkown core '{0}'".format(core))
  14. return error
  15. if test not in test_list:
  16. print ("Error: Unkown test '{0}'".format(test))
  17. return error
  18. inFileName = ".\DspLibTest_{2}\{0}\Logs\DspLibTest_{2}_{1}.log".format(toolchain, core, test)
  19. outFileName = ".\DspLibTest_{2}\{0}\Logs\DspLibTest_{2}_{1}_parsed.log".format(toolchain, core, test)
  20. infile = open(inFileName).read()
  21. infile = infile.split('\n')
  22. outfile = open(outFileName, 'w')
  23. count = 0
  24. strName = ""
  25. strNr = -1
  26. strFUT = ""
  27. coverageInfo = 0
  28. for line in infile:
  29. if line.find("==================================================") != -1:
  30. continue
  31. if line.find("--------------------------------------------------") != -1:
  32. continue
  33. if line.find("Start: Group") != -1:
  34. outfile.write("\n")
  35. continue
  36. if line.find("End: Group") != -1:
  37. outfile.write("\n")
  38. continue
  39. if line.find("Start: Test") != -1:
  40. outfile.write("\n")
  41. continue
  42. if line.find("End: Test") != -1:
  43. outfile.write("\n")
  44. continue
  45. if line.find("Start Dump: String") != -1:
  46. continue
  47. if line.find("End Dump: String") != -1:
  48. strName = strName.rstrip("\n")
  49. outfile.write(strName)
  50. if strNr == 3:
  51. strFUT = strName
  52. # else:
  53. # strFUT == ""
  54. if strName == "Group Name:":
  55. strNr = 1
  56. outfile.write(" ")
  57. elif strName == "Test Name:":
  58. strNr = 2
  59. outfile.write(" ")
  60. elif strName == "Function Under Test:":
  61. strNr = 3
  62. outfile.write(" ")
  63. else:
  64. strNr = 4
  65. if len(strName) < 128:
  66. outfile.write("\n")
  67. strName = ""
  68. continue
  69. if line.find("Start: Coverage Information") != -1:
  70. coverageInfo = 1
  71. outfile.write(line)
  72. outfile.write("\n")
  73. if line.find("End: Coverage Information") != -1:
  74. strFUT == ""
  75. coverageInfo = 0
  76. if coverageInfo == 1:
  77. # if line.find(strFUT) == -1: #this line contains no relevant coverage info
  78. # continue
  79. if line.find("- 0%") == -1 and line.find("src") == -1 and line.find("Functions") != -1:
  80. outfile.write(line + "\n")
  81. continue
  82. if line.find("0x") == 0: #this is a line to translate
  83. line = line[12:35] + line[37:61]
  84. nums = line.split(' ')
  85. for num in nums:
  86. intNum = int(num, base=16)
  87. # if intNum == 10:
  88. # continue
  89. if intNum == 0:
  90. continue
  91. strName += str(chr(intNum))
  92. continue
  93. outfile.write(line)
  94. outfile.write("\n")
  95. def print_usage(sys_argv):
  96. script_name = sys_argv[0]
  97. usage_str = "Syntax: {0} toolchain core test\n".format(sys.argv[0])
  98. argument_desc = "\n toolchain: {0}".format(" ".join(toolchain_list))
  99. argument_desc += "\n core: {0}".format(" ".join(core_list))
  100. argument_desc += "\n test: {0}".format(" ".join(test_list))
  101. argument_desc += "\n\ne.g.: parseLog ARM cortexM3l FVP"
  102. print (usage_str + argument_desc)
  103. def exit_on_error(sys_argv):
  104. print_usage(sys_argv)
  105. exit(1)
  106. if __name__ == '__main__':
  107. arg_len = len(sys.argv)
  108. if arg_len != 4:
  109. exit_on_error(sys.argv)
  110. if error == parseLog(sys.argv[1], sys.argv[2], sys.argv[3]):
  111. exit_on_error(sys.argv)