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