mt_embed_file
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,6 +2,7 @@ backup
|
||||
subl.bat
|
||||
multimedia.c
|
||||
multimedia.h
|
||||
playground.py
|
||||
|
||||
build/
|
||||
|
||||
|
||||
19
build_file.c
19
build_file.c
@@ -11,19 +11,13 @@
|
||||
#include "src/meta/cgen.c"
|
||||
|
||||
#include "src/app/app.meta.c"
|
||||
#include "src/wasm_app/ui.meta.c"
|
||||
#include "src/wasm_app/wasm_app.meta.c"
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
cache_init(&Perm, s8_lit("cache_build_file"));
|
||||
int ok = 0;
|
||||
|
||||
ma_arena_t *arena = ma_create(ma_default_reserve_size);
|
||||
sb8_t *include_paths = sb8(arena);
|
||||
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8_lit("../src")));
|
||||
|
||||
cg_files_t files = cg_lex_files(arena, s8_lit("../src/wasm_app/main.c"), include_paths);
|
||||
meta_app(arena);
|
||||
meta_ui(arena);
|
||||
|
||||
if (cache_code_modified(s8_lit("../src/core/core_math_gen.py"), s8_null)) {
|
||||
os_set_working_dir("../src/core");
|
||||
@@ -31,19 +25,14 @@ int main(int argc, char **argv) {
|
||||
os_set_working_dir("../../build");
|
||||
}
|
||||
|
||||
b32 execute_python_snippets = false; // make sure to not abuse, just for quick maths
|
||||
meta_app(arena);
|
||||
mt_wasm_app(arena);
|
||||
|
||||
b32 run_server = false;
|
||||
b32 core_test_target = false;
|
||||
b32 win32_target = true;
|
||||
b32 wasm_target = false;
|
||||
|
||||
if (execute_python_snippets) {
|
||||
for (cg_file_t *it = files.first; it; it = it->next) {
|
||||
i64 idx = s8_find(it->content, s8_lit("/*#"), 0);
|
||||
if (idx != -1) os_systemf("\"D:\\dev\\apps\\bin\\pyorun.bat\" %s", it->path.str);
|
||||
}
|
||||
}
|
||||
|
||||
if (run_server) {
|
||||
os_systemf("start /D ..\\package ..\\package\\run_server.bat");
|
||||
}
|
||||
|
||||
BIN
package/liberation-mono.ttf
Normal file
BIN
package/liberation-mono.ttf
Normal file
Binary file not shown.
@@ -199,6 +199,6 @@ void meta_app(ma_arena_t *arena) {
|
||||
sb8_serial_ast_to_type_info(c, decls);
|
||||
}
|
||||
|
||||
os_write_file(gen_c(arena), sb8_merge(arena, c));
|
||||
os_write_file(gen_h(arena), sb8_merge(arena, h));
|
||||
os_write_file(cg_cpath(arena), sb8_merge(arena, c));
|
||||
os_write_file(cg_hpath(arena), sb8_merge(arena, h));
|
||||
}
|
||||
@@ -157,6 +157,7 @@ void *sbin_read_data(stream_t *stream, i64 size);
|
||||
// other
|
||||
#define s8_fmtspec(string) (int)(string).len, (string).str
|
||||
#define s8_struct(DATA) (s8_t){.str = (char *)&(DATA), .len = sizeof(DATA)}
|
||||
#define s8_array(DATA) (s8_t){.str = (char *)(DATA), .len = lengthof(DATA)}
|
||||
#define S8_CODE(...) s8_lit(#__VA_ARGS__)
|
||||
#define S8_FILE s8_lit(__FILE__)
|
||||
#define S8_FILE_AND_LINE s8_lit(FILE_AND_LINE)
|
||||
|
||||
@@ -96,3 +96,30 @@ fn void cg_list_files_recursive(sb8_t *sb, s8_t path) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn void cg_byte_array_from_data_ex(sb8_t *sb, s8_t file, s8_t var_name) {
|
||||
sb8_printf(sb, "u8 %S[] = {", var_name);
|
||||
for (i64 i = 0; i < file.len; i += 1) {
|
||||
if ((i % 64) == 0) sb8_printf(sb, "\n");
|
||||
u8 byte = *(u8 *)(file.str + i);
|
||||
sb8_printf(sb, "%u,", byte);
|
||||
}
|
||||
sb8_printf(sb, "\n};\n");
|
||||
}
|
||||
|
||||
fn s8_t cg_byte_array_from_data(ma_arena_t *arena, s8_t file, s8_t var_name) {
|
||||
ma_temp_t scratch = ma_begin_scratch1(arena);
|
||||
sb8_t *sb = sb8_serial_begin(scratch.arena);
|
||||
cg_byte_array_from_data_ex(sb, file, var_name);
|
||||
s8_t result = sb8_serial_end(arena, sb);
|
||||
ma_end_scratch(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
#define cg_cpath(arena) cg_gen_filename(arena, s8_lit(__FILE__), s8_lit("c"))
|
||||
#define cg_hpath(arena) cg_gen_filename(arena, s8_lit(__FILE__), s8_lit("h"))
|
||||
s8_t cg_gen_filename(ma_arena_t *arena, s8_t lit_file, s8_t ext) {
|
||||
s8_t file_noext = s8_chop_last_period(s8_chop_last_period(lit_file));
|
||||
s8_t file = s8_printf(arena, "%S.gen.%S", file_noext, ext);
|
||||
return file;
|
||||
}
|
||||
@@ -232,11 +232,3 @@ void sb8_serial_table_enum(sb8_t *c, sb8_t *h, ast_t *table, s8_t decl) {
|
||||
c->indent -= 1;
|
||||
sb8_stmtf(c, "};");
|
||||
}
|
||||
|
||||
#define gen_c(arena) _gen_filename(arena, s8_lit(__FILE__), s8_lit("c"))
|
||||
#define gen_h(arena) _gen_filename(arena, s8_lit(__FILE__), s8_lit("h"))
|
||||
s8_t _gen_filename(ma_arena_t *arena, s8_t lit_file, s8_t ext) {
|
||||
s8_t file_noext = s8_chop_last_period(s8_chop_last_period(lit_file));
|
||||
s8_t file = s8_printf(arena, "%S.gen.%S", file_noext, ext);
|
||||
return file;
|
||||
}
|
||||
@@ -206,13 +206,13 @@ void rn_set_clip(r2f32_t rect) {
|
||||
cmd->rect = rect;
|
||||
}
|
||||
|
||||
void rn_init(ma_arena_t *perm, f32 _font_size) {
|
||||
void rn_init(ma_arena_t *perm, s8_t font_data, f32 _font_size) {
|
||||
rn_state.cap = 1024*256;
|
||||
rn_state.vertices = ma_push_array(perm, rn_vertex_t, rn_state.cap);
|
||||
|
||||
{
|
||||
ma_temp_t scratch = ma_begin_scratch1(perm);
|
||||
s8_t font_data = rn_get_default_font(tcx.temp);
|
||||
// s8_t font_data = ;//rn_get_default_font(tcx.temp);
|
||||
rn_atlas_t *atlas = rn_create_atlas(scratch.arena, (v2i32_t){2048, 2048});
|
||||
|
||||
u32 font_size = (u32)_font_size;
|
||||
|
||||
@@ -21,24 +21,20 @@
|
||||
#define STBTT_memcpy memory_copy
|
||||
#define STBTT_memset memory_set
|
||||
#include "render/stb_truetype.h"
|
||||
#include "render/backup_font.c"
|
||||
// #include "render/backup_font.c"
|
||||
#include "render/font.c"
|
||||
#include "render/render_opengl.c"
|
||||
#include "wasm_app.gen.c"
|
||||
|
||||
#include "ui_iter.c"
|
||||
#include "ui.c"
|
||||
|
||||
typedef struct globals_t globals_t;
|
||||
struct globals_t {
|
||||
app_event_t event;
|
||||
};
|
||||
gb globals_t *globals;
|
||||
|
||||
#define mt_embed_file(variable, path)
|
||||
|
||||
fn void app_init(f32 dpr) {
|
||||
ma_arena_t *perm = &tcx._perm;
|
||||
globals = ma_push_type(perm, globals_t);
|
||||
rn_init(perm, 50 * dpr);
|
||||
mt_embed_file(font_liberation_mono, "package/liberation-mono.ttf");
|
||||
rn_init(perm, s8_array(font_liberation_mono), 50 * dpr);
|
||||
ui_demo_init(perm);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
void meta_ui(ma_arena_t *arena) {
|
||||
#if 0
|
||||
sb8_t *h = sb8_serial_begin(arena);
|
||||
sb8_t *c = sb8_serial_begin(arena);
|
||||
|
||||
ast_t *decls = parse_decls(arena, __FILE__, S8_CODE(
|
||||
typedef enum {
|
||||
ui_box_flag_draw_border,
|
||||
ui_box_flag_draw_text,
|
||||
ui_box_flag_draw_rect,
|
||||
ui_box_flag_scroll,
|
||||
} ui_box_flag_t; @flags
|
||||
|
||||
typedef enum {
|
||||
ui_id_strategy_use_hierarchy,
|
||||
ui_id_strategy_use_code_loc,
|
||||
ui_id_strategy_use_string,
|
||||
} ui_id_strategy_t; @flags
|
||||
));
|
||||
|
||||
sb8_serial_ast_to_code(h, decls);
|
||||
sb8_serial_ast_to_type_info(c, decls);
|
||||
|
||||
os_write_file(gen_c(arena), sb8_merge(arena, c));
|
||||
os_write_file(gen_h(arena), sb8_merge(arena, h));
|
||||
#endif
|
||||
}
|
||||
1693
src/wasm_app/wasm_app.gen.c
Normal file
1693
src/wasm_app/wasm_app.gen.c
Normal file
File diff suppressed because it is too large
Load Diff
26
src/wasm_app/wasm_app.meta.c
Normal file
26
src/wasm_app/wasm_app.meta.c
Normal file
@@ -0,0 +1,26 @@
|
||||
void mt_wasm_app(ma_arena_t *arena) {
|
||||
sb8_t *include_paths = sb8(arena);
|
||||
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8_lit("../src")));
|
||||
cg_files_t files = cg_lex_files(arena, s8_lit("../src/wasm_app/main.c"), include_paths);
|
||||
|
||||
sb8_t *sb_embeds = sb8_serial_begin(arena);
|
||||
for (cg_file_t *it = files.first; it; it = it->next) {
|
||||
parser_t *par = parser_make(arena, it->tokens.data);
|
||||
for (;par->at->kind != lex_kind_eof;) {
|
||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_embed_file"))) {
|
||||
parser_expect(par, lex_kind_open_paren);
|
||||
lex_t *var_name = parser_expect(par, lex_kind_ident);
|
||||
parser_expect(par, lex_kind_comma);
|
||||
lex_t *path = parser_expect(par, lex_kind_string);
|
||||
parser_expect(par, lex_kind_close_paren);
|
||||
s8_t relpath = s8_printf(arena, "../%S", path->string);
|
||||
s8_t content = OS_ReadFile(&Perm, relpath);
|
||||
cg_byte_array_from_data_ex(sb_embeds, content, var_name->string);
|
||||
} else {
|
||||
parser_next(par);
|
||||
}
|
||||
}
|
||||
}
|
||||
s8_t embeds = sb8_serial_end(arena, sb_embeds);
|
||||
os_write_file(cg_cpath(arena), embeds);
|
||||
}
|
||||
Reference in New Issue
Block a user