diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-07-07 17:06:09 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-07-07 17:56:08 -0400 |
| commit | 7ccf7807b3f12428adc5d9ca0ede4e3f4ec6dbbc (patch) | |
| tree | af8db742f220123b24c3959b6f33173d8b1e619e /src/compiler.cpp | |
| parent | 3b97940fb384285a8f88088c9e73e582f8bdbf96 (diff) | |
| download | zig-7ccf7807b3f12428adc5d9ca0ede4e3f4ec6dbbc.tar.gz zig-7ccf7807b3f12428adc5d9ca0ede4e3f4ec6dbbc.zip | |
ability to target any glibc version
Diffstat (limited to 'src/compiler.cpp')
| -rw-r--r-- | src/compiler.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/compiler.cpp b/src/compiler.cpp index 8bfe87bfcd..5d401f1851 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -9,9 +9,13 @@ 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; @@ -36,6 +40,28 @@ static void detect_dynamic_linker(Buf *lib_path) { #endif } +const Buf *get_self_libc_path(void) { + for (;;) { + if (saved_libc_path.list.length != 0) { + return &saved_libc_path; + } + if (searched_for_libc) + return nullptr; + ZigList<Buf *> lib_paths = {}; + Error err; + if ((err = os_self_exe_shared_libs(lib_paths))) + return nullptr; + for (size_t i = 0; i < lib_paths.length; i += 1) { + Buf *lib_path = lib_paths.at(i); + if (buf_ends_with_str(lib_path, "libc.so.6")) { + buf_init_from_buf(&saved_libc_path, lib_path); + return &saved_libc_path; + } + } + searched_for_libc = true; + } +} + Buf *get_self_dynamic_linker_path(void) { for (;;) { if (saved_dynamic_linker_path.list.length != 0) { |
