authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-10-30 22:46:40-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-10-30 22:46:40-07:00
logf5ade5e2071fecf6b8a0b025b6ff9581082b9b5c
tree3fefb820aeb8c671db38ec16f4fa3096a0580fd1
parentba2d006634925850fab9d0a0e01d87bdaa368108
parent16b87f708212850a9ebcda3d91d7ce675ec78fa1
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #21862 from alexrp/llvm-19-api-break

Reduce our exposure to LLVM API breakage

6 files changed, 89 insertions(+), 746 deletions(-)

src/codegen/llvm.zig+4-1
...@@ -1363,7 +1363,10 @@ pub const Object = struct {...@@ -1363,7 +1363,10 @@ pub const Object = struct {
1363 .large => .Large,1363 .large => .Large,
1364 };1364 };
13651365
1366 const float_abi: llvm.ABIType = if (comp.root_mod.resolved_target.result.floatAbi() == .hard) .Hard else .Soft;1366 const float_abi: llvm.TargetMachine.FloatABI = if (comp.root_mod.resolved_target.result.floatAbi() == .hard)
1367 .Hard
1368 else
1369 .Soft;
13671370
1368 var target_machine = llvm.TargetMachine.create(1371 var target_machine = llvm.TargetMachine.create(
1369 target,1372 target,
src/codegen/llvm/bindings.zig+20-131
...@@ -57,6 +57,15 @@ pub const disposeMessage = LLVMDisposeMessage;...@@ -57,6 +57,15 @@ pub const disposeMessage = LLVMDisposeMessage;
57extern fn LLVMDisposeMessage(Message: [*:0]const u8) void;57extern fn LLVMDisposeMessage(Message: [*:0]const u8) void;
5858
59pub const TargetMachine = opaque {59pub const TargetMachine = opaque {
60 pub const FloatABI = enum(c_int) {
61 /// Target-specific (either soft or hard depending on triple, etc).
62 Default,
63 /// Soft float.
64 Soft,
65 // Hard float.
66 Hard,
67 };
68
60 pub const create = ZigLLVMCreateTargetMachine;69 pub const create = ZigLLVMCreateTargetMachine;
61 extern fn ZigLLVMCreateTargetMachine(70 extern fn ZigLLVMCreateTargetMachine(
62 T: *Target,71 T: *Target,
...@@ -68,7 +77,7 @@ pub const TargetMachine = opaque {...@@ -68,7 +77,7 @@ pub const TargetMachine = opaque {
68 CodeModel: CodeModel,77 CodeModel: CodeModel,
69 function_sections: bool,78 function_sections: bool,
70 data_sections: bool,79 data_sections: bool,
71 float_abi: ABIType,80 float_abi: FloatABI,
72 abi_name: ?[*:0]const u8,81 abi_name: ?[*:0]const u8,
73 ) *TargetMachine;82 ) *TargetMachine;
7483
...@@ -108,7 +117,7 @@ pub const TargetMachine = opaque {...@@ -108,7 +117,7 @@ pub const TargetMachine = opaque {
108 TraceStores: bool,117 TraceStores: bool,
109 CollectControlFlow: bool,118 CollectControlFlow: bool,
110119
111 pub const Type = enum(c_uint) {120 pub const Type = enum(c_int) {
112 None = 0,121 None = 0,
113 Function,122 Function,
114 BB,123 BB,
...@@ -166,15 +175,6 @@ pub const RelocMode = enum(c_int) {...@@ -166,15 +175,6 @@ pub const RelocMode = enum(c_int) {
166 ROPI_RWPI,175 ROPI_RWPI,
167};176};
168177
169pub const ABIType = enum(c_int) {
170 /// Target-specific (either soft or hard depending on triple, etc).
171 Default,
172 /// Soft float.
173 Soft,
174 // Hard float.
175 Hard,
176};
177
178pub const Target = opaque {178pub const Target = opaque {
179 pub const getFromTriple = LLVMGetTargetFromTriple;179 pub const getFromTriple = LLVMGetTargetFromTriple;
180 extern fn LLVMGetTargetFromTriple(Triple: [*:0]const u8, T: **Target, ErrorMessage: *[*:0]const u8) Bool;180 extern fn LLVMGetTargetFromTriple(Triple: [*:0]const u8, T: **Target, ErrorMessage: *[*:0]const u8) Bool;
...@@ -303,16 +303,14 @@ pub const LinkCOFF = ZigLLDLinkCOFF;...@@ -303,16 +303,14 @@ pub const LinkCOFF = ZigLLDLinkCOFF;
303pub const LinkELF = ZigLLDLinkELF;303pub const LinkELF = ZigLLDLinkELF;
304pub const LinkWasm = ZigLLDLinkWasm;304pub const LinkWasm = ZigLLDLinkWasm;
305305
306pub const ObjectFormatType = enum(c_int) {306pub const ArchiveKind = enum(c_int) {
307 Unknown,307 GNU,
308 GNU64,
309 BSD,
310 DARWIN,
311 DARWIN64,
308 COFF,312 COFF,
309 DXContainer,313 AIXBIG,
310 ELF,
311 GOFF,
312 MachO,
313 SPIRV,
314 Wasm,
315 XCOFF,
316};314};
317315
318pub const WriteArchive = ZigLLVMWriteArchive;316pub const WriteArchive = ZigLLVMWriteArchive;
...@@ -320,125 +318,16 @@ extern fn ZigLLVMWriteArchive(...@@ -320,125 +318,16 @@ extern fn ZigLLVMWriteArchive(
320 archive_name: [*:0]const u8,318 archive_name: [*:0]const u8,
321 file_names_ptr: [*]const [*:0]const u8,319 file_names_ptr: [*]const [*:0]const u8,
322 file_names_len: usize,320 file_names_len: usize,
323 os_type: OSType,321 archive_kind: ArchiveKind,
324) bool;322) bool;
325323
326pub const OSType = enum(c_int) {
327 UnknownOS,
328 Darwin,
329 DragonFly,
330 FreeBSD,
331 Fuchsia,
332 IOS,
333 KFreeBSD,
334 Linux,
335 Lv2,
336 MacOSX,
337 NetBSD,
338 OpenBSD,
339 Solaris,
340 UEFI,
341 Win32,
342 ZOS,
343 Haiku,
344 RTEMS,
345 NaCl,
346 AIX,
347 CUDA,
348 NVCL,
349 AMDHSA,
350 PS4,
351 PS5,
352 ELFIAMCU,
353 TvOS,
354 WatchOS,
355 BridgeOS,
356 DriverKit,
357 XROS,
358 Mesa3D,
359 AMDPAL,
360 HermitCore,
361 Hurd,
362 WASI,
363 Emscripten,
364 ShaderModel,
365 LiteOS,
366 Serenity,
367 Vulkan,
368};
369
370pub const ArchType = enum(c_int) {
371 UnknownArch,
372 arm,
373 armeb,
374 aarch64,
375 aarch64_be,
376 aarch64_32,
377 arc,
378 avr,
379 bpfel,
380 bpfeb,
381 csky,
382 dxil,
383 hexagon,
384 loongarch32,
385 loongarch64,
386 m68k,
387 mips,
388 mipsel,
389 mips64,
390 mips64el,
391 msp430,
392 ppc,
393 ppcle,
394 ppc64,
395 ppc64le,
396 r600,
397 amdgcn,
398 riscv32,
399 riscv64,
400 sparc,
401 sparcv9,
402 sparcel,
403 systemz,
404 tce,
405 tcele,
406 thumb,
407 thumbeb,
408 x86,
409 x86_64,
410 xcore,
411 xtensa,
412 nvptx,
413 nvptx64,
414 le32,
415 le64,
416 amdil,
417 amdil64,
418 hsail,
419 hsail64,
420 spir,
421 spir64,
422 spirv,
423 spirv32,
424 spirv64,
425 kalimba,
426 shave,
427 lanai,
428 wasm32,
429 wasm64,
430 renderscript32,
431 renderscript64,
432 ve,
433};
434
435pub const ParseCommandLineOptions = ZigLLVMParseCommandLineOptions;324pub const ParseCommandLineOptions = ZigLLVMParseCommandLineOptions;
436extern fn ZigLLVMParseCommandLineOptions(argc: usize, argv: [*]const [*:0]const u8) void;325extern fn ZigLLVMParseCommandLineOptions(argc: usize, argv: [*]const [*:0]const u8) void;
437326
438pub const WriteImportLibrary = ZigLLVMWriteImportLibrary;327pub const WriteImportLibrary = ZigLLVMWriteImportLibrary;
439extern fn ZigLLVMWriteImportLibrary(328extern fn ZigLLVMWriteImportLibrary(
440 def_path: [*:0]const u8,329 def_path: [*:0]const u8,
441 arch: ArchType,330 coff_machine: c_uint,
442 output_lib_path: [*:0]const u8,331 output_lib_path: [*:0]const u8,
443 kill_at: bool,332 kill_at: bool,
444) bool;333) bool;
src/link.zig+10-2
...@@ -1209,8 +1209,16 @@ pub const File = struct {...@@ -1209,8 +1209,16 @@ pub const File = struct {
1209 const llvm = @import("codegen/llvm.zig");1209 const llvm = @import("codegen/llvm.zig");
1210 const target = comp.root_mod.resolved_target.result;1210 const target = comp.root_mod.resolved_target.result;
1211 llvm.initializeLLVMTarget(target.cpu.arch);1211 llvm.initializeLLVMTarget(target.cpu.arch);
1212 const os_tag = llvm.targetOs(target.os.tag);1212 const bad = llvm_bindings.WriteArchive(
1213 const bad = llvm_bindings.WriteArchive(full_out_path_z, object_files.items.ptr, object_files.items.len, os_tag);1213 full_out_path_z,
1214 object_files.items.ptr,
1215 object_files.items.len,
1216 switch (target.os.tag) {
1217 .aix => .AIXBIG,
1218 .windows => .COFF,
1219 else => if (target.os.tag.isDarwin()) .DARWIN else .GNU,
1220 },
1221 );
1214 if (bad) return error.UnableToWriteArchive;1222 if (bad) return error.UnableToWriteArchive;
12151223
1216 if (!base.disable_lld_caching) {1224 if (!base.disable_lld_caching) {
src/mingw.zig+6-3
...@@ -279,11 +279,14 @@ pub fn buildImportLib(comp: *Compilation, lib_name: []const u8) !void {...@@ -279,11 +279,14 @@ pub fn buildImportLib(comp: *Compilation, lib_name: []const u8) !void {
279279
280 if (!build_options.have_llvm) return error.ZigCompilerNotBuiltWithLLVMExtensions;280 if (!build_options.have_llvm) return error.ZigCompilerNotBuiltWithLLVMExtensions;
281 const llvm_bindings = @import("codegen/llvm/bindings.zig");281 const llvm_bindings = @import("codegen/llvm/bindings.zig");
282 const llvm = @import("codegen/llvm.zig");
283 const arch_tag = llvm.targetArch(target.cpu.arch);
284 const def_final_path_z = try arena.dupeZ(u8, def_final_path);282 const def_final_path_z = try arena.dupeZ(u8, def_final_path);
285 const lib_final_path_z = try comp.global_cache_directory.joinZ(arena, &.{lib_final_path});283 const lib_final_path_z = try comp.global_cache_directory.joinZ(arena, &.{lib_final_path});
286 if (llvm_bindings.WriteImportLibrary(def_final_path_z.ptr, arch_tag, lib_final_path_z.ptr, true)) {284 if (llvm_bindings.WriteImportLibrary(
285 def_final_path_z.ptr,
286 @intFromEnum(target.toCoffMachine()),
287 lib_final_path_z.ptr,
288 true,
289 )) {
287 // TODO surface a proper error here290 // TODO surface a proper error here
288 log.err("unable to turn {s}.def into {s}.lib", .{ lib_name, lib_name });291 log.err("unable to turn {s}.def into {s}.lib", .{ lib_name, lib_name });
289 return error.WritingImportLibFailed;292 return error.WritingImportLibFailed;
src/zig_llvm.cpp+23-291
...@@ -50,6 +50,7 @@...@@ -50,6 +50,7 @@
50#include <llvm/Support/Timer.h>50#include <llvm/Support/Timer.h>
51#include <llvm/Support/raw_ostream.h>51#include <llvm/Support/raw_ostream.h>
52#include <llvm/Target/TargetMachine.h>52#include <llvm/Target/TargetMachine.h>
53#include <llvm/Target/TargetOptions.h>
53#include <llvm/Target/CodeGenCWrappers.h>54#include <llvm/Target/CodeGenCWrappers.h>
54#include <llvm/Transforms/IPO.h>55#include <llvm/Transforms/IPO.h>
55#include <llvm/Transforms/IPO/AlwaysInliner.h>56#include <llvm/Transforms/IPO/AlwaysInliner.h>
...@@ -81,7 +82,7 @@ static const bool assertions_on = false;...@@ -81,7 +82,7 @@ static const bool assertions_on = false;
8182
82LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Triple,83LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Triple,
83 const char *CPU, const char *Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc,84 const char *CPU, const char *Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc,
84 LLVMCodeModel CodeModel, bool function_sections, bool data_sections, ZigLLVMABIType float_abi,85 LLVMCodeModel CodeModel, bool function_sections, bool data_sections, ZigLLVMFloatABI float_abi,
85 const char *abi_name)86 const char *abi_name)
86{87{
87 std::optional<Reloc::Model> RM;88 std::optional<Reloc::Model> RM;
...@@ -133,13 +134,13 @@ LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Tri...@@ -133,13 +134,13 @@ LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Tri
133 opt.FunctionSections = function_sections;134 opt.FunctionSections = function_sections;
134 opt.DataSections = data_sections;135 opt.DataSections = data_sections;
135 switch (float_abi) {136 switch (float_abi) {
136 case ZigLLVMABITypeDefault:137 case ZigLLVMFloatABI_Default:
137 opt.FloatABIType = FloatABI::Default;138 opt.FloatABIType = FloatABI::Default;
138 break;139 break;
139 case ZigLLVMABITypeSoft:140 case ZigLLVMFloatABI_Soft:
140 opt.FloatABIType = FloatABI::Soft;141 opt.FloatABIType = FloatABI::Soft;
141 break;142 break;
142 case ZigLLVMABITypeHard:143 case ZigLLVMFloatABI_Hard:
143 opt.FloatABIType = FloatABI::Hard;144 opt.FloatABIType = FloatABI::Hard;
144 break;145 break;
145 }146 }
...@@ -213,7 +214,7 @@ static SanitizerCoverageOptions getSanCovOptions(ZigLLVMCoverageOptions z) {...@@ -213,7 +214,7 @@ static SanitizerCoverageOptions getSanCovOptions(ZigLLVMCoverageOptions z) {
213}214}
214215
215ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref,216ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref,
216 char **error_message, const struct ZigLLVMEmitOptions *options)217 char **error_message, const ZigLLVMEmitOptions *options)
217{218{
218 TimePassesIsEnabled = options->time_report;219 TimePassesIsEnabled = options->time_report;
219220
...@@ -419,7 +420,7 @@ struct ZigDiagnosticHandler : public DiagnosticHandler {...@@ -419,7 +420,7 @@ struct ZigDiagnosticHandler : public DiagnosticHandler {
419 BrokenDebugInfo = true;420 BrokenDebugInfo = true;
420 }421 }
421 return false;422 return false;
422 }423 }
423};424};
424425
425void ZigLLVMEnableBrokenDebugInfoCheck(LLVMContextRef context_ref) {426void ZigLLVMEnableBrokenDebugInfoCheck(LLVMContextRef context_ref) {
...@@ -435,35 +436,10 @@ void ZigLLVMParseCommandLineOptions(size_t argc, const char *const *argv) {...@@ -435,35 +436,10 @@ void ZigLLVMParseCommandLineOptions(size_t argc, const char *const *argv) {
435 cl::ParseCommandLineOptions(argc, argv);436 cl::ParseCommandLineOptions(argc, argv);
436}437}
437438
438bool ZigLLVMWriteImportLibrary(const char *def_path, const ZigLLVM_ArchType arch,439bool ZigLLVMWriteImportLibrary(const char *def_path, unsigned int coff_machine,
439 const char *output_lib_path, bool kill_at)440 const char *output_lib_path, bool kill_at)
440{441{
441 COFF::MachineTypes machine = COFF::IMAGE_FILE_MACHINE_UNKNOWN;442 COFF::MachineTypes machine = static_cast<COFF::MachineTypes>(coff_machine);
442
443 switch (arch) {
444 case ZigLLVM_x86:
445 machine = COFF::IMAGE_FILE_MACHINE_I386;
446 break;
447 case ZigLLVM_x86_64:
448 machine = COFF::IMAGE_FILE_MACHINE_AMD64;
449 break;
450 case ZigLLVM_arm:
451 case ZigLLVM_armeb:
452 case ZigLLVM_thumb:
453 case ZigLLVM_thumbeb:
454 machine = COFF::IMAGE_FILE_MACHINE_ARMNT;
455 break;
456 case ZigLLVM_aarch64:
457 case ZigLLVM_aarch64_be:
458 machine = COFF::IMAGE_FILE_MACHINE_ARM64;
459 break;
460 default:
461 break;
462 }
463
464 if (machine == COFF::IMAGE_FILE_MACHINE_UNKNOWN) {
465 return true;
466 }
467443
468 auto bufOrErr = MemoryBuffer::getFile(def_path);444 auto bufOrErr = MemoryBuffer::getFile(def_path);
469 if (!bufOrErr) {445 if (!bufOrErr) {
...@@ -515,30 +491,8 @@ bool ZigLLVMWriteImportLibrary(const char *def_path, const ZigLLVM_ArchType arch...@@ -515,30 +491,8 @@ bool ZigLLVMWriteImportLibrary(const char *def_path, const ZigLLVM_ArchType arch
515}491}
516492
517bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count,493bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count,
518 ZigLLVM_OSType os_type)494 ZigLLVMArchiveKind archive_kind)
519{495{
520 object::Archive::Kind kind;
521 switch (os_type) {
522 case ZigLLVM_Win32:
523 // For some reason llvm-lib passes K_GNU on windows.
524 // See lib/ToolDrivers/llvm-lib/LibDriver.cpp:168 in libDriverMain
525 kind = object::Archive::K_GNU;
526 break;
527 case ZigLLVM_Linux:
528 kind = object::Archive::K_GNU;
529 break;
530 case ZigLLVM_MacOSX:
531 case ZigLLVM_Darwin:
532 case ZigLLVM_IOS:
533 kind = object::Archive::K_DARWIN;
534 break;
535 case ZigLLVM_OpenBSD:
536 case ZigLLVM_FreeBSD:
537 kind = object::Archive::K_BSD;
538 break;
539 default:
540 kind = object::Archive::K_GNU;
541 }
542 SmallVector<NewArchiveMember, 4> new_members;496 SmallVector<NewArchiveMember, 4> new_members;
543 for (size_t i = 0; i < file_name_count; i += 1) {497 for (size_t i = 0; i < file_name_count; i += 1) {
544 Expected<NewArchiveMember> new_member = NewArchiveMember::getFile(file_names[i], true);498 Expected<NewArchiveMember> new_member = NewArchiveMember::getFile(file_names[i], true);
...@@ -547,7 +501,7 @@ bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size...@@ -547,7 +501,7 @@ bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size
547 new_members.push_back(std::move(*new_member));501 new_members.push_back(std::move(*new_member));
548 }502 }
549 Error err = writeArchive(archive_name, new_members,503 Error err = writeArchive(archive_name, new_members,
550 SymtabWritingMode::NormalSymtab, kind, true, false, nullptr);504 SymtabWritingMode::NormalSymtab, static_cast<object::Archive::Kind>(archive_kind), true, false, nullptr);
551505
552 if (err) return true;506 if (err) return true;
553 return false;507 return false;
...@@ -586,236 +540,14 @@ bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disab...@@ -586,236 +540,14 @@ bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disab
586 return lld::wasm::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);540 return lld::wasm::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);
587}541}
588542
589static_assert((Triple::ArchType)ZigLLVM_UnknownArch == Triple::UnknownArch, "");543static_assert((FloatABI::ABIType)ZigLLVMFloatABI_Default == FloatABI::ABIType::Default, "");
590static_assert((Triple::ArchType)ZigLLVM_arm == Triple::arm, "");544static_assert((FloatABI::ABIType)ZigLLVMFloatABI_Soft == FloatABI::ABIType::Soft, "");
591static_assert((Triple::ArchType)ZigLLVM_armeb == Triple::armeb, "");545static_assert((FloatABI::ABIType)ZigLLVMFloatABI_Hard == FloatABI::ABIType::Hard, "");
592static_assert((Triple::ArchType)ZigLLVM_aarch64 == Triple::aarch64, "");546
593static_assert((Triple::ArchType)ZigLLVM_aarch64_be == Triple::aarch64_be, "");547static_assert((object::Archive::Kind)ZigLLVMArchiveKind_GNU == object::Archive::Kind::K_GNU, "");
594static_assert((Triple::ArchType)ZigLLVM_aarch64_32 == Triple::aarch64_32, "");548static_assert((object::Archive::Kind)ZigLLVMArchiveKind_GNU64 == object::Archive::Kind::K_GNU64, "");
595static_assert((Triple::ArchType)ZigLLVM_arc == Triple::arc, "");549static_assert((object::Archive::Kind)ZigLLVMArchiveKind_BSD == object::Archive::Kind::K_BSD, "");
596static_assert((Triple::ArchType)ZigLLVM_avr == Triple::avr, "");550static_assert((object::Archive::Kind)ZigLLVMArchiveKind_DARWIN == object::Archive::Kind::K_DARWIN, "");
597static_assert((Triple::ArchType)ZigLLVM_bpfel == Triple::bpfel, "");551static_assert((object::Archive::Kind)ZigLLVMArchiveKind_DARWIN64 == object::Archive::Kind::K_DARWIN64, "");
598static_assert((Triple::ArchType)ZigLLVM_bpfeb == Triple::bpfeb, "");552static_assert((object::Archive::Kind)ZigLLVMArchiveKind_COFF == object::Archive::Kind::K_COFF, "");
599static_assert((Triple::ArchType)ZigLLVM_csky == Triple::csky, "");553static_assert((object::Archive::Kind)ZigLLVMArchiveKind_AIXBIG == object::Archive::Kind::K_AIXBIG, "");
600static_assert((Triple::ArchType)ZigLLVM_hexagon == Triple::hexagon, "");
601static_assert((Triple::ArchType)ZigLLVM_m68k == Triple::m68k, "");
602static_assert((Triple::ArchType)ZigLLVM_mips == Triple::mips, "");
603static_assert((Triple::ArchType)ZigLLVM_mipsel == Triple::mipsel, "");
604static_assert((Triple::ArchType)ZigLLVM_mips64 == Triple::mips64, "");
605static_assert((Triple::ArchType)ZigLLVM_mips64el == Triple::mips64el, "");
606static_assert((Triple::ArchType)ZigLLVM_msp430 == Triple::msp430, "");
607static_assert((Triple::ArchType)ZigLLVM_ppc == Triple::ppc, "");
608static_assert((Triple::ArchType)ZigLLVM_ppcle == Triple::ppcle, "");
609static_assert((Triple::ArchType)ZigLLVM_ppc64 == Triple::ppc64, "");
610static_assert((Triple::ArchType)ZigLLVM_ppc64le == Triple::ppc64le, "");
611static_assert((Triple::ArchType)ZigLLVM_r600 == Triple::r600, "");
612static_assert((Triple::ArchType)ZigLLVM_amdgcn == Triple::amdgcn, "");
613static_assert((Triple::ArchType)ZigLLVM_riscv32 == Triple::riscv32, "");
614static_assert((Triple::ArchType)ZigLLVM_riscv64 == Triple::riscv64, "");
615static_assert((Triple::ArchType)ZigLLVM_sparc == Triple::sparc, "");
616static_assert((Triple::ArchType)ZigLLVM_sparcv9 == Triple::sparcv9, "");
617static_assert((Triple::ArchType)ZigLLVM_sparcel == Triple::sparcel, "");
618static_assert((Triple::ArchType)ZigLLVM_systemz == Triple::systemz, "");
619static_assert((Triple::ArchType)ZigLLVM_tce == Triple::tce, "");
620static_assert((Triple::ArchType)ZigLLVM_tcele == Triple::tcele, "");
621static_assert((Triple::ArchType)ZigLLVM_thumb == Triple::thumb, "");
622static_assert((Triple::ArchType)ZigLLVM_thumbeb == Triple::thumbeb, "");
623static_assert((Triple::ArchType)ZigLLVM_x86 == Triple::x86, "");
624static_assert((Triple::ArchType)ZigLLVM_x86_64 == Triple::x86_64, "");
625static_assert((Triple::ArchType)ZigLLVM_xcore == Triple::xcore, "");
626static_assert((Triple::ArchType)ZigLLVM_xtensa == Triple::xtensa, "");
627static_assert((Triple::ArchType)ZigLLVM_nvptx == Triple::nvptx, "");
628static_assert((Triple::ArchType)ZigLLVM_nvptx64 == Triple::nvptx64, "");
629static_assert((Triple::ArchType)ZigLLVM_le32 == Triple::le32, "");
630static_assert((Triple::ArchType)ZigLLVM_le64 == Triple::le64, "");
631static_assert((Triple::ArchType)ZigLLVM_amdil == Triple::amdil, "");
632static_assert((Triple::ArchType)ZigLLVM_amdil64 == Triple::amdil64, "");
633static_assert((Triple::ArchType)ZigLLVM_hsail == Triple::hsail, "");
634static_assert((Triple::ArchType)ZigLLVM_hsail64 == Triple::hsail64, "");
635static_assert((Triple::ArchType)ZigLLVM_spir == Triple::spir, "");
636static_assert((Triple::ArchType)ZigLLVM_spir64 == Triple::spir64, "");
637static_assert((Triple::ArchType)ZigLLVM_spirv == Triple::spirv, "");
638static_assert((Triple::ArchType)ZigLLVM_spirv32 == Triple::spirv32, "");
639static_assert((Triple::ArchType)ZigLLVM_spirv64 == Triple::spirv64, "");
640static_assert((Triple::ArchType)ZigLLVM_kalimba == Triple::kalimba, "");
641static_assert((Triple::ArchType)ZigLLVM_shave == Triple::shave, "");
642static_assert((Triple::ArchType)ZigLLVM_lanai == Triple::lanai, "");
643static_assert((Triple::ArchType)ZigLLVM_wasm32 == Triple::wasm32, "");
644static_assert((Triple::ArchType)ZigLLVM_wasm64 == Triple::wasm64, "");
645static_assert((Triple::ArchType)ZigLLVM_renderscript32 == Triple::renderscript32, "");
646static_assert((Triple::ArchType)ZigLLVM_renderscript64 == Triple::renderscript64, "");
647static_assert((Triple::ArchType)ZigLLVM_ve == Triple::ve, "");
648static_assert((Triple::ArchType)ZigLLVM_LastArchType == Triple::LastArchType, "");
649
650static_assert((Triple::VendorType)ZigLLVM_UnknownVendor == Triple::UnknownVendor, "");
651static_assert((Triple::VendorType)ZigLLVM_Apple == Triple::Apple, "");
652static_assert((Triple::VendorType)ZigLLVM_PC == Triple::PC, "");
653static_assert((Triple::VendorType)ZigLLVM_SCEI == Triple::SCEI, "");
654static_assert((Triple::VendorType)ZigLLVM_Freescale == Triple::Freescale, "");
655static_assert((Triple::VendorType)ZigLLVM_IBM == Triple::IBM, "");
656static_assert((Triple::VendorType)ZigLLVM_ImaginationTechnologies == Triple::ImaginationTechnologies, "");
657static_assert((Triple::VendorType)ZigLLVM_MipsTechnologies == Triple::MipsTechnologies, "");
658static_assert((Triple::VendorType)ZigLLVM_NVIDIA == Triple::NVIDIA, "");
659static_assert((Triple::VendorType)ZigLLVM_CSR == Triple::CSR, "");
660static_assert((Triple::VendorType)ZigLLVM_AMD == Triple::AMD, "");
661static_assert((Triple::VendorType)ZigLLVM_Mesa == Triple::Mesa, "");
662static_assert((Triple::VendorType)ZigLLVM_SUSE == Triple::SUSE, "");
663static_assert((Triple::VendorType)ZigLLVM_OpenEmbedded == Triple::OpenEmbedded, "");
664static_assert((Triple::VendorType)ZigLLVM_LastVendorType == Triple::LastVendorType, "");
665
666static_assert((Triple::OSType)ZigLLVM_UnknownOS == Triple::UnknownOS, "");
667static_assert((Triple::OSType)ZigLLVM_Darwin == Triple::Darwin, "");
668static_assert((Triple::OSType)ZigLLVM_DragonFly == Triple::DragonFly, "");
669static_assert((Triple::OSType)ZigLLVM_FreeBSD == Triple::FreeBSD, "");
670static_assert((Triple::OSType)ZigLLVM_Fuchsia == Triple::Fuchsia, "");
671static_assert((Triple::OSType)ZigLLVM_IOS == Triple::IOS, "");
672// Commented out to work around a Debian/Ubuntu bug.
673// See https://github.com/ziglang/zig/issues/2076
674//static_assert((Triple::OSType)ZigLLVM_KFreeBSD == Triple::KFreeBSD, "");
675static_assert((Triple::OSType)ZigLLVM_Linux == Triple::Linux, "");
676static_assert((Triple::OSType)ZigLLVM_Lv2 == Triple::Lv2, "");
677static_assert((Triple::OSType)ZigLLVM_MacOSX == Triple::MacOSX, "");
678static_assert((Triple::OSType)ZigLLVM_NetBSD == Triple::NetBSD, "");
679static_assert((Triple::OSType)ZigLLVM_OpenBSD == Triple::OpenBSD, "");
680static_assert((Triple::OSType)ZigLLVM_Solaris == Triple::Solaris, "");
681static_assert((Triple::OSType)ZigLLVM_UEFI == Triple::UEFI, "");
682static_assert((Triple::OSType)ZigLLVM_Win32 == Triple::Win32, "");
683static_assert((Triple::OSType)ZigLLVM_ZOS == Triple::ZOS, "");
684static_assert((Triple::OSType)ZigLLVM_Haiku == Triple::Haiku, "");
685static_assert((Triple::OSType)ZigLLVM_RTEMS == Triple::RTEMS, "");
686static_assert((Triple::OSType)ZigLLVM_NaCl == Triple::NaCl, "");
687static_assert((Triple::OSType)ZigLLVM_AIX == Triple::AIX, "");
688static_assert((Triple::OSType)ZigLLVM_CUDA == Triple::CUDA, "");
689static_assert((Triple::OSType)ZigLLVM_NVCL == Triple::NVCL, "");
690static_assert((Triple::OSType)ZigLLVM_AMDHSA == Triple::AMDHSA, "");
691static_assert((Triple::OSType)ZigLLVM_PS4 == Triple::PS4, "");
692static_assert((Triple::OSType)ZigLLVM_ELFIAMCU == Triple::ELFIAMCU, "");
693static_assert((Triple::OSType)ZigLLVM_TvOS == Triple::TvOS, "");
694static_assert((Triple::OSType)ZigLLVM_WatchOS == Triple::WatchOS, "");
695static_assert((Triple::OSType)ZigLLVM_BridgeOS == Triple::BridgeOS, "");
696static_assert((Triple::OSType)ZigLLVM_DriverKit == Triple::DriverKit, "");
697static_assert((Triple::OSType)ZigLLVM_XROS == Triple::XROS, "");
698static_assert((Triple::OSType)ZigLLVM_Mesa3D == Triple::Mesa3D, "");
699static_assert((Triple::OSType)ZigLLVM_AMDPAL == Triple::AMDPAL, "");
700static_assert((Triple::OSType)ZigLLVM_HermitCore == Triple::HermitCore, "");
701static_assert((Triple::OSType)ZigLLVM_Hurd == Triple::Hurd, "");
702static_assert((Triple::OSType)ZigLLVM_WASI == Triple::WASI, "");
703static_assert((Triple::OSType)ZigLLVM_Emscripten == Triple::Emscripten, "");
704static_assert((Triple::OSType)ZigLLVM_ShaderModel == Triple::ShaderModel, "");
705static_assert((Triple::OSType)ZigLLVM_LiteOS == Triple::LiteOS, "");
706static_assert((Triple::OSType)ZigLLVM_Serenity == Triple::Serenity, "");
707static_assert((Triple::OSType)ZigLLVM_Vulkan == Triple::Vulkan, "");
708static_assert((Triple::OSType)ZigLLVM_LastOSType == Triple::LastOSType, "");
709
710static_assert((Triple::EnvironmentType)ZigLLVM_UnknownEnvironment == Triple::UnknownEnvironment, "");
711static_assert((Triple::EnvironmentType)ZigLLVM_GNU == Triple::GNU, "");
712static_assert((Triple::EnvironmentType)ZigLLVM_GNUABIN32 == Triple::GNUABIN32, "");
713static_assert((Triple::EnvironmentType)ZigLLVM_GNUABI64 == Triple::GNUABI64, "");
714static_assert((Triple::EnvironmentType)ZigLLVM_GNUEABI == Triple::GNUEABI, "");
715static_assert((Triple::EnvironmentType)ZigLLVM_GNUEABIHF == Triple::GNUEABIHF, "");
716static_assert((Triple::EnvironmentType)ZigLLVM_GNUF32 == Triple::GNUF32, "");
717static_assert((Triple::EnvironmentType)ZigLLVM_GNUF64 == Triple::GNUF64, "");
718static_assert((Triple::EnvironmentType)ZigLLVM_GNUSF == Triple::GNUSF, "");
719static_assert((Triple::EnvironmentType)ZigLLVM_GNUX32 == Triple::GNUX32, "");
720static_assert((Triple::EnvironmentType)ZigLLVM_GNUILP32 == Triple::GNUILP32, "");
721static_assert((Triple::EnvironmentType)ZigLLVM_CODE16 == Triple::CODE16, "");
722static_assert((Triple::EnvironmentType)ZigLLVM_EABI == Triple::EABI, "");
723static_assert((Triple::EnvironmentType)ZigLLVM_EABIHF == Triple::EABIHF, "");
724static_assert((Triple::EnvironmentType)ZigLLVM_Android == Triple::Android, "");
725static_assert((Triple::EnvironmentType)ZigLLVM_Musl == Triple::Musl, "");
726static_assert((Triple::EnvironmentType)ZigLLVM_MuslEABI == Triple::MuslEABI, "");
727static_assert((Triple::EnvironmentType)ZigLLVM_MuslEABIHF == Triple::MuslEABIHF, "");
728static_assert((Triple::EnvironmentType)ZigLLVM_MuslX32 == Triple::MuslX32, "");
729static_assert((Triple::EnvironmentType)ZigLLVM_MSVC == Triple::MSVC, "");
730static_assert((Triple::EnvironmentType)ZigLLVM_Itanium == Triple::Itanium, "");
731static_assert((Triple::EnvironmentType)ZigLLVM_Cygnus == Triple::Cygnus, "");
732static_assert((Triple::EnvironmentType)ZigLLVM_CoreCLR == Triple::CoreCLR, "");
733static_assert((Triple::EnvironmentType)ZigLLVM_Simulator == Triple::Simulator, "");
734static_assert((Triple::EnvironmentType)ZigLLVM_MacABI == Triple::MacABI, "");
735static_assert((Triple::EnvironmentType)ZigLLVM_Pixel == Triple::Pixel, "");
736static_assert((Triple::EnvironmentType)ZigLLVM_Vertex == Triple::Vertex, "");
737static_assert((Triple::EnvironmentType)ZigLLVM_Geometry == Triple::Geometry, "");
738static_assert((Triple::EnvironmentType)ZigLLVM_Hull == Triple::Hull, "");
739static_assert((Triple::EnvironmentType)ZigLLVM_Domain == Triple::Domain, "");
740static_assert((Triple::EnvironmentType)ZigLLVM_Compute == Triple::Compute, "");
741static_assert((Triple::EnvironmentType)ZigLLVM_Library == Triple::Library, "");
742static_assert((Triple::EnvironmentType)ZigLLVM_RayGeneration == Triple::RayGeneration, "");
743static_assert((Triple::EnvironmentType)ZigLLVM_Intersection == Triple::Intersection, "");
744static_assert((Triple::EnvironmentType)ZigLLVM_AnyHit == Triple::AnyHit, "");
745static_assert((Triple::EnvironmentType)ZigLLVM_ClosestHit == Triple::ClosestHit, "");
746static_assert((Triple::EnvironmentType)ZigLLVM_Miss == Triple::Miss, "");
747static_assert((Triple::EnvironmentType)ZigLLVM_Callable == Triple::Callable, "");
748static_assert((Triple::EnvironmentType)ZigLLVM_Mesh == Triple::Mesh, "");
749static_assert((Triple::EnvironmentType)ZigLLVM_Amplification == Triple::Amplification, "");
750static_assert((Triple::EnvironmentType)ZigLLVM_OpenCL == Triple::OpenCL, "");
751static_assert((Triple::EnvironmentType)ZigLLVM_OpenHOS == Triple::OpenHOS, "");
752static_assert((Triple::EnvironmentType)ZigLLVM_PAuthTest == Triple::PAuthTest, "");
753static_assert((Triple::EnvironmentType)ZigLLVM_LastEnvironmentType == Triple::LastEnvironmentType, "");
754
755static_assert((Triple::ObjectFormatType)ZigLLVM_UnknownObjectFormat == Triple::UnknownObjectFormat, "");
756static_assert((Triple::ObjectFormatType)ZigLLVM_COFF == Triple::COFF, "");
757static_assert((Triple::ObjectFormatType)ZigLLVM_ELF == Triple::ELF, "");
758static_assert((Triple::ObjectFormatType)ZigLLVM_GOFF == Triple::GOFF, "");
759static_assert((Triple::ObjectFormatType)ZigLLVM_MachO == Triple::MachO, "");
760static_assert((Triple::ObjectFormatType)ZigLLVM_Wasm == Triple::Wasm, "");
761static_assert((Triple::ObjectFormatType)ZigLLVM_XCOFF == Triple::XCOFF, "");
762
763static_assert((CallingConv::ID)ZigLLVM_C == llvm::CallingConv::C, "");
764static_assert((CallingConv::ID)ZigLLVM_Fast == llvm::CallingConv::Fast, "");
765static_assert((CallingConv::ID)ZigLLVM_Cold == llvm::CallingConv::Cold, "");
766static_assert((CallingConv::ID)ZigLLVM_GHC == llvm::CallingConv::GHC, "");
767static_assert((CallingConv::ID)ZigLLVM_HiPE == llvm::CallingConv::HiPE, "");
768static_assert((CallingConv::ID)ZigLLVM_AnyReg == llvm::CallingConv::AnyReg, "");
769static_assert((CallingConv::ID)ZigLLVM_PreserveMost == llvm::CallingConv::PreserveMost, "");
770static_assert((CallingConv::ID)ZigLLVM_PreserveAll == llvm::CallingConv::PreserveAll, "");
771static_assert((CallingConv::ID)ZigLLVM_Swift == llvm::CallingConv::Swift, "");
772static_assert((CallingConv::ID)ZigLLVM_CXX_FAST_TLS == llvm::CallingConv::CXX_FAST_TLS, "");
773static_assert((CallingConv::ID)ZigLLVM_Tail == llvm::CallingConv::Tail, "");
774static_assert((CallingConv::ID)ZigLLVM_CFGuard_Check == llvm::CallingConv::CFGuard_Check, "");
775static_assert((CallingConv::ID)ZigLLVM_SwiftTail == llvm::CallingConv::SwiftTail, "");
776static_assert((CallingConv::ID)ZigLLVM_FirstTargetCC == llvm::CallingConv::FirstTargetCC, "");
777static_assert((CallingConv::ID)ZigLLVM_X86_StdCall == llvm::CallingConv::X86_StdCall, "");
778static_assert((CallingConv::ID)ZigLLVM_X86_FastCall == llvm::CallingConv::X86_FastCall, "");
779static_assert((CallingConv::ID)ZigLLVM_ARM_APCS == llvm::CallingConv::ARM_APCS, "");
780static_assert((CallingConv::ID)ZigLLVM_ARM_AAPCS == llvm::CallingConv::ARM_AAPCS, "");
781static_assert((CallingConv::ID)ZigLLVM_ARM_AAPCS_VFP == llvm::CallingConv::ARM_AAPCS_VFP, "");
782static_assert((CallingConv::ID)ZigLLVM_MSP430_INTR == llvm::CallingConv::MSP430_INTR, "");
783static_assert((CallingConv::ID)ZigLLVM_X86_ThisCall == llvm::CallingConv::X86_ThisCall, "");
784static_assert((CallingConv::ID)ZigLLVM_PTX_Kernel == llvm::CallingConv::PTX_Kernel, "");
785static_assert((CallingConv::ID)ZigLLVM_PTX_Device == llvm::CallingConv::PTX_Device, "");
786static_assert((CallingConv::ID)ZigLLVM_SPIR_FUNC == llvm::CallingConv::SPIR_FUNC, "");
787static_assert((CallingConv::ID)ZigLLVM_SPIR_KERNEL == llvm::CallingConv::SPIR_KERNEL, "");
788static_assert((CallingConv::ID)ZigLLVM_Intel_OCL_BI == llvm::CallingConv::Intel_OCL_BI, "");
789static_assert((CallingConv::ID)ZigLLVM_X86_64_SysV == llvm::CallingConv::X86_64_SysV, "");
790static_assert((CallingConv::ID)ZigLLVM_Win64 == llvm::CallingConv::Win64, "");
791static_assert((CallingConv::ID)ZigLLVM_X86_VectorCall == llvm::CallingConv::X86_VectorCall, "");
792static_assert((CallingConv::ID)ZigLLVM_DUMMY_HHVM == llvm::CallingConv::DUMMY_HHVM, "");
793static_assert((CallingConv::ID)ZigLLVM_DUMMY_HHVM_C == llvm::CallingConv::DUMMY_HHVM_C, "");
794static_assert((CallingConv::ID)ZigLLVM_X86_INTR == llvm::CallingConv::X86_INTR, "");
795static_assert((CallingConv::ID)ZigLLVM_AVR_INTR == llvm::CallingConv::AVR_INTR, "");
796static_assert((CallingConv::ID)ZigLLVM_AVR_SIGNAL == llvm::CallingConv::AVR_SIGNAL, "");
797static_assert((CallingConv::ID)ZigLLVM_AVR_BUILTIN == llvm::CallingConv::AVR_BUILTIN, "");
798static_assert((CallingConv::ID)ZigLLVM_AMDGPU_VS == llvm::CallingConv::AMDGPU_VS, "");
799static_assert((CallingConv::ID)ZigLLVM_AMDGPU_GS == llvm::CallingConv::AMDGPU_GS, "");
800static_assert((CallingConv::ID)ZigLLVM_AMDGPU_PS == llvm::CallingConv::AMDGPU_PS, "");
801static_assert((CallingConv::ID)ZigLLVM_AMDGPU_CS == llvm::CallingConv::AMDGPU_CS, "");
802static_assert((CallingConv::ID)ZigLLVM_AMDGPU_KERNEL == llvm::CallingConv::AMDGPU_KERNEL, "");
803static_assert((CallingConv::ID)ZigLLVM_X86_RegCall == llvm::CallingConv::X86_RegCall, "");
804static_assert((CallingConv::ID)ZigLLVM_AMDGPU_HS == llvm::CallingConv::AMDGPU_HS, "");
805static_assert((CallingConv::ID)ZigLLVM_MSP430_BUILTIN == llvm::CallingConv::MSP430_BUILTIN, "");
806static_assert((CallingConv::ID)ZigLLVM_AMDGPU_LS == llvm::CallingConv::AMDGPU_LS, "");
807static_assert((CallingConv::ID)ZigLLVM_AMDGPU_ES == llvm::CallingConv::AMDGPU_ES, "");
808static_assert((CallingConv::ID)ZigLLVM_AArch64_VectorCall == llvm::CallingConv::AArch64_VectorCall, "");
809static_assert((CallingConv::ID)ZigLLVM_AArch64_SVE_VectorCall == llvm::CallingConv::AArch64_SVE_VectorCall, "");
810static_assert((CallingConv::ID)ZigLLVM_WASM_EmscriptenInvoke == llvm::CallingConv::WASM_EmscriptenInvoke, "");
811static_assert((CallingConv::ID)ZigLLVM_AMDGPU_Gfx == llvm::CallingConv::AMDGPU_Gfx, "");
812static_assert((CallingConv::ID)ZigLLVM_M68k_INTR == llvm::CallingConv::M68k_INTR, "");
813static_assert((CallingConv::ID)ZigLLVM_AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0 == llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0, "");
814static_assert((CallingConv::ID)ZigLLVM_AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2 == llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2, "");
815static_assert((CallingConv::ID)ZigLLVM_AMDGPU_CS_Chain == llvm::CallingConv::AMDGPU_CS_Chain, "");
816static_assert((CallingConv::ID)ZigLLVM_AMDGPU_CS_ChainPreserve == llvm::CallingConv::AMDGPU_CS_ChainPreserve, "");
817static_assert((CallingConv::ID)ZigLLVM_M68k_RTD == llvm::CallingConv::M68k_RTD, "");
818static_assert((CallingConv::ID)ZigLLVM_GRAAL == llvm::CallingConv::GRAAL, "");
819static_assert((CallingConv::ID)ZigLLVM_ARM64EC_Thunk_X64 == llvm::CallingConv::ARM64EC_Thunk_X64, "");
820static_assert((CallingConv::ID)ZigLLVM_ARM64EC_Thunk_Native == llvm::CallingConv::ARM64EC_Thunk_Native, "");
821static_assert((CallingConv::ID)ZigLLVM_MaxID == llvm::CallingConv::MaxID, "");
src/zig_llvm.h+26-318
...@@ -24,7 +24,8 @@...@@ -24,7 +24,8 @@
24// ATTENTION: If you modify this file, be sure to update the corresponding24// ATTENTION: If you modify this file, be sure to update the corresponding
25// extern function declarations in the self-hosted compiler.25// extern function declarations in the self-hosted compiler.
2626
2727// synchronize with llvm/include/Transforms/Instrumentation.h::SanitizerCoverageOptions::Type
28// synchronize with codegen/llvm/bindings.zig::TargetMachine::EmitOptions::Coverage::Type
28enum ZigLLVMCoverageType {29enum ZigLLVMCoverageType {
29 ZigLLVMCoverageType_None = 0,30 ZigLLVMCoverageType_None = 0,
30 ZigLLVMCoverageType_Function,31 ZigLLVMCoverageType_Function,
...@@ -67,18 +68,32 @@ struct ZigLLVMEmitOptions {...@@ -67,18 +68,32 @@ struct ZigLLVMEmitOptions {
67 ZigLLVMCoverageOptions coverage;68 ZigLLVMCoverageOptions coverage;
68};69};
6970
70ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref,71// synchronize with llvm/include/Object/Archive.h::Object::Archive::Kind
71 char **error_message, const struct ZigLLVMEmitOptions *options);72// synchronize with codegen/llvm/bindings.zig::ArchiveKind
73enum ZigLLVMArchiveKind {
74 ZigLLVMArchiveKind_GNU,
75 ZigLLVMArchiveKind_GNU64,
76 ZigLLVMArchiveKind_BSD,
77 ZigLLVMArchiveKind_DARWIN,
78 ZigLLVMArchiveKind_DARWIN64,
79 ZigLLVMArchiveKind_COFF,
80 ZigLLVMArchiveKind_AIXBIG,
81};
7282
73enum ZigLLVMABIType {83// synchronize with llvm/include/Target/TargetOptions.h::FloatABI::ABIType
74 ZigLLVMABITypeDefault, // Target-specific (either soft or hard depending on triple, etc).84// synchronize with codegen/llvm/bindings.zig::TargetMachine::FloatABI
75 ZigLLVMABITypeSoft, // Soft float.85enum ZigLLVMFloatABI {
76 ZigLLVMABITypeHard // Hard float.86 ZigLLVMFloatABI_Default, // Target-specific (either soft or hard depending on triple, etc).
87 ZigLLVMFloatABI_Soft, // Soft float.
88 ZigLLVMFloatABI_Hard // Hard float.
77};89};
7890
91ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref,
92 char **error_message, const ZigLLVMEmitOptions *options);
93
79ZIG_EXTERN_C LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Triple,94ZIG_EXTERN_C LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Triple,
80 const char *CPU, const char *Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc,95 const char *CPU, const char *Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc,
81 LLVMCodeModel CodeModel, bool function_sections, bool data_sections, enum ZigLLVMABIType float_abi,96 LLVMCodeModel CodeModel, bool function_sections, bool data_sections, ZigLLVMFloatABI float_abi,
82 const char *abi_name);97 const char *abi_name);
8398
84ZIG_EXTERN_C void ZigLLVMSetOptBisectLimit(LLVMContextRef context_ref, int limit);99ZIG_EXTERN_C void ZigLLVMSetOptBisectLimit(LLVMContextRef context_ref, int limit);
...@@ -86,323 +101,16 @@ ZIG_EXTERN_C void ZigLLVMSetOptBisectLimit(LLVMContextRef context_ref, int limit...@@ -86,323 +101,16 @@ ZIG_EXTERN_C void ZigLLVMSetOptBisectLimit(LLVMContextRef context_ref, int limit
86ZIG_EXTERN_C void ZigLLVMEnableBrokenDebugInfoCheck(LLVMContextRef context_ref);101ZIG_EXTERN_C void ZigLLVMEnableBrokenDebugInfoCheck(LLVMContextRef context_ref);
87ZIG_EXTERN_C bool ZigLLVMGetBrokenDebugInfo(LLVMContextRef context_ref);102ZIG_EXTERN_C bool ZigLLVMGetBrokenDebugInfo(LLVMContextRef context_ref);
88103
89enum ZigLLVMTailCallKind {
90 ZigLLVMTailCallKindNone,
91 ZigLLVMTailCallKindTail,
92 ZigLLVMTailCallKindMustTail,
93 ZigLLVMTailCallKindNoTail,
94};
95
96enum ZigLLVM_CallingConv {
97 ZigLLVM_C = 0,
98 ZigLLVM_Fast = 8,
99 ZigLLVM_Cold = 9,
100 ZigLLVM_GHC = 10,
101 ZigLLVM_HiPE = 11,
102 ZigLLVM_AnyReg = 13,
103 ZigLLVM_PreserveMost = 14,
104 ZigLLVM_PreserveAll = 15,
105 ZigLLVM_Swift = 16,
106 ZigLLVM_CXX_FAST_TLS = 17,
107 ZigLLVM_Tail = 18,
108 ZigLLVM_CFGuard_Check = 19,
109 ZigLLVM_SwiftTail = 20,
110 ZigLLVM_FirstTargetCC = 64,
111 ZigLLVM_X86_StdCall = 64,
112 ZigLLVM_X86_FastCall = 65,
113 ZigLLVM_ARM_APCS = 66,
114 ZigLLVM_ARM_AAPCS = 67,
115 ZigLLVM_ARM_AAPCS_VFP = 68,
116 ZigLLVM_MSP430_INTR = 69,
117 ZigLLVM_X86_ThisCall = 70,
118 ZigLLVM_PTX_Kernel = 71,
119 ZigLLVM_PTX_Device = 72,
120 ZigLLVM_SPIR_FUNC = 75,
121 ZigLLVM_SPIR_KERNEL = 76,
122 ZigLLVM_Intel_OCL_BI = 77,
123 ZigLLVM_X86_64_SysV = 78,
124 ZigLLVM_Win64 = 79,
125 ZigLLVM_X86_VectorCall = 80,
126 ZigLLVM_DUMMY_HHVM = 81,
127 ZigLLVM_DUMMY_HHVM_C = 82,
128 ZigLLVM_X86_INTR = 83,
129 ZigLLVM_AVR_INTR = 84,
130 ZigLLVM_AVR_SIGNAL = 85,
131 ZigLLVM_AVR_BUILTIN = 86,
132 ZigLLVM_AMDGPU_VS = 87,
133 ZigLLVM_AMDGPU_GS = 88,
134 ZigLLVM_AMDGPU_PS = 89,
135 ZigLLVM_AMDGPU_CS = 90,
136 ZigLLVM_AMDGPU_KERNEL = 91,
137 ZigLLVM_X86_RegCall = 92,
138 ZigLLVM_AMDGPU_HS = 93,
139 ZigLLVM_MSP430_BUILTIN = 94,
140 ZigLLVM_AMDGPU_LS = 95,
141 ZigLLVM_AMDGPU_ES = 96,
142 ZigLLVM_AArch64_VectorCall = 97,
143 ZigLLVM_AArch64_SVE_VectorCall = 98,
144 ZigLLVM_WASM_EmscriptenInvoke = 99,
145 ZigLLVM_AMDGPU_Gfx = 100,
146 ZigLLVM_M68k_INTR = 101,
147 ZigLLVM_AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0 = 102,
148 ZigLLVM_AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2 = 103,
149 ZigLLVM_AMDGPU_CS_Chain = 104,
150 ZigLLVM_AMDGPU_CS_ChainPreserve = 105,
151 ZigLLVM_M68k_RTD = 106,
152 ZigLLVM_GRAAL = 107,
153 ZigLLVM_ARM64EC_Thunk_X64 = 108,
154 ZigLLVM_ARM64EC_Thunk_Native = 109,
155 ZigLLVM_MaxID = 1023,
156};
157
158ZIG_EXTERN_C void ZigLLVMParseCommandLineOptions(size_t argc, const char *const *argv);104ZIG_EXTERN_C void ZigLLVMParseCommandLineOptions(size_t argc, const char *const *argv);
159105
160// synchronize with llvm/include/ADT/Triple.h::ArchType
161// synchronize with std.Target.Cpu.Arch
162// synchronize with codegen/llvm/bindings.zig::ArchType
163enum ZigLLVM_ArchType {
164 ZigLLVM_UnknownArch,
165
166 ZigLLVM_arm, // ARM (little endian): arm, armv.*, xscale
167 ZigLLVM_armeb, // ARM (big endian): armeb
168 ZigLLVM_aarch64, // AArch64 (little endian): aarch64
169 ZigLLVM_aarch64_be, // AArch64 (big endian): aarch64_be
170 ZigLLVM_aarch64_32, // AArch64 (little endian) ILP32: aarch64_32
171 ZigLLVM_arc, // ARC: Synopsys ARC
172 ZigLLVM_avr, // AVR: Atmel AVR microcontroller
173 ZigLLVM_bpfel, // eBPF or extended BPF or 64-bit BPF (little endian)
174 ZigLLVM_bpfeb, // eBPF or extended BPF or 64-bit BPF (big endian)
175 ZigLLVM_csky, // CSKY: csky
176 ZigLLVM_dxil, // DXIL 32-bit DirectX bytecode
177 ZigLLVM_hexagon, // Hexagon: hexagon
178 ZigLLVM_loongarch32, // LoongArch (32-bit): loongarch32
179 ZigLLVM_loongarch64, // LoongArch (64-bit): loongarch64
180 ZigLLVM_m68k, // M68k: Motorola 680x0 family
181 ZigLLVM_mips, // MIPS: mips, mipsallegrex, mipsr6
182 ZigLLVM_mipsel, // MIPSEL: mipsel, mipsallegrexe, mipsr6el
183 ZigLLVM_mips64, // MIPS64: mips64, mips64r6, mipsn32, mipsn32r6
184 ZigLLVM_mips64el, // MIPS64EL: mips64el, mips64r6el, mipsn32el, mipsn32r6el
185 ZigLLVM_msp430, // MSP430: msp430
186 ZigLLVM_ppc, // PPC: powerpc
187 ZigLLVM_ppcle, // PPCLE: powerpc (little endian)
188 ZigLLVM_ppc64, // PPC64: powerpc64, ppu
189 ZigLLVM_ppc64le, // PPC64LE: powerpc64le
190 ZigLLVM_r600, // R600: AMD GPUs HD2XXX - HD6XXX
191 ZigLLVM_amdgcn, // AMDGCN: AMD GCN GPUs
192 ZigLLVM_riscv32, // RISC-V (32-bit): riscv32
193 ZigLLVM_riscv64, // RISC-V (64-bit): riscv64
194 ZigLLVM_sparc, // Sparc: sparc
195 ZigLLVM_sparcv9, // Sparcv9: Sparcv9
196 ZigLLVM_sparcel, // Sparc: (endianness = little). NB: 'Sparcle' is a CPU variant
197 ZigLLVM_systemz, // SystemZ: s390x
198 ZigLLVM_tce, // TCE (http://tce.cs.tut.fi/): tce
199 ZigLLVM_tcele, // TCE little endian (http://tce.cs.tut.fi/): tcele
200 ZigLLVM_thumb, // Thumb (little endian): thumb, thumbv.*
201 ZigLLVM_thumbeb, // Thumb (big endian): thumbeb
202 ZigLLVM_x86, // X86: i[3-9]86
203 ZigLLVM_x86_64, // X86-64: amd64, x86_64
204 ZigLLVM_xcore, // XCore: xcore
205 ZigLLVM_xtensa, // Tensilica: Xtensa
206 ZigLLVM_nvptx, // NVPTX: 32-bit
207 ZigLLVM_nvptx64, // NVPTX: 64-bit
208 ZigLLVM_le32, // le32: generic little-endian 32-bit CPU (PNaCl)
209 ZigLLVM_le64, // le64: generic little-endian 64-bit CPU (PNaCl)
210 ZigLLVM_amdil, // AMDIL
211 ZigLLVM_amdil64, // AMDIL with 64-bit pointers
212 ZigLLVM_hsail, // AMD HSAIL
213 ZigLLVM_hsail64, // AMD HSAIL with 64-bit pointers
214 ZigLLVM_spir, // SPIR: standard portable IR for OpenCL 32-bit version
215 ZigLLVM_spir64, // SPIR: standard portable IR for OpenCL 64-bit version
216 ZigLLVM_spirv, // SPIR-V with logical memory layout.
217 ZigLLVM_spirv32, // SPIR-V with 32-bit pointers
218 ZigLLVM_spirv64, // SPIR-V with 64-bit pointers
219 ZigLLVM_kalimba, // Kalimba: generic kalimba
220 ZigLLVM_shave, // SHAVE: Movidius vector VLIW processors
221 ZigLLVM_lanai, // Lanai: Lanai 32-bit
222 ZigLLVM_wasm32, // WebAssembly with 32-bit pointers
223 ZigLLVM_wasm64, // WebAssembly with 64-bit pointers
224 ZigLLVM_renderscript32, // 32-bit RenderScript
225 ZigLLVM_renderscript64, // 64-bit RenderScript
226 ZigLLVM_ve, // NEC SX-Aurora Vector Engine
227 ZigLLVM_LastArchType = ZigLLVM_ve
228};
229
230enum ZigLLVM_VendorType {
231 ZigLLVM_UnknownVendor,
232
233 ZigLLVM_Apple,
234 ZigLLVM_PC,
235 ZigLLVM_SCEI,
236 ZigLLVM_Freescale,
237 ZigLLVM_IBM,
238 ZigLLVM_ImaginationTechnologies,
239 ZigLLVM_MipsTechnologies,
240 ZigLLVM_NVIDIA,
241 ZigLLVM_CSR,
242 ZigLLVM_AMD,
243 ZigLLVM_Mesa,
244 ZigLLVM_SUSE,
245 ZigLLVM_OpenEmbedded,
246
247 ZigLLVM_LastVendorType = ZigLLVM_OpenEmbedded
248};
249
250// synchronize with llvm/include/ADT/Triple.h::OsType
251// synchronize with std.Target.Os.Tag
252// synchronize with codegen/llvm/bindings.zig::OsType
253enum ZigLLVM_OSType {
254 ZigLLVM_UnknownOS,
255
256 ZigLLVM_Darwin,
257 ZigLLVM_DragonFly,
258 ZigLLVM_FreeBSD,
259 ZigLLVM_Fuchsia,
260 ZigLLVM_IOS,
261 ZigLLVM_KFreeBSD,
262 ZigLLVM_Linux,
263 ZigLLVM_Lv2, // PS3
264 ZigLLVM_MacOSX,
265 ZigLLVM_NetBSD,
266 ZigLLVM_OpenBSD,
267 ZigLLVM_Solaris,
268 ZigLLVM_UEFI,
269 ZigLLVM_Win32,
270 ZigLLVM_ZOS,
271 ZigLLVM_Haiku,
272 ZigLLVM_RTEMS,
273 ZigLLVM_NaCl, // Native Client
274 ZigLLVM_AIX,
275 ZigLLVM_CUDA, // NVIDIA CUDA
276 ZigLLVM_NVCL, // NVIDIA OpenCL
277 ZigLLVM_AMDHSA, // AMD HSA Runtime
278 ZigLLVM_PS4,
279 ZigLLVM_PS5,
280 ZigLLVM_ELFIAMCU,
281 ZigLLVM_TvOS, // Apple tvOS
282 ZigLLVM_WatchOS, // Apple watchOS
283 ZigLLVM_BridgeOS, // Apple bridgeOS
284 ZigLLVM_DriverKit, // Apple DriverKit
285 ZigLLVM_XROS, // Apple XROS
286 ZigLLVM_Mesa3D,
287 ZigLLVM_AMDPAL, // AMD PAL Runtime
288 ZigLLVM_HermitCore, // HermitCore Unikernel/Multikernel
289 ZigLLVM_Hurd, // GNU/Hurd
290 ZigLLVM_WASI, // Experimental WebAssembly OS
291 ZigLLVM_Emscripten,
292 ZigLLVM_ShaderModel, // DirectX ShaderModel
293 ZigLLVM_LiteOS,
294 ZigLLVM_Serenity,
295 ZigLLVM_Vulkan, // Vulkan SPIR-V
296 ZigLLVM_LastOSType = ZigLLVM_Vulkan
297};
298
299// Synchronize with target.cpp::abi_list
300enum ZigLLVM_EnvironmentType {
301 ZigLLVM_UnknownEnvironment,
302
303 ZigLLVM_GNU,
304 ZigLLVM_GNUABIN32,
305 ZigLLVM_GNUABI64,
306 ZigLLVM_GNUEABI,
307 ZigLLVM_GNUEABIHF,
308 ZigLLVM_GNUF32,
309 ZigLLVM_GNUF64,
310 ZigLLVM_GNUSF,
311 ZigLLVM_GNUX32,
312 ZigLLVM_GNUILP32,
313 ZigLLVM_CODE16,
314 ZigLLVM_EABI,
315 ZigLLVM_EABIHF,
316 ZigLLVM_Android,
317 ZigLLVM_Musl,
318 ZigLLVM_MuslEABI,
319 ZigLLVM_MuslEABIHF,
320 ZigLLVM_MuslX32,
321
322 ZigLLVM_MSVC,
323 ZigLLVM_Itanium,
324 ZigLLVM_Cygnus,
325 ZigLLVM_CoreCLR,
326 ZigLLVM_Simulator, // Simulator variants of other systems, e.g., Apple's iOS
327 ZigLLVM_MacABI, // Mac Catalyst variant of Apple's iOS deployment target.
328
329 ZigLLVM_Pixel,
330 ZigLLVM_Vertex,
331 ZigLLVM_Geometry,
332 ZigLLVM_Hull,
333 ZigLLVM_Domain,
334 ZigLLVM_Compute,
335 ZigLLVM_Library,
336 ZigLLVM_RayGeneration,
337 ZigLLVM_Intersection,
338 ZigLLVM_AnyHit,
339 ZigLLVM_ClosestHit,
340 ZigLLVM_Miss,
341 ZigLLVM_Callable,
342 ZigLLVM_Mesh,
343 ZigLLVM_Amplification,
344 ZigLLVM_OpenCL,
345 ZigLLVM_OpenHOS,
346
347 ZigLLVM_PAuthTest,
348
349 ZigLLVM_LastEnvironmentType = ZigLLVM_PAuthTest
350};
351
352enum ZigLLVM_ObjectFormatType {
353 ZigLLVM_UnknownObjectFormat,
354
355 ZigLLVM_COFF,
356 ZigLLVM_DXContainer,
357 ZigLLVM_ELF,
358 ZigLLVM_GOFF,
359 ZigLLVM_MachO,
360 ZigLLVM_SPIRV,
361 ZigLLVM_Wasm,
362 ZigLLVM_XCOFF,
363};
364
365#define ZigLLVM_DIFlags_Zero 0U
366#define ZigLLVM_DIFlags_Private 1U
367#define ZigLLVM_DIFlags_Protected 2U
368#define ZigLLVM_DIFlags_Public 3U
369#define ZigLLVM_DIFlags_FwdDecl (1U << 2)
370#define ZigLLVM_DIFlags_AppleBlock (1U << 3)
371#define ZigLLVM_DIFlags_BlockByrefStruct (1U << 4)
372#define ZigLLVM_DIFlags_Virtual (1U << 5)
373#define ZigLLVM_DIFlags_Artificial (1U << 6)
374#define ZigLLVM_DIFlags_Explicit (1U << 7)
375#define ZigLLVM_DIFlags_Prototyped (1U << 8)
376#define ZigLLVM_DIFlags_ObjcClassComplete (1U << 9)
377#define ZigLLVM_DIFlags_ObjectPointer (1U << 10)
378#define ZigLLVM_DIFlags_Vector (1U << 11)
379#define ZigLLVM_DIFlags_StaticMember (1U << 12)
380#define ZigLLVM_DIFlags_LValueReference (1U << 13)
381#define ZigLLVM_DIFlags_RValueReference (1U << 14)
382#define ZigLLVM_DIFlags_Reserved (1U << 15)
383#define ZigLLVM_DIFlags_SingleInheritance (1U << 16)
384#define ZigLLVM_DIFlags_MultipleInheritance (2 << 16)
385#define ZigLLVM_DIFlags_VirtualInheritance (3 << 16)
386#define ZigLLVM_DIFlags_IntroducedVirtual (1U << 18)
387#define ZigLLVM_DIFlags_BitField (1U << 19)
388#define ZigLLVM_DIFlags_NoReturn (1U << 20)
389#define ZigLLVM_DIFlags_TypePassByValue (1U << 22)
390#define ZigLLVM_DIFlags_TypePassByReference (1U << 23)
391#define ZigLLVM_DIFlags_EnumClass (1U << 24)
392#define ZigLLVM_DIFlags_Thunk (1U << 25)
393#define ZigLLVM_DIFlags_NonTrivial (1U << 26)
394#define ZigLLVM_DIFlags_BigEndian (1U << 27)
395#define ZigLLVM_DIFlags_LittleEndian (1U << 28)
396#define ZigLLVM_DIFlags_AllCallsDescribed (1U << 29)
397
398ZIG_EXTERN_C bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output);106ZIG_EXTERN_C bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output);
399ZIG_EXTERN_C bool ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output);107ZIG_EXTERN_C bool ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output);
400ZIG_EXTERN_C bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output);108ZIG_EXTERN_C bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output);
401109
402ZIG_EXTERN_C bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count,110ZIG_EXTERN_C bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count,
403 enum ZigLLVM_OSType os_type);111 ZigLLVMArchiveKind archive_kind);
404112
405ZIG_EXTERN_C bool ZigLLVMWriteImportLibrary(const char *def_path, const enum ZigLLVM_ArchType arch,113ZIG_EXTERN_C bool ZigLLVMWriteImportLibrary(const char *def_path, unsigned int coff_machine,
406 const char *output_lib_path, bool kill_at);114 const char *output_lib_path, bool kill_at);
407115
408#endif116#endif