Commit cd8234c3ba

Andrew Kelley <andrew@ziglang.org>
2023-08-11 03:14:09
update for LLVM 17 new target data
New OSs: * UEFI * LiteOS New ABI: * OpenHOS Also update the LLD driver API wrappers.
1 parent dbf8fb7
Changed files (4)
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,
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) {
src/zig_llvm.cpp
@@ -35,7 +35,6 @@
 #include <llvm/IR/PassManager.h>
 #include <llvm/IR/Verifier.h>
 #include <llvm/InitializePasses.h>
-#include <llvm/MC/SubtargetFeature.h>
 #include <llvm/MC/TargetRegistry.h>
 #include <llvm/Passes/OptimizationLevel.h>
 #include <llvm/Passes/PassBuilder.h>
@@ -47,10 +46,8 @@
 #include <llvm/Object/COFFModuleDefinition.h>
 #include <llvm/PassRegistry.h>
 #include <llvm/Support/CommandLine.h>
-#include <llvm/Support/Host.h>
 #include <llvm/Support/FileSystem.h>
 #include <llvm/Support/Process.h>
-#include <llvm/Support/TargetParser.h>
 #include <llvm/Support/TimeProfiler.h>
 #include <llvm/Support/Timer.h>
 #include <llvm/Support/raw_ostream.h>
@@ -58,7 +55,6 @@
 #include <llvm/Target/CodeGenCWrappers.h>
 #include <llvm/Transforms/IPO.h>
 #include <llvm/Transforms/IPO/AlwaysInliner.h>
-#include <llvm/Transforms/IPO/PassManagerBuilder.h>
 #include <llvm/Transforms/Instrumentation/ThreadSanitizer.h>
 #include <llvm/Transforms/Scalar.h>
 #include <llvm/Transforms/Utils.h>
@@ -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<const char *> args, llvm::raw_ostream &stdoutOS,
+                llvm::raw_ostream &stderrOS, bool exitEarly, bool disableOutput);
+    }
+    namespace elf {
+        bool link(llvm::ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
+                llvm::raw_ostream &stderrOS, bool exitEarly, bool disableOutput);
+    }
+    namespace wasm {
+        bool link(llvm::ArrayRef<const char *> 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<const char *> 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, "");
src/zig_llvm.h
@@ -13,7 +13,6 @@
 #include <llvm-c/Core.h>
 #include <llvm-c/Analysis.h>
 #include <llvm-c/Target.h>
-#include <llvm-c/Initialization.h>
 #include <llvm-c/TargetMachine.h>
 
 #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 {