From 5fd73b7911021c5c043c0d54efbd3c9bddbf3420 Mon Sep 17 00:00:00 2001 From: jacob Date: Fri, 12 Dec 2025 14:10:10 -0600 Subject: [PATCH] async testing --- src/base/base_async.c | 21 +++-- src/base/base_async.h | 16 +++- src/base/base_state.c | 4 +- src/base/base_state.h | 19 +++-- src/base/base_win32/base_win32.c | 2 +- src/base/base_win32/base_win32.h | 6 +- src/glyph_cache/glyph_cache.c | 45 +++++------ src/glyph_cache/glyph_cache.h | 33 +++----- src/meta/meta.c | 130 +++++++++++++++---------------- src/meta/meta.h | 6 +- 10 files changed, 138 insertions(+), 144 deletions(-) diff --git a/src/base/base_async.c b/src/base/base_async.c index 6eb2f76d..c894f85d 100644 --- a/src/base/base_async.c +++ b/src/base/base_async.c @@ -30,24 +30,29 @@ void OnAsyncTick(AsyncTickCallbackFunc *func) void AsyncWorkerEntryPoint(WaveLaneCtx *lane) { + AsyncTickCtx *tick = &Base_tl.async.tick_ctx; + tick->arena = AcquireArena(Gibi(64)); + /* Tick forever */ for (;;) { - TempArena scratch = BeginScratchNoConflict(); - AsyncWorkerState *w = &Base.async.worker; + AsyncWorkerCtx *w = &Base.async.worker_ctx; /* FIXME: Remove this */ SleepSeconds(0.100); ////////////////////////////// - //- Grab async functions + //- Begin tick + + WaveSync(lane); + ResetArena(tick->arena); if (lane->idx == 0) { Lock lock = LockE(&Base.async.mutex); { w->callbacks_count = Base.async.callback_nodes_count; - w->callbacks = PushStructsNoZero(scratch.arena, AsyncTickCallback, w->callbacks_count); + w->callbacks = PushStructsNoZero(tick->arena, AsyncTickCallback, w->callbacks_count); u64 callback_idx = 0; for (AsyncTickCallbackNode *n = Base.async.first_callback_node; n; n = n->next) { @@ -66,13 +71,7 @@ void AsyncWorkerEntryPoint(WaveLaneCtx *lane) for (u64 callback_idx = 0; callback_idx < w->callbacks_count; ++callback_idx) { AsyncTickCallback *callback = &w->callbacks[callback_idx]; - callback->func(lane); + callback->func(lane, tick); } - - ////////////////////////////// - //- End tick - - WaveSync(lane); - EndScratch(scratch); } } diff --git a/src/base/base_async.h b/src/base/base_async.h index a565d000..0214f645 100644 --- a/src/base/base_async.h +++ b/src/base/base_async.h @@ -1,7 +1,8 @@ //////////////////////////////////////////////////////////// -//~ Async types +//~ Async callback -typedef void AsyncTickCallbackFunc(WaveLaneCtx *lane); +Struct(AsyncTickCtx); +typedef void AsyncTickCallbackFunc(WaveLaneCtx *lane, AsyncTickCtx *tick); Struct(AsyncTickCallback) { @@ -14,8 +15,17 @@ Struct(AsyncTickCallbackNode) AsyncTickCallback callback; }; -Struct(AsyncWorkerState) +//////////////////////////////////////////////////////////// +//~ Async worker types + +Struct(AsyncTickCtx) { + Arena *arena; +}; + +Struct(AsyncWorkerCtx) +{ + AsyncTickCtx tick; u64 callbacks_count; AsyncTickCallback *callbacks; }; diff --git a/src/base/base_state.c b/src/base/base_state.c index a48d2b1c..a0799882 100644 --- a/src/base/base_state.c +++ b/src/base/base_state.c @@ -1,2 +1,2 @@ -BaseState Base = ZI; -ThreadLocal BaseThreadLocalState Base_tl = ZI; +BaseCtx Base = ZI; +ThreadLocal BaseThreadLocalCtx Base_tl = ZI; diff --git a/src/base/base_state.h b/src/base/base_state.h index 7e5db902..09b489d2 100644 --- a/src/base/base_state.h +++ b/src/base/base_state.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// -//~ Global state +//~ Global context -Struct(BaseState) +Struct(BaseCtx) { /* Command line */ struct @@ -38,22 +38,27 @@ Struct(BaseState) u64 callback_nodes_count; AsyncTickCallbackNode *first_callback_node; AsyncTickCallbackNode *last_callback_node; - AsyncWorkerState worker; + AsyncWorkerCtx worker_ctx; } async; }; -extern BaseState Base; +extern BaseCtx Base; //////////////////////////////////////////////////////////// -//~ Thread-local state +//~ Thread-local context -Struct(BaseThreadLocalState) +Struct(BaseThreadLocalCtx) { struct { Arena *perm; Arena *scratch[2]; } arenas; + + struct + { + AsyncTickCtx tick_ctx; + } async; }; -extern ThreadLocal BaseThreadLocalState Base_tl; +extern ThreadLocal BaseThreadLocalCtx Base_tl; diff --git a/src/base/base_win32/base_win32.c b/src/base/base_win32/base_win32.c index 431a2679..e5c7392d 100644 --- a/src/base/base_win32/base_win32.c +++ b/src/base/base_win32/base_win32.c @@ -1,4 +1,4 @@ -W32_State W32 = ZI; +W32_Ctx W32 = ZI; //////////////////////////////////////////////////////////// //~ Win32 embedded data diff --git a/src/base/base_win32/base_win32.h b/src/base/base_win32/base_win32.h index df80180a..4546c361 100644 --- a/src/base/base_win32/base_win32.h +++ b/src/base/base_win32/base_win32.h @@ -54,9 +54,9 @@ Struct(W32_FindEmbeddedDataCtx) }; //////////////////////////////////////////////////////////// -//~ State types +//~ Context types -Struct(W32_State) +Struct(W32_Ctx) { SYSTEM_INFO info; u32 main_thread_id; @@ -95,7 +95,7 @@ Struct(W32_State) Atomic64 readable_logs_count; }; -extern W32_State W32; +extern W32_Ctx W32; //////////////////////////////////////////////////////////// //~ Embedded data initialization diff --git a/src/glyph_cache/glyph_cache.c b/src/glyph_cache/glyph_cache.c index ad3eb503..318d306d 100644 --- a/src/glyph_cache/glyph_cache.c +++ b/src/glyph_cache/glyph_cache.c @@ -1,11 +1,11 @@ -GC_State GC = ZI; +GC_Ctx GC = ZI; //////////////////////////////////////////////////////////// //~ Bootstrap void GC_Bootstrap(void) { - OnAsyncTick(GC_AsyncTick); + OnAsyncTick(GC_TickAsync); } //////////////////////////////////////////////////////////// @@ -130,42 +130,33 @@ GC_Run GC_RunFromString(Arena *arena, String str, GC_FontKey font, f32 font_size } //////////////////////////////////////////////////////////// -//~ Async tick +//~ Async -void GC_AsyncTick(WaveLaneCtx *lane) +void GC_TickAsync(WaveLaneCtx *lane, AsyncTickCtx *tick) { - TempArena scratch = BeginScratchNoConflict(); - GC_WorkerState *w = &GC.worker_state; + GC_AsyncCtx *async = &GC.async_ctx; - /* Flatten cmds */ - // if (lane->idx == 0) - // { - // Lock lock = LockE(); - // { + ////////////////////////////// + //- Begin tick - // } - // Unlock(&lock); - // } + if (lane->idx == 0) + { + Lock lock = LockE(&GC.submitted_cmds_mutex); + { + async->cmds.count = GC.submitted_cmds_count; + async->cmds.v = PushStructsNoZero(tick->arena, GC_Cmd, GC.submitted_cmds_count); + } + Unlock(&lock); + } WaveSync(lane); - EndScratch(scratch); + } - - - - - - - - - - - -// //////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////// // //~ Font load job // JobImpl(F_Load, sig, _) diff --git a/src/glyph_cache/glyph_cache.h b/src/glyph_cache/glyph_cache.h index af15e15d..b28136d5 100644 --- a/src/glyph_cache/glyph_cache.h +++ b/src/glyph_cache/glyph_cache.h @@ -103,15 +103,18 @@ Struct(GC_CmdChunk) }; //////////////////////////////////////////////////////////// -//~ State +//~ Context types -Struct(GC_WorkerState) +Struct(GC_AsyncCtx) { - u64 cmds_count; - GC_Cmd *cmds; + struct + { + u64 count; + GC_Cmd *v; + } cmds; }; -Struct(GC_State) +Struct(GC_Ctx) { Mutex glyphs_mutex; GC_GlyphBin glyph_bins[16384]; @@ -121,7 +124,7 @@ Struct(GC_State) GC_CmdChunk *first_submitted_cmd_chunk; GC_CmdChunk *last_submitted_cmd_chunk; - GC_WorkerState worker_state; + GC_AsyncCtx async_ctx; } extern GC; //////////////////////////////////////////////////////////// @@ -141,23 +144,9 @@ u64 GC_HashFromGlyphDesc(GC_GlyphDesc desc); GC_Run GC_RunFromString(Arena *arena, String str, GC_FontKey font, f32 font_size); //////////////////////////////////////////////////////////// -//~ Async tick - -void GC_AsyncTick(WaveLaneCtx *lane); - - - - - - - - - - - - - +//~ Async +void GC_TickAsync(WaveLaneCtx *lane, AsyncTickCtx *ctx); diff --git a/src/meta/meta.c b/src/meta/meta.c index 7c56752f..ca71d363 100644 --- a/src/meta/meta.c +++ b/src/meta/meta.c @@ -1,18 +1,18 @@ #include "meta.h" -BuildData build = ZI; +BuildCtx Build = ZI; //////////////////////////////////////////////////////////// //~ Helpers i32 GetBuildStatus(void) { - return Atomic32Fetch(&build.status); + return Atomic32Fetch(&Build.status); } void SetBuildStatus(i32 code) { - Atomic32FetchTestSet(&build.status, 0, code); + Atomic32FetchTestSet(&Build.status, 0, code); } void EchoLine(String msg) @@ -462,9 +462,9 @@ void BuildEntryPoint(WaveLaneCtx *lane) /* Flatten */ StringList starting_layer_names = ZI; PushStringToList(perm, &starting_layer_names, cmdline.leaf_layer_name); - build.layers_parse = M_FlattenEntries(perm, parsed, starting_layer_names); + Build.layers_parse = M_FlattenEntries(perm, parsed, starting_layer_names); - SetBuildStatus(build.layers_parse.errors.count > 0); + SetBuildStatus(Build.layers_parse.errors.count > 0); } //- Generate C file @@ -474,7 +474,7 @@ void BuildEntryPoint(WaveLaneCtx *lane) StringList c_include_lines = ZI; StringList c_bootstrap_lines = ZI; { - for (M_Entry *entry = build.layers_parse.first; entry->valid; entry = entry->next) + for (M_Entry *entry = Build.layers_parse.first; entry->valid; entry = entry->next) { M_EntryKind kind = entry->kind; M_Token *entry_tok = entry->name_token; @@ -501,12 +501,12 @@ void BuildEntryPoint(WaveLaneCtx *lane) else { String err = StringF(perm, "Directory '%F' not found", FmtString(full)); - M_PushError(perm, &build.c_parse.errors, arg1_tok, err); + M_PushError(perm, &Build.c_parse.errors, arg1_tok, err); } } else { - M_PushError(perm, &build.c_parse.errors, entry_tok, Lit("Expected resource store & directory name")); + M_PushError(perm, &Build.c_parse.errors, entry_tok, Lit("Expected resource store & directory name")); } } break; case M_EntryKind_VertexShader: @@ -526,7 +526,7 @@ void BuildEntryPoint(WaveLaneCtx *lane) } else { - M_PushError(perm, &build.c_parse.errors, entry_tok, Lit("Expected shader name")); + M_PushError(perm, &Build.c_parse.errors, entry_tok, Lit("Expected shader name")); } } break; case M_EntryKind_IncludeC: @@ -545,12 +545,12 @@ void BuildEntryPoint(WaveLaneCtx *lane) else { String err = StringF(perm, "File '%F' not found", FmtString(full)); - M_PushError(perm, &build.c_parse.errors, arg0_tok, err); + M_PushError(perm, &Build.c_parse.errors, arg0_tok, err); } } else { - M_PushError(perm, &build.c_parse.errors, entry_tok, Lit("Expected file name")); + M_PushError(perm, &Build.c_parse.errors, entry_tok, Lit("Expected file name")); } } break; case M_EntryKind_Bootstrap: @@ -563,13 +563,13 @@ void BuildEntryPoint(WaveLaneCtx *lane) } else { - M_PushError(perm, &build.c_parse.errors, entry_tok, Lit("Expected bootstrap function name")); + M_PushError(perm, &Build.c_parse.errors, entry_tok, Lit("Expected bootstrap function name")); } } break; } } } - if (build.c_parse.errors.count == 0) + if (Build.c_parse.errors.count == 0) { StringList c_out_lines = ZI; PushStringToList(perm, &c_out_lines, Lit("// Auto generated file")); @@ -628,7 +628,7 @@ void BuildEntryPoint(WaveLaneCtx *lane) F_ClearWrite(c_out_file, c_out); } - SetBuildStatus(build.c_parse.errors.count > 0); + SetBuildStatus(Build.c_parse.errors.count > 0); } //- Generate HLSL file @@ -660,7 +660,7 @@ void BuildEntryPoint(WaveLaneCtx *lane) { StringList gpu_include_lines = ZI; { - for (M_Entry *entry = build.layers_parse.first; entry->valid; entry = entry->next) + for (M_Entry *entry = Build.layers_parse.first; entry->valid; entry = entry->next) { M_EntryKind kind = entry->kind; M_Token *entry_tok = entry->name_token; @@ -685,12 +685,12 @@ void BuildEntryPoint(WaveLaneCtx *lane) else { String err = StringF(perm, "File '%F' not found", FmtString(full)); - M_PushError(perm, &build.gpu_parse.errors, arg0_tok, err); + M_PushError(perm, &Build.gpu_parse.errors, arg0_tok, err); } } else { - M_PushError(perm, &build.gpu_parse.errors, entry_tok, Lit("Expected file name")); + M_PushError(perm, &Build.gpu_parse.errors, entry_tok, Lit("Expected file name")); } } break; case M_EntryKind_VertexShader: @@ -707,18 +707,18 @@ void BuildEntryPoint(WaveLaneCtx *lane) ShaderEntry *e = PushStruct(perm, ShaderEntry); e->kind = shader_kind; e->name = shader_name; - SllQueuePush(build.gpu_parse.first_shader_entry, build.gpu_parse.last_shader_entry, e); - ++build.gpu_parse.shader_entries_count; + SllQueuePush(Build.gpu_parse.first_shader_entry, Build.gpu_parse.last_shader_entry, e); + ++Build.gpu_parse.shader_entries_count; } else { - M_PushError(perm, &build.gpu_parse.errors, entry_tok, Lit("Expected shader name")); + M_PushError(perm, &Build.gpu_parse.errors, entry_tok, Lit("Expected shader name")); } } break; } } } - if (build.gpu_parse.errors.count == 0) + if (Build.gpu_parse.errors.count == 0) { StringList gpu_out_lines = ZI; PushStringToList(perm, &gpu_out_lines, Lit("// Auto generated file")); @@ -746,13 +746,13 @@ void BuildEntryPoint(WaveLaneCtx *lane) } } - SetBuildStatus(build.gpu_parse.errors.count > 0); + SetBuildStatus(Build.gpu_parse.errors.count > 0); } //- Generate archive info { /* Push embedded archive dirs */ - for (M_Entry *entry = build.layers_parse.first; entry->valid; entry = entry->next) + for (M_Entry *entry = Build.layers_parse.first; entry->valid; entry = entry->next) { M_EntryKind kind = entry->kind; M_Token *entry_tok = entry->name_token; @@ -775,38 +775,38 @@ void BuildEntryPoint(WaveLaneCtx *lane) ResDir *rd = PushStruct(perm, ResDir); rd->store_name = store_name; rd->dir_path = full; - SllQueuePush(build.res_dir_parse.first_res_dir, build.res_dir_parse.last_res_dir, rd); - ++build.res_dir_parse.res_dirs_count; + SllQueuePush(Build.res_dir_parse.first_res_dir, Build.res_dir_parse.last_res_dir, rd); + ++Build.res_dir_parse.res_dirs_count; } else { String err = StringF(perm, "Directory '%F' not found", FmtString(full)); - M_PushError(perm, &build.res_dir_parse.errors, arg1_tok, err); + M_PushError(perm, &Build.res_dir_parse.errors, arg1_tok, err); } } else { - M_PushError(perm, &build.res_dir_parse.errors, entry_tok, Lit("Expected resource store & directory name")); + M_PushError(perm, &Build.res_dir_parse.errors, entry_tok, Lit("Expected resource store & directory name")); } } break; } } - SetBuildStatus(build.res_dir_parse.errors.count > 0); + SetBuildStatus(Build.res_dir_parse.errors.count > 0); } //- Prep obj arrays { /* Gpu objs */ - build.gpu_objs.count = build.gpu_parse.shader_entries_count; - build.gpu_objs.array = PushStructs(perm, GpuObj, build.gpu_objs.count); + Build.gpu_objs.count = Build.gpu_parse.shader_entries_count; + Build.gpu_objs.array = PushStructs(perm, GpuObj, Build.gpu_objs.count); /* Embed objs */ - build.embed_objs.count += build.res_dir_parse.res_dirs_count; - if (build.gpu_parse.shader_entries_count > 0) + Build.embed_objs.count += Build.res_dir_parse.res_dirs_count; + if (Build.gpu_parse.shader_entries_count > 0) { - build.embed_objs.count += 1; + Build.embed_objs.count += 1; } - build.embed_objs.array = PushStructs(perm, EmbedObj, build.embed_objs.count); + Build.embed_objs.array = PushStructs(perm, EmbedObj, Build.embed_objs.count); } } @@ -823,39 +823,39 @@ void BuildEntryPoint(WaveLaneCtx *lane) { if (lane->idx == WaveLaneIdxFromTaskIdx(lane, task_idx++) && GetBuildStatus() == 0) { - build.c_obj.obj_file = StringF(perm, "%F_gen_c.obj", FmtString(cmdline.leaf_layer_name)); + Build.c_obj.obj_file = StringF(perm, "%F_gen_c.obj", FmtString(cmdline.leaf_layer_name)); String cmd = StringF(perm, "cl.exe /c %F -Fo:%F %F %F %F %F", FmtString(c_out_file), - FmtString(build.c_obj.obj_file), + FmtString(Build.c_obj.obj_file), FmtString(StringFromList(perm, cp.flags_msvc, Lit(" "))), FmtString(StringFromList(perm, cp.compiler_only_flags_msvc, Lit(" "))), FmtString(StringFromList(perm, cp.warnings_msvc, Lit(" "))), FmtString(StringFromList(perm, cp.defs, Lit(" ")))); OS_CommandResult cmd_result = OS_RunCommand(perm, cmd); String cmd_output = TrimWhitespace(cmd_result.output); - build.c_obj.output = cmd_output; - build.c_obj.return_code = cmd_result.code; + Build.c_obj.output = cmd_output; + Build.c_obj.return_code = cmd_result.code; /* Ignore MSVC file-name echo */ - if (MatchString(TrimWhitespace(build.c_obj.output), F_GetFileName(c_out_file))) + if (MatchString(TrimWhitespace(Build.c_obj.output), F_GetFileName(c_out_file))) { - build.c_obj.output = Zstr; + Build.c_obj.output = Zstr; } - SetBuildStatus(build.c_obj.return_code); + SetBuildStatus(Build.c_obj.return_code); } } //- Compile shaders { u32 gpu_obj_idx = 0; - for (ShaderEntry *e = build.gpu_parse.first_shader_entry; e; e = e->next) + for (ShaderEntry *e = Build.gpu_parse.first_shader_entry; e; e = e->next) { if (lane->idx == WaveLaneIdxFromTaskIdx(lane, task_idx++) && GetBuildStatus() == 0) { String shader_name = e->name; - GpuObj *gpu_obj = &build.gpu_objs.array[gpu_obj_idx]; + GpuObj *gpu_obj = &Build.gpu_objs.array[gpu_obj_idx]; String out_file = StringF(perm, "%F/%F", FmtString(shader_store_name), FmtString(e->name)); String target = e->kind == ShaderEntryKind_VS ? Lit("vs_6_6") : e->kind == ShaderEntryKind_PS ? Lit("ps_6_6") @@ -877,16 +877,16 @@ void BuildEntryPoint(WaveLaneCtx *lane) SetBuildStatus(gpu_obj->return_code); /* Final shader compilation lane embeds shader archive */ - u32 finished_count = Atomic32FetchAdd(&build.gpu_objs.finished_count, 1) + 1; - if (finished_count == build.gpu_objs.count && GetBuildStatus() == 0) + u32 finished_count = Atomic32FetchAdd(&Build.gpu_objs.finished_count, 1) + 1; + if (finished_count == Build.gpu_objs.count && GetBuildStatus() == 0) { - EmbedObj *embed = &build.embed_objs.array[embed_idx]; + EmbedObj *embed = &Build.embed_objs.array[embed_idx]; *embed = Embed(shader_store_name, shader_store_name); } } ++gpu_obj_idx; } - if (build.gpu_parse.shader_entries_count > 0) + if (Build.gpu_parse.shader_entries_count > 0) { ++embed_idx; } @@ -894,13 +894,13 @@ void BuildEntryPoint(WaveLaneCtx *lane) //- Embed resource dirs { - for (ResDir *rd = build.res_dir_parse.first_res_dir; rd; rd = rd->next) + for (ResDir *rd = Build.res_dir_parse.first_res_dir; rd; rd = rd->next) { if (lane->idx == WaveLaneIdxFromTaskIdx(lane, task_idx++) && GetBuildStatus() == 0) { String dir_path = rd->dir_path; String store_name = rd->store_name; - EmbedObj *embed = &build.embed_objs.array[embed_idx]; + EmbedObj *embed = &Build.embed_objs.array[embed_idx]; *embed = Embed(store_name, dir_path); } ++embed_idx; @@ -928,10 +928,10 @@ void BuildEntryPoint(WaveLaneCtx *lane) String obj_files_str = ZI; { StringList obj_files = ZI; - PushStringToList(perm, &obj_files, build.c_obj.obj_file); - for (u64 embed_obj_idx = 0; embed_obj_idx < build.embed_objs.count; ++embed_obj_idx) + PushStringToList(perm, &obj_files, Build.c_obj.obj_file); + for (u64 embed_obj_idx = 0; embed_obj_idx < Build.embed_objs.count; ++embed_obj_idx) { - EmbedObj *embed_obj = &build.embed_objs.array[embed_obj_idx]; + EmbedObj *embed_obj = &Build.embed_objs.array[embed_obj_idx]; PushStringToList(perm, &obj_files, embed_obj->obj_file); } obj_files_str = StringFromList(perm, obj_files, Lit(" ")); @@ -944,12 +944,12 @@ void BuildEntryPoint(WaveLaneCtx *lane) FmtString(StringFromList(perm, cp.flags_msvc, Lit(" "))), FmtString(StringFromList(perm, cp.linker_only_flags_msvc, Lit(" ")))); OS_CommandResult result = OS_RunCommand(perm, cmd); - build.link.output = TrimWhitespace(result.output); - build.link.return_code = result.code; + Build.link.output = TrimWhitespace(result.output); + Build.link.return_code = result.code; i64 link_elapsed_ns = TimeNs() - start_ns; // EchoLine(StringF(perm, ">>>>> Linked in %Fs", FmtFloat(SecondsFromNs(link_elapsed_ns)))); - SetBuildStatus(build.link.return_code); + SetBuildStatus(Build.link.return_code); } ////////////////////////////// @@ -960,9 +960,9 @@ void BuildEntryPoint(WaveLaneCtx *lane) String gpu_obj_output = ZI; { GpuObj *disp_obj = 0; - for (u32 gpu_obj_idx = 0; gpu_obj_idx < build.gpu_objs.count; ++gpu_obj_idx) + for (u32 gpu_obj_idx = 0; gpu_obj_idx < Build.gpu_objs.count; ++gpu_obj_idx) { - GpuObj *gpu_obj = &build.gpu_objs.array[gpu_obj_idx]; + GpuObj *gpu_obj = &Build.gpu_objs.array[gpu_obj_idx]; if (!disp_obj || TrimWhitespace(disp_obj->output).len == 0 || gpu_obj->return_code != 0) { disp_obj = gpu_obj; @@ -976,22 +976,22 @@ void BuildEntryPoint(WaveLaneCtx *lane) String embed_obj_output = ZI; { StringList embed_obj_outputs = ZI; - for (u32 embed_obj_idx = 0; embed_obj_idx < build.embed_objs.count; ++embed_obj_idx) + for (u32 embed_obj_idx = 0; embed_obj_idx < Build.embed_objs.count; ++embed_obj_idx) { - EmbedObj *embed_obj = &build.embed_objs.array[embed_obj_idx]; + EmbedObj *embed_obj = &Build.embed_objs.array[embed_obj_idx]; PushStringToList(perm, &embed_obj_outputs, embed_obj->output); } embed_obj_output = StringFromList(perm, embed_obj_outputs, Lit("\n")); } - EchoLineOrNothing(StringFromMetaErrors(perm, build.layers_parse.errors)); - EchoLineOrNothing(StringFromMetaErrors(perm, build.c_parse.errors)); - EchoLineOrNothing(StringFromMetaErrors(perm, build.gpu_parse.errors)); - EchoLineOrNothing(build.c_obj.output); + EchoLineOrNothing(StringFromMetaErrors(perm, Build.layers_parse.errors)); + EchoLineOrNothing(StringFromMetaErrors(perm, Build.c_parse.errors)); + EchoLineOrNothing(StringFromMetaErrors(perm, Build.gpu_parse.errors)); + EchoLineOrNothing(Build.c_obj.output); EchoLineOrNothing(gpu_obj_output); - EchoLineOrNothing(StringFromMetaErrors(perm, build.res_dir_parse.errors)); + EchoLineOrNothing(StringFromMetaErrors(perm, Build.res_dir_parse.errors)); EchoLineOrNothing(embed_obj_output); - EchoLineOrNothing(build.link.output); + EchoLineOrNothing(Build.link.output); } ////////////////////////////// diff --git a/src/meta/meta.h b/src/meta/meta.h index 9a175a7d..ed6eac4c 100644 --- a/src/meta/meta.h +++ b/src/meta/meta.h @@ -65,7 +65,7 @@ Struct(LineCol) }; //////////////////////////////////////////////////////////// -//~ Build state types +//~ Build ctx types Struct(CompilerParams) { @@ -120,7 +120,7 @@ Struct(EmbedObj) i32 return_code; }; -Struct(BuildData) +Struct(BuildCtx) { Atomic32 status; @@ -174,7 +174,7 @@ Struct(BuildData) } link; }; -extern BuildData build; +extern BuildCtx Build; //////////////////////////////////////////////////////////// //~ Helpers