Function get [src]

Determine file system path names of C runtime startup objects for supported link modes.

Prototype

pub fn get(args: GetArgs) CrtBasenames

Parameters

args: GetArgs

Source

pub fn get(args: GetArgs) CrtBasenames { // crt objects are only required for libc. if (!args.link_libc) return .{}; // Flatten crt cases. const mode: enum { dynamic_lib, dynamic_exe, dynamic_pie, static_exe, static_pie, } = switch (args.output_mode) { .Obj => return .{}, .Lib => switch (args.link_mode) { .dynamic => .dynamic_lib, .static => return .{}, }, .Exe => switch (args.link_mode) { .dynamic => if (args.pie) .dynamic_pie else .dynamic_exe, .static => if (args.pie) .static_pie else .static_exe, }, }; const target = args.target; if (target.abi.isAndroid()) return switch (mode) { .dynamic_lib => .{ .crtbegin = "crtbegin_so.o", .crtend = "crtend_so.o", }, .dynamic_exe, .dynamic_pie => .{ .crtbegin = "crtbegin_dynamic.o", .crtend = "crtend_android.o", }, .static_exe, .static_pie => .{ .crtbegin = "crtbegin_static.o", .crtend = "crtend_android.o", }, }; return switch (target.os.tag) { .linux => switch (mode) { .dynamic_lib => .{ .crti = "crti.o", .crtn = "crtn.o", }, .dynamic_exe => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtn = "crtn.o", }, .dynamic_pie => .{ .crt0 = "Scrt1.o", .crti = "crti.o", .crtn = "crtn.o", }, .static_exe => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtn = "crtn.o", }, .static_pie => .{ .crt0 = "rcrt1.o", .crti = "crti.o", .crtn = "crtn.o", }, }, .dragonfly => switch (mode) { .dynamic_lib => .{ .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .dynamic_exe => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .dynamic_pie => .{ .crt0 = "Scrt1.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .static_exe => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .static_pie => .{ .crt0 = "Scrt1.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, }, .freebsd => switch (mode) { .dynamic_lib => .{ .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .dynamic_exe => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .dynamic_pie => .{ .crt0 = "Scrt1.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .static_exe => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtbegin = "crtbeginT.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .static_pie => .{ .crt0 = "Scrt1.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, }, .netbsd => switch (mode) { .dynamic_lib => .{ .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .dynamic_exe => .{ .crt0 = "crt0.o", .crti = "crti.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .dynamic_pie => .{ .crt0 = "crt0.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .static_exe => .{ .crt0 = "crt0.o", .crti = "crti.o", .crtbegin = "crtbeginT.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .static_pie => .{ .crt0 = "crt0.o", .crti = "crti.o", .crtbegin = "crtbeginT.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, }, .openbsd => switch (mode) { .dynamic_lib => .{ .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", }, .dynamic_exe, .dynamic_pie => .{ .crt0 = "crt0.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", }, .static_exe, .static_pie => .{ .crt0 = "rcrt0.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", }, }, .haiku => switch (mode) { .dynamic_lib => .{ .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .dynamic_exe => .{ .crt0 = "start_dyn.o", .crti = "crti.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .dynamic_pie => .{ .crt0 = "start_dyn.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, .static_exe => .{ .crt0 = "start_dyn.o", .crti = "crti.o", .crtbegin = "crtbegin.o", .crtend = "crtend.o", .crtn = "crtn.o", }, .static_pie => .{ .crt0 = "start_dyn.o", .crti = "crti.o", .crtbegin = "crtbeginS.o", .crtend = "crtendS.o", .crtn = "crtn.o", }, }, .solaris, .illumos => switch (mode) { .dynamic_lib => .{ .crti = "crti.o", .crtn = "crtn.o", }, .dynamic_exe, .dynamic_pie => .{ .crt0 = "crt1.o", .crti = "crti.o", .crtn = "crtn.o", }, .static_exe, .static_pie => .{}, }, else => .{}, }; }