compiler: Switch default code model for loongarch64 to medium.

LLVM 21 will change the default, but we're making the change now to make
building Zig for loongarch64 less painful.

https://github.com/llvm/llvm-project/pull/132173
This commit is contained in:
Alex Rønne Petersen 2025-04-07 13:59:21 +02:00
parent 4995509028
commit f2f36c49c8
2 changed files with 6 additions and 20 deletions

View file

@ -668,24 +668,6 @@ fn addCompilerStep(b: *std.Build, options: AddCompilerStepOptions) *std.Build.St
.strip = options.strip, .strip = options.strip,
.sanitize_thread = options.sanitize_thread, .sanitize_thread = options.sanitize_thread,
.single_threaded = options.single_threaded, .single_threaded = options.single_threaded,
.code_model = switch (options.target.result.cpu.arch) {
// NB:
// For loongarch, LLVM supports only small, medium and large
// code model. If we don't explicitly specify the code model,
// the default value `small' will be used.
//
// Since zig binary itself is relatively large, using a `small'
// code model will cause
//
// relocation R_LARCH_B26 out of range
//
// error when linking a loongarch32/loongarch64 zig binary.
//
// Here we explicitly set code model to `medium' to avoid this
// error.
.loongarch32, .loongarch64 => .medium,
else => .default,
},
.valgrind = options.valgrind, .valgrind = options.valgrind,
}); });

View file

@ -234,10 +234,14 @@ pub fn create(arena: Allocator, options: CreateOptions) !*Package.Module {
break :b false; break :b false;
}; };
const code_model = b: { const code_model: std.builtin.CodeModel = b: {
if (options.inherited.code_model) |x| break :b x; if (options.inherited.code_model) |x| break :b x;
if (options.parent) |p| break :b p.code_model; if (options.parent) |p| break :b p.code_model;
break :b .default; break :b switch (target.cpu.arch) {
// Temporary workaround until LLVM 21: https://github.com/llvm/llvm-project/pull/132173
.loongarch64 => .medium,
else => .default,
};
}; };
const is_safe_mode = switch (optimize_mode) { const is_safe_mode = switch (optimize_mode) {