Function resolveCrtPaths [src]

Prototype

pub fn resolveCrtPaths( lci: LibCInstallation, arena: Allocator, crt_basenames: CrtBasenames, target: std.Target, ) error{ OutOfMemory, LibCInstallationMissingCrtDir }!CrtPaths

Parameters

lci: LibCInstallationarena: Allocatorcrt_basenames: CrtBasenamestarget: std.Target

Possible Errors

LibCInstallationMissingCrtDir
OutOfMemory

Source

pub fn resolveCrtPaths( lci: LibCInstallation, arena: Allocator, crt_basenames: CrtBasenames, target: std.Target, ) error{ OutOfMemory, LibCInstallationMissingCrtDir }!CrtPaths { const crt_dir_path: Path = .{ .root_dir = std.Build.Cache.Directory.cwd(), .sub_path = lci.crt_dir orelse return error.LibCInstallationMissingCrtDir, }; switch (target.os.tag) { .dragonfly => { const gccv: []const u8 = if (target.os.version_range.semver.isAtLeast(.{ .major = 5, .minor = 4, .patch = 0, }) orelse true) "gcc80" else "gcc54"; return .{ .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, .crti = if (crt_basenames.crti) |basename| try crt_dir_path.join(arena, basename) else null, .crtbegin = if (crt_basenames.crtbegin) |basename| .{ .root_dir = crt_dir_path.root_dir, .sub_path = try fs.path.join(arena, &.{ crt_dir_path.sub_path, gccv, basename }), } else null, .crtend = if (crt_basenames.crtend) |basename| .{ .root_dir = crt_dir_path.root_dir, .sub_path = try fs.path.join(arena, &.{ crt_dir_path.sub_path, gccv, basename }), } else null, .crtn = if (crt_basenames.crtn) |basename| try crt_dir_path.join(arena, basename) else null, }; }, .haiku => { const gcc_dir_path: Path = .{ .root_dir = std.Build.Cache.Directory.cwd(), .sub_path = lci.gcc_dir orelse return error.LibCInstallationMissingCrtDir, }; return .{ .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, .crti = if (crt_basenames.crti) |basename| try crt_dir_path.join(arena, basename) else null, .crtbegin = if (crt_basenames.crtbegin) |basename| try gcc_dir_path.join(arena, basename) else null, .crtend = if (crt_basenames.crtend) |basename| try gcc_dir_path.join(arena, basename) else null, .crtn = if (crt_basenames.crtn) |basename| try crt_dir_path.join(arena, basename) else null, }; }, else => { return .{ .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, .crti = if (crt_basenames.crti) |basename| try crt_dir_path.join(arena, basename) else null, .crtbegin = if (crt_basenames.crtbegin) |basename| try crt_dir_path.join(arena, basename) else null, .crtend = if (crt_basenames.crtend) |basename| try crt_dir_path.join(arena, basename) else null, .crtn = if (crt_basenames.crtn) |basename| try crt_dir_path.join(arena, basename) else null, }; }, } }