authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-01-19 23:56:26+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-22 15:31:57+02:00
loge88307dc404b5699a0d4c17dd6598519d8e08ed4
tree887ce2cf44b65cd3e526acb87886956846f54c26
parentcb8817473ab408cd0aec25b9def71f864b338be8
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

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.

5 files changed, 7 insertions(+), 5 deletions(-)

src/codegen/llvm.zig+1-1
...@@ -4813,7 +4813,7 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {...@@ -4813,7 +4813,7 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
4813 bindings.LLVMInitializeXtensaTarget();4813 bindings.LLVMInitializeXtensaTarget();
4814 bindings.LLVMInitializeXtensaTargetInfo();4814 bindings.LLVMInitializeXtensaTargetInfo();
4815 bindings.LLVMInitializeXtensaTargetMC();4815 bindings.LLVMInitializeXtensaTargetMC();
4816 // There is no LLVMInitializeXtensaAsmPrinter function.4816 bindings.LLVMInitializeXtensaAsmPrinter();
4817 bindings.LLVMInitializeXtensaAsmParser();4817 bindings.LLVMInitializeXtensaAsmParser();
4818 }4818 }
4819 },4819 },
src/codegen/llvm/bindings.zig+1
...@@ -279,6 +279,7 @@ pub extern fn LLVMInitializeSystemZAsmPrinter() void;...@@ -279,6 +279,7 @@ pub extern fn LLVMInitializeSystemZAsmPrinter() void;
279pub extern fn LLVMInitializeWebAssemblyAsmPrinter() void;279pub extern fn LLVMInitializeWebAssemblyAsmPrinter() void;
280pub extern fn LLVMInitializeX86AsmPrinter() void;280pub extern fn LLVMInitializeX86AsmPrinter() void;
281pub extern fn LLVMInitializeXCoreAsmPrinter() void;281pub extern fn LLVMInitializeXCoreAsmPrinter() void;
282pub extern fn LLVMInitializeXtensaAsmPrinter() void;
282pub extern fn LLVMInitializeM68kAsmPrinter() void;283pub extern fn LLVMInitializeM68kAsmPrinter() void;
283pub extern fn LLVMInitializeVEAsmPrinter() void;284pub extern fn LLVMInitializeVEAsmPrinter() void;
284pub extern fn LLVMInitializeARCAsmPrinter() void;285pub extern fn LLVMInitializeARCAsmPrinter() void;
src/link/Lld.zig+2-1
...@@ -812,7 +812,8 @@ fn elfLink(lld: *Lld, arena: Allocator) !void {...@@ -812,7 +812,8 @@ fn elfLink(lld: *Lld, arena: Allocator) !void {
812 target.cpu.arch == .m68k or812 target.cpu.arch == .m68k or
813 target.cpu.arch.isSPARC() or813 target.cpu.arch.isSPARC() or
814 target.cpu.arch == .ve or814 target.cpu.arch == .ve or
815 target.cpu.arch == .xcore))815 target.cpu.arch == .xcore or
816 target.cpu.arch == .xtensa))
816 {817 {
817 // In this case we must do a simple file copy818 // In this case we must do a simple file copy
818 // here. TODO: think carefully about how we can avoid this redundant operation when doing819 // here. TODO: think carefully about how we can avoid this redundant operation when doing
src/target.zig+1-1
...@@ -227,11 +227,11 @@ pub fn hasLlvmSupport(target: *const std.Target, ofmt: std.Target.ObjectFormat)...@@ -227,11 +227,11 @@ pub fn hasLlvmSupport(target: *const std.Target, ofmt: std.Target.ObjectFormat)
227 .wasm32,227 .wasm32,
228 .wasm64,228 .wasm64,
229 .ve,229 .ve,
230 .xtensa,
230 => true,231 => true,
231232
232 // LLVM backend exists but can produce neither assembly nor object files.233 // LLVM backend exists but can produce neither assembly nor object files.
233 .csky,234 .csky,
234 .xtensa,
235 => false,235 => false,
236236
237 // Third-party LLVM backend exists.237 // Third-party LLVM backend exists.
test/llvm_targets.zig+2-2
...@@ -344,8 +344,8 @@ const targets = [_]std.Target.Query{...@@ -344,8 +344,8 @@ const targets = [_]std.Target.Query{
344344
345 .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none },345 .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none },
346346
347 // .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none },347 .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none },
348 // .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none },348 .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none },
349};349};
350350
351pub fn addCases(351pub fn addCases(