Hi, I updated the patch as per the suggestions from reviewers. I request you to kindly see the revised patch.
Thanks Sriram Sent from my iPad > On Oct 3, 2013, at 5:16 PM, "Murali, Sriram" <[email protected]> wrote: > > Hi there, > I am attempting to cross-compile for Arm devices on a x86 machine. Looks like > clang is picking up library paths in the wrong order, that it chose a > different library file in /usr/lib32 directory, since I am compiling for arm. > So, I worked around it by choosing the libpath of GNU cross compiler for arm > instead. > > Further, there was a problem including the right header files from bits/ > directory. So, I made sure clang picked it up from the GNU cross compiler > include directory. However, clang did not have support to pick up include > files from GCC version with no Patch, for example "4.8.0", where GCC version > is of the format "Major.Minor.Patch". It looks at 4.8 instead. But, gnu cross > compiler is packed such that the include files are in a directory with name > 4.8.0. So, if the Version.Patch is -1 (which is unset for versions with no > Patch) , we should pick the directory with Patch = 0. > > Please review the patch, and see if it can be improved. > > Thanks > Sriram > > > -----Original Message----- > From: Sriram Murali [mailto:[email protected]] > Sent: Thursday, October 03, 2013 5:06 PM > To: Murali, Sriram; [email protected] > Cc: [email protected] > Subject: [PATCH] Support cross-compiling for Arm on a x86 Linux machine > > Hi msriram, > > This patch enables cross-compiling for Arm devices on x86 linux machine. > It adds include and lib path to the environment looked up by Clang. On Ubuntu > (possibly Debian), this will be in /usr/arm-linux-gnueabi. Clang chose a > different path instead. > > Tested on Ubuntu > > http://llvm-reviews.chandlerc.com/D1823 > > Files: > lib/Driver/ToolChains.cpp > > Index: lib/Driver/ToolChains.cpp > =================================================================== > --- lib/Driver/ToolChains.cpp > +++ lib/Driver/ToolChains.cpp > @@ -2320,6 +2320,9 @@ > GCCInstallation.getMultiLibSuffix(), > Paths); > > + // Add correct path for library crt1.o used for cross-compiling arm on > + // Debian (Ubuntu) > + addPathIfExists(LibPath + "/../" + GCCTriple.str() + "/lib/", > + Paths); > // If the GCC installation we found is inside of the sysroot, we want to > // prefer libraries installed in the parent prefix of the GCC > installation. > // It is important to *not* use these paths when the GCC installation is > @@ -2590,6 +2593,23 @@ > StringRef BiarchSuffix = GCCInstallation.getBiarchSuffix(); > const GCCVersion &Version = GCCInstallation.getVersion(); > > + // Find include files for cross-compiler in GCC Version > + {Major.Minor.0}, // instead of just {Major.Minor} for versions with > + no patch, i.e Patch = -1 if (Version.Patch == -1) { > + if (addLibStdCXXIncludePaths(LibDir.str() + "/../" + TripleStr + > "/include", > + "/c++/" + Version.Text + ".0", TripleStr, > + MultiLibSuffix + BiarchSuffix, DriverArgs, > + CC1Args) > + ) > + return; > + } else { > + if (addLibStdCXXIncludePaths(LibDir.str() + "/../" + TripleStr + > "/include", > + "/c++/" + Version.Text, TripleStr, > + MultiLibSuffix + BiarchSuffix, DriverArgs, > + CC1Args)) > + return; > + } > + > if (addLibStdCXXIncludePaths( > LibDir.str() + "/../include", "/c++/" + Version.Text, TripleStr, > MultiLibSuffix + BiarchSuffix, DriverArgs, CC1Args)) > <D1823.1.patch> > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
