From cd8234c3ba6a624fa9d21c66d7999459f51b4969 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 10 Aug 2023 18:14:09 -0700 Subject: [PATCH] update for LLVM 17 new target data New OSs: * UEFI * LiteOS New ABI: * OpenHOS Also update the LLD driver API wrappers. --- lib/std/target.zig | 3 ++- src/codegen/llvm/bindings.zig | 2 ++ src/zig_llvm.cpp | 45 ++++++++++++++++++++++++++++++----- src/zig_llvm.h | 12 ++++++---- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/lib/std/target.zig b/lib/std/target.zig index c3d12b2759..f1a3f85891 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -28,6 +28,7 @@ pub const Target = struct { netbsd, openbsd, solaris, + uefi, windows, zos, haiku, @@ -52,7 +53,7 @@ pub const Target = struct { wasi, emscripten, shadermodel, - uefi, + liteos, opencl, glsl450, vulkan, diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig index 66826caa42..5343241a62 100644 --- a/src/codegen/llvm/bindings.zig +++ b/src/codegen/llvm/bindings.zig @@ -1167,6 +1167,7 @@ pub const OSType = enum(c_int) { NetBSD, OpenBSD, Solaris, + UEFI, Win32, ZOS, Haiku, @@ -1191,6 +1192,7 @@ pub const OSType = enum(c_int) { WASI, Emscripten, ShaderModel, + LiteOS, }; pub const ArchType = enum(c_int) { diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 256d3581df..5a776aea51 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -47,10 +46,8 @@ #include #include #include -#include #include #include -#include #include #include #include @@ -58,7 +55,6 @@ #include #include #include -#include #include #include #include @@ -1103,6 +1099,24 @@ bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size return false; } +// The header file in LLD 16 exposed these functions. As of 17 they are only +// exposed via a macro ("LLD_HAS_DRIVER") which I have copied and pasted the +// body of here so that you don't have to wonder what it is doing. +namespace lld { + namespace coff { + bool link(llvm::ArrayRef args, llvm::raw_ostream &stdoutOS, + llvm::raw_ostream &stderrOS, bool exitEarly, bool disableOutput); + } + namespace elf { + bool link(llvm::ArrayRef args, llvm::raw_ostream &stdoutOS, + llvm::raw_ostream &stderrOS, bool exitEarly, bool disableOutput); + } + namespace wasm { + bool link(llvm::ArrayRef args, llvm::raw_ostream &stdoutOS, + llvm::raw_ostream &stderrOS, bool exitEarly, bool disableOutput); + } +} + bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output) { std::vector args(argv, argv + argc); return lld::coff::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output); @@ -1249,6 +1263,7 @@ static_assert((Triple::OSType)ZigLLVM_MacOSX == Triple::MacOSX, ""); static_assert((Triple::OSType)ZigLLVM_NetBSD == Triple::NetBSD, ""); static_assert((Triple::OSType)ZigLLVM_OpenBSD == Triple::OpenBSD, ""); static_assert((Triple::OSType)ZigLLVM_Solaris == Triple::Solaris, ""); +static_assert((Triple::OSType)ZigLLVM_UEFI == Triple::UEFI, ""); static_assert((Triple::OSType)ZigLLVM_Win32 == Triple::Win32, ""); static_assert((Triple::OSType)ZigLLVM_ZOS == Triple::ZOS, ""); static_assert((Triple::OSType)ZigLLVM_Haiku == Triple::Haiku, ""); @@ -1270,6 +1285,8 @@ static_assert((Triple::OSType)ZigLLVM_HermitCore == Triple::HermitCore, ""); static_assert((Triple::OSType)ZigLLVM_Hurd == Triple::Hurd, ""); static_assert((Triple::OSType)ZigLLVM_WASI == Triple::WASI, ""); static_assert((Triple::OSType)ZigLLVM_Emscripten == Triple::Emscripten, ""); +static_assert((Triple::OSType)ZigLLVM_ShaderModel == Triple::ShaderModel, ""); +static_assert((Triple::OSType)ZigLLVM_LiteOS == Triple::LiteOS, ""); static_assert((Triple::OSType)ZigLLVM_LastOSType == Triple::LastOSType, ""); static_assert((Triple::EnvironmentType)ZigLLVM_UnknownEnvironment == Triple::UnknownEnvironment, ""); @@ -1297,6 +1314,22 @@ static_assert((Triple::EnvironmentType)ZigLLVM_Cygnus == Triple::Cygnus, ""); static_assert((Triple::EnvironmentType)ZigLLVM_CoreCLR == Triple::CoreCLR, ""); static_assert((Triple::EnvironmentType)ZigLLVM_Simulator == Triple::Simulator, ""); static_assert((Triple::EnvironmentType)ZigLLVM_MacABI == Triple::MacABI, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Pixel == Triple::Pixel, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Vertex == Triple::Vertex, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Geometry == Triple::Geometry, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Hull == Triple::Hull, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Domain == Triple::Domain, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Compute == Triple::Compute, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Library == Triple::Library, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_RayGeneration == Triple::RayGeneration, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Intersection == Triple::Intersection, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_AnyHit == Triple::AnyHit, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_ClosestHit == Triple::ClosestHit, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Miss == Triple::Miss, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Callable == Triple::Callable, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Mesh == Triple::Mesh, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_Amplification == Triple::Amplification, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_OpenHOS == Triple::OpenHOS, ""); static_assert((Triple::EnvironmentType)ZigLLVM_LastEnvironmentType == Triple::LastEnvironmentType, ""); static_assert((Triple::ObjectFormatType)ZigLLVM_UnknownObjectFormat == Triple::UnknownObjectFormat, ""); @@ -1334,8 +1367,8 @@ static_assert((CallingConv::ID)ZigLLVM_Intel_OCL_BI == llvm::CallingConv::Intel_ static_assert((CallingConv::ID)ZigLLVM_X86_64_SysV == llvm::CallingConv::X86_64_SysV, ""); static_assert((CallingConv::ID)ZigLLVM_Win64 == llvm::CallingConv::Win64, ""); static_assert((CallingConv::ID)ZigLLVM_X86_VectorCall == llvm::CallingConv::X86_VectorCall, ""); -static_assert((CallingConv::ID)ZigLLVM_HHVM == llvm::CallingConv::HHVM, ""); -static_assert((CallingConv::ID)ZigLLVM_HHVM_C == llvm::CallingConv::HHVM_C, ""); +static_assert((CallingConv::ID)ZigLLVM_DUMMY_HHVM == llvm::CallingConv::DUMMY_HHVM, ""); +static_assert((CallingConv::ID)ZigLLVM_DUMMY_HHVM_C == llvm::CallingConv::DUMMY_HHVM_C, ""); static_assert((CallingConv::ID)ZigLLVM_X86_INTR == llvm::CallingConv::X86_INTR, ""); static_assert((CallingConv::ID)ZigLLVM_AVR_INTR == llvm::CallingConv::AVR_INTR, ""); static_assert((CallingConv::ID)ZigLLVM_AVR_SIGNAL == llvm::CallingConv::AVR_SIGNAL, ""); diff --git a/src/zig_llvm.h b/src/zig_llvm.h index 6671922090..f22740c294 100644 --- a/src/zig_llvm.h +++ b/src/zig_llvm.h @@ -13,7 +13,6 @@ #include #include #include -#include #include #ifdef __cplusplus @@ -102,8 +101,8 @@ enum ZigLLVM_CallingConv { ZigLLVM_X86_64_SysV = 78, ZigLLVM_Win64 = 79, ZigLLVM_X86_VectorCall = 80, - ZigLLVM_HHVM = 81, - ZigLLVM_HHVM_C = 82, + ZigLLVM_DUMMY_HHVM = 81, + ZigLLVM_DUMMY_HHVM_C = 82, ZigLLVM_X86_INTR = 83, ZigLLVM_AVR_INTR = 84, ZigLLVM_AVR_SIGNAL = 85, @@ -402,6 +401,7 @@ enum ZigLLVM_OSType { ZigLLVM_NetBSD, ZigLLVM_OpenBSD, ZigLLVM_Solaris, + ZigLLVM_UEFI, ZigLLVM_Win32, ZigLLVM_ZOS, ZigLLVM_Haiku, @@ -426,7 +426,8 @@ enum ZigLLVM_OSType { ZigLLVM_WASI, // Experimental WebAssembly OS ZigLLVM_Emscripten, ZigLLVM_ShaderModel, // DirectX ShaderModel - ZigLLVM_LastOSType = ZigLLVM_ShaderModel + ZigLLVM_LiteOS, + ZigLLVM_LastOSType = ZigLLVM_LiteOS }; // Synchronize with target.cpp::abi_list @@ -474,8 +475,9 @@ enum ZigLLVM_EnvironmentType { ZigLLVM_Callable, ZigLLVM_Mesh, ZigLLVM_Amplification, + ZigLLVM_OpenHOS, - ZigLLVM_LastEnvironmentType = ZigLLVM_Amplification + ZigLLVM_LastEnvironmentType = ZigLLVM_OpenHOS }; enum ZigLLVM_ObjectFormatType {