From 3cacbea95b2052f0dffd0a412f5e99ff61397826 Mon Sep 17 00:00:00 2001 From: kcbanner Date: Wed, 4 Jan 2023 02:18:51 -0500 Subject: [PATCH] build: simplify llvm-config provided system library parsing - Revert the addition of CLANG_SYSTEM_LIBARIES and LLVM_SYSTEM_LIBRARIES - Change addCMakeLibraryList to parse non-absolute path .lib dependencies as system libraries --- CMakeLists.txt | 11 +++++------ build.zig | 33 ++------------------------------- cmake/Findclang.cmake | 3 +-- cmake/Findllvm.cmake | 11 +++-------- stage1/config.h.in | 2 -- 5 files changed, 11 insertions(+), 49 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69b818259a..dd3e016edb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,9 +133,9 @@ find_package(lld 15) if(ZIG_STATIC_ZLIB) if (MSVC) - list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "z.lib") + list(REMOVE_ITEM LLVM_LIBRARIES "z.lib") else() - list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "-lz") + list(REMOVE_ITEM LLVM_LIBRARIES "-lz") endif() find_library(ZLIB NAMES libz.a libzlibstatic.a z zlib libz NAMES_PER_DIR) @@ -144,9 +144,9 @@ endif() if(ZIG_STATIC_ZSTD) if (MSVC) - list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "zstd.lib") + list(REMOVE_ITEM LLVM_LIBRARIES "zstd.lib") else() - list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "-lzstd") + list(REMOVE_ITEM LLVM_LIBRARIES "-lzstd") endif() find_library(ZSTD NAMES libzstd.a libzstdstatic.a zstd NAMES_PER_DIR) @@ -154,7 +154,7 @@ if(ZIG_STATIC_ZSTD) endif() if(APPLE AND ZIG_STATIC) - list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "-lcurses") + list(REMOVE_ITEM LLVM_LIBRARIES "-lcurses") find_library(CURSES NAMES libcurses.a libncurses.a NAMES_PER_DIR PATHS /usr/local/opt/ncurses/lib @@ -710,7 +710,6 @@ target_link_libraries(zigcpp LINK_PUBLIC ${CLANG_LIBRARIES} ${LLD_LIBRARIES} ${LLVM_LIBRARIES} - ${LLVM_SYSTEM_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) diff --git a/build.zig b/build.zig index eb1d4ab34a..999ebad08e 100644 --- a/build.zig +++ b/build.zig @@ -552,8 +552,6 @@ fn addCmakeCfgOptionsToExe( addCMakeLibraryList(exe, cfg.clang_libraries); addCMakeLibraryList(exe, cfg.lld_libraries); addCMakeLibraryList(exe, cfg.llvm_libraries); - addCMakeSystemLibraryList(exe, cfg.clang_system_libraries); - addCMakeSystemLibraryList(exe, cfg.llvm_system_libraries); if (use_zig_libcxx) { exe.linkLibCpp(); @@ -683,29 +681,14 @@ fn addCMakeLibraryList(exe: *std.build.LibExeObjStep, list: []const u8) void { while (it.next()) |lib| { if (mem.startsWith(u8, lib, "-l")) { exe.linkSystemLibrary(lib["-l".len..]); + } else if (exe.target.isWindows() and mem.endsWith(u8, lib, ".lib") and !fs.path.isAbsolute(lib)) { + exe.linkSystemLibrary(lib[0 .. lib.len - ".lib".len]); } else { exe.addObjectFile(lib); } } } -fn addCMakeSystemLibraryList(exe: *std.build.LibExeObjStep, list: []const u8) void { - var it = mem.tokenize(u8, list, ";"); - while (it.next()) |lib| { - var start_offset: usize = 0; - var end_offset: usize = 0; - if (mem.startsWith(u8, lib, "-l")) { - start_offset = "-l".len; - } - - if (exe.target.isWindows() and mem.endsWith(u8, lib, ".lib")) { - end_offset = ".lib".len; - } - - exe.linkSystemLibrary(lib[start_offset .. lib.len - end_offset]); - } -} - const CMakeConfig = struct { llvm_linkage: std.build.LibExeObjStep.Linkage, cmake_binary_dir: []const u8, @@ -716,11 +699,9 @@ const CMakeConfig = struct { lld_include_dir: []const u8, lld_libraries: []const u8, clang_libraries: []const u8, - clang_system_libraries: []const u8, llvm_lib_dir: []const u8, llvm_include_dir: []const u8, llvm_libraries: []const u8, - llvm_system_libraries: []const u8, dia_guids_lib: []const u8, }; @@ -783,11 +764,9 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig { .lld_include_dir = undefined, .lld_libraries = undefined, .clang_libraries = undefined, - .clang_system_libraries = undefined, .llvm_lib_dir = undefined, .llvm_include_dir = undefined, .llvm_libraries = undefined, - .llvm_system_libraries = undefined, .dia_guids_lib = undefined, }; @@ -824,18 +803,10 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig { .prefix = "#define ZIG_CLANG_LIBRARIES ", .field = "clang_libraries", }, - .{ - .prefix = "#define ZIG_CLANG_SYSTEM_LIBRARIES ", - .field = "clang_system_libraries", - }, .{ .prefix = "#define ZIG_LLVM_LIBRARIES ", .field = "llvm_libraries", }, - .{ - .prefix = "#define ZIG_LLVM_SYSTEM_LIBRARIES ", - .field = "llvm_system_libraries", - }, .{ .prefix = "#define ZIG_DIA_GUIDS_LIB ", .field = "dia_guids_lib", diff --git a/cmake/Findclang.cmake b/cmake/Findclang.cmake index ba1abbcb64..4441664447 100644 --- a/cmake/Findclang.cmake +++ b/cmake/Findclang.cmake @@ -5,7 +5,6 @@ # CLANG_FOUND # CLANG_INCLUDE_DIRS # CLANG_LIBRARIES -# CLANG_SYSTEM_LIBRARIES # CLANG_LIBDIRS find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h @@ -70,7 +69,7 @@ else() endif() if (MSVC) - set(CLANG_SYSTEM_LIBRARIES "version.lib") + set(CLANG_LIBRARIES ${CLANG_LIBRARIES} "version.lib") endif() include(FindPackageHandleStandardArgs) diff --git a/cmake/Findllvm.cmake b/cmake/Findllvm.cmake index 87059f9f1d..60a52056d8 100644 --- a/cmake/Findllvm.cmake +++ b/cmake/Findllvm.cmake @@ -5,7 +5,6 @@ # LLVM_FOUND # LLVM_INCLUDE_DIRS # LLVM_LIBRARIES -# LLVM_SYSTEM_LIBRARIES # LLVM_LIBDIRS # LLVM_LINK_MODE @@ -173,9 +172,9 @@ if(ZIG_USE_LLVM_CONFIG) OUTPUT_STRIP_TRAILING_WHITESPACE) string(REPLACE " " ";" LLVM_STATIC_SYSTEM_LIBS "${LLVM_STATIC_SYSTEM_LIBS_SPACES}") - set(LLVM_SYSTEM_LIBRARIES ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS}) + set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS}) else() - set(LLVM_SYSTEM_LIBRARIES ${LLVM_SYSTEM_LIBS}) + set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS}) endif() execute_process( @@ -370,11 +369,7 @@ else() find_path(LLVM_INCLUDE_DIRS NAMES llvm/IR/IRBuilder.h) endif() -if(NOT LLVM_SYSTEM_LIBRARIES) - set(LLVM_SYSTEM_LIBRARIES "") -endif() - include(FindPackageHandleStandardArgs) find_package_handle_standard_args(llvm DEFAULT_MSG LLVM_LIBRARIES LLVM_INCLUDE_DIRS) -mark_as_advanced(LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_SYSTEM_LIBRARIES LLVM_LIBDIRS) +mark_as_advanced(LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_LIBDIRS) diff --git a/stage1/config.h.in b/stage1/config.h.in index 2f4ed02fdc..0f1d902ef9 100644 --- a/stage1/config.h.in +++ b/stage1/config.h.in @@ -16,7 +16,6 @@ // Used by build.zig for communicating build information to self hosted build. #define ZIG_CLANG_LIBRARIES "@CLANG_LIBRARIES@" -#define ZIG_CLANG_SYSTEM_LIBRARIES "@CLANG_SYSTEM_LIBRARIES@" #define ZIG_CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@" #define ZIG_CMAKE_PREFIX_PATH "@ZIG_CMAKE_PREFIX_PATH@" #define ZIG_CMAKE_STATIC_LIBRARY_PREFIX "@CMAKE_STATIC_LIBRARY_PREFIX@" @@ -29,6 +28,5 @@ #define ZIG_LLVM_LIBRARIES "@LLVM_LIBRARIES@" #define ZIG_LLVM_LIB_PATH "@LLVM_LIBDIRS@" #define ZIG_LLVM_LINK_MODE "@LLVM_LINK_MODE@" -#define ZIG_LLVM_SYSTEM_LIBRARIES "@LLVM_SYSTEM_LIBRARIES@" #endif