mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
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:
parent
4995509028
commit
f2f36c49c8
2 changed files with 6 additions and 20 deletions
18
build.zig
18
build.zig
|
|
@ -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,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue