diff options
| author | kcbanner <kcbanner@gmail.com> | 2022-11-08 02:14:39 -0500 |
|---|---|---|
| committer | kcbanner <kcbanner@gmail.com> | 2023-01-04 21:45:05 -0500 |
| commit | 0471eea0e2cac49946449efe4698d5ac18c0dc0d (patch) | |
| tree | f1d6d3a29e16d952380c3b0ea498d9cc65cf0d07 | |
| parent | c3945d9edeb304ccd9f3d44e9ab0bf94f5420694 (diff) | |
| download | zig-0471eea0e2cac49946449efe4698d5ac18c0dc0d.tar.gz zig-0471eea0e2cac49946449efe4698d5ac18c0dc0d.zip | |
build: first pass on geting stage3 building under x64_64-windows-msvc
| -rw-r--r-- | CMakeLists.txt | 17 | ||||
| -rw-r--r-- | build.zig | 23 | ||||
| -rw-r--r-- | cmake/Findclang.cmake | 5 | ||||
| -rw-r--r-- | src/Compilation.zig | 4 | ||||
| -rw-r--r-- | src/link/Coff/lld.zig | 6 | ||||
| -rw-r--r-- | stage1/config.h.in | 1 |
6 files changed, 46 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 89620a4977..7340572bdc 100644 --- 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 "") @@ -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 index 0949552cac..ba1abbcb64 100644 --- 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 index e365d1dab2..eeecf58751 100644 --- 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 index 46b0130542..dfa56527bf 100644 --- 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 index 4ec1aa1fa6..2f4ed02fdc 100644 --- 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@" |
