fixes for the GCC build

This commit is contained in:
Nikita Smith authored and Ryan Fleury committed 2026-09-10 14:28:29 -07:00
1 parent 5fe1bac74e
commit 55fbbb09d7
20 files changed
+78 -75

No files matched your search

+9 -5
View File
@@ -49,6 +49,10 @@ if [[ "${release:-0}" == "1" ]]; then echo "[release mode]"; compile="$compile
elif [[ "${debug:-1}" == "1" ]]; then echo "[debug mode]"; compile="$compiler $cc_debug";
fi
compile() {
$compile -Wl,--start-group "$@" blake3.a -latomic -Wl,--end-group
}
# --- Prep Directories --------------------------------------------------------
mkdir -p build local
@@ -75,11 +79,11 @@ fi
# --- Build Everything (@build_targets) ---------------------------------------
cd build
if [[ "${raddbg:-0}" == "1" ]]; then didbuild=1 && $compile ../src/raddbg/raddbg_main.c $cc_icon $cc_link $cc_os_gfx $cc_render $cc_font_provider -o raddbg; fi
if [[ "${raddbg_non_graphical:-0}" == "1" ]]; then didbuild=1 && $compile ../src/raddbg/raddbg_main.c -DWM_STUB=1 -DR_BACKEND=R_BACKEND_STUB $cc_link $cc_os_gfx $cc_render $cc_font_provider -o raddbg_non_graphical; fi
if [[ "${radbin:-0}" == "1" ]]; then didbuild=1 && $compile ../src/radbin/radbin_main.c $cc_link -o radbin; fi
if [[ "${radlink:-0}" == "1" ]]; then didbuild=1 && $compile ../src/linker/lnk.c $cc_link -o radlink blake3.a; fi
if [[ "${torture:-0}" == "1" ]]; then didbuild=1 && $compile ../src/torture/torture_main.c $cc_link $cc_os_gfx $cc_render $cc_font_provider -o torture; fi
if [[ "${raddbg:-0}" == "1" ]]; then didbuild=1 && compile ../src/raddbg/raddbg_main.c $cc_icon $cc_link $cc_os_gfx $cc_render $cc_font_provider -o raddbg; fi
if [[ "${raddbg_non_graphical:-0}" == "1" ]]; then didbuild=1 && compile ../src/raddbg/raddbg_main.c -DWM_STUB=1 -DR_BACKEND=R_BACKEND_STUB $cc_link $cc_os_gfx $cc_render $cc_font_provider -o raddbg_non_graphical; fi
if [[ "${radbin:-0}" == "1" ]]; then didbuild=1 && compile ../src/radbin/radbin_main.c $cc_link -o radbin; fi
if [[ "${radlink:-0}" == "1" ]]; then didbuild=1 && compile ../src/linker/lnk.c $cc_link -o radlink; fi
if [[ "${torture:-0}" == "1" ]]; then didbuild=1 && compile ../src/torture/torture_main.c $cc_link $cc_os_gfx $cc_render $cc_font_provider -o torture; fi
cd ..
# --- Warn On No Builds -------------------------------------------------------
+1 -1
View File
@@ -54,7 +54,7 @@
#if COMPILER_MSVC
# define force_inline __forceinline
#elif COMPILER_CLANG || COMPILER_GCC
# define force_inline __attribute__((always_inline))
# define force_inline inline __attribute__((always_inline))
#else
# error force_inline not defined for this compiler.
#endif
+1 -5
View File
@@ -4,11 +4,7 @@
////////////////////////////////
//~ rjf: Globals/Thread-Locals
C_LINKAGE thread_static Log *log_active;
#if !BUILD_SUPPLEMENTARY_UNIT
C_LINKAGE thread_static Log *log_active = 0;
#endif
thread_static Log *log_active;
String8 g_logs_folder;
////////////////////////////////
+1
View File
@@ -40,6 +40,7 @@ struct Log
// Globals
extern String8 g_logs_folder;
extern thread_static Log *log_active;
////////////////////////////////
//~ rjf: Log Creation/Selection
+5 -5
View File
@@ -196,7 +196,7 @@ str32_zero(void)
}
internal String8
str8_cstring(char *c)
str8_cstring(const char *c)
{
String8 result = {(U8*)c, cstring8_length((U8*)c)};
return result;
@@ -3076,7 +3076,7 @@ str8_deserial_read_sleb128(String8 string, U64 off, S64 *value_out)
////////////////////////////////
force_inline int
internal force_inline int
str8_compar(String8 a, String8 b, B32 ignore_case)
{
U64 size = Min(a.size, b.size);
@@ -3095,19 +3095,19 @@ str8_compar(String8 a, String8 b, B32 ignore_case)
return cmp;
}
force_inline int
internal force_inline int
str8_compar_ignore_case(const void *a, const void *b)
{
return str8_compar(*(String8*)a, *(String8*)b, 1);
}
force_inline int
internal force_inline int
str8_compar_case_sensitive(const void *a, const void *b)
{
return str8_compar(*(String8*)a, *(String8*)b, 0);
}
force_inline int
internal force_inline int
str8_is_before_case_sensitive(const void *a, const void *b)
{
int cmp = str8_compar_case_sensitive(a, b);
+1 -1
View File
@@ -180,7 +180,7 @@ internal String16 str16_zero(void);
internal String32 str32(U32 *str, U64 size);
internal String32 str32_range(U32 *first, U32 *one_past_last);
internal String32 str32_zero(void);
internal String8 str8_cstring(char *c);
internal String8 str8_cstring(const char *c);
internal String16 str16_cstring(U16 *c);
internal String32 str32_cstring(U32 *c);
internal String8 str8_cstring_capped(void *cstr, void *cap);
+1 -4
View File
@@ -4,10 +4,7 @@
////////////////////////////////
//~ rjf: Globals
C_LINKAGE thread_static TCTX *tctx_thread_local;
#if !BUILD_SUPPLEMENTARY_UNIT
C_LINKAGE thread_static TCTX *tctx_thread_local = 0;
#endif
thread_static TCTX *tctx_thread_local;
////////////////////////////////
//~ rjf: Thread Context Functions
+5
View File
@@ -79,6 +79,11 @@ struct TCTX
U64 *progress_target_ptr;
};
////////////////////////////////
// Globals
extern thread_static TCTX *tctx_thread_local;
////////////////////////////////
//~ rjf: Thread Context Functions
+1 -1
View File
@@ -67,7 +67,7 @@ typedef S32 RAD_S32;
#if defined(_MSC_VER)
# define RADFORCEINLINE __forceinline
#elif defined(__clang__) || defined(__GNUC__)
# define RADFORCEINLINE __attribute__((always_inline))
# define RADFORCEINLINE inline __attribute__((always_inline))
#else
# error need force inline for this compiler
#endif
+19 -19
View File
@@ -23,7 +23,7 @@ make_version(U64 major, U64 minor)
return version;
}
internal int
internal force_inline int
version_compar(Version a, Version b)
{
int cmp = 0;
@@ -48,7 +48,7 @@ isect_off(U32 isect, U32 off)
return result;
}
internal int
internal force_inline int
u16_compar(const void *raw_a, const void *raw_b)
{
U16 a = *(U16*)raw_a;
@@ -59,7 +59,7 @@ u16_compar(const void *raw_a, const void *raw_b)
return result;
}
internal int
internal force_inline int
u32_compar(const void *raw_a, const void *raw_b)
{
U32 a = *(U32*)raw_a;
@@ -70,7 +70,7 @@ u32_compar(const void *raw_a, const void *raw_b)
return result;
}
internal int
internal force_inline int
u64_compar(const void *raw_a, const void *raw_b)
{
U64 a = *(const U64*)raw_a;
@@ -79,7 +79,7 @@ u64_compar(const void *raw_a, const void *raw_b)
return result;
}
internal int
internal force_inline int
u64_compar_inv(const void *raw_a, const void *raw_b)
{
U64 a = *(const U64*)raw_a;
@@ -88,7 +88,7 @@ u64_compar_inv(const void *raw_a, const void *raw_b)
return result;
}
internal int
internal force_inline int
u16_compar_is_before(void *raw_a, void *raw_b)
{
U16 *a = (U16 *)raw_a;
@@ -97,7 +97,7 @@ u16_compar_is_before(void *raw_a, void *raw_b)
return is_before;
}
internal int
internal force_inline int
u32_compar_is_before(void *raw_a, void *raw_b)
{
U32 *a = (U32 *)raw_a;
@@ -106,7 +106,7 @@ u32_compar_is_before(void *raw_a, void *raw_b)
return is_before;
}
internal int
internal force_inline int
u64_compar_is_before(void *raw_a, void *raw_b)
{
U64 *a = (U64 *)raw_a;
@@ -115,7 +115,7 @@ u64_compar_is_before(void *raw_a, void *raw_b)
return is_before;
}
internal int
internal force_inline int
u8_is_before(void *raw_a, void *raw_b)
{
U8 *a = (U8 *) raw_a;
@@ -123,7 +123,7 @@ u8_is_before(void *raw_a, void *raw_b)
return *a < *b;
}
internal int
internal force_inline int
u16_is_before(void *raw_a, void *raw_b)
{
U16 *a = (U16 *) raw_a;
@@ -131,7 +131,7 @@ u16_is_before(void *raw_a, void *raw_b)
return *a < *b;
}
internal int
internal force_inline int
u32_is_before(void *raw_a, void *raw_b)
{
U32 *a = (U32 *) raw_a;
@@ -139,7 +139,7 @@ u32_is_before(void *raw_a, void *raw_b)
return *a < *b;
}
internal int
internal force_inline int
u64_is_before(void *raw_a, void *raw_b)
{
U64 *a = (U64 *) raw_a;
@@ -147,7 +147,7 @@ u64_is_before(void *raw_a, void *raw_b)
return *a < *b;
}
internal int
internal force_inline int
pair_u32_is_before_v0(void *raw_a, void *raw_b)
{
PairU32 *a = raw_a;
@@ -155,7 +155,7 @@ pair_u32_is_before_v0(void *raw_a, void *raw_b)
return a->v0 < b->v0;
}
internal int
internal force_inline int
pair_u32_is_before(void *raw_a, void *raw_b)
{
PairU32 *a = raw_a;
@@ -163,7 +163,7 @@ pair_u32_is_before(void *raw_a, void *raw_b)
return a->v1 < b->v1;
}
internal int
internal force_inline int
pair_u64_is_before_v0(void *raw_a, void *raw_b)
{
PairU64 *a = raw_a;
@@ -171,7 +171,7 @@ pair_u64_is_before_v0(void *raw_a, void *raw_b)
return a->v0 < b->v0;
}
internal int
internal force_inline int
pair_u64_is_before_v1(void *raw_a, void *raw_b)
{
PairU64 *a = raw_a;
@@ -179,7 +179,7 @@ pair_u64_is_before_v1(void *raw_a, void *raw_b)
return a->v1 < b->v1;
}
internal int
internal force_inline int
pair_u32_compar_v0(const void *raw_a, const void *raw_b)
{
const PairU32 *a = raw_a;
@@ -187,7 +187,7 @@ pair_u32_compar_v0(const void *raw_a, const void *raw_b)
return u32_compar(&a->v0, &b->v0);
}
internal int
internal force_inline int
pair_u64_compar_v0(const void *raw_a, const void *raw_b)
{
const PairU64 *a = raw_a;
@@ -195,7 +195,7 @@ pair_u64_compar_v0(const void *raw_a, const void *raw_b)
return u64_compar(&a->v0, &b->v0);
}
internal int
internal force_inline int
pair_u64_compar_v1(const void *raw_a, const void *raw_b)
{
const PairU64 *a = raw_a;
+1 -1
View File
@@ -1635,7 +1635,7 @@ cv_c13_voff_map_compar(const void *raw_a, const void *raw_b)
return cmp;
}
force_inline int
internal force_inline int
cv_c13_voff_map_is_before(void *raw_a, void *raw_b)
{
return cv_c13_voff_map_compar(raw_a, raw_b) < 0;
+14 -14
View File
@@ -655,11 +655,11 @@ hash_map_purge(HashMap *hm)
////////////////////////////////
force_inline HASH_MAP_KEY_MATCH(hash_map_match_u32) { return a->key_u32 == b->key_u32; }
force_inline HASH_MAP_KEY_MATCH(hash_map_match_u64) { return a->key_u64 == b->key_u64; }
force_inline HASH_MAP_KEY_MATCH(hash_map_match_raw) { return a->key_raw == b->key_raw; }
force_inline HASH_MAP_KEY_MATCH(hash_map_match_string) { return str8_match(a->key_string, b->key_string, 0); }
force_inline HASH_MAP_KEY_MATCH(hash_map_match_path) { return str8_match(a->key_string, b->key_string, StringMatchFlag_CaseInsensitive|StringMatchFlag_SlashInsensitive); }
internal force_inline HASH_MAP_KEY_MATCH(hash_map_match_u32) { return a->key_u32 == b->key_u32; }
internal force_inline HASH_MAP_KEY_MATCH(hash_map_match_u64) { return a->key_u64 == b->key_u64; }
internal force_inline HASH_MAP_KEY_MATCH(hash_map_match_raw) { return a->key_raw == b->key_raw; }
internal force_inline HASH_MAP_KEY_MATCH(hash_map_match_string) { return str8_match(a->key_string, b->key_string, 0); }
internal force_inline HASH_MAP_KEY_MATCH(hash_map_match_path) { return str8_match(a->key_string, b->key_string, StringMatchFlag_CaseInsensitive|StringMatchFlag_SlashInsensitive); }
internal U64
hash_map_hash_from_path(String8 path)
@@ -949,29 +949,29 @@ hash_map_extract(Arena *arena,
}
// { keys, value }
force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_value) { MemoryCopy(buffer, kv, sizeof(*kv)); }
internal force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_value) { MemoryCopy(buffer, kv, sizeof(*kv)); }
internal HashMapKeyValue * key_value_from_hash_map ( Arena *arena, HashMap *hm) { return hash_map_extract(arena, hm, hash_map_extract_key_value, sizeof(HashMapKeyValue), 0, 0).keys; }
// keys
force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_u32) { MemoryCopy(buffer, &kv->key.key_u32, sizeof(kv->key.key_u32)); }
force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_u64) { MemoryCopy(buffer, &kv->key.key_u64, sizeof(kv->key.key_u64)); }
force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_string) { MemoryCopy(buffer, &kv->key.key_string, sizeof(kv->key.key_string)); }
internal force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_u32) { MemoryCopy(buffer, &kv->key.key_u32, sizeof(kv->key.key_u32)); }
internal force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_u64) { MemoryCopy(buffer, &kv->key.key_u64, sizeof(kv->key.key_u64)); }
internal force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_key_string) { MemoryCopy(buffer, &kv->key.key_string, sizeof(kv->key.key_string)); }
internal U32 * keys_from_hash_map_u32 ( Arena *arena, HashMap *hm) { return hash_map_extract(arena, hm, hash_map_extract_key_u32, sizeof(U32), 0, 0).keys; }
internal U64 * keys_from_hash_map_u64 ( Arena *arena, HashMap *hm) { return hash_map_extract(arena, hm, hash_map_extract_key_u64, sizeof(U64), 0, 0).keys; }
internal String8 * keys_from_hash_map_string( Arena *arena, HashMap *hm) { return hash_map_extract(arena, hm, hash_map_extract_key_string, sizeof(String8), 0, 0).keys; }
internal void * keys_from_hash_map_raw ( Arena *arena, HashMap *hm) { return hash_map_extract(arena, hm, hash_map_extract_key_string, sizeof(void *), 0, 0).keys; }
// values
force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_value_u64) { MemoryCopy(buffer, &kv->value.value_u64, sizeof(kv->value.value_u64)); }
force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_value_raw) { MemoryCopy(buffer, &kv->value.value_raw, sizeof(kv->value.value_raw)); }
internal force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_value_u64) { MemoryCopy(buffer, &kv->value.value_u64, sizeof(kv->value.value_u64)); }
internal force_inline HASH_MAP_EXTRACT_FUNC(hash_map_extract_value_raw) { MemoryCopy(buffer, &kv->value.value_raw, sizeof(kv->value.value_raw)); }
internal U64 * values_from_hash_map_u64(Arena *arena, HashMap *hm) { return hash_map_extract(arena, hm, 0, 0, hash_map_extract_value_u64, sizeof(U64)).values; }
internal void * values_from_hash_map_raw(Arena *arena, HashMap *hm) {return hash_map_extract(arena, hm, 0, 0, hash_map_extract_value_raw, sizeof(void *)).values; }
////////////////////////////////
force_inline int hash_map_key_is_before_u32(void *a, void *b) { return ((HashMapKeyValue*)a)->key.key_u32 < ((HashMapKeyValue*)b)->key.key_u32; }
force_inline int hash_map_key_is_before_u64(void *a, void *b) { return ((HashMapKeyValue*)a)->key.key_u64 < ((HashMapKeyValue*)b)->key.key_u64; }
force_inline int hash_map_key_is_before_string(void *a, void *b) { return str8_is_before_case_sensitive(a, b); }
internal force_inline int hash_map_key_is_before_u32(void *a, void *b) { return ((HashMapKeyValue*)a)->key.key_u32 < ((HashMapKeyValue*)b)->key.key_u32; }
internal force_inline int hash_map_key_is_before_u64(void *a, void *b) { return ((HashMapKeyValue*)a)->key.key_u64 < ((HashMapKeyValue*)b)->key.key_u64; }
internal force_inline int hash_map_key_is_before_string(void *a, void *b) { return str8_is_before_case_sensitive(a, b); }
internal void sort_hash_map_key_value_u32(HashMapKeyValue *pairs, U64 count) { radsort(pairs, count, hash_map_key_is_before_u32); }
internal void sort_hash_map_key_value_u64(HashMapKeyValue *pairs, U64 count) { radsort(pairs, count, hash_map_key_is_before_u64); }
+1 -1
View File
@@ -1109,7 +1109,7 @@ lnk_lib_member_ref_is_before(void *raw_a, void *raw_b)
g_sort_lib_member_context[(*b)->member_idx].link);
}
force_inline int
internal force_inline int
lnk_import_ref_is_before(void *raw_a, void *raw_b)
{
LNK_LibMemberRef **a_ptr = raw_a, **b_ptr = raw_b;
+3 -3
View File
@@ -976,7 +976,7 @@ lnk_directive_info_from_raw_directives(Arena *arena, LNK_Obj *obj, String8List r
return directive_info;
}
force_inline int
internal force_inline int
lnk_section_offset_symbol_is_before(void *raw_a, void *raw_b)
{
LNK_SectionOffsetSymbol *a = raw_a, *b = raw_b;
@@ -1084,7 +1084,7 @@ lnk_debug_s_from_obj(Arena *arena, LNK_Obj *obj)
return debug_s;
}
force_inline int
internal force_inline int
lnk_line_table_block_is_before(void *raw_a, void *raw_b)
{
LNK_LineTableBlock *a = raw_a, *b = raw_b;
@@ -1094,7 +1094,7 @@ lnk_line_table_block_is_before(void *raw_a, void *raw_b)
return key_a < key_b;
}
force_inline int
internal force_inline int
lnk_inline_range_is_before(void *raw_a, void *raw_b)
{
LNK_InlineRange *a = raw_a, *b = raw_b;
+5 -5
View File
@@ -1833,14 +1833,14 @@ typedef struct PDB_PsiAddrMapNameSortTask
Rng1U64 *batch_arr;
} PDB_PsiAddrMapNameSortTask;
force_inline U64
internal force_inline U64
psi_addr_map_sort_key(PDB_GsiSortRecord *record)
{
U64 key = ((U64)record->isect_off.isect << 32) | record->isect_off.off;
return key;
}
force_inline int
internal force_inline int
psi_addr_map_name_compar_is_before(void *raw_a, void *raw_b)
{
PDB_PsiAddrMapSortRecord *a = raw_a;
@@ -1903,7 +1903,7 @@ THREAD_POOL_TASK_FUNC(psi_addr_map_radix_sort_task)
ProfEnd();
}
force_inline U64
internal force_inline U64
psi_addr_map_name_sort_work(Rng1U64 run)
{
U64 count = dim_1u64(run);
@@ -2084,7 +2084,7 @@ THREAD_POOL_TASK_FUNC(gsi_size_buckets_task)
}
}
force_inline int
internal force_inline int
gsi_symbol_is_before(void *raw_a, void *raw_b)
{
CV_Symbol *a = *(CV_Symbol **)raw_a;
@@ -2113,7 +2113,7 @@ gsi_symbol_is_before(void *raw_a, void *raw_b)
return is_before;
}
force_inline int
internal force_inline int
gsi_pub_symbol_is_before(void *raw_a, void *raw_b)
{
CV_Symbol *a = *(CV_Symbol **)raw_a;
+1 -1
View File
@@ -526,7 +526,7 @@ struct PE_IntelPdata
#define PE_CODEVIEW_PDB20_MAGIC 0x3031424e
#define PE_CODEVIEW_PDB70_MAGIC 0x53445352
#define PE_CODEVIEW_RDI_MAGIC '0IDR'
#define PE_CODEVIEW_RDI_MAGIC 0x30494452 // 0IDR
typedef struct PE_CvHeaderPDB20 PE_CvHeaderPDB20;
struct PE_CvHeaderPDB20
+4 -4
View File
@@ -2040,10 +2040,10 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params)
// This compiles to in DWARF:
//
// foo -> DW_TAG_ArrayType -> (A0) DW_TAG_Subrange [2]
// \
// -> (B0) DW_TAG_PointerType -> (A1) DW_TAG_ArrayType -> DW_TAG_Subrange [3]
// \
// -> (B1) DW_TAG_BaseType (int)
// |
// +-> (B0) DW_TAG_PointerType -> (A1) DW_TAG_ArrayType -> DW_TAG_Subrange [3]
// |
// +-> (B1) DW_TAG_BaseType (int)
//
// RDI expects:
//
+1 -1
View File
@@ -61,7 +61,7 @@ typedef S32 RAD_S32;
#if defined(_MSC_VER)
# define RADFORCEINLINE __forceinline
#elif defined(__clang__) || defined(__GNUC__)
# define RADFORCEINLINE __attribute__((always_inline))
# define RADFORCEINLINE inline __attribute__((always_inline))
#else
# error need force inline for this compiler
#endif
+3 -3
View File
@@ -24,7 +24,7 @@
#define RSFORCEINLINE __forceinline __declspec(safebuffers)
#define CompilerReset(ptr) __assume(ptr)
#else
#define RSFORCEINLINE __attribute__((always_inline))
#define RSFORCEINLINE inline __attribute__((always_inline))
#define CompilerReset(ptr)
#endif
@@ -137,7 +137,7 @@ radsortmovesize( sizeof( (start)[0] ) ), \
//===================================================================================================
// small heap sort - this sort is around 200 bytes compiled - can use directly when size is important
RSFORCEINLINE void radheapsortinteral( void * start, size_t len, size_t element_size, is_before_func * is_before, swap_func * swapper )
internal RSFORCEINLINE void radheapsortinteral( void * start, size_t len, size_t element_size, is_before_func * is_before, swap_func * swapper )
{
void * left;
void * right;
@@ -430,7 +430,7 @@ rs_es = element_size;
#define RSS_MAX_RECURSE 128
RSFORCEINLINE void radsortinternal( void * start, size_t len, size_t element_size, is_before_func * is_before, swap_func * swapper, move_func * mover, rs_small_sort_func * small_sort, size_t small_sort_thres, void * tmp )
static RSFORCEINLINE void radsortinternal( void * start, size_t len, size_t element_size, is_before_func * is_before, swap_func * swapper, move_func * mover, rs_small_sort_func * small_sort, size_t small_sort_thres, void * tmp )
{
void * left;
size_t length;
+1 -1
View File
@@ -948,7 +948,7 @@ t_match_linef(String8 *output, char *fmt, ...)
return is_match;
}
force_inline int
internal force_inline int
t_test_info_is_before(void *a_, void *b_)
{
TestInfo **a = a_;