From a9df637fb11713c41024e6f3b6a1f4f86c33b09e Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 4 Feb 2020 03:39:20 -0500 Subject: [PATCH] fix undef clang library symbols when linking self-hosted --- CMakeLists.txt | 8 +++++--- build.zig | 8 ++++++++ src/config.h.in | 1 + src/main.cpp | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7367f2e3a..d7a69663a 100644 --- a/CMakeLists.txt +++ b/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) diff --git a/build.zig b/build.zig index 979379d9f..aadc3f602 100644 --- a/build.zig +++ b/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, }; diff --git a/src/config.h.in b/src/config.h.in index 7a0ea3536..2ec6c25b3 100644 --- a/src/config.h.in +++ b/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@" diff --git a/src/main.cpp b/src/main.cpp index 991b46b32..fe0da7c0f 100644 --- a/src/main.cpp +++ b/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; }