Commit a9df637fb1

Andrew Kelley <andrew@ziglang.org>
2020-02-04 09:39:20
fix undef clang library symbols when linking self-hosted
1 parent d0b12d7
src/config.h.in
@@ -18,6 +18,7 @@
 #define ZIG_CXX_COMPILER "@CMAKE_CXX_COMPILER@"
 #define ZIG_LLD_INCLUDE_PATH "@LLD_INCLUDE_DIRS@"
 #define ZIG_LLD_LIBRARIES "@LLD_LIBRARIES@"
+#define ZIG_CLANG_LIBRARIES "@CLANG_LIBRARIES@"
 #define ZIG_LLVM_CONFIG_EXE "@LLVM_CONFIG_EXE@"
 #define ZIG_DIA_GUIDS_LIB "@ZIG_DIA_GUIDS_LIB_ESCAPED@"
 
src/main.cpp
@@ -261,12 +261,13 @@ int main(int argc, char **argv) {
     Error err;
 
     if (argc == 2 && strcmp(argv[1], "BUILD_INFO") == 0) {
-        printf("%s\n%s\n%s\n%s\n%s\n%s\n",
+        printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
                 ZIG_CMAKE_BINARY_DIR,
                 ZIG_CXX_COMPILER,
                 ZIG_LLVM_CONFIG_EXE,
                 ZIG_LLD_INCLUDE_PATH,
                 ZIG_LLD_LIBRARIES,
+                ZIG_CLANG_LIBRARIES,
                 ZIG_DIA_GUIDS_LIB);
         return 0;
     }
build.zig
@@ -47,6 +47,7 @@ pub fn build(b: *Builder) !void {
         .llvm_config_exe = nextValue(&index, build_info),
         .lld_include_dir = nextValue(&index, build_info),
         .lld_libraries = nextValue(&index, build_info),
+        .clang_libraries = nextValue(&index, build_info),
         .dia_guids_lib = nextValue(&index, build_info),
         .llvm = undefined,
     };
@@ -299,6 +300,12 @@ fn configureStage2(b: *Builder, exe: var, ctx: Context) !void {
         addCppLib(b, exe, ctx.cmake_binary_dir, "embedded_lld_coff");
         addCppLib(b, exe, ctx.cmake_binary_dir, "embedded_lld_lib");
     }
+    {
+        var it = mem.tokenize(ctx.clang_libraries, ";");
+        while (it.next()) |lib| {
+            exe.addObjectFile(lib);
+        }
+    }
     dependOnLib(b, exe, ctx.llvm);
 
     if (exe.target.getOs() == .linux) {
@@ -364,6 +371,7 @@ const Context = struct {
     llvm_config_exe: []const u8,
     lld_include_dir: []const u8,
     lld_libraries: []const u8,
+    clang_libraries: []const u8,
     dia_guids_lib: []const u8,
     llvm: LibraryDep,
 };
CMakeLists.txt
@@ -364,6 +364,11 @@ add_library(zig_cpp STATIC ${ZIG_CPP_SOURCES})
 set_target_properties(zig_cpp PROPERTIES
     COMPILE_FLAGS ${EXE_CFLAGS}
 )
+target_link_libraries(zig_cpp LINK_PUBLIC
+    ${CLANG_LIBRARIES}
+    ${LLD_LIBRARIES}
+    ${LLVM_LIBRARIES}
+)
 
 add_library(opt_c_util STATIC ${OPTIMIZED_C_SOURCES})
 set_target_properties(opt_c_util PROPERTIES
@@ -379,9 +384,6 @@ target_link_libraries(compiler LINK_PUBLIC
     zig_cpp
     opt_c_util
     ${SOFTFLOAT_LIBRARIES}
-    ${CLANG_LIBRARIES}
-    ${LLD_LIBRARIES}
-    ${LLVM_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
 if(NOT MSVC)