aboutsummaryrefslogtreecommitdiff
path: root/src/build_settings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/build_settings.cpp')
-rw-r--r--src/build_settings.cpp35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 4b5ffdc64..07b7a8e3e 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -19,6 +19,9 @@ struct BuildContext {
bool generate_docs;
i32 optimization_level;
bool show_timings;
+
+ gbAffinity affinity;
+ isize thread_count;
};
@@ -205,18 +208,22 @@ String odin_root_dir(void) {
#if defined(GB_SYSTEM_WINDOWS)
String path_to_fullpath(gbAllocator a, String s) {
- gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&string_buffer_arena);
- String16 string16 = string_to_string16(string_buffer_allocator, s);
- String result = {0};
-
- DWORD len = GetFullPathNameW(&string16[0], 0, nullptr, nullptr);
- if (len != 0) {
- wchar_t *text = gb_alloc_array(string_buffer_allocator, wchar_t, len+1);
- GetFullPathNameW(&string16[0], len, text, nullptr);
- text[len] = 0;
- result = string16_to_string(a, make_string16(text, len));
+ String result = {};
+ gb_mutex_lock(&string_buffer_mutex);
+ {
+ gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&string_buffer_arena);
+ String16 string16 = string_to_string16(string_buffer_allocator, s);
+
+ DWORD len = GetFullPathNameW(&string16[0], 0, nullptr, nullptr);
+ if (len != 0) {
+ wchar_t *text = gb_alloc_array(string_buffer_allocator, wchar_t, len+1);
+ GetFullPathNameW(&string16[0], len, text, nullptr);
+ text[len] = 0;
+ result = string16_to_string(a, make_string16(text, len));
+ }
+ gb_temp_arena_memory_end(tmp);
}
- gb_temp_arena_memory_end(tmp);
+ gb_mutex_unlock(&string_buffer_mutex);
return result;
}
#elif defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX)
@@ -271,6 +278,12 @@ String const ODIN_VERSION = str_lit("0.6.0");
void init_build_context(void) {
BuildContext *bc = &build_context;
+
+ gb_affinity_init(&bc->affinity);
+ if (bc->thread_count == 0) {
+ bc->thread_count = gb_max(bc->affinity.thread_count, 1);
+ }
+
bc->ODIN_VENDOR = str_lit("odin");
bc->ODIN_VERSION = ODIN_VERSION;
bc->ODIN_ROOT = odin_root_dir();