You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
suricata/src/ptxdump.py

72 lines
2.1 KiB
Python

#!/usr/bin/env python
from string import *
import os, getopt, sys, platform
header = '''/* Auto-generated by ptxdump.py DO NOT EDIT
*
* This file contains the ptx code of the Cuda kernels.
* A kernel is identified by its name and the compute capability (e.g. _sm_10).
*/
'''
def FormatCharHex(d):
s = hex(ord(d))
if len(s) == 3:
s = "0x0" + s[2]
return s
def CleanFileName(f):
v = f.replace("-","_")
v = v.replace(".ptx","")
return v
if not(len(sys.argv[1:]) >= 2):
print("Usage: ptx2c.py <output> <in.ptx ..> ")
print("Description: creates a header file containing the ptx files as character array" + os.linesep)
sys.exit(0)
out_h = sys.argv[1] + ".h"
out = open(out_h, 'w')
out.writelines(header)
out.writelines("#ifdef __SC_CUDA_SUPPORT__\n")
out.writelines("#ifndef __ptxdump_h__\n")
out.writelines("#define __ptxdump_h__\n\n")
# write char arrays
for file in sys.argv[2:]:
in_ptx = open(file, 'r')
source = in_ptx.read()
source_len = len(source)
varname = CleanFileName(file)
out.writelines("const unsigned char " + varname + "[" + str(source_len+1) + "] = {\n")
newlinecnt = 0
for i in range(0, source_len):
out.write(FormatCharHex(source[i]) + ", ")
newlinecnt += 1
if newlinecnt == 16:
newlinecnt = 0
out.write("\n")
out.write("0x00\n};\n\n")
print(sys.argv[0] + ": CUmodule " + varname + " packed successfully")
# write retrieval function
out.writelines("const unsigned char* SCCudaPtxDumpGetModule(const char* module){\n");
for file in sys.argv[2:]:
out.writelines('\tif (!strcmp(module, "' + file.replace(".ptx","")+'"))\n')
out.writelines("\t\treturn " + CleanFileName(file)+";\n")
out.writelines('\tSCLogError(SC_ERR_FATAL, "Error in SCCudaPtxDumpGetModule, module %s not found. Exiting...",module);\n')
out.writelines("\texit(EXIT_FAILURE);\n")
out.writelines("};\n")
out.writelines("#endif /* __ptxdump_h__ */\n")
out.writelines("#endif /* __SC_CUDA_SUPPORT__ */\n")
print(sys.argv[0] + ": " + out_h + " written successfully")
in_ptx.close()
out.close()