authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-30 11:05:18+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-01 06:23:59+01:00
logc5395f7cd948f02ada095515b9d6824cbbac4f22
tree7a5512ce252d742e85b3d26cbb092ce89accbe5a
parent60c0f522d96ed455545552b567af6a6c345595a9
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

llvm: Set OS min version and libc version in ~all cases.

Except Windows, because that just doesn't really fit into LLVM's target triple format currently.

1 files changed, 27 insertions(+), 7 deletions(-)

src/codegen/llvm.zig+27-7
......@@ -239,13 +239,20 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
239239 };
240240 try llvm_triple.appendSlice(llvm_os);
241241
242 if (target.os.tag.isDarwin()) {
243 const min_version = target.os.version_range.semver.min;
244 try llvm_triple.writer().print("{d}.{d}.{d}", .{
245 min_version.major,
246 min_version.minor,
247 min_version.patch,
248 });
242 switch (target.os.versionRange()) {
243 .none,
244 .windows,
245 => {},
246 .semver => |ver| try llvm_triple.writer().print("{d}.{d}.{d}", .{
247 ver.min.major,
248 ver.min.minor,
249 ver.min.patch,
250 }),
251 .linux => |ver| try llvm_triple.writer().print("{d}.{d}.{d}", .{
252 ver.range.min.major,
253 ver.range.min.minor,
254 ver.range.min.patch,
255 }),
249256 }
250257 try llvm_triple.append('-');
251258
......@@ -279,6 +286,19 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
279286 };
280287 try llvm_triple.appendSlice(llvm_abi);
281288
289 // This should eventually handle the Android API level too.
290 switch (target.os.versionRange()) {
291 .none,
292 .semver,
293 .windows,
294 => {},
295 .linux => |ver| if (target.abi.isGnu()) try llvm_triple.writer().print("{d}.{d}.{d}", .{
296 ver.glibc.major,
297 ver.glibc.minor,
298 ver.glibc.patch,
299 }),
300 }
301
282302 return llvm_triple.toOwnedSlice();
283303}
284304