mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
|
# this script is used to analyze the output of the build when running
|
||
|
# export CXX="/usr/bin/time -p g++"; cmake ..
|
||
|
# you must run this on a fresh build.
|
||
|
|
||
|
# This only works on linux and relies on the output of cmake looking a certain way
|
||
|
|
||
|
import argparse
|
||
|
import re
|
||
|
|
||
|
def get_time(line):
|
||
|
return float(line.split()[-1])
|
||
|
|
||
|
def parse_file(lines):
|
||
|
scanning_pattern = re.compile("Scanning dependencies of target \\w+\\n")
|
||
|
building_cxx_pattern = re.compile("\\[....\\] Building CXX object .+\\n")
|
||
|
current_target = "UNKNOWN"
|
||
|
all_builds = []
|
||
|
time_by_target = dict()
|
||
|
count_by_target = dict()
|
||
|
total_real_time = 0.0
|
||
|
for i in range(len(lines)):
|
||
|
if(scanning_pattern.match(lines[i])):
|
||
|
current_target = lines[i][:-1].split()[-1]
|
||
|
print("current_target is {}".format(current_target))
|
||
|
if current_target not in time_by_target:
|
||
|
time_by_target[current_target] = 0.0
|
||
|
count_by_target[current_target] = 0
|
||
|
elif(building_cxx_pattern.match(lines[i])):
|
||
|
obj = lines[i][:-3].split('/')[-1]
|
||
|
real_time = get_time(lines[i+1])
|
||
|
user_time = get_time(lines[i+2])
|
||
|
sys_time = get_time(lines[i+3])
|
||
|
i += 3
|
||
|
print(" building cxx is {}: {}, {}, {}".format(obj, real_time, user_time, sys_time))
|
||
|
all_builds.append((obj, real_time, user_time, sys_time))
|
||
|
total_real_time += real_time
|
||
|
time_by_target[current_target] += real_time
|
||
|
count_by_target[current_target] += 1
|
||
|
|
||
|
print("Total build time: {}".format(total_real_time))
|
||
|
for k, v in count_by_target.items():
|
||
|
print("{}, {}".format(k, v))
|
||
|
|
||
|
print("-----------------------------------")
|
||
|
for k, v in time_by_target.items():
|
||
|
print("{}, {}".format(k, v))
|
||
|
|
||
|
|
||
|
|
||
|
def main():
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument(dest = 'input', help = 'Input text file.')
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
with open(args.input, "r") as f:
|
||
|
parse_file(f.readlines())
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|