loongarch: use medium code model for zig loongarch64 binary (#21153)

This commit is contained in:
YANG Xudong 2024-09-01 11:59:24 +08:00 committed by GitHub
parent 96daca7b3b
commit c34cfe486d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -647,6 +647,24 @@ fn addCompilerStep(b: *std.Build, options: AddCompilerStepOptions) *std.Build.St
.strip = options.strip,
.sanitize_thread = options.sanitize_thread,
.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 loongarch64 zig binary.
//
// Here we explicitly set code model to `medium' to avoid this
// error.
.loongarch64 => .medium,
else => .default,
},
});
exe.root_module.valgrind = options.valgrind;
exe.stack_size = stack_size;