Commit 81c6f08724

Andrew Kelley <superjoe30@gmail.com>
2018-10-09 19:12:50
add workaround for bad LLD macos code
1 parent 05e608a
Changed files (1)
src/link.cpp
@@ -31,8 +31,18 @@ static const char *get_libc_static_file(CodeGen *g, const char *file) {
 
 static Buf *build_a_raw(CodeGen *parent_gen, const char *aname, Buf *full_path) {
     ZigTarget *child_target = parent_gen->is_native_target ? nullptr : &parent_gen->zig_target;
-    CodeGen *child_gen = codegen_create(full_path, child_target, OutTypeLib, parent_gen->build_mode,
-        parent_gen->zig_lib_dir);
+
+    // The Mach-O LLD code is not well maintained, and trips an assertion
+    // when we link compiler_rt and builtin as libraries rather than objects.
+    // Here we workaround this by having compiler_rt and builtin be objects.
+    // TODO write our own linker. https://github.com/ziglang/zig/issues/1535
+    OutType child_out_type = OutTypeLib;
+    if (parent_gen->zig_target.os == OsMacOSX) {
+        child_out_type = OutTypeObj;
+    }
+
+    CodeGen *child_gen = codegen_create(full_path, child_target, child_out_type,
+        parent_gen->build_mode, parent_gen->zig_lib_dir);
 
     child_gen->out_h_path = nullptr;
     child_gen->verbose_tokenize = parent_gen->verbose_tokenize;