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 {
48134813 bindings.LLVMInitializeXtensaTarget();
48144814 bindings.LLVMInitializeXtensaTargetInfo();
48154815 bindings.LLVMInitializeXtensaTargetMC();
4816 // There is no LLVMInitializeXtensaAsmPrinter function.
4816 bindings.LLVMInitializeXtensaAsmPrinter();
48174817 bindings.LLVMInitializeXtensaAsmParser();
48184818 }
48194819 },
src/codegen/llvm/bindings.zig+1
......@@ -279,6 +279,7 @@ pub extern fn LLVMInitializeSystemZAsmPrinter() void;
279279pub extern fn LLVMInitializeWebAssemblyAsmPrinter() void;
280280pub extern fn LLVMInitializeX86AsmPrinter() void;
281281pub extern fn LLVMInitializeXCoreAsmPrinter() void;
282pub extern fn LLVMInitializeXtensaAsmPrinter() void;
282283pub extern fn LLVMInitializeM68kAsmPrinter() void;
283284pub extern fn LLVMInitializeVEAsmPrinter() void;
284285pub extern fn LLVMInitializeARCAsmPrinter() void;
src/link/Lld.zig+2-1
......@@ -812,7 +812,8 @@ fn elfLink(lld: *Lld, arena: Allocator) !void {
812812 target.cpu.arch == .m68k or
813813 target.cpu.arch.isSPARC() or
814814 target.cpu.arch == .ve or
815 target.cpu.arch == .xcore))
815 target.cpu.arch == .xcore or
816 target.cpu.arch == .xtensa))
816817 {
817818 // In this case we must do a simple file copy
818819 // 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)
227227 .wasm32,
228228 .wasm64,
229229 .ve,
230 .xtensa,
230231 => true,
231232
232233 // LLVM backend exists but can produce neither assembly nor object files.
233234 .csky,
234 .xtensa,
235235 => false,
236236
237237 // Third-party LLVM backend exists.
test/llvm_targets.zig+2-2
......@@ -344,8 +344,8 @@ const targets = [_]std.Target.Query{
344344
345345 .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none },
346346
347 // .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none },
348 // .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none },
347 .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none },
348 .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none },
349349};
350350
351351pub fn addCases(