zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 0471eea0e2cac49946449efe4698d5ac18c0dc0d (tree)
parent c3945d9edeb304ccd9f3d44e9ab0bf94f5420694
Author: kcbanner <kcbanner@gmail.com>
Date:   Tue,  8 Nov 2022 02:14:39 -0500

build: first pass on geting stage3 building under x64_64-windows-msvc

Diffstat:
MCMakeLists.txt | 17++++++++++++-----
Mbuild.zig | 23++++++++++++++++++++---
Mcmake/Findclang.cmake | 5+++++
Msrc/Compilation.zig | 4++--
Msrc/link/Coff/lld.zig | 6++++++
Mstage1/config.h.in | 1+
6 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -91,6 +91,7 @@ set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not com set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries") set(ZIG_STATIC_LLVM off CACHE BOOL "Prefer linking against static LLVM libraries") set(ZIG_STATIC_ZLIB off CACHE BOOL "Prefer linking against static zlib") +set(ZIG_ENABLE_ZSTD on CACHE BOOL "Enable linking zstd") set(ZIG_STATIC_ZSTD off CACHE BOOL "Prefer linking against static zstd") set(ZIG_USE_CCACHE off CACHE BOOL "Use ccache") @@ -138,19 +139,24 @@ find_package(clang 15) find_package(lld 15) if(ZIG_STATIC_ZLIB) - list(REMOVE_ITEM LLVM_LIBRARIES "-lz") + if (MSVC) + list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "z.lib") + else() + list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "-lz") + endif() + find_library(ZLIB NAMES libz.a libzlibstatic.a z zlib libz NAMES_PER_DIR) list(APPEND LLVM_LIBRARIES "${ZLIB}") endif() -if(ZIG_STATIC_ZSTD) - list(REMOVE_ITEM LLVM_LIBRARIES "-lzstd") +if(ZIG_STATIC_ZSTD AND ZIG_ENABLE_ZSTD) + list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "-lzstd") find_library(ZSTD NAMES libzstd.a libzstdstatic.a zstd NAMES_PER_DIR) list(APPEND LLVM_LIBRARIES "${ZSTD}") endif() if(APPLE AND ZIG_STATIC) - list(REMOVE_ITEM LLVM_LIBRARIES "-lcurses") + list(REMOVE_ITEM LLVM_SYSTEM_LIBRARIES "-lcurses") find_library(CURSES NAMES libcurses.a libncurses.a NAMES_PER_DIR PATHS /usr/local/opt/ncurses/lib @@ -706,6 +712,7 @@ target_link_libraries(zigcpp LINK_PUBLIC ${CLANG_LIBRARIES} ${LLD_LIBRARIES} ${LLVM_LIBRARIES} + ${LLVM_SYSTEM_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) @@ -839,7 +846,7 @@ if(ZIG_SINGLE_THREADED) else() set(ZIG_SINGLE_THREADED_ARG "") endif() -if(ZIG_STATIC) +if(ZIG_STATIC AND NOT MSVC) set(ZIG_STATIC_ARG "-Duse-zig-libcxx") else() set(ZIG_STATIC_ARG "") diff --git a/build.zig b/build.zig @@ -552,6 +552,7 @@ 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) { @@ -627,10 +628,20 @@ fn addStaticLlvmOptionsToExe(exe: *std.build.LibExeObjStep) !void { } exe.linkSystemLibrary("z"); - exe.linkSystemLibrary("zstd"); - // This means we rely on clang-or-zig-built LLVM, Clang, LLD libraries. - exe.linkSystemLibrary("c++"); + if (exe.target.getOs().tag != .windows and exe.target.getAbi() != .msvc) { + // TODO: Support this on msvc + exe.linkSystemLibrary("zstd"); + + // This means we rely on clang-or-zig-built LLVM, Clang, LLD libraries. + exe.linkSystemLibrary("c++"); + } + + if (exe.target.getOs().tag == .windows) { + exe.linkSystemLibrary("version"); + exe.linkSystemLibrary("uuid"); + exe.linkSystemLibrary("ole32"); + } } fn addCxxKnownPath( @@ -707,6 +718,7 @@ 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, @@ -773,6 +785,7 @@ 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, @@ -814,6 +827,10 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig { .field = "clang_libraries", }, .{ + .prefix = "#define ZIG_CLANG_SYSTEM_LIBRARIES ", + .field = "clang_system_libraries", + }, + .{ .prefix = "#define ZIG_LLVM_LIBRARIES ", .field = "llvm_libraries", }, diff --git a/cmake/Findclang.cmake b/cmake/Findclang.cmake @@ -5,6 +5,7 @@ # CLANG_FOUND # CLANG_INCLUDE_DIRS # CLANG_LIBRARIES +# CLANG_SYSTEM_LIBRARIES # CLANG_LIBDIRS find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h @@ -68,6 +69,10 @@ else() FIND_AND_ADD_CLANG_LIB(clangSupport) endif() +if (MSVC) + set(CLANG_SYSTEM_LIBRARIES "version.lib") +endif() + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(clang DEFAULT_MSG CLANG_LIBRARIES CLANG_INCLUDE_DIRS) diff --git a/src/Compilation.zig b/src/Compilation.zig @@ -3297,8 +3297,8 @@ fn processOneJob(comp: *Compilation, job: Job) !void { // TODO Surface more error details. comp.lockAndSetMiscFailure( .windows_import_lib, - "unable to generate DLL import .lib file: {s}", - .{@errorName(err)}, + "unable to generate DLL import .lib file for {s}: {s}", + .{link_lib, @errorName(err)}, ); }; }, diff --git a/src/link/Coff/lld.zig b/src/link/Coff/lld.zig @@ -486,6 +486,12 @@ pub fn linkWithLLD(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Nod continue; } } + if (target.abi == .msvc) { // TODO: Do this at the top, if we detect we're using the native libc? + log.warn("adding system lib {s}", .{ lib_basename }); + argv.appendAssumeCapacity(lib_basename); + continue; + } + log.err("DLL import library for -l{s} not found", .{key}); return error.DllImportLibraryNotFound; } diff --git a/stage1/config.h.in b/stage1/config.h.in @@ -16,6 +16,7 @@ // 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@"