diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-01-16 13:01:36 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-01-16 13:01:36 -0500 |
| commit | fbe6af81fdb1b964bb0c28f51de2458800b8274c (patch) | |
| tree | 6d65a49b911ba665a7e2c28c6619d1aa6517a744 /src/compiler.cpp | |
| parent | 230d27c1cd00e7adf0ccfca2c8bb73ae1779aa4c (diff) | |
| parent | 7e5e767ba0fdde91dd66690168eff96b75c28e33 (diff) | |
| download | zig-fbe6af81fdb1b964bb0c28f51de2458800b8274c.tar.gz zig-fbe6af81fdb1b964bb0c28f51de2458800b8274c.zip | |
Merge remote-tracking branch 'origin/master' into llvm10
Diffstat (limited to 'src/compiler.cpp')
| -rw-r--r-- | src/compiler.cpp | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/src/compiler.cpp b/src/compiler.cpp index 50be7416b2..484a4ca089 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -1,34 +1,12 @@ #include "cache_hash.hpp" #include "os.hpp" +#include "compiler.hpp" #include <stdio.h> -static Buf saved_compiler_id = BUF_INIT; -static Buf saved_app_data_dir = BUF_INIT; -static Buf saved_stage1_path = BUF_INIT; -static Buf saved_lib_dir = BUF_INIT; -static Buf saved_special_dir = BUF_INIT; -static Buf saved_std_dir = BUF_INIT; - static Buf saved_dynamic_linker_path = BUF_INIT; static bool searched_for_dyn_linker = false; -static Buf saved_libc_path = BUF_INIT; -static bool searched_for_libc = false; - -Buf *get_stage1_cache_path(void) { - if (saved_stage1_path.list.length != 0) { - return &saved_stage1_path; - } - Error err; - if ((err = os_get_app_data_dir(&saved_app_data_dir, "zig"))) { - fprintf(stderr, "Unable to get app data dir: %s\n", err_str(err)); - exit(1); - } - os_path_join(&saved_app_data_dir, buf_create_from_str("stage1"), &saved_stage1_path); - return &saved_stage1_path; -} - static void detect_dynamic_linker(Buf *lib_path) { #if defined(ZIG_OS_LINUX) for (size_t i = 0; possible_ld_names[i] != NULL; i += 1) { @@ -40,7 +18,10 @@ static void detect_dynamic_linker(Buf *lib_path) { #endif } -const Buf *get_self_libc_path(void) { +Buf *get_self_libc_path(void) { + static Buf saved_libc_path = BUF_INIT; + static bool searched_for_libc = false; + for (;;) { if (saved_libc_path.list.length != 0) { return &saved_libc_path; @@ -82,15 +63,16 @@ Buf *get_self_dynamic_linker_path(void) { } Error get_compiler_id(Buf **result) { + static Buf saved_compiler_id = BUF_INIT; + if (saved_compiler_id.list.length != 0) { *result = &saved_compiler_id; return ErrorNone; } Error err; - Buf *stage1_dir = get_stage1_cache_path(); Buf *manifest_dir = buf_alloc(); - os_path_join(stage1_dir, buf_create_from_str("exe"), manifest_dir); + os_path_join(get_global_cache_dir(), buf_create_from_str("exe"), manifest_dir); CacheHash cache_hash; CacheHash *ch = &cache_hash; @@ -190,9 +172,9 @@ static int find_zig_lib_dir(Buf *out_path) { } Buf *get_zig_lib_dir(void) { - if (saved_lib_dir.list.length != 0) { + static Buf saved_lib_dir = BUF_INIT; + if (saved_lib_dir.list.length != 0) return &saved_lib_dir; - } buf_resize(&saved_lib_dir, 0); int err; @@ -204,9 +186,9 @@ Buf *get_zig_lib_dir(void) { } Buf *get_zig_std_dir(Buf *zig_lib_dir) { - if (saved_std_dir.list.length != 0) { + static Buf saved_std_dir = BUF_INIT; + if (saved_std_dir.list.length != 0) return &saved_std_dir; - } buf_resize(&saved_std_dir, 0); os_path_join(zig_lib_dir, buf_create_from_str("std"), &saved_std_dir); @@ -215,12 +197,29 @@ Buf *get_zig_std_dir(Buf *zig_lib_dir) { } Buf *get_zig_special_dir(Buf *zig_lib_dir) { - if (saved_special_dir.list.length != 0) { + static Buf saved_special_dir = BUF_INIT; + if (saved_special_dir.list.length != 0) return &saved_special_dir; - } buf_resize(&saved_special_dir, 0); os_path_join(get_zig_std_dir(zig_lib_dir), buf_sprintf("special"), &saved_special_dir); return &saved_special_dir; } + +Buf *get_global_cache_dir(void) { + static Buf saved_global_cache_dir = BUF_INIT; + if (saved_global_cache_dir.list.length != 0) + return &saved_global_cache_dir; + buf_resize(&saved_global_cache_dir, 0); + + Buf app_data_dir = BUF_INIT; + Error err; + if ((err = os_get_app_data_dir(&app_data_dir, "zig"))) { + fprintf(stderr, "Unable to get application data dir: %s\n", err_str(err)); + exit(1); + } + os_path_join(&app_data_dir, buf_create_from_str("stage1"), &saved_global_cache_dir); + buf_deinit(&app_data_dir); + return &saved_global_cache_dir; +} |
