• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import os,shutil
2import sys
3
4import struct
5import os
6from sys import platform
7
8class GenSource2Bin(object):
9    def __init__(self, component='codec'):
10        self.fromdir    = './Binary'
11
12    def iga_compile(self):
13        for filename in os.listdir('./Source'):
14            fp = os.path.join('./Source', filename)
15            fileext = os.path.splitext(filename)[1]
16            if os.path.isfile(fp) and 'cpp' in fileext:
17                command  = 'cmc /c /Qxcm -Qxcm_jit_target=gen11lp '
18                command += fp
19                command += ' -mCM_emit_common_isa  -mCM_no_input_reorder -mCM_jit_option="-nocompaction" '
20                os.system(command)
21
22                print("Compiled %s" % fp);
23
24    def deleteFile(self):
25        for filename in os.listdir('./'):
26            fp = os.path.join('./', filename)
27            fileext = os.path.splitext(filename)[1]
28            if os.path.isfile(fp) and 'asm' in fileext:
29                os.remove(fp)
30
31            if os.path.isfile(fp) and 'dat' in fileext:
32                os.remove(fp)
33
34            if os.path.isfile(fp) and 'visaasm' in fileext:
35                os.remove(fp)
36
37            if os.path.isfile(fp) and 'isa' in fileext:
38                os.remove(fp)
39
40    def join(self):
41        isExists=os.path.exists("Binary")
42        if not isExists:
43            os.mkdir("Binary")
44
45        shutil.copy('downscale_kernel_genx_0.dat', 'Binary/DS4x_Frame.krn')
46        shutil.copy('downscale_kernel_genx_1.dat', 'Binary/DS2x_Frame.krn')
47        shutil.copy('hme_kernel_genx_0.dat', 'Binary/HME_P.krn')
48        shutil.copy('hme_kernel_genx_1.dat', 'Binary/HME_B.krn')
49        shutil.copy('hme_kernel_genx_2.dat', 'Binary/HME_VDENC.krn')
50        shutil.copy('downscale_convert_kernel_genx_0.dat', 'Binary/DS_Convert.krn')
51
52        output = open('commonkernel.krn', 'wb')
53
54        bytes  = struct.pack('i', 6)
55        output.write(bytes)
56
57        count  = 64
58        bytes  = struct.pack('i', count)
59        output.write(bytes)
60
61        filepath = os.path.join('./Binary', 'DS4x_Frame.krn')
62        count   += os.path.getsize(filepath)
63        count1   = ((count + 63) >> 6) << 6
64        byteremain1 = count1 - count
65
66        bytes  = struct.pack('i', count1)
67        output.write(bytes)
68
69        filepath = os.path.join('./Binary', 'DS2x_Frame.krn')
70        count1  += os.path.getsize(filepath)
71        count2   = ((count1 + 63) >> 6) << 6
72        byteremain2 = count2 - count1
73
74        bytes  = struct.pack('i', count2)
75        output.write(bytes)
76
77        filepath = os.path.join('./Binary', 'HME_P.krn')
78        count2  += os.path.getsize(filepath)
79        count3   = ((count2 + 63) >> 6) << 6
80        byteremain3 = count3 - count2
81
82        bytes  = struct.pack('i', count3)
83        output.write(bytes)
84
85        filepath = os.path.join('./Binary', 'HME_B.krn')
86        count3  += os.path.getsize(filepath)
87        count4   = ((count3 + 63) >> 6) << 6
88        byteremain4 = count4 - count3
89
90        bytes  = struct.pack('i', count4)
91        output.write(bytes)
92
93        filepath = os.path.join('./Binary', 'HME_VDENC.krn')
94        count4  += os.path.getsize(filepath)
95        count5   = ((count4 + 63) >> 6) << 6
96        byteremain5 = count5 - count4
97
98        bytes  = struct.pack('i', count5)
99        output.write(bytes)
100
101        filepath = os.path.join('./Binary', 'DS_Convert.krn')
102        count5  += os.path.getsize(filepath)
103        count6   = ((count5 + 63) >> 6) << 6
104        byteremain6 = count6 - count5
105
106        zerofill = chr(0)*36
107        output.write(zerofill.encode(encoding = "utf-8"));
108
109        filepath = os.path.join('./Binary', 'DS4x_Frame.krn')
110        fileobj  = open(filepath, 'rb')
111
112        while 1:
113            filebytes = fileobj.read()
114
115            if not filebytes:
116                byteremain = count1 - os.path.getsize(filepath)
117                zerofill = chr(0)*byteremain1
118                output.write(zerofill.encode(encoding = "utf-8"))
119                break
120
121            output.write(filebytes)
122        fileobj.close()
123
124        filepath = os.path.join('./Binary', 'DS2x_Frame.krn')
125        fileobj  = open(filepath, 'rb')
126
127        while 1:
128            filebytes = fileobj.read()
129
130            if not filebytes:
131                zerofill = chr(0)*byteremain2
132                output.write(zerofill.encode(encoding = "utf-8"))
133                break
134
135            output.write(filebytes)
136        fileobj.close()
137
138        filepath = os.path.join('./Binary', 'HME_P.krn')
139        fileobj  = open(filepath, 'rb')
140
141        while 1:
142            filebytes = fileobj.read()
143
144            if not filebytes:
145                zerofill = chr(0)*byteremain3
146                output.write(zerofill.encode(encoding = "utf-8"))
147                break
148
149            output.write(filebytes)
150        fileobj.close()
151
152        filepath = os.path.join('./Binary', 'HME_B.krn')
153        fileobj  = open(filepath, 'rb')
154
155        while 1:
156            filebytes = fileobj.read()
157
158            if not filebytes:
159                zerofill = chr(0)*byteremain4
160                output.write(zerofill.encode(encoding = "utf-8"))
161                break
162
163            output.write(filebytes)
164        fileobj.close()
165
166        filepath = os.path.join('./Binary', 'HME_VDENC.krn')
167        fileobj  = open(filepath, 'rb')
168
169        while 1:
170            filebytes = fileobj.read()
171
172            if not filebytes:
173                zerofill = chr(0)*byteremain5
174                output.write(zerofill.encode(encoding = "utf-8"))
175                break
176
177            output.write(filebytes)
178        fileobj.close()
179
180        filepath = os.path.join('./Binary', 'DS_Convert.krn')
181        fileobj  = open(filepath, 'rb')
182
183        while 1:
184            filebytes = fileobj.read()
185
186            if not filebytes:
187                zerofill = chr(0)*128
188                output.write(zerofill.encode(encoding = "utf-8"))
189                break
190
191            output.write(filebytes)
192        fileobj.close()
193
194        output.close()
195        print ("Completed kernel merge")
196
197def main():
198
199    k2s = GenSource2Bin()
200
201    k2s.iga_compile()
202    k2s.join()
203    k2s.deleteFile()
204
205if __name__=='__main__':
206    main()
207