From d569b93bbd9bcea035f71b2cbb8c358c18018a78 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Wed, 12 Feb 2025 13:57:45 -0500 Subject: [PATCH] adjusting repo for removing extra features not part of the original library --- Readme.md | 2 +- code/Readme.md | 0 docs/Readme.md | 201 ------------------ source/Readme.md | 3 + {code => source}/base/arena.c | 0 {code => source}/base/arena.h | 0 {code => source}/base/base_types.h | 0 {code => source}/base/command_line.c | 0 {code => source}/base/command_line.h | 0 {code => source}/base/context_cracking.h | 0 {code => source}/base/debug.c | 0 {code => source}/base/debug.h | 0 {code => source}/base/entry_point.c | 0 {code => source}/base/entry_point.h | 0 {code => source}/base/file.h | 0 {code => source}/base/generic_macros.h | 0 {code => source}/base/linkage.h | 0 {code => source}/base/logger.c | 0 {code => source}/base/logger.h | 0 {code => source}/base/macros.h | 0 {code => source}/base/markup.c | 0 {code => source}/base/markup.h | 0 {code => source}/base/math.h | 0 {code => source}/base/memory.h | 0 {code => source}/base/memory_substrate.c | 0 {code => source}/base/memory_substrate.h | 0 {code => source}/base/namespace.h | 0 {code => source}/base/platform.c | 0 {code => source}/base/platform.h | 0 {code => source}/base/profiling.h | 0 {code => source}/base/ring.h | 0 {code => source}/base/sort.h | 0 {code => source}/base/space.h | 0 {code => source}/base/strings.c | 0 {code => source}/base/strings.h | 0 {code => source}/base/text.c | 0 {code => source}/base/text.h | 0 {code => source}/base/thread_context.c | 0 {code => source}/base/thread_context.h | 0 {code => source}/base/time.c | 0 {code => source}/base/time.h | 0 {code => source}/base/toolchain.h | 0 {code => source}/mdesk/mdesk.c | 0 {code => source}/mdesk/mdesk.h | 0 {code => source}/metadesk.c | 0 {code => source}/metadesk.h | 0 {code => source}/metagen/Readme.md | 0 {code => source}/metagen/metagen.c | 0 {code => source}/metagen/metagen.h | 0 {code => source}/metagen/metagen_main.c | 0 {code => source}/os/linux/os_linux.c | 0 {code => source}/os/linux/os_linux.h | 0 {code => source}/os/linux/os_linux_includes.h | 0 {code => source}/os/os.c | 0 {code => source}/os/os.h | 0 {code => source}/os/os_resolve.h | 0 {code => source}/os/win32/os_win32.c | 0 {code => source}/os/win32/os_win32.h | 0 {code => source}/os/win32/os_win32_includes.h | 0 59 files changed, 4 insertions(+), 202 deletions(-) delete mode 100644 code/Readme.md delete mode 100644 docs/Readme.md create mode 100644 source/Readme.md rename {code => source}/base/arena.c (100%) rename {code => source}/base/arena.h (100%) rename {code => source}/base/base_types.h (100%) rename {code => source}/base/command_line.c (100%) rename {code => source}/base/command_line.h (100%) rename {code => source}/base/context_cracking.h (100%) rename {code => source}/base/debug.c (100%) rename {code => source}/base/debug.h (100%) rename {code => source}/base/entry_point.c (100%) rename {code => source}/base/entry_point.h (100%) rename {code => source}/base/file.h (100%) rename {code => source}/base/generic_macros.h (100%) rename {code => source}/base/linkage.h (100%) rename {code => source}/base/logger.c (100%) rename {code => source}/base/logger.h (100%) rename {code => source}/base/macros.h (100%) rename {code => source}/base/markup.c (100%) rename {code => source}/base/markup.h (100%) rename {code => source}/base/math.h (100%) rename {code => source}/base/memory.h (100%) rename {code => source}/base/memory_substrate.c (100%) rename {code => source}/base/memory_substrate.h (100%) rename {code => source}/base/namespace.h (100%) rename {code => source}/base/platform.c (100%) rename {code => source}/base/platform.h (100%) rename {code => source}/base/profiling.h (100%) rename {code => source}/base/ring.h (100%) rename {code => source}/base/sort.h (100%) rename {code => source}/base/space.h (100%) rename {code => source}/base/strings.c (100%) rename {code => source}/base/strings.h (100%) rename {code => source}/base/text.c (100%) rename {code => source}/base/text.h (100%) rename {code => source}/base/thread_context.c (100%) rename {code => source}/base/thread_context.h (100%) rename {code => source}/base/time.c (100%) rename {code => source}/base/time.h (100%) rename {code => source}/base/toolchain.h (100%) rename {code => source}/mdesk/mdesk.c (100%) rename {code => source}/mdesk/mdesk.h (100%) rename {code => source}/metadesk.c (100%) rename {code => source}/metadesk.h (100%) rename {code => source}/metagen/Readme.md (100%) rename {code => source}/metagen/metagen.c (100%) rename {code => source}/metagen/metagen.h (100%) rename {code => source}/metagen/metagen_main.c (100%) rename {code => source}/os/linux/os_linux.c (100%) rename {code => source}/os/linux/os_linux.h (100%) rename {code => source}/os/linux/os_linux_includes.h (100%) rename {code => source}/os/os.c (100%) rename {code => source}/os/os.h (100%) rename {code => source}/os/os_resolve.h (100%) rename {code => source}/os/win32/os_win32.c (100%) rename {code => source}/os/win32/os_win32.h (100%) rename {code => source}/os/win32/os_win32_includes.h (100%) diff --git a/Readme.md b/Readme.md index ee1f25a..d0135b4 100644 --- a/Readme.md +++ b/Readme.md @@ -3,7 +3,7 @@ **Note: This repo is under heavy WIP. Currently getting the code from RAD's (Epic Games) Debugger over to a standalone state while at the same time studying it.** **Update:** -This will contain just the minimal lib. Extra additions or the ability to generate variants will be in another repo (Currently removing excess). +This will contain just the minimal lib. Extra additions or the ability to generate variants will be in another repo (Currently removing [excess](https://github.com/Ed94/metadesk_lib_gen)). This is a fork that aims to make the latest version of metadesk available from the [RAD Debugger](https://github.com/EpicGamesExt/raddebugger) accessible as a library. diff --git a/code/Readme.md b/code/Readme.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/Readme.md b/docs/Readme.md deleted file mode 100644 index 417c0db..0000000 --- a/docs/Readme.md +++ /dev/null @@ -1,201 +0,0 @@ -# docs - -**NOTE: metagen has not been reviewed yet.** - -## Notable Changes: Original -> RAD Debugger - -Metadesk's original implementation recieved an overhaul with its use within the RAD debugger. - -`TODO` - -## Notable Changes: RAD Debugger -> Standalone Library - -For ergonomic usage and ability for the user to generate the library tailor made for their code base, the library has been heavily modified further while preserving the original indended design or interface for the user. - -The metagen's base and os library's have been lifted to [code/base](../code/base/) & [code/os](../code/os/). - -* `base` was splintered further into more files. -* `os` was adjusted so that includes for the target platform are in separate headers. - -`MD_` and `md_` perfixes were removed, they are added back when generating variants of the library for user usage. The [gen_c11/c11.refactor](../gen_c11/c11.refactor) script has the refactoring mappings. - -At the top of each head or source file in [code](../code/) the following pattern will be observed: - -```c -#ifdef INTELLISENSE_DIRECTIVES - .... -#endif -``` - -This provides a while for editors to provide syntatical or semantic information of the library's files without affecting how they are built. They are removed with [gencpp_c11.h](../third_party/gencpp_c11/gencpp_c11.h)'s `gen_scan_file` or manually while traversing the file's ast after `parse_global_body` via iterating through the tree during codegen. - -Metadesk had a contrictive use of only one allocator scheme with Arenas, `memory_substrate.h` was introduced to absolve this. -It defines a generic Allocator interface of the style seen in [GB Headers](https://github.com/gingerBill/gb/blob/52a3a542ef6d398d541d5083aa878598189425ef/gb.h#L1078) and [ZPL-C](https://github.com/zpl-c/zpl/blob/master/code/header/essentials/memory_custom.h) libraries, or the [Jai](https://github.com/Ivo-Balbaert/The_Way_to_Jai/blob/main/book/21A_Memory_Allocators_and_Temporary_Storage.md) and [Odin](https://github.com/odin-lang/Odin/blob/4c4b481ccc0d6ff98e91801517b23ef78c624bdb/base/runtime/core.odin#L355) programming languages: - -```c -typedef void*(AllocatorProc)( - void* allocator_data, - AllocatorMode type, - SSIZE size, - SSIZE alignment, - void* old_memory, - SSIZE old_size, - U64 flags -); - -typedef struct AllocatorInfo AllocatorInfo; -struct AllocatorInfo -{ - AllocatorProc* proc; - void* data; -}; -``` - -This allows the original `Arena` used by the RaD Debugger version to now be backed by an abitrary block/s of memory: - -```c -typedef U32 ArenaFlags; -enum -{ - // Don't chain this arena - ArenaFlag_NoChain = (1 << 0), - // Only relevant if backing is virtual memory, will prevent allocating a new backing VArena when the current block exhausts - // Will assume backing can chain multiple block_size arenas however. If there is an allocation failure it will assert. - ArenaFlag_NoChainVirtual = (1 << 1), - // Backing allocator identified as VArena during initialization - ArenaFlag_Virtual = (1 << 2), -}; - -typedef struct ArenaParams ArenaParams; -struct ArenaParams -{ - AllocatorInfo backing; - ArenaFlags flags; - U64 block_size; // If chaining VArenas set this to the reserve size -}; - -#define ARENA_DEFAULT_BLOCK_SIZE VARENA_DEFAULT_RESERVE - align_pow2(size_of(VArena), MD_DEFAULT_MEMORY_ALIGNMENT) - -typedef struct Arena Arena; -struct Arena -{ - Arena* prev; // Previous arena in chain - Arena* current; // Current arena in chain - AllocatorInfo backing; - SSIZE base_pos; // Tracks how main arenas have been chained - SSIZE pos; - SSIZE block_size; - ArenaFlags flags; -}; -``` - -`generic_macros.h` was addded for use of _Generic expressions from C11. -`_Generic` is utilized mainly for creating a unified interface for procedures that take either the `Arena*` as they originally did or the new `AllocatorInfo` equivalents: - -```c -MD_API String8List debug_string_list_from_tree__arena(Arena* arena, Node* root); -MD_API String8List debug_string_list_from_tree__ainfo(AllocatorInfo ainfo, Node* root); - -#define debug_string_list_from_tree(allocator, string) _Generic( \ -(allocator), \ - Arena*: debug_string_list_from_tree__arena, \ - AllocatorInfo: debug_string_list_from_tree__ainfo, \ - default: assert_generic_sel_fail \ -) generic_call(allocator, string) - -force_inline String8List -debug_string_list_from_tree__arena(Arena* arena, Node* root) { - return debug_string_list_from_tree__ainfo(arena_allocator(arena), root); -} -``` - -As shown above, many of the `__arena` functions now collapse to the `__ainfo` equivalents as they do not do anything unique that the general allocator scheme cannot do. -There are however exceptions if the thread scratch allocator or essentially the `Arena`'s ability to pop/rewind its position is utilized. In those cases the distinct code path is preserved: - -```c -String8 -os_string_from_file_range__arena(Arena* arena, OS_Handle file, Rng1U64 range) -{ - U64 pre_pos = arena_pos(arena); - String8 result; - result.size = dim_1u64(range); - result.str = push_array_no_zero(arena, U8, result.size); - U64 actual_read_size = os_file_read(file, range, result.str); - if(actual_read_size < result.size) { - arena_pop_to(arena, pre_pos + actual_read_size); - result.size = actual_read_size; - } - return result; -} -``` - -The generic allocator an technically handle it though just not as ergonomnically: - -```c -String8 -os_string_from_file_range__ainfo(AllocatorInfo ainfo, OS_Handle file, Rng1U64 range) { - String8 result; - result.size = dim_1u64(range); - result.str = alloc_array_no_zero(ainfo, U8, result.size); - U64 actual_read_size = os_file_read(file, range, result.str); - if ((allocator_query_support(ainfo) & AllocatorQuery_ResizeShrink) && actual_read_size < result.size) { - resize(ainfo, result.str, result.size, actual_read_size); - result.size = actual_read_size; - } - return result; -} -``` - -The above resize-shrink pattern could be used or the allocator made need to be wrapped in a nested arena allocator then have the resize shrink back to zero. -Natrually the allocator passed must support ths and thus the need for the query, as such any allocator that doesn't support it would not be able to shrink but this deferred to the discretion of the user now. - -The following was introduced into [os.h](../code/os/os.h): - -```c -typedef struct OS_Context OS_Context; -struct OS_Context -{ - Arena* state_arena; - Arena* entity_arena; - B32 enable_large_pages; -}; - -// OS layer initialization -MD_API void os_init(OS_Context* ctx, TCTX* thread_ctx); -``` - -This allows for os platform functionality from the original entry_point abstraction (which is still available), to be lifted to a regular procedure that the user may manually call. - -The following was introduced into [mdesk.h](../code/mdesk/mdesk.h): - -```c -typedef struct Context Context; -struct Context -{ - TCTX thread_ctx; - - OS_Context os_ctx; - - B32 dont_init_os; -}; - -MD_API void init(Context* ctx); -MD_API void deinit(Context* ctx); // Does nothing for now. -``` - -This provides the user a way to control startup of the libary. - -[code/metadesk.h](../code/metadesk.h) & [code/metadesk.c](../code//metadesk.c) outline the usual intended resolved outline of how the library should be constructed for use. Its tested for vaildity using [tests/code_sanity.c](../tests/code_sanity.c). - -### Additional Info - -* [Zig's Allocator Interface](https://github.com/ziglang/zig/blob/master/lib/std/mem/Allocator.zig) is similar but not exactly the same. - -## Notes - -[Handmade Network Project Page](https://metadesk.handmade.network) - -[Original Repo](https://github.com/ryanfleury/metadesk) - -[Dion Systems Page](https://web.archive.org/web/20231126220529/https://dion.systems/metadesk) -[Dion Systems Reference](https://web.archive.org/web/20211205200037/https://dion.systems/metadesk_reference) diff --git a/source/Readme.md b/source/Readme.md new file mode 100644 index 0000000..103fa1f --- /dev/null +++ b/source/Readme.md @@ -0,0 +1,3 @@ +# Src + +Currently updating this so that the library is kept minimally changed, feature additions will be handled in a separate repo. diff --git a/code/base/arena.c b/source/base/arena.c similarity index 100% rename from code/base/arena.c rename to source/base/arena.c diff --git a/code/base/arena.h b/source/base/arena.h similarity index 100% rename from code/base/arena.h rename to source/base/arena.h diff --git a/code/base/base_types.h b/source/base/base_types.h similarity index 100% rename from code/base/base_types.h rename to source/base/base_types.h diff --git a/code/base/command_line.c b/source/base/command_line.c similarity index 100% rename from code/base/command_line.c rename to source/base/command_line.c diff --git a/code/base/command_line.h b/source/base/command_line.h similarity index 100% rename from code/base/command_line.h rename to source/base/command_line.h diff --git a/code/base/context_cracking.h b/source/base/context_cracking.h similarity index 100% rename from code/base/context_cracking.h rename to source/base/context_cracking.h diff --git a/code/base/debug.c b/source/base/debug.c similarity index 100% rename from code/base/debug.c rename to source/base/debug.c diff --git a/code/base/debug.h b/source/base/debug.h similarity index 100% rename from code/base/debug.h rename to source/base/debug.h diff --git a/code/base/entry_point.c b/source/base/entry_point.c similarity index 100% rename from code/base/entry_point.c rename to source/base/entry_point.c diff --git a/code/base/entry_point.h b/source/base/entry_point.h similarity index 100% rename from code/base/entry_point.h rename to source/base/entry_point.h diff --git a/code/base/file.h b/source/base/file.h similarity index 100% rename from code/base/file.h rename to source/base/file.h diff --git a/code/base/generic_macros.h b/source/base/generic_macros.h similarity index 100% rename from code/base/generic_macros.h rename to source/base/generic_macros.h diff --git a/code/base/linkage.h b/source/base/linkage.h similarity index 100% rename from code/base/linkage.h rename to source/base/linkage.h diff --git a/code/base/logger.c b/source/base/logger.c similarity index 100% rename from code/base/logger.c rename to source/base/logger.c diff --git a/code/base/logger.h b/source/base/logger.h similarity index 100% rename from code/base/logger.h rename to source/base/logger.h diff --git a/code/base/macros.h b/source/base/macros.h similarity index 100% rename from code/base/macros.h rename to source/base/macros.h diff --git a/code/base/markup.c b/source/base/markup.c similarity index 100% rename from code/base/markup.c rename to source/base/markup.c diff --git a/code/base/markup.h b/source/base/markup.h similarity index 100% rename from code/base/markup.h rename to source/base/markup.h diff --git a/code/base/math.h b/source/base/math.h similarity index 100% rename from code/base/math.h rename to source/base/math.h diff --git a/code/base/memory.h b/source/base/memory.h similarity index 100% rename from code/base/memory.h rename to source/base/memory.h diff --git a/code/base/memory_substrate.c b/source/base/memory_substrate.c similarity index 100% rename from code/base/memory_substrate.c rename to source/base/memory_substrate.c diff --git a/code/base/memory_substrate.h b/source/base/memory_substrate.h similarity index 100% rename from code/base/memory_substrate.h rename to source/base/memory_substrate.h diff --git a/code/base/namespace.h b/source/base/namespace.h similarity index 100% rename from code/base/namespace.h rename to source/base/namespace.h diff --git a/code/base/platform.c b/source/base/platform.c similarity index 100% rename from code/base/platform.c rename to source/base/platform.c diff --git a/code/base/platform.h b/source/base/platform.h similarity index 100% rename from code/base/platform.h rename to source/base/platform.h diff --git a/code/base/profiling.h b/source/base/profiling.h similarity index 100% rename from code/base/profiling.h rename to source/base/profiling.h diff --git a/code/base/ring.h b/source/base/ring.h similarity index 100% rename from code/base/ring.h rename to source/base/ring.h diff --git a/code/base/sort.h b/source/base/sort.h similarity index 100% rename from code/base/sort.h rename to source/base/sort.h diff --git a/code/base/space.h b/source/base/space.h similarity index 100% rename from code/base/space.h rename to source/base/space.h diff --git a/code/base/strings.c b/source/base/strings.c similarity index 100% rename from code/base/strings.c rename to source/base/strings.c diff --git a/code/base/strings.h b/source/base/strings.h similarity index 100% rename from code/base/strings.h rename to source/base/strings.h diff --git a/code/base/text.c b/source/base/text.c similarity index 100% rename from code/base/text.c rename to source/base/text.c diff --git a/code/base/text.h b/source/base/text.h similarity index 100% rename from code/base/text.h rename to source/base/text.h diff --git a/code/base/thread_context.c b/source/base/thread_context.c similarity index 100% rename from code/base/thread_context.c rename to source/base/thread_context.c diff --git a/code/base/thread_context.h b/source/base/thread_context.h similarity index 100% rename from code/base/thread_context.h rename to source/base/thread_context.h diff --git a/code/base/time.c b/source/base/time.c similarity index 100% rename from code/base/time.c rename to source/base/time.c diff --git a/code/base/time.h b/source/base/time.h similarity index 100% rename from code/base/time.h rename to source/base/time.h diff --git a/code/base/toolchain.h b/source/base/toolchain.h similarity index 100% rename from code/base/toolchain.h rename to source/base/toolchain.h diff --git a/code/mdesk/mdesk.c b/source/mdesk/mdesk.c similarity index 100% rename from code/mdesk/mdesk.c rename to source/mdesk/mdesk.c diff --git a/code/mdesk/mdesk.h b/source/mdesk/mdesk.h similarity index 100% rename from code/mdesk/mdesk.h rename to source/mdesk/mdesk.h diff --git a/code/metadesk.c b/source/metadesk.c similarity index 100% rename from code/metadesk.c rename to source/metadesk.c diff --git a/code/metadesk.h b/source/metadesk.h similarity index 100% rename from code/metadesk.h rename to source/metadesk.h diff --git a/code/metagen/Readme.md b/source/metagen/Readme.md similarity index 100% rename from code/metagen/Readme.md rename to source/metagen/Readme.md diff --git a/code/metagen/metagen.c b/source/metagen/metagen.c similarity index 100% rename from code/metagen/metagen.c rename to source/metagen/metagen.c diff --git a/code/metagen/metagen.h b/source/metagen/metagen.h similarity index 100% rename from code/metagen/metagen.h rename to source/metagen/metagen.h diff --git a/code/metagen/metagen_main.c b/source/metagen/metagen_main.c similarity index 100% rename from code/metagen/metagen_main.c rename to source/metagen/metagen_main.c diff --git a/code/os/linux/os_linux.c b/source/os/linux/os_linux.c similarity index 100% rename from code/os/linux/os_linux.c rename to source/os/linux/os_linux.c diff --git a/code/os/linux/os_linux.h b/source/os/linux/os_linux.h similarity index 100% rename from code/os/linux/os_linux.h rename to source/os/linux/os_linux.h diff --git a/code/os/linux/os_linux_includes.h b/source/os/linux/os_linux_includes.h similarity index 100% rename from code/os/linux/os_linux_includes.h rename to source/os/linux/os_linux_includes.h diff --git a/code/os/os.c b/source/os/os.c similarity index 100% rename from code/os/os.c rename to source/os/os.c diff --git a/code/os/os.h b/source/os/os.h similarity index 100% rename from code/os/os.h rename to source/os/os.h diff --git a/code/os/os_resolve.h b/source/os/os_resolve.h similarity index 100% rename from code/os/os_resolve.h rename to source/os/os_resolve.h diff --git a/code/os/win32/os_win32.c b/source/os/win32/os_win32.c similarity index 100% rename from code/os/win32/os_win32.c rename to source/os/win32/os_win32.c diff --git a/code/os/win32/os_win32.h b/source/os/win32/os_win32.h similarity index 100% rename from code/os/win32/os_win32.h rename to source/os/win32/os_win32.h diff --git a/code/os/win32/os_win32_includes.h b/source/os/win32/os_win32_includes.h similarity index 100% rename from code/os/win32/os_win32_includes.h rename to source/os/win32/os_win32_includes.h