@@ -44,9 +44,7 @@ static std::string getMultiarchTriple(const Driver &D,
44
44
llvm::Triple::EnvironmentType TargetEnvironment =
45
45
TargetTriple.getEnvironment ();
46
46
bool IsAndroid = TargetTriple.isAndroid ();
47
- std::string Mips64Abi = " gnuabi64" ;
48
- if (TargetEnvironment == llvm::Triple::GNUABIN32)
49
- Mips64Abi = " gnuabin32" ;
47
+ bool IsMipsR6 = TargetTriple.getSubArch () == llvm::Triple::MipsSubArch_r6;
50
48
51
49
// For most architectures, just use whatever we have rather than trying to be
52
50
// clever.
@@ -104,26 +102,36 @@ static std::string getMultiarchTriple(const Driver &D,
104
102
if (D.getVFS ().exists (SysRoot + " /lib/aarch64_be-linux-gnu" ))
105
103
return " aarch64_be-linux-gnu" ;
106
104
break ;
107
- case llvm::Triple::mips:
108
- if (D.getVFS ().exists (SysRoot + " /lib/mips-linux-gnu" ))
109
- return " mips-linux-gnu" ;
105
+ case llvm::Triple::mips: {
106
+ std::string Arch = IsMipsR6 ? " mipsisa32r6" : " mips" ;
107
+ if (D.getVFS ().exists (SysRoot + " /lib/" + Arch + " -linux-gnu" ))
108
+ return Arch + " -linux-gnu" ;
110
109
break ;
111
- case llvm::Triple::mipsel:
110
+ }
111
+ case llvm::Triple::mipsel: {
112
112
if (IsAndroid)
113
113
return " mipsel-linux-android" ;
114
- if (D.getVFS ().exists (SysRoot + " /lib/mipsel-linux-gnu" ))
115
- return " mipsel-linux-gnu" ;
114
+ std::string Arch = IsMipsR6 ? " mipsisa32r6el" : " mipsel" ;
115
+ if (D.getVFS ().exists (SysRoot + " /lib/" + Arch + " -linux-gnu" ))
116
+ return Arch + " -linux-gnu" ;
116
117
break ;
117
- case llvm::Triple::mips64:
118
- if (D.getVFS ().exists (SysRoot + " /lib/mips64-linux-" + Mips64Abi))
119
- return " mips64-linux-" + Mips64Abi;
118
+ }
119
+ case llvm::Triple::mips64: {
120
+ std::string Arch = IsMipsR6 ? " mipsisa64r6" : " mips64" ;
121
+ std::string ABI = llvm::Triple::getEnvironmentTypeName (TargetEnvironment);
122
+ if (D.getVFS ().exists (SysRoot + " /lib/" + Arch + " -linux-" + ABI))
123
+ return Arch + " -linux-" + ABI;
120
124
break ;
121
- case llvm::Triple::mips64el:
125
+ }
126
+ case llvm::Triple::mips64el: {
122
127
if (IsAndroid)
123
128
return " mips64el-linux-android" ;
124
- if (D.getVFS ().exists (SysRoot + " /lib/mips64el-linux-" + Mips64Abi))
125
- return " mips64el-linux-" + Mips64Abi;
129
+ std::string Arch = IsMipsR6 ? " mipsisa64r6el" : " mips64el" ;
130
+ std::string ABI = llvm::Triple::getEnvironmentTypeName (TargetEnvironment);
131
+ if (D.getVFS ().exists (SysRoot + " /lib/" + Arch + " -linux-" + ABI))
132
+ return Arch + " -linux-" + ABI;
126
133
break ;
134
+ }
127
135
case llvm::Triple::ppc:
128
136
if (D.getVFS ().exists (SysRoot + " /lib/powerpc-linux-gnuspe" ))
129
137
return " powerpc-linux-gnuspe" ;
@@ -697,14 +705,25 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
697
705
const StringRef MIPSELMultiarchIncludeDirs[] = {
698
706
" /usr/include/mipsel-linux-gnu" };
699
707
const StringRef MIPS64MultiarchIncludeDirs[] = {
700
- " /usr/include/mips64-linux-gnu " , " /usr/include/mips64-linux- gnuabi64" };
708
+ " /usr/include/mips64-linux-gnuabi64" };
701
709
const StringRef MIPS64ELMultiarchIncludeDirs[] = {
702
- " /usr/include/mips64el-linux-gnu" ,
703
710
" /usr/include/mips64el-linux-gnuabi64" };
704
711
const StringRef MIPSN32MultiarchIncludeDirs[] = {
705
712
" /usr/include/mips64-linux-gnuabin32" };
706
713
const StringRef MIPSN32ELMultiarchIncludeDirs[] = {
707
714
" /usr/include/mips64el-linux-gnuabin32" };
715
+ const StringRef MIPSR6MultiarchIncludeDirs[] = {
716
+ " /usr/include/mipsisa32-linux-gnu" };
717
+ const StringRef MIPSR6ELMultiarchIncludeDirs[] = {
718
+ " /usr/include/mipsisa32r6el-linux-gnu" };
719
+ const StringRef MIPS64R6MultiarchIncludeDirs[] = {
720
+ " /usr/include/mipsisa64r6-linux-gnuabi64" };
721
+ const StringRef MIPS64R6ELMultiarchIncludeDirs[] = {
722
+ " /usr/include/mipsisa64r6el-linux-gnuabi64" };
723
+ const StringRef MIPSN32R6MultiarchIncludeDirs[] = {
724
+ " /usr/include/mipsisa64r6-linux-gnuabin32" };
725
+ const StringRef MIPSN32R6ELMultiarchIncludeDirs[] = {
726
+ " /usr/include/mipsisa64r6el-linux-gnuabin32" };
708
727
const StringRef PPCMultiarchIncludeDirs[] = {
709
728
" /usr/include/powerpc-linux-gnu" ,
710
729
" /usr/include/powerpc-linux-gnuspe" };
@@ -745,19 +764,35 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
745
764
MultiarchIncludeDirs = ARMEBMultiarchIncludeDirs;
746
765
break ;
747
766
case llvm::Triple::mips:
748
- MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;
767
+ if (getTriple ().getSubArch () == llvm::Triple::MipsSubArch_r6)
768
+ MultiarchIncludeDirs = MIPSR6MultiarchIncludeDirs;
769
+ else
770
+ MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;
749
771
break ;
750
772
case llvm::Triple::mipsel:
751
- MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs;
773
+ if (getTriple ().getSubArch () == llvm::Triple::MipsSubArch_r6)
774
+ MultiarchIncludeDirs = MIPSR6ELMultiarchIncludeDirs;
775
+ else
776
+ MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs;
752
777
break ;
753
778
case llvm::Triple::mips64:
754
- if (getTriple ().getEnvironment () == llvm::Triple::GNUABIN32)
779
+ if (getTriple ().getSubArch () == llvm::Triple::MipsSubArch_r6)
780
+ if (getTriple ().getEnvironment () == llvm::Triple::GNUABIN32)
781
+ MultiarchIncludeDirs = MIPSN32R6MultiarchIncludeDirs;
782
+ else
783
+ MultiarchIncludeDirs = MIPS64R6MultiarchIncludeDirs;
784
+ else if (getTriple ().getEnvironment () == llvm::Triple::GNUABIN32)
755
785
MultiarchIncludeDirs = MIPSN32MultiarchIncludeDirs;
756
786
else
757
787
MultiarchIncludeDirs = MIPS64MultiarchIncludeDirs;
758
788
break ;
759
789
case llvm::Triple::mips64el:
760
- if (getTriple ().getEnvironment () == llvm::Triple::GNUABIN32)
790
+ if (getTriple ().getSubArch () == llvm::Triple::MipsSubArch_r6)
791
+ if (getTriple ().getEnvironment () == llvm::Triple::GNUABIN32)
792
+ MultiarchIncludeDirs = MIPSN32R6ELMultiarchIncludeDirs;
793
+ else
794
+ MultiarchIncludeDirs = MIPS64R6ELMultiarchIncludeDirs;
795
+ else if (getTriple ().getEnvironment () == llvm::Triple::GNUABIN32)
761
796
MultiarchIncludeDirs = MIPSN32ELMultiarchIncludeDirs;
762
797
else
763
798
MultiarchIncludeDirs = MIPS64ELMultiarchIncludeDirs;
0 commit comments