diff options
Diffstat (limited to 'framework/src/suricata/src/ptxdump.py')
-rw-r--r-- | framework/src/suricata/src/ptxdump.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/framework/src/suricata/src/ptxdump.py b/framework/src/suricata/src/ptxdump.py new file mode 100644 index 00000000..097e5173 --- /dev/null +++ b/framework/src/suricata/src/ptxdump.py @@ -0,0 +1,71 @@ +#!/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() |