zig

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

commit 4c50c4b6e5ba1b57e37194fb307d176bef16f810 (tree)
parent 473df0c106c6b72321832d7e9c7d656f46762a9a
Author: Alex Rønne Petersen <alex@alexrp.com>
Date:   Mon, 19 Jan 2026 23:56:26 +0100

llvm: wire up the xtensa backend

As of LLVM 22, it can produce assembly and object files. No LLD support,
however, so using it is still a bit of a pain.

Diffstat:
Msrc/codegen/llvm.zig | 2+-
Msrc/codegen/llvm/bindings.zig | 1+
Msrc/link/Lld.zig | 3++-
Msrc/target.zig | 2+-
Mtest/llvm_targets.zig | 4++--
5 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig @@ -4818,7 +4818,7 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { bindings.LLVMInitializeXtensaTarget(); bindings.LLVMInitializeXtensaTargetInfo(); bindings.LLVMInitializeXtensaTargetMC(); - // There is no LLVMInitializeXtensaAsmPrinter function. + bindings.LLVMInitializeXtensaAsmPrinter(); bindings.LLVMInitializeXtensaAsmParser(); } }, diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig @@ -279,6 +279,7 @@ pub extern fn LLVMInitializeSystemZAsmPrinter() void; pub extern fn LLVMInitializeWebAssemblyAsmPrinter() void; pub extern fn LLVMInitializeX86AsmPrinter() void; pub extern fn LLVMInitializeXCoreAsmPrinter() void; +pub extern fn LLVMInitializeXtensaAsmPrinter() void; pub extern fn LLVMInitializeM68kAsmPrinter() void; pub extern fn LLVMInitializeVEAsmPrinter() void; pub extern fn LLVMInitializeARCAsmPrinter() void; diff --git a/src/link/Lld.zig b/src/link/Lld.zig @@ -812,7 +812,8 @@ fn elfLink(lld: *Lld, arena: Allocator) !void { target.cpu.arch == .m68k or target.cpu.arch.isSPARC() or target.cpu.arch == .ve or - target.cpu.arch == .xcore)) + target.cpu.arch == .xcore or + target.cpu.arch == .xtensa)) { // In this case we must do a simple file copy // here. TODO: think carefully about how we can avoid this redundant operation when doing diff --git a/src/target.zig b/src/target.zig @@ -227,11 +227,11 @@ pub fn hasLlvmSupport(target: *const std.Target, ofmt: std.Target.ObjectFormat) .wasm32, .wasm64, .ve, + .xtensa, => true, // LLVM backend exists but can produce neither assembly nor object files. .csky, - .xtensa, => false, // Third-party LLVM backend exists. diff --git a/test/llvm_targets.zig b/test/llvm_targets.zig @@ -344,8 +344,8 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none }, - // .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none }, - // .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none }, }; pub fn addCases(