Pushed the whole patchset, thanks.
On Wed, Oct 09, 2013 at 03:55:23PM +0800, [email protected] wrote: > From: Junyan He <[email protected]> > > The string format of kernel serializaion will be useful for > generating the code for internal kernel binary load in. > > Signed-off-by: Junyan He <[email protected]> > --- > backend/src/gbe_bin_generater.cpp | 47 > ++++++++++++++++++++++++++++++++++--- > 1 file changed, 44 insertions(+), 3 deletions(-) > > diff --git a/backend/src/gbe_bin_generater.cpp > b/backend/src/gbe_bin_generater.cpp > index afe86f2..37e61e2 100644 > --- a/backend/src/gbe_bin_generater.cpp > +++ b/backend/src/gbe_bin_generater.cpp > @@ -33,6 +33,9 @@ > #include <deque> > #include <vector> > #include <algorithm> > +#include <stdlib.h> > +#include <stdio.h> > + > #include "backend/program.h" > #include "backend/program.hpp" > > @@ -49,6 +52,7 @@ protected: > string prog_path; > string build_opt; > static string bin_path; > + static bool str_fmt_out; > int fd; > int file_len; > const char* code; > @@ -100,7 +104,6 @@ public: > return *this; > } > > - > const char* file_map_open (void) throw (int); > > const char* get_code (void) { > @@ -125,6 +128,10 @@ public: > print_file(); > } > > + static void set_str_fmt_out (bool flag) { > + str_fmt_out = flag; > + } > + > static int set_bin_path (const char* path) { > if (bin_path.size()) > return 0; > @@ -138,14 +145,43 @@ public: > }; > > string program_build_instance::bin_path; > +bool program_build_instance::str_fmt_out = false; > > void program_build_instance::serialize_program(void) throw(int) > { > ofstream ofs; > ostringstream oss; > + size_t sz; > ofs.open(bin_path, ofstream::out | ofstream::app | ofstream::binary); > > - size_t sz = gbe_prog->serializeToBin(ofs); > + if (str_fmt_out) { > + string array_name = "Unkown_name_array"; > + unsigned long last_slash = bin_path.rfind("/"); > + unsigned long last_dot = bin_path.rfind("."); > + > + if (last_slash != string::npos && last_dot != string::npos) > + array_name = bin_path.substr(last_slash + 1, last_dot - 1 - > last_slash); > + > + ofs << "char " << array_name << "[] = {" << "\n"; > + > + sz = gbe_prog->serializeToBin(oss); > + > + for (size_t i = 0; i < sz; i++) { > + unsigned char c = oss.str().c_str()[i]; > + char asic_str[9]; > + sprintf(asic_str, "%2.2x", c); > + ofs << "0x"; > + ofs << asic_str << ((i == sz - 1) ? "" : ", "); > + } > + > + ofs << "};\n"; > + > + string array_size = array_name + "_size"; > + ofs << "int " << array_size << " = " << sz << ";" << "\n"; > + } else { > + sz = gbe_prog->serializeToBin(ofs); > + } > + > ofs.close(); > > if (!sz) { > @@ -211,7 +247,7 @@ int main (int argc, const char **argv) > argv_saved.push_back(string(argv[i])); > } > > - while ( (oc = getopt(argc, (char * const *)argv, "o:p:")) != -1 ) { > + while ( (oc = getopt(argc, (char * const *)argv, "o:p:s")) != -1 ) { > switch (oc) { > case 'p': > { > @@ -245,6 +281,11 @@ int main (int argc, const char **argv) > used_index[optind-1] = 1; > break; > > + case 's': > + program_build_instance::set_str_fmt_out(true); > + used_index[optind-1] = 1; > + break; > + > case ':': > cout << "Miss the file option argument" << endl; > return 1; > -- > 1.7.9.5 > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
