load libfile to array asset file is ok

This commit is contained in:
lyon 2022-05-04 16:53:07 +08:00
parent 5aa541afa1
commit 9db9888a49
3 changed files with 61 additions and 7 deletions

View File

@ -430,7 +430,6 @@ TEST(lib, lib_to_file) {
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(lib, save2) {
LibObj* lib = New_LibObj();
@ -466,8 +465,7 @@ TEST(lib, load_file) {
"import test_module3\n"
"test_module1.mytest()\n"
"test_module2.mytest()\n"
"test_module3.mytest()\n"
);
"test_module3.mytest()\n");
/* asset */
EXPECT_STREQ(log_buff[2], "test_module_1_hello\r\n");
EXPECT_STREQ(log_buff[1], "test_module_2_hello\r\n");
@ -497,3 +495,8 @@ TEST(lib, load_err_file_type) {
LibObj_deinit(lib);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(lib, lib_file_to_array) {
Lib_loadLibraryFileToArray("test/python/lib_to_file.py.a",
"test/python");
}

View File

@ -287,19 +287,69 @@ int LibObj_loadLibrary(LibObj* self, uint8_t* library) {
return 0;
}
int LibObj_loadLibraryFile(LibObj* self, char* input_file_name) {
Arg* file_arg = arg_loadFile(NULL, input_file_name);
int LibObj_loadLibraryFile(LibObj* self, char* lib_file_name) {
Arg* file_arg = arg_loadFile(NULL, lib_file_name);
if (NULL == file_arg) {
__platform_printf("Error: Could not load library file '%s'\n",
input_file_name);
lib_file_name);
return 1;
}
/* save file_arg as __lib_buf to libObj */
obj_setArg_noCopy(self, "__lib_buf", file_arg);
if (0 != LibObj_loadLibrary(self, arg_getBytes(file_arg))) {
__platform_printf("Error: Could not load library from '%s'\n",
input_file_name);
lib_file_name);
return 2;
}
return 0;
}
size_t pika_fputs(char* str, FILE* fp) {
size_t size = strGetSize(str);
return __platform_fwrite(str, 1, size, fp);
}
int Lib_loadLibraryFileToArray(char* origin_file_name, char* out_folder) {
Args buffs = {0};
Arg* file_arg = arg_loadFile(NULL, origin_file_name);
int res = 0;
if (NULL == file_arg) {
__platform_printf("Error: Could not load file '%s'\n",
origin_file_name);
return 1;
}
char* output_file_name = NULL;
output_file_name = strsGetLastToken(&buffs, origin_file_name, '/');
output_file_name = strsAppend(&buffs, "__asset_", output_file_name);
output_file_name = strsReplace(&buffs, output_file_name, ".", "_");
output_file_name = strsAppend(&buffs, output_file_name, ".c");
char* output_file_path = strsAppend(&buffs, out_folder, "/");
output_file_path = strsAppend(&buffs, output_file_path, output_file_name);
FILE* fp = __platform_fopen(output_file_path, "w+");
char* array_name = strsGetLastToken(&buffs, origin_file_name, '/');
array_name = strsReplace(&buffs, array_name, ".", "_");
pika_fputs("const unsigned char", fp);
pika_fputs(array_name, fp);
pika_fputs("[] = {", fp);
char byte_buff[32] = {0};
uint8_t* array = arg_getBytes(file_arg);
for (size_t i = 0; i < arg_getBytesSize(file_arg); i++) {
if (i % 12 == 0) {
pika_fputs("\n ", fp);
}
__platform_sprintf(byte_buff, "0x%02x, ", array[i]);
pika_fputs(byte_buff, fp);
}
pika_fputs("\n};\n", fp);
res = 0;
goto exit;
exit:
__platform_fclose(fp);
strsDeinit(&buffs);
arg_deinit(file_arg);
return res;
}

View File

@ -19,6 +19,7 @@ int LibObj_staticLinkFile(LibObj* self, char* input_file_name);
void LibObj_listModules(LibObj* self);
int LibObj_saveLibraryFile(LibObj* self, char* output_file_name);
int LibObj_loadLibraryFile(LibObj* self, char* input_file_name);
int Lib_loadLibraryFileToArray(char* origin_file_name, char* pikascript_root);
#define LIB_VERSION_NUMBER 1
#define LIB_INFO_BLOCK_SIZE 32