/* deserializes a single file from the binary. */ static size_t deserialize_file(unsigned char* buffer, char* basedir, size_t offset) { unsigned char* orig_buffer = buffer; size_t len; char* relpath = NULL; BUFFER_READ_STR2(relpath, len); assert(len > 0); char* content = NULL; BUFFER_READ_STR2(content, len); assert(len > 0); char *p = basedir + offset; strcpy(p, relpath); free(relpath); char *fullpath = basedir; if (pocl_exists(fullpath)) goto RET; char* dir = strdup(basedir); char* dirpath = dirname(dir); if (!pocl_exists(dirpath)) pocl_mkdir_p(dirpath); free(dir); pocl_write_file(fullpath, content, len, 0, 0); RET: free(content); return (buffer - orig_buffer); }
int pocl_cache_append_to_buildlog(cl_program program, unsigned device_i, const char *content, size_t size) { char buildlog_path[POCL_FILENAME_LENGTH]; program_device_dir(buildlog_path, program, device_i, POCL_BUILDLOG_FILENAME); return pocl_write_file(buildlog_path, content, size, 1, 1); }
int pocl_cache_write_descriptor(cl_program program, unsigned device_i, const char* kernel_name, const char* content, size_t size) { char devdir[POCL_FILENAME_LENGTH]; program_device_dir(devdir, program, device_i, ""); char descriptor[POCL_FILENAME_LENGTH]; int bytes_written = snprintf(descriptor, POCL_FILENAME_LENGTH, "%s/%s", devdir, kernel_name); assert(bytes_written > 0 && bytes_written < POCL_FILENAME_LENGTH); if (pocl_mkdir_p(descriptor)) return 1; bytes_written = snprintf(descriptor, POCL_FILENAME_LENGTH, "%s/%s/descriptor.so.kernel_obj.c", devdir, kernel_name); assert(bytes_written > 0 && bytes_written < POCL_FILENAME_LENGTH); return pocl_write_file(descriptor, content, size, 0, 1); }
int pocl_cache_write_program_source(char *program_cl_path, cl_program program) { pocl_cache_mk_temp_name(program_cl_path); return pocl_write_file(program_cl_path, program->source, strlen(program->source), 0, 0); }