finished inital pass of gen_c11 (singleheader and segeregated)

This commit is contained in:
2025-02-11 13:00:55 -05:00
parent a5af8b3d80
commit 66d9b4e98a
9 changed files with 311 additions and 57 deletions
+2 -2
View File
@@ -72,7 +72,7 @@
#pragma endregion Build Options
#pragma region Compiler Vendor
#pragma region Vendor
#if defined( _MSC_VER )
# pragma message("Detected MSVC")
@@ -128,7 +128,7 @@
# define GCC_VERSION_CHECK(major,minor,patch) (0)
#endif
#pragma endregion Compiler Vendor
#pragma endregion Vendor
#pragma region Language
+1 -1
View File
@@ -25,4 +25,4 @@ set_thread_namef(char *fmt, ...)
}
#define thread_namef(...) (set_thread_namef(__VA_ARGS__))
#define thraed_name(str) (set_thread_name(str))
#define thread_name(str) (set_thread_name(str))
+1 -5
View File
@@ -4,12 +4,8 @@
# include "debug.h"
# include "strings.h"
# include "thread_context.h"
////////////////////////////////
//~ rjf: Third Party Includes
# define STB_SPRINTF_IMPLEMENTATION
# if BUILD_STATIC
# #define STB_SPRINTF_STATIC
# endif
# define STB_SPRINTF_STATIC
# include "third_party/stb/stb_sprintf.h"
#endif
+12 -12
View File
@@ -7,7 +7,7 @@
//~ allen: Time
typedef enum WeekDay WeekDay;
enum Weekday
enum WeekDay
{
WeekDay_Sun,
WeekDay_Mon,
@@ -101,15 +101,15 @@ date_time_from_dense_time(DenseTime time) {
inline DateTime
date_time_from_micro_seconds(U64 time){
DateTime result = {0};
result.micro_sec = time % 1000; time /= 1000;
result.msec = time % 1000; time /= 1000;
result.sec = time % 60; time /= 60;
result.min = time % 60; time /= 60;
result.hour = time % 24; time /= 24;
result.day = time % 31; time /= 31;
result.mon = time % 12; time /= 12;
assert(time <= MAX_U32);
result.year = (U32)time;
return(result);
DateTime result = {0};
result.micro_sec = time % 1000; time /= 1000;
result.msec = time % 1000; time /= 1000;
result.sec = time % 60; time /= 60;
result.min = time % 60; time /= 60;
result.hour = time % 24; time /= 24;
result.day = time % 31; time /= 31;
result.mon = time % 12; time /= 12;
assert(time <= MAX_U32);
result.year = (U32)time;
return(result);
}
+1 -1
View File
@@ -1,4 +1,4 @@
#if INTELLISENSE_DIRECTIVES
#ifdef INTELLISENSE_DIRECTIVES
# pragma once
# include "os/os.h"
#endif
+94 -15
View File
@@ -48,6 +48,8 @@ word scast, md_scast
word enum_underlying, md_enum_underlying
word nullptr, md_nullptr
word PARAM_DEFAULT, MD_PARAM_DEFAULT
word force_inline, md_force_inline
word never_inline, md_never_inline
@@ -68,6 +70,7 @@ word glue_, md_glue_
word do_once, md_do_once
word do_once_defer, md_do_once_defer
word do_once_start, md_do_once_start
word do_once_end, md_do_once_end
// base/generic_macros.h
@@ -80,7 +83,8 @@ word resolved_function_call, md_resolved_function_call
word if_generic_selector_defined_include_slot, md_if_generic_selector_defined_include_slot
word UNRESOLVED_GENERIC_SELECTION, MD_UNRESOLVED_GENERIC_SELECTION
word UNRESOLVED_GENERIC_SELECTION, MD_UNRESOLVED_GENERIC_SELECTION
word assert_generic_selection_fail, md_assert_generic_selection_fail
namespace GENERIC_SLOT_1__, MD_GENERIC_SLOT_1__
namespace generic_example_hash_, md_generic_example_hash_
@@ -92,6 +96,7 @@ word distinct, md_distinct
// base/profiling.h
word PROFILE_TELEMETRY, MD_PROFILE_TELEMETRY
word MARKUP_LAYER_COLOR, MD_MARKUP_LAYER_COLOR
namespace prof_, md_prof_
@@ -111,6 +116,8 @@ word S128, MD_S128
word USIZE, MD_USIZE
word SSIZE, MD_SSIZE
word sizeo_of, md_size_of
word SPTR, MD_SPTR
word UPTR, MD_UPTR
@@ -311,7 +318,8 @@ namespace ring_, md_ring_
word trap, md_trap
word assert_always, md_assert_always
word assert, md_asert
word assert, md_assert
word assert_msg, md_assert_msg
word invalid_path, md_invalid_path
word not_implemented, md_not_implemented
@@ -342,6 +350,7 @@ word clamp_top, md_clamp_top
word clamp_bot, md_clamp_bot
word clamp, md_clamp
word member, md_member
word align_of, md_align_of
word offset_of, md_offset_of
word member_from_offset, md_member_from_offset
@@ -358,7 +367,7 @@ word memory_copy_type, md_memory_copy_type
word memory_zero, md_memory_zero
word memory_zero_struct, md_memory_zero_struct
word memroy_zero_array, md_memory_zero_array
word memory_zero_array, md_memory_zero_array
word memory_zero_type, md_memory_zero_type
word memory_match, md_memory_match
@@ -381,7 +390,8 @@ word set_nil, md_set_nil
namespace dll_, md_dll_
namespace sll_, md_sll_
word NO_ASAN, MD_NO_ASAN
word NO_ASAN, MD_NO_ASAN
word ASAN_ENABLED, MD_ASAN_ENABLED
namespace asan_, md_asan_
@@ -489,11 +499,13 @@ word mfree, md_mfree
namespace VARENA_, MD_VARENA_
word VArenaFlags, MD_VArenaFlags
word VArena, MD_VArena
word VArenaParams, MD_VArenaParams
word VArenaFlags, MD_VArenaFlags
word VArena, MD_VArena
namespace VArenaFlag_, MD_VArenaFlag_
word varena_alloc, md_varena_alloc
word varena__alloc, md_varena__alloc
word varena_commit, md_varena_commit
word varena_release, md_varena_release
@@ -510,6 +522,10 @@ word farena_from_memory, md_farena_from_memory
// base/arena.h
namespace ArenaFlag, MD_ArenaFlag
word ARENA_DEFAULT_BLOCK_SIZE, MD_ARENA_DEFAULT_BLOCK_SIZE
word ArenaFlags, MD_ArenaFlags
word ArenaParams, MD_ArenaParams
word Arena, MD_Arena
@@ -539,8 +555,8 @@ namespace Axis2_, MD_Axis2_
namespace Corner_, MD_Corner_
namespace Dir2_, MD_Dir2_
word axis_from_dir2, md_axis_from_dir2
word side_from_dir2, md_side_from_dir2
word axis2_from_dir2, md_axis2_from_dir2
word side_from_dir2, md_side_from_dir2
word sign_from_side_f32, md_side_from_side_f32
wrod sign_from_side_f64, md_side_from_side_f64
@@ -592,9 +608,29 @@ word round_f32, md_round_f32
word abs_f32, md_abs_f32
word radians_from_turns_f32, md_radians_from_turns_f32
word turns_from_radians_f32, md_turns_from_radians_f32
word degrees_from_turns_f32, md_degrees_from_turns_f32
word turns_from_degrees_f32, md_turns_from_degrees_f32
word degrees_from_radians_f32, md_degrees_from_radians_f32
word radians_from_degrees_f32, md_radians_from_degrees_f32
word sin_f32, md_sin_f32
word cos_f32, md_cos_f32
word tan_f32, md_tan_f32
word radians_from_turns_f64, md_radians_from_turns_f64
word turns_from_radians_f64, md_turns_from_radians_f64
word degrees_from_turns_f64, md_degrees_from_turns_f64
word turns_from_degrees_f64, md_turns_from_degrees_f64
word degrees_from_turns_f64, md_degrees_from_turns_f64
word sqrt_f64, md_sqrt_f64
word mod_f64, md_mod_f64
word pow_f64, md_pow_f64
word ceil_f64, md_ceil_f64
word floor_f64, md_floor_f64
word round_f64, md_round_f64
word abs_f64, md_abs_f64
word degrees_from_radians_f64, md_degrees_from_radians_f64
word radians_from_degrees_f64, md_radians_from_degrees_f64
@@ -603,6 +639,10 @@ word sin_f64, md_sin_f64
word cos_f64, md_cos_f64
word tan_f64, md_tan_f64
word sin_f32, md_sin_f32
word cos_f32, md_cos_f32
word tan_f32, md_tan_f32
word mix_1f32, md_mix_1f32
word mix_1f64, md_mix_1f64
@@ -857,7 +897,7 @@ word contains_2s64, md_contains_2s64
word dim_2s64, md_dim_2s64
word union_2s64, md_union_2s64
word intersect_2s64, md_intersect_2s64
word clamp_2s32, md_clamp_2s32
word clamp_2s64, md_clamp_2s64
word hsv_from_rgb, md_hsv_from_rgb
word rgb_from_hsv, md_rgb_from_hsv
@@ -868,11 +908,16 @@ word u32_from_rgba, md_u32_from_rgba
namespace rgba_from_, md_rgba_from_
word rng1s64_list_push, md_rng1s64_list_push
word rng1s64_array_from_list, md_rng1s64_array_from_list
namespace rng1s64_list_push_, md_rng1s64_list_push_
namespace rng1s64_array_from_list_, md_rng1s64_array_from_list_
word rng1s64_list_alloc, md_rng1s64_list_alloc
word rng1s64_array_from_list_alloc, md_rng1s64_array_from_list_alloc
// base/sort.h
word quick_sort, md_quick_sort
// base/toolchain.h
word OperatingSystem, MD_OperatingSystem
@@ -893,6 +938,11 @@ word compiler_from_context, md_compiler_from_context
// base/strings.h
word integer_symbols, md_integer_symbols
word base64, md_base64
word base64_reverse, md_base64_reverse
word integer_symbol_reverse, md_integer_symbol_reverse
word String8, MD_String8
word String16, MD_String16
word String32, MD_String32
@@ -912,13 +962,24 @@ namespace StringMatchFlag_, MD_StringMatchFlag_
namespace StringSplitFlag_, MD_StringSplitFlag_
namespace PathStyle_, MD_PathStyle_
namepsace char_, md_char_
namespace char_, md_char_
word cstring8_length, md_cstring8_length
word cstring16_length, md_cstring16_length
word cstring32_length, md_cstring32_length
word cstring_length, md_cstring_length
word str8, md_str8
word str16, md_str16
word str8fv__arena, md_str8fv__arena
word str8f__arena, md_str8f__arena
word str8fv__ainfo, md_str8fv__ainfo
word str8f__ainfo, md_str8f__ainfo
word str8fv, md_str8fv
word str8f, md_str8f
namespace str8_, md_str8_
namespace str16_, md_str16_
namespace str32_, md_str32_
@@ -944,12 +1005,31 @@ namespace hex_string_, md_hex_string_
//namespace rgba_from_, md_rgba_from_ (done by math.h)
namespace fuzzy_match_, md_fuzzy_match_
word path_style_from_str8, md_path_style_from_str8
namespace utf8_, md_utf8_
namespace utf16_, md_utf16_
word operating_system_from_string, md_operating_system_from_string
namespace file_name_date_time_string_, md_file_name_date_time_string_
// base/text.h
word TxtRng, MD_TxtRng
word TxtPt, MD_TxtPt
word String8TxtPtPair, MD_String8TxtPtPair
namespace txt_, md_txt_
// base/thread_context.h
word TCTX, MD_TCTX
namespace tctx, md_tctx
namespace scratch_begin_, md_scratch_begin_
word scratch_begin, md_scratch_begin
word scratch_begin_alloc, md_scratch_begin_alloc
@@ -975,8 +1055,7 @@ word LogScope, MD_LogScope
word LogScopeResult, MD_LogScopeResult
word Log, MD_Log
namespace LogMsgKind_, MD_LogMsgKind_
namespace LogMsgKind_, MD_LogMsgKind_
namespace LOG_DEFAULT_, MD_LOG_DEFAULT_
namespace log_, md_log_
+193 -15
View File
@@ -103,7 +103,7 @@ int main()
gen_Code mdesk_c = gen_scan_file(path_mdesk "mdesk.c");
#pragma region Refactored / Formatted
#pragma region Refactored / Formatted
gen_Code r_tp_stb_sprintf_h = refactor(tp_stb_sprintf_h);
gen_Code r_base_context_cracking_h = refactor(base_context_cracking_h);
@@ -116,9 +116,9 @@ int main()
gen_Code r_base_ring_h = refactor(base_ring_h);
gen_Code r_base_debug_h = refactor(base_debug_h);
gen_Code r_base_memory_h = refactor(base_memory_h);
gen_Code r_base_memory_substrate_h = refactor(base_memory_substrate_h);
gen_Code r_base_memory_substrate_h = refactor_and_format(base_memory_substrate_h);
gen_Code r_base_arena_h = refactor(base_arena_h);
gen_Code r_base_space_h = refactor(base_space_h);
gen_Code r_base_space_h = refactor_and_format(base_space_h);
gen_Code r_base_math_h = refactor_and_format(base_math_h);
gen_Code r_base_sort_h = refactor(base_sort_h);
gen_Code r_base_toolchain_h = refactor(base_toolchain_h);
@@ -128,17 +128,17 @@ int main()
gen_Code r_base_thread_context_h = refactor(base_thread_context_h);
gen_Code r_base_command_line_h = refactor(base_command_line_h);
gen_Code r_base_markup_h = refactor(base_markup_h);
gen_Code r_base_logger_h = refactor(base_logger_h);
gen_Code r_base_logger_h = refactor_and_format(base_logger_h);
gen_Code r_base_entry_point_h = refactor(base_entry_point_h);
gen_Code r_base_file_h = refactor(base_file_h);
gen_Code r_os_h = refactor(os_h);
gen_Code r_os_h = refactor_and_format(os_h);
gen_Code r_os_win32_includes_h = refactor(os_win32_includes_h);
gen_Code r_os_win32_h = refactor(os_win32_h);
gen_Code r_os_win32_h = refactor_and_format(os_win32_h);
gen_Code r_os_linux_includes_h = refactor(os_linux_includes_h);
gen_Code r_os_linux_h = refactor(os_linux_h);
gen_Code r_os_linux_h = refactor_and_format(os_linux_h);
gen_Code r_mdesk_h = refactor(mdesk_h);
gen_Code r_mdesk_h = refactor_and_format(mdesk_h);
gen_Code r_base_platform_c = refactor(base_platfom_c);
gen_Code r_base_debug_c = refactor(base_debug_c);
@@ -157,14 +157,14 @@ int main()
gen_Code r_os_linux_c = refactor(os_linux_c);
gen_Code r_os_c = refactor(os_os_c);
gen_Code r_mdesk_c = refactor(mdesk_c);
#pragma endregion Refactored / Formatted
gen_Code r_mdesk_c = refactor_and_format(mdesk_c);
#pragma endregion Refactored / Formatted
if (GENERATE_SINGLEHEADER)
{
#define builder header
gen_Builder header_ = gen_builder_open(path_gen "metadesk_singleheader.h");
gen_Builder* header = & header_;
#define builder header
gen_Builder header_ = gen_builder_open(path_gen "metadesk_singleheader.h");
gen_Builder* header = & header_;
gen_Str implementation_guard_start = lit(
// "#pragma region METADESK IMPLEMENTATION GUARD\n"
@@ -268,7 +268,7 @@ int main()
comment("#elif OS_LINUX");
preprocess_endif();
pragma_endregion("Operting System")
pragma_endregion("Operating System")
new_line();
pragma_region("MDesk")
@@ -339,12 +339,190 @@ int main()
new_line();
gen_builder_write(header);
#undef builder
#undef builder
}
if (GENERATE_SEGEREGATED)
{
// Dependencies
#define builder header_deps
gen_Builder header_deps_ = gen_builder_open(path_gen "metadesk_deps.h");
gen_Builder* header_deps = & header_deps_;
// Header files
print_fmt("%S", generation_notice);
print(gen_pragma_once);
new_line();
pragma_region("Base");
print(banner_base);
new_line();
print_section(r_base_context_cracking_h, lit("Context Cracking"));
print_section(r_base_platform_h, lit("platform"));
print_section(r_base_linkage_h, lit("Linkage"));
print_section(r_base_macros_h, lit("Macros"));
print_section(r_base_generic_macros_h, lit("_Generic Macros"));
print_section(r_base_profiling_h, lit("Profiling"));
define(lit("STB_SPRINTF_DECORATE(name)"), MT_Expression, .content = lit("md_##name"), .flags = MF_Functional);
// print();
preprocess_if("MD_BUILD_STATIC"); {
define(lit("STB_BUILD_STATIC"), MT_Statement);
}
preprocess_endif();
new_line();
print_section(r_tp_stb_sprintf_h, lit("STB snprintf Header"));
new_line();
print_section(r_base_base_types_h, lit("Types"));
print_section(r_base_ring_h, lit("Ring"));
print_section(r_base_debug_h, lit("Debug"));
print_section(r_base_memory_h, lit("Memory"));
print_section(r_base_memory_substrate_h, lit("Memory Substrate"));
print_section(r_base_arena_h, lit("Arena"));
print_section(r_base_space_h, lit("Space"));
print_section(r_base_math_h, lit("Math"));
print_section(r_base_sort_h, lit("Sort"));
print_section(r_base_toolchain_h, lit("Toolchain"));
print_section(r_base_time_h, lit("Time"));
print_section(r_base_strings_h, lit("strings"));
print_section(r_base_text_h, lit("Text"));
print_section(r_base_thread_context_h, lit("Thread Context"));
print_section(r_base_command_line_h, lit("Command Line"));
print_section(r_base_markup_h, lit("Markup"));
print_section(r_base_logger_h, lit("Logger"));
print_section(r_base_entry_point_h, lit("Entry Point"));
print_section(r_base_file_h, lit("File"));
pragma_endregion("Base");
new_line();
pragma_region("Operating System");
print(banner_os);
new_line();
print_section(r_os_h, lit("OS"));
preprocess_if("!defined(MD_OS_FEATURE_GRAPHICAL)"); {
define(lit("MD_OS_FEATURE_GRAPHICAL"), MT_Expression, .content = lit("0") );
}
preprocess_endif();
new_line();
preprocess_if("!defined(MD_OS_GFX_STUB)"); {
define(lit("MD_OS_GFX_STUB"), MT_Expression, .content = lit("0") );
}
preprocess_endif();
new_line();
preprocess_if("MD_OS_WINDOWS"); {
print_section(r_os_win32_includes_h, lit("Win32 Includes"));
print_section(r_os_win32_h, lit("OS Win32"));
}
comment("#if MD_OS_WINDOWS"); new_line();
preprocess_elif("MD_OS_LINUX"); {
print_section(r_os_linux_includes_h, lit("Linux Includes"));
print_section(r_os_linux_h, lit("OS Linux"));
}
comment("#elif OS_LINUX");
preprocess_endif();
pragma_endregion("Operating System")
new_line();
gen_builder_write(header_deps);
#undef builder
#define builder header
gen_Builder header_ = gen_builder_open(path_gen "metadesk.h");
gen_Builder* header = & header_;
print(gen_scan_file(path_gen_c11 "banner_segregated.h"));
print(gen_pragma_once);
new_line();
include(lit("metadesk_deps.h"));
print(r_mdesk_h);
print(banner_mdesk);
new_line(); new_line();
gen_builder_write(header);
#undef builder
// Source files
#define builder source_deps
gen_Builder source_deps_ = gen_builder_open(path_gen "metadesk_deps.c");
gen_Builder* source_deps = & source_deps_;
include(lit("metadesk_deps.h"));
new_line();
pragma_region("Base");
print(banner_base);
new_line();
define(lit("STB_SPRINTF_IMPLEMENTATION"), MT_Statement);
// print();
preprocess_if("MD_BUILD_STATIC"); {
define(lit("STB_BUILD_STATIC"), MT_Statement);
}
preprocess_endif();
new_line();
print_section(r_tp_stb_sprintf_h, lit("STB snprintf Header"));
new_line();
print_section(r_base_platform_c, lit("Platform"));
print_section(r_base_memory_substrate_c, lit("Memory Substrate"));
print_section(r_base_arena_c, lit("Arena"));
print_section(r_base_strings_c, lit("Strings"));
print_section(r_base_text_c, lit("Text"));
print_section(r_base_thread_context_c, lit("Thread Context"));
print_section(r_base_markup_c, lit("Markup"));
print_section(r_base_command_line_c, lit("Command Line"));
print_section(r_base_logger_c, lit("Logger"));
print_section(r_base_entry_point_c, lit("Entry Point"));
print_section(r_base_time_c, lit("Time"));
pragma_endregion("Base");
new_line();
pragma_region("Operating System");
print(banner_os);
new_line();
preprocess_if("MD_OS_WINDOWS"); {
print(r_os_win32_c)
}
preprocess_elif("MD_OS_LINUX"); {
print(r_os_linux_c);
}
preprocess_endif();
print(r_os_c);;
pragma_endregion("Operating System");
new_line();
gen_builder_write(source_deps);
#undef builder
#define builder source
gen_Builder source_ = gen_builder_open(path_gen "metadesk.c");
gen_Builder* source = & source_;
include(lit("metadesk.h"));
print(r_mdesk_c);
new_line();
gen_builder_write(source);
#undef builder
}
// gen_deinit(& ctx);
+2 -3
View File
@@ -26,7 +26,6 @@
#define path_scratch_file path_gen "scratch.h"
#define path_format_style path_bin ".clang-format "
// Codegen DSL
#define lit gen_txt
@@ -41,7 +40,7 @@
#define pragma_endregion(label) print(gen_def_pragma(str_fmt("endregion %S", lit(label))))
#define define(id, type, ...) print(gen_def__define(id, type, &(gen_Opts_def_define){ __VA_ARGS__ }))
#define comment(content) print(gen_def_comment(lit(content)))
#define include gen_def_include
#define include(content, ...) print(gen_def__include(content, &(gen_Opts_def_include){ __VA_ARGS__}))
#define preprocess_cond(type, expr) gen_def_preprocess_cond(type, expr)
#define preprocess_if(expr) print(preprocess_cond(PreprocessCond_If, lit(expr))); new_line()
#define preprocess_ifndef(expr) print(preprocess_cond(PreprocessCond_IfNotDef, lit(expr))); new_line()
@@ -667,7 +666,7 @@ void register_library_macros()
// base/markup.h
gen_register_macros(args(
((gen_Macro) { lit("thread_namef"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("thraed_name"), MT_Expression, MF_Functional })
((gen_Macro) { lit("thread_name"), MT_Expression, MF_Functional })
));
// base/logger.h
gen_register_macros(args(
+5 -3
View File
@@ -9697,8 +9697,8 @@ struct gen_Opts_def_namespace
};
typedef struct gen_Opts_def_namespace gen_Opts_def_namespace;
GEN_API gen_CodeInclude gen_def__include(gen_Str content, gen_Opts_def_include opts GEN_PARAM_DEFAULT);
#define gen_def_include(content, ...) gen_def__include(content, (gen_Opts_def_include) { __VA_ARGS__ })
GEN_API gen_CodeInclude gen_def__include(gen_Str content, gen_Opts_def_include* opts GEN_PARAM_DEFAULT);
#define gen_def_include(content, ...) gen_def__include(content, &(gen_Opts_def_include) { __VA_ARGS__ })
GEN_API gen_CodeModule gen_def__module(gen_Str name, gen_Opts_def_module opts GEN_PARAM_DEFAULT);
#define gen_def_module(name, ...) gen_def__module(name, (gen_Opts_def_module) { __VA_ARGS__ })
@@ -18830,8 +18830,10 @@ gen_CodeFn gen_def__function(gen_Str name, gen_Opts_def_function p)
return result;
}
gen_CodeInclude gen_def__include(gen_Str path, gen_Opts_def_include p)
gen_CodeInclude gen_def__include(gen_Str path, gen_Opts_def_include* opts)
{
gen_Opts_def_include p = opts ? *opts : (gen_Opts_def_include){0};
if (path.Len <= 0 || path.Ptr == gen_nullptr)
{
gen_log_failure("gen::gen_def_include: Invalid path provided - %d");