meta layer progress

This commit is contained in:
jacob 2025-08-24 20:08:49 -05:00
parent 20a21d31d4
commit 93e340853c
8 changed files with 70 additions and 38 deletions

View File

@ -109,14 +109,10 @@
//~ Debug //~ Debug
//- Static assert //- Static assert
#if CompilerIsMsvc || (LanguageIsC && __STDC_VERSION__ < 202311L) || LanguageIsGpu #if LanguageIsC
# if CompilerIsMsvc
# define StaticAssert2(cond, line, counter) struct STATIC_ASSERT_____##line##counter {int foo[(cond) ? 1 : -1];} # define StaticAssert2(cond, line, counter) struct STATIC_ASSERT_____##line##counter {int foo[(cond) ? 1 : -1];}
# define StaticAssert1(cond, line, counter) StaticAssert2(cond, line, counter) # define StaticAssert1(cond, line, counter) StaticAssert2(cond, line, counter)
# define StaticAssert(cond) StaticAssert1(cond, __LINE__, __COUNTER__) # define StaticAssert(cond) StaticAssert1(cond, __LINE__, __COUNTER__)
# else
# define StaticAssert(cond) _Static_assert(cond, "")
# endif
#else #else
# define StaticAssert(cond) static_assert(cond, "") # define StaticAssert(cond) static_assert(cond, "")
#endif #endif
@ -622,7 +618,7 @@ Struct(String32)
# if PlatformIsWindows # if PlatformIsWindows
ForceInline i16 FiberId(void) ForceInline i16 FiberId(void)
{ {
i16 *v = (void *)__readgsqword(32); i16 *v = (void *)(u64)__readgsqword(32);
return *v; return *v;
} }
# else # else

View File

@ -1,10 +1,10 @@
#if CompilerIsMsvc #if PlatformIsWindows
//////////////////////////////// ////////////////////////////////
//~ Incbin //~ Incbin
/* Find first resource with `type` and return the data in `udata`. */ /* Find first resource with `type` and return the data in `udata`. */
b32 CALLBACK IncbinEnumerateResourceNamesFunc(HMODULE module, LPCWSTR type, LPCWSTR wstr_entry_name, LONG_PTR udata) BOOL IncbinEnumerateResourceNamesFunc(HMODULE module, LPCWSTR type, LPWSTR wstr_entry_name, LONG_PTR udata)
{ {
TempArena scratch = BeginScratchNoConflict(); TempArena scratch = BeginScratchNoConflict();
IncbinRcSearchParams *params = (IncbinRcSearchParams *)udata; IncbinRcSearchParams *params = (IncbinRcSearchParams *)udata;
@ -75,4 +75,4 @@ String StringFromIncbinRcResource(IncbinRcResource *inc)
return inc->data; return inc->data;
} }
#endif /* CompilerIsMsvc */ #endif /* PlatformIsWindows */

View File

@ -1,7 +1,7 @@
#if CompilerIsMsvc #if PlatformIsWindows
//////////////////////////////// ////////////////////////////////
//~ Msvc incbin types //~ Windows incbin types
Struct(IncbinRcSearchParams) Struct(IncbinRcSearchParams)
{ {
@ -29,7 +29,7 @@ Struct(IncbinRcResource)
//////////////////////////////// ////////////////////////////////
//~ Msvc incbin operations //~ Msvc incbin operations
b32 IncbinEnumerateResourceNamesFunc(void *module, const wchar_t *type, const wchar_t *wstr_entry_name, i64 udata); BOOL IncbinEnumerateResourceNamesFunc(HMODULE module, LPCWSTR type, LPWSTR wstr_entry_name, LONG_PTR udata);
String StringFromIncbinRcResource(IncbinRcResource *inc); String StringFromIncbinRcResource(IncbinRcResource *inc);
/* NOTE: Msvc doesn't have an Inline assembler that can include binary data. /* NOTE: Msvc doesn't have an Inline assembler that can include binary data.
@ -43,7 +43,7 @@ String StringFromIncbinRcResource(IncbinRcResource *inc);
String StringFromIncbinRcResource(struct IncbinRcResource *inc); String StringFromIncbinRcResource(struct IncbinRcResource *inc);
#else /* CompilerIsMsvc */ #else /* PlatformIsWindows */
//////////////////////////////// ////////////////////////////////
//~ Clang incbin operations //~ Clang incbin operations

View File

@ -39,8 +39,8 @@ typedef i32 FmtKind; enum
FmtKind_Hex = 0x0a3d0792, FmtKind_Hex = 0x0a3d0792,
FmtKind_Ptr = 0x0c4519e4, FmtKind_Ptr = 0x0c4519e4,
FmtKind_Float = 0x04814143, FmtKind_Float = 0x04814143,
FmtKind_Uid = 0x9d1cd407, FmtKind_Uid = 0x3d1cd407,
FmtKind_Handle = 0xfead3bec, FmtKind_Handle = 0x6ead3bec,
FmtKind_End = 0x0ecbc5ae FmtKind_End = 0x0ecbc5ae
}; };

View File

@ -30,8 +30,8 @@ b32 Panic(String msg)
u32 mb_flags = MB_SETFOREGROUND | MB_ICONERROR; u32 mb_flags = MB_SETFOREGROUND | MB_ICONERROR;
MessageBoxExA(0, msg_cstr, "Fatal error", mb_flags, 0); MessageBoxExA(0, msg_cstr, "Fatal error", mb_flags, 0);
} }
printf(msg_cstr); HANDLE console_handle = GetStdHandle(STD_ERROR_HANDLE);
fflush(stdout); WriteConsoleA(console_handle, msg.text, msg.len, 0, 0);
if ((1)) /* Supress unreachable code warning */ if ((1)) /* Supress unreachable code warning */
{ {
ExitProcess(1); ExitProcess(1);

View File

@ -876,41 +876,73 @@ i32 main(i32 argc, u8 **argv)
//- Generate compiler flags //- Generate compiler flags
StringList shared_compiler_flags = ZI; StringList shared_compiler_flags = ZI;
StringList msvc_compiler_flags = ZI; StringList msvc_compiler_flags = ZI;
StringList clang_compiler_flags = ZI;
{ {
/* Definitions */ //- Shared
PushStringToList(arena, &shared_compiler_flags, Lit("DRtcIsEnabled=1")); PushStringToList(arena, &shared_compiler_flags, Lit("-DRtcIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("DAsanIsEnabled=0")); PushStringToList(arena, &shared_compiler_flags, Lit("-DAsanIsEnabled=0"));
PushStringToList(arena, &shared_compiler_flags, Lit("DCrtlibIsEnabled=1")); PushStringToList(arena, &shared_compiler_flags, Lit("-DCrtlibIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("DDebinfoEnabled=1")); PushStringToList(arena, &shared_compiler_flags, Lit("-DDebinfoEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("DDeveloperIsEnabled=1")); PushStringToList(arena, &shared_compiler_flags, Lit("-DDeveloperIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("DProfilingIsEnabled=0")); PushStringToList(arena, &shared_compiler_flags, Lit("-DProfilingIsEnabled=0"));
PushStringToList(arena, &shared_compiler_flags, Lit("DUnoptimizedIsEnabled=1")); PushStringToList(arena, &shared_compiler_flags, Lit("-DUnoptimizedIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("DTestsAreEnabled=0")); PushStringToList(arena, &shared_compiler_flags, Lit("-DTestsAreEnabled=0"));
PushStringToList(arena, &shared_compiler_flags, Lit("DIncbinRawDir=\"bla\"")); PushStringToList(arena, &shared_compiler_flags, Lit("-DIncbinRawDir=\"bla/\""));
/* Msvc flags */ //- Msvc
PushStringToList(arena, &msvc_compiler_flags, Lit("Zi")); {
PushStringToList(arena, &msvc_compiler_flags, Lit("DEBUG")); PushStringToList(arena, &msvc_compiler_flags, Lit("-Zi"));
PushStringToList(arena, &msvc_compiler_flags, Lit("Fo:gen.obj")); PushStringToList(arena, &msvc_compiler_flags, Lit("-DEBUG"));
PushStringToList(arena, &msvc_compiler_flags, Lit("Fe:pp.exe")); PushStringToList(arena, &msvc_compiler_flags, Lit("-Fo:gen.obj"));
PushStringToList(arena, &msvc_compiler_flags, Lit("nologo")); PushStringToList(arena, &msvc_compiler_flags, Lit("-Fe:pp.exe"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-nologo"));
}
//- Clang
{
PushStringToList(arena, &clang_compiler_flags, Lit("-std=c99"));
PushStringToList(arena, &clang_compiler_flags, Lit("-fno-finite-loops"));
PushStringToList(arena, &clang_compiler_flags, Lit("-g -gcodeview"));
PushStringToList(arena, &clang_compiler_flags, Lit("-O0"));
PushStringToList(arena, &clang_compiler_flags, Lit("-msse4.2"));
/* Warnings */
PushStringToList(arena, &clang_compiler_flags, Lit("-Wall"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wframe-larger-than=65536"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wmissing-prototypes"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-variable"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-but-set-variable"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-parameter"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wno-initializer-overrides"));
}
} }
//- Generate compiler cmds //- Generate compiler cmds
String msvc_cmd_str = ZI; String msvc_cmd_str = ZI;
String clang_cmd_str = ZI;
/* Msvc */
{ {
String flags_str = StringF(arena, String flags_str = StringF(arena,
"/%F /%F", "%F %F",
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" /"))), FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))),
FmtString(StringFromList(arena, msvc_compiler_flags, Lit(" /"))) FmtString(StringFromList(arena, msvc_compiler_flags, Lit(" ")))
); );
msvc_cmd_str = StringF(arena, "\"cl\" gen.c %F", FmtString(flags_str)); msvc_cmd_str = StringF(arena, "\"cl\" gen.c %F", FmtString(flags_str));
} }
/* Clang */
{
String flags_str = StringF(arena,
"%F %F",
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))),
FmtString(StringFromList(arena, clang_compiler_flags, Lit(" ")))
);
clang_cmd_str = StringF(arena, "\"clang\" gen.c %F", FmtString(flags_str));
}
//- Compile C //- Compile C
if (ret == 0) if (ret == 0)
{ {
String cmd_str = msvc_cmd_str; String cmd_str = msvc_cmd_str;
// String cmd_str = clang_cmd_str;
OS_CommandResult result = OS_RunCommand(arena, cmd_str); OS_CommandResult result = OS_RunCommand(arena, cmd_str);
ret = result.code; ret = result.code;
String output = result.output; String output = result.output;

View File

@ -1,7 +1,7 @@
/* Based on Allen Webster's dwrite rasterizer example - /* Based on Allen Webster's dwrite rasterizer example -
* https://github.com/4th-dimention/examps */ * https://github.com/4th-dimention/examps */
extern TTF_DW_SharedState TTF_DW_shared_state = ZI; TTF_DW_SharedState TTF_DW_shared_state = ZI;
//////////////////////////////// ////////////////////////////////
//~ Win32 libs //~ Win32 libs
@ -29,7 +29,7 @@ void TTF_StartupCore(void)
HRESULT error = DWriteCreateFactory( HRESULT error = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED, DWRITE_FACTORY_TYPE_SHARED,
&IID_IDWriteFactory5, &IID_IDWriteFactory5,
(IUnknown **)&g->factory (void **)&g->factory
); );
#if CompilerIsClang #if CompilerIsClang
# pragma clang diagnostic pop # pragma clang diagnostic pop

View File

@ -9,6 +9,7 @@
#include <combaseapi.h> #include <combaseapi.h>
#include <dcommon.h> #include <dcommon.h>
#include <initguid.h> #include <initguid.h>
#include <unknwn.h>
//- GUIDs //- GUIDs
DEFINE_GUID(IID_IDWriteFactory5, 0x958db99a, 0xbe2a, 0x4f09, 0xaf, 0x7d, 0x65, 0x18, 0x98, 0x03, 0xd1, 0xd3); DEFINE_GUID(IID_IDWriteFactory5, 0x958db99a, 0xbe2a, 0x4f09, 0xaf, 0x7d, 0x65, 0x18, 0x98, 0x03, 0xd1, 0xd3);
@ -135,6 +136,9 @@ static inline HRESULT IDWriteFontFace_GetDesignGlyphMe
static inline HRESULT IDWriteFontFace_GetGlyphIndices (IDWriteFontFace* this, const UINT32* codePoints, UINT32 codePointCount, UINT16* glyphIndices) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, const UINT32*, UINT32, UINT16*))this->v->tbl[11])(this, codePoints, codePointCount, glyphIndices); } static inline HRESULT IDWriteFontFace_GetGlyphIndices (IDWriteFontFace* this, const UINT32* codePoints, UINT32 codePointCount, UINT16* glyphIndices) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, const UINT32*, UINT32, UINT16*))this->v->tbl[11])(this, codePoints, codePointCount, glyphIndices); }
static inline UINT32 IDWriteGdiInterop_Release (IDWriteGdiInterop* this) { return ((UINT32 (WINAPI*)(IDWriteGdiInterop*))this->v->tbl[2])(this); } static inline UINT32 IDWriteGdiInterop_Release (IDWriteGdiInterop* this) { return ((UINT32 (WINAPI*)(IDWriteGdiInterop*))this->v->tbl[2])(this); }
//- Functions
EXTERN_C HRESULT DECLSPEC_IMPORT WINAPI DWriteCreateFactory (DWRITE_FACTORY_TYPE factoryType, const GUID* iid, void** factory) WIN_NOEXCEPT;
//////////////////////////////// ////////////////////////////////
//~ Shared state //~ Shared state