Add armv6j_hardfp
[catalyst.git] / doc / make_subarch_table_guidexml.py
1 #! /usr/bin/env python
2 # Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
3 # Licensed under GPL v2 or later
4
5
6 import os
7 import re
8 import textwrap
9
10
11 _pattern_arch_generic = re.compile('^class arch_([a-z0-9_.-]+)\\(generic_([a-z0-9_.-]+)\\):')
12 _pattern_arch_arch = re.compile('^class arch_([a-z0-9_.-]+)\\(arch_([a-z0-9_.-]+)\\):')
13 _pattern_title = re.compile('"([a-z0-9_.-]+)"[ \\t]*:[ \\t]*arch_([a-z0-9_.-]+),?')
14
15 _pattern_arch_genericliases = {
16         'armeb':'arm',
17         'sheb':'sh',
18         'mipsel':'mips',
19         'mips64el':'mips64',
20 }
21
22
23 def handle_line(line, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id):
24         x = _pattern_arch_generic.search(line)
25         if x is not None:
26                 subarch = x.group(1)
27                 arch = x.group(2)
28
29                 # Apply alias grouping
30                 arch = _pattern_arch_genericliases.get(arch, arch)
31
32                 assert(subarch not in subarch_id_to_pattern_arch_genericrch_id)
33                 subarch_id_to_pattern_arch_genericrch_id[subarch] = arch
34
35                 return
36
37         x = _pattern_arch_arch.search(line)
38         if x is not None:
39                 child_subarch = x.group(1)
40                 parent_subarch = x.group(2)
41
42                 assert(child_subarch not in subarch_id_to_pattern_arch_genericrch_id)
43                 subarch_id_to_pattern_arch_genericrch_id[child_subarch] = subarch_id_to_pattern_arch_genericrch_id[parent_subarch]
44
45                 return
46
47         for x in re.finditer(_pattern_title, line):
48                 subarch_title = x.group(1)
49                 subarch_id = x.group(2)
50
51                 assert(subarch_title not in subarch_title_to_subarch_id)
52                 subarch_title_to_subarch_id[subarch_title] = subarch_id
53
54
55 def handle_file(fn, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id):
56         f = open(fn, 'r')
57         for l in f:
58                 line = l.rstrip()
59                 handle_line(line, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id)
60         f.close()
61
62
63 def dump(subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id):
64         arch_id_to_subarch_titles = dict()
65         for subarch_title, subarch_id in subarch_title_to_subarch_id.items():
66                 arch_id = subarch_id_to_pattern_arch_genericrch_id.get(subarch_id, subarch_id)
67
68                 if arch_id not in arch_id_to_subarch_titles:
69                         arch_id_to_subarch_titles[arch_id] = set()
70                 arch_id_to_subarch_titles[arch_id].add(subarch_title)
71
72         # GuideXML version
73         f = open('doc/subarches.generated.xml', 'w')
74         f.write("""
75 <table>
76 <tr>
77 <th>Architecture</th>
78 <th>Sub-architectures</th>
79 </tr>
80 """)
81         for arch_id, subarch_titles in sorted(arch_id_to_subarch_titles.items()):
82                 f.write("""<tr>
83 <ti><c>%s</c></ti>
84 <ti><c>%s</c></ti>
85 </tr>
86 """ % (arch_id, '\n'.join(textwrap.wrap(' '.join(sorted(subarch_titles)), 60))))
87
88         f.write("""</table>
89 """)
90         f.close()
91
92         # Asciidoc
93         f = open('doc/subarches.generated.txt', 'w')
94         for arch_id, subarch_titles in sorted(arch_id_to_subarch_titles.items()):
95                 f.write('*%s*::\n' % arch_id)
96                 f.write('    %s\n' % ', '.join(sorted(subarch_titles)))
97                 f.write('\n')
98         f.close()
99
100
101 if __name__ == '__main__':
102         subarch_title_to_subarch_id = dict()
103         subarch_id_to_pattern_arch_genericrch_id = dict()
104
105         for (dirpath, dirnames, filenames) in os.walk('modules/catalyst/arch'):
106                 for _fn in filenames:
107                         if not _fn.endswith('.py'):
108                                 continue
109
110                         fn = os.path.join(dirpath, _fn)
111                         handle_file(fn, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id)
112
113         dump(subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id)