| ... | @@ -694,8 +694,10 @@ fn appendCcExe(args: *std.ArrayList([]const u8), skip_cc_env_var: bool) !void { | ... | @@ -694,8 +694,10 @@ fn appendCcExe(args: *std.ArrayList([]const u8), skip_cc_env_var: bool) !void { |
| 694 | /// `CsuPaths`. | 694 | /// `CsuPaths`. |
| 695 | pub const CrtBasenames = struct { | 695 | pub const CrtBasenames = struct { |
| 696 | crt0: ?[]const u8 = null, | 696 | crt0: ?[]const u8 = null, |
| | 697 | crti: ?[]const u8 = null, |
| 697 | crtbegin: ?[]const u8 = null, | 698 | crtbegin: ?[]const u8 = null, |
| 698 | crtend: ?[]const u8 = null, | 699 | crtend: ?[]const u8 = null, |
| | 700 | crtn: ?[]const u8 = null, |
| 699 | | 701 | |
| 700 | pub const GetArgs = struct { | 702 | pub const GetArgs = struct { |
| 701 | target: std.Target, | 703 | target: std.Target, |
| ... | @@ -749,96 +751,137 @@ pub const CrtBasenames = struct { | ... | @@ -749,96 +751,137 @@ pub const CrtBasenames = struct { |
| 749 | | 751 | |
| 750 | return switch (target.os.tag) { | 752 | return switch (target.os.tag) { |
| 751 | .linux => switch (mode) { | 753 | .linux => switch (mode) { |
| 752 | .dynamic_lib => .{}, | 754 | .dynamic_lib => .{ |
| | 755 | .crti = "crti.o", |
| | 756 | .crtn = "crtn.o", |
| | 757 | }, |
| 753 | .dynamic_exe => .{ | 758 | .dynamic_exe => .{ |
| 754 | .crt0 = "crt1.o", | 759 | .crt0 = "crt1.o", |
| | 760 | .crti = "crti.o", |
| | 761 | .crtn = "crtn.o", |
| 755 | }, | 762 | }, |
| 756 | .dynamic_pie => .{ | 763 | .dynamic_pie => .{ |
| 757 | .crt0 = "Scrt1.o", | 764 | .crt0 = "Scrt1.o", |
| | 765 | .crti = "crti.o", |
| | 766 | .crtn = "crtn.o", |
| 758 | }, | 767 | }, |
| 759 | .static_exe => .{ | 768 | .static_exe => .{ |
| 760 | .crt0 = "crt1.o", | 769 | .crt0 = "crt1.o", |
| | 770 | .crti = "crti.o", |
| | 771 | .crtn = "crtn.o", |
| 761 | }, | 772 | }, |
| 762 | .static_pie => .{ | 773 | .static_pie => .{ |
| 763 | .crt0 = "rcrt1.o", | 774 | .crt0 = "rcrt1.o", |
| | 775 | .crti = "crti.o", |
| | 776 | .crtn = "crtn.o", |
| 764 | }, | 777 | }, |
| 765 | }, | 778 | }, |
| 766 | .dragonfly => switch (mode) { | 779 | .dragonfly => switch (mode) { |
| 767 | .dynamic_lib => .{ | 780 | .dynamic_lib => .{ |
| | 781 | .crti = "crti.o", |
| 768 | .crtbegin = "crtbeginS.o", | 782 | .crtbegin = "crtbeginS.o", |
| 769 | .crtend = "crtendS.o", | 783 | .crtend = "crtendS.o", |
| | 784 | .crtn = "crtn.o", |
| 770 | }, | 785 | }, |
| 771 | .dynamic_exe => .{ | 786 | .dynamic_exe => .{ |
| 772 | .crt0 = "crt1.o", | 787 | .crt0 = "crt1.o", |
| | 788 | .crti = "crti.o", |
| 773 | .crtbegin = "crtbegin.o", | 789 | .crtbegin = "crtbegin.o", |
| 774 | .crtend = "crtend.o", | 790 | .crtend = "crtend.o", |
| | 791 | .crtn = "crtn.o", |
| 775 | }, | 792 | }, |
| 776 | .dynamic_pie => .{ | 793 | .dynamic_pie => .{ |
| 777 | .crt0 = "Scrt1.o", | 794 | .crt0 = "Scrt1.o", |
| | 795 | .crti = "crti.o", |
| 778 | .crtbegin = "crtbeginS.o", | 796 | .crtbegin = "crtbeginS.o", |
| 779 | .crtend = "crtendS.o", | 797 | .crtend = "crtendS.o", |
| | 798 | .crtn = "crtn.o", |
| 780 | }, | 799 | }, |
| 781 | .static_exe => .{ | 800 | .static_exe => .{ |
| 782 | .crt0 = "crt1.o", | 801 | .crt0 = "crt1.o", |
| | 802 | .crti = "crti.o", |
| 783 | .crtbegin = "crtbegin.o", | 803 | .crtbegin = "crtbegin.o", |
| 784 | .crtend = "crtend.o", | 804 | .crtend = "crtend.o", |
| | 805 | .crtn = "crtn.o", |
| 785 | }, | 806 | }, |
| 786 | .static_pie => .{ | 807 | .static_pie => .{ |
| 787 | .crt0 = "Scrt1.o", | 808 | .crt0 = "Scrt1.o", |
| | 809 | .crti = "crti.o", |
| 788 | .crtbegin = "crtbeginS.o", | 810 | .crtbegin = "crtbeginS.o", |
| 789 | .crtend = "crtendS.o", | 811 | .crtend = "crtendS.o", |
| | 812 | .crtn = "crtn.o", |
| 790 | }, | 813 | }, |
| 791 | }, | 814 | }, |
| 792 | .freebsd => switch (mode) { | 815 | .freebsd => switch (mode) { |
| 793 | .dynamic_lib => .{ | 816 | .dynamic_lib => .{ |
| | 817 | .crti = "crti.o", |
| 794 | .crtbegin = "crtbeginS.o", | 818 | .crtbegin = "crtbeginS.o", |
| 795 | .crtend = "crtendS.o", | 819 | .crtend = "crtendS.o", |
| | 820 | .crtn = "crtn.o", |
| 796 | }, | 821 | }, |
| 797 | .dynamic_exe => .{ | 822 | .dynamic_exe => .{ |
| 798 | .crt0 = "crt1.o", | 823 | .crt0 = "crt1.o", |
| | 824 | .crti = "crti.o", |
| 799 | .crtbegin = "crtbegin.o", | 825 | .crtbegin = "crtbegin.o", |
| 800 | .crtend = "crtend.o", | 826 | .crtend = "crtend.o", |
| | 827 | .crtn = "crtn.o", |
| 801 | }, | 828 | }, |
| 802 | .dynamic_pie => .{ | 829 | .dynamic_pie => .{ |
| 803 | .crt0 = "Scrt1.o", | 830 | .crt0 = "Scrt1.o", |
| | 831 | .crti = "crti.o", |
| 804 | .crtbegin = "crtbeginS.o", | 832 | .crtbegin = "crtbeginS.o", |
| 805 | .crtend = "crtendS.o", | 833 | .crtend = "crtendS.o", |
| | 834 | .crtn = "crtn.o", |
| 806 | }, | 835 | }, |
| 807 | .static_exe => .{ | 836 | .static_exe => .{ |
| 808 | .crt0 = "crt1.o", | 837 | .crt0 = "crt1.o", |
| | 838 | .crti = "crti.o", |
| 809 | .crtbegin = "crtbeginT.o", | 839 | .crtbegin = "crtbeginT.o", |
| 810 | .crtend = "crtend.o", | 840 | .crtend = "crtend.o", |
| | 841 | .crtn = "crtn.o", |
| 811 | }, | 842 | }, |
| 812 | .static_pie => .{ | 843 | .static_pie => .{ |
| 813 | .crt0 = "Scrt1.o", | 844 | .crt0 = "Scrt1.o", |
| | 845 | .crti = "crti.o", |
| 814 | .crtbegin = "crtbeginS.o", | 846 | .crtbegin = "crtbeginS.o", |
| 815 | .crtend = "crtendS.o", | 847 | .crtend = "crtendS.o", |
| | 848 | .crtn = "crtn.o", |
| 816 | }, | 849 | }, |
| 817 | }, | 850 | }, |
| 818 | .netbsd => switch (mode) { | 851 | .netbsd => switch (mode) { |
| 819 | .dynamic_lib => .{ | 852 | .dynamic_lib => .{ |
| | 853 | .crti = "crti.o", |
| 820 | .crtbegin = "crtbeginS.o", | 854 | .crtbegin = "crtbeginS.o", |
| 821 | .crtend = "crtendS.o", | 855 | .crtend = "crtendS.o", |
| | 856 | .crtn = "crtn.o", |
| 822 | }, | 857 | }, |
| 823 | .dynamic_exe => .{ | 858 | .dynamic_exe => .{ |
| 824 | .crt0 = "crt0.o", | 859 | .crt0 = "crt0.o", |
| | 860 | .crti = "crti.o", |
| 825 | .crtbegin = "crtbegin.o", | 861 | .crtbegin = "crtbegin.o", |
| 826 | .crtend = "crtend.o", | 862 | .crtend = "crtend.o", |
| | 863 | .crtn = "crtn.o", |
| 827 | }, | 864 | }, |
| 828 | .dynamic_pie => .{ | 865 | .dynamic_pie => .{ |
| 829 | .crt0 = "crt0.o", | 866 | .crt0 = "crt0.o", |
| | 867 | .crti = "crti.o", |
| 830 | .crtbegin = "crtbeginS.o", | 868 | .crtbegin = "crtbeginS.o", |
| 831 | .crtend = "crtendS.o", | 869 | .crtend = "crtendS.o", |
| | 870 | .crtn = "crtn.o", |
| 832 | }, | 871 | }, |
| 833 | .static_exe => .{ | 872 | .static_exe => .{ |
| 834 | .crt0 = "crt0.o", | 873 | .crt0 = "crt0.o", |
| | 874 | .crti = "crti.o", |
| 835 | .crtbegin = "crtbeginT.o", | 875 | .crtbegin = "crtbeginT.o", |
| 836 | .crtend = "crtend.o", | 876 | .crtend = "crtend.o", |
| | 877 | .crtn = "crtn.o", |
| 837 | }, | 878 | }, |
| 838 | .static_pie => .{ | 879 | .static_pie => .{ |
| 839 | .crt0 = "crt0.o", | 880 | .crt0 = "crt0.o", |
| | 881 | .crti = "crti.o", |
| 840 | .crtbegin = "crtbeginT.o", | 882 | .crtbegin = "crtbeginT.o", |
| 841 | .crtend = "crtendS.o", | 883 | .crtend = "crtendS.o", |
| | 884 | .crtn = "crtn.o", |
| 842 | }, | 885 | }, |
| 843 | }, | 886 | }, |
| 844 | .openbsd => switch (mode) { | 887 | .openbsd => switch (mode) { |
| ... | @@ -859,34 +902,49 @@ pub const CrtBasenames = struct { | ... | @@ -859,34 +902,49 @@ pub const CrtBasenames = struct { |
| 859 | }, | 902 | }, |
| 860 | .haiku => switch (mode) { | 903 | .haiku => switch (mode) { |
| 861 | .dynamic_lib => .{ | 904 | .dynamic_lib => .{ |
| | 905 | .crti = "crti.o", |
| 862 | .crtbegin = "crtbeginS.o", | 906 | .crtbegin = "crtbeginS.o", |
| 863 | .crtend = "crtendS.o", | 907 | .crtend = "crtendS.o", |
| | 908 | .crtn = "crtn.o", |
| 864 | }, | 909 | }, |
| 865 | .dynamic_exe => .{ | 910 | .dynamic_exe => .{ |
| 866 | .crt0 = "start_dyn.o", | 911 | .crt0 = "start_dyn.o", |
| | 912 | .crti = "crti.o", |
| 867 | .crtbegin = "crtbegin.o", | 913 | .crtbegin = "crtbegin.o", |
| 868 | .crtend = "crtend.o", | 914 | .crtend = "crtend.o", |
| | 915 | .crtn = "crtn.o", |
| 869 | }, | 916 | }, |
| 870 | .dynamic_pie => .{ | 917 | .dynamic_pie => .{ |
| 871 | .crt0 = "start_dyn.o", | 918 | .crt0 = "start_dyn.o", |
| | 919 | .crti = "crti.o", |
| 872 | .crtbegin = "crtbeginS.o", | 920 | .crtbegin = "crtbeginS.o", |
| 873 | .crtend = "crtendS.o", | 921 | .crtend = "crtendS.o", |
| | 922 | .crtn = "crtn.o", |
| 874 | }, | 923 | }, |
| 875 | .static_exe => .{ | 924 | .static_exe => .{ |
| 876 | .crt0 = "start_dyn.o", | 925 | .crt0 = "start_dyn.o", |
| | 926 | .crti = "crti.o", |
| 877 | .crtbegin = "crtbegin.o", | 927 | .crtbegin = "crtbegin.o", |
| 878 | .crtend = "crtend.o", | 928 | .crtend = "crtend.o", |
| | 929 | .crtn = "crtn.o", |
| 879 | }, | 930 | }, |
| 880 | .static_pie => .{ | 931 | .static_pie => .{ |
| 881 | .crt0 = "start_dyn.o", | 932 | .crt0 = "start_dyn.o", |
| | 933 | .crti = "crti.o", |
| 882 | .crtbegin = "crtbeginS.o", | 934 | .crtbegin = "crtbeginS.o", |
| 883 | .crtend = "crtendS.o", | 935 | .crtend = "crtendS.o", |
| | 936 | .crtn = "crtn.o", |
| 884 | }, | 937 | }, |
| 885 | }, | 938 | }, |
| 886 | .solaris, .illumos => switch (mode) { | 939 | .solaris, .illumos => switch (mode) { |
| 887 | .dynamic_lib => .{}, | 940 | .dynamic_lib => .{ |
| | 941 | .crti = "crti.o", |
| | 942 | .crtn = "crtn.o", |
| | 943 | }, |
| 888 | .dynamic_exe, .dynamic_pie => .{ | 944 | .dynamic_exe, .dynamic_pie => .{ |
| 889 | .crt0 = "crt1.o", | 945 | .crt0 = "crt1.o", |
| | 946 | .crti = "crti.o", |
| | 947 | .crtn = "crtn.o", |
| 890 | }, | 948 | }, |
| 891 | .static_exe, .static_pie => .{}, | 949 | .static_exe, .static_pie => .{}, |
| 892 | }, | 950 | }, |
| ... | @@ -897,8 +955,10 @@ pub const CrtBasenames = struct { | ... | @@ -897,8 +955,10 @@ pub const CrtBasenames = struct { |
| 897 | | 955 | |
| 898 | pub const CrtPaths = struct { | 956 | pub const CrtPaths = struct { |
| 899 | crt0: ?Path = null, | 957 | crt0: ?Path = null, |
| | 958 | crti: ?Path = null, |
| 900 | crtbegin: ?Path = null, | 959 | crtbegin: ?Path = null, |
| 901 | crtend: ?Path = null, | 960 | crtend: ?Path = null, |
| | 961 | crtn: ?Path = null, |
| 902 | }; | 962 | }; |
| 903 | | 963 | |
| 904 | pub fn resolveCrtPaths( | 964 | pub fn resolveCrtPaths( |
| ... | @@ -920,6 +980,7 @@ pub fn resolveCrtPaths( | ... | @@ -920,6 +980,7 @@ pub fn resolveCrtPaths( |
| 920 | }) orelse true) "gcc80" else "gcc54"; | 980 | }) orelse true) "gcc80" else "gcc54"; |
| 921 | return .{ | 981 | return .{ |
| 922 | .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, | 982 | .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, |
| | 983 | .crti = if (crt_basenames.crti) |basename| try crt_dir_path.join(arena, basename) else null, |
| 923 | .crtbegin = if (crt_basenames.crtbegin) |basename| .{ | 984 | .crtbegin = if (crt_basenames.crtbegin) |basename| .{ |
| 924 | .root_dir = crt_dir_path.root_dir, | 985 | .root_dir = crt_dir_path.root_dir, |
| 925 | .sub_path = try fs.path.join(arena, &.{ crt_dir_path.sub_path, gccv, basename }), | 986 | .sub_path = try fs.path.join(arena, &.{ crt_dir_path.sub_path, gccv, basename }), |
| ... | @@ -928,6 +989,7 @@ pub fn resolveCrtPaths( | ... | @@ -928,6 +989,7 @@ pub fn resolveCrtPaths( |
| 928 | .root_dir = crt_dir_path.root_dir, | 989 | .root_dir = crt_dir_path.root_dir, |
| 929 | .sub_path = try fs.path.join(arena, &.{ crt_dir_path.sub_path, gccv, basename }), | 990 | .sub_path = try fs.path.join(arena, &.{ crt_dir_path.sub_path, gccv, basename }), |
| 930 | } else null, | 991 | } else null, |
| | 992 | .crtn = if (crt_basenames.crtn) |basename| try crt_dir_path.join(arena, basename) else null, |
| 931 | }; | 993 | }; |
| 932 | }, | 994 | }, |
| 933 | .haiku => { | 995 | .haiku => { |
| ... | @@ -937,15 +999,19 @@ pub fn resolveCrtPaths( | ... | @@ -937,15 +999,19 @@ pub fn resolveCrtPaths( |
| 937 | }; | 999 | }; |
| 938 | return .{ | 1000 | return .{ |
| 939 | .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, | 1001 | .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, |
| | 1002 | .crti = if (crt_basenames.crti) |basename| try crt_dir_path.join(arena, basename) else null, |
| 940 | .crtbegin = if (crt_basenames.crtbegin) |basename| try gcc_dir_path.join(arena, basename) else null, | 1003 | .crtbegin = if (crt_basenames.crtbegin) |basename| try gcc_dir_path.join(arena, basename) else null, |
| 941 | .crtend = if (crt_basenames.crtend) |basename| try gcc_dir_path.join(arena, basename) else null, | 1004 | .crtend = if (crt_basenames.crtend) |basename| try gcc_dir_path.join(arena, basename) else null, |
| | 1005 | .crtn = if (crt_basenames.crtn) |basename| try crt_dir_path.join(arena, basename) else null, |
| 942 | }; | 1006 | }; |
| 943 | }, | 1007 | }, |
| 944 | else => { | 1008 | else => { |
| 945 | return .{ | 1009 | return .{ |
| 946 | .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, | 1010 | .crt0 = if (crt_basenames.crt0) |basename| try crt_dir_path.join(arena, basename) else null, |
| | 1011 | .crti = if (crt_basenames.crti) |basename| try crt_dir_path.join(arena, basename) else null, |
| 947 | .crtbegin = if (crt_basenames.crtbegin) |basename| try crt_dir_path.join(arena, basename) else null, | 1012 | .crtbegin = if (crt_basenames.crtbegin) |basename| try crt_dir_path.join(arena, basename) else null, |
| 948 | .crtend = if (crt_basenames.crtend) |basename| try crt_dir_path.join(arena, basename) else null, | 1013 | .crtend = if (crt_basenames.crtend) |basename| try crt_dir_path.join(arena, basename) else null, |
| | 1014 | .crtn = if (crt_basenames.crtn) |basename| try crt_dir_path.join(arena, basename) else null, |
| 949 | }; | 1015 | }; |
| 950 | }, | 1016 | }, |
| 951 | } | 1017 | } |