summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChains.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Make a major refactoring to how the GCC installation detection works.Chandler Carruth2012-01-251-125/+197
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fundamental shift here is to stop making *any* assumptions about the *host* triple. Where these assumptions you ask? Why, they were in one of the two target triples referenced of course. This was the single biggest place where the previously named "host triple" was actually used as such. ;] The reason we were reasoning about the host is in order to detect the use of '-m32' or '-m64' flags to change the target. These flags shift the default target only slightly, which typically means a slight deviation from the host. When using these flags, the GCC installation is under a different triple from the one actually targeted in the compilation, and we used the host triple to find it. Too bad that wasn't even correct. Consider an x86 Linux host which has a PPC64 cross-compiling GCC toolchain installed. This toolchain is also configured for multiarch compiling and can target PPC32 with eth '-m32' flag. When targeting 'powerpc-linux-gnu' or some other PPC32 triple, we have to look for the PPC64 variant of the triple to find the GCC install, and that triple is neither the host nor target. The new logic computes the multiarch's alternate triple from the target triple, and looks under both sides. It also looks more aggressively for the correct subdirectory of the GCC installation, and exposes the subdirectory in a nice programmatic way. This '/32' or '/64' suffix is something we can reuse in many other parts of the toolchain. An important note -- while this likely fixes a large category of cross-compile use cases, that's not my primary goal, and I've not done testing (or added test cases) for scenarios that may now work. If someone else wants to try more interesting PPC cross compiles, I'd love to have reports. But my focus is on factoring away the references to the "host" triple. The refactoring is my goal, and so I'm mostly relying on the existing (pretty good) test coverage we have here. Future patches will leverage this new functionality to factor out more and more of the toolchain's triple manipulation. llvm-svn: 148935
* Fix one of the (larger) FIXMEs where we were misusing the Driver's ideaChandler Carruth2012-01-241-19/+23
| | | | | | | | | | | | | | | | | | | | | of the target triple to stand in for the "host" triple. Thanks to a great conversation with Richard Smith, I'm now much more confident in how this is proceeding. In all of the places where we currently reason about the "host" architecture or triple, what we really want to reason about in the detected GCC installation architecture or triple, and the ways in which that differs from the target. When we find a GCC installation with a different triple from our target *but capable of targeting our target* through an option such as '-m64', we want to detect *that* case and change the paths within the GCC installation (and libstdc++ installation) to reflect this difference. This patch makes one function do this correctly. Subsequent commits will hoist the logic used here into the GCCInstallation utility, and then reuse it through the rest of the toolchains to fix the remaining places where this is currently happening. llvm-svn: 148852
* Address one part of the FIXME I introduced my switching the tripleChandler Carruth2012-01-241-13/+12
| | | | | | | | | | inside of GCCInstallation to be a proper llvm::Triple. This is still a touch ugly because we have to use it as a string in so many places, but I think on the whole the more structured representation is better. Comments of course welcome if this tradeoff isn't working for folks. llvm-svn: 148843
* At least within these classes, consistently spell 'GCC' as 'GCC'.Chandler Carruth2012-01-241-18/+18
| | | | | | | | I can't read Java-style 'Gcc' acronyms. ;] No functionality changed. llvm-svn: 148840
* Start hoisting the logic for computing the target triple into its ownChandler Carruth2012-01-241-10/+14
| | | | | | | | | | | | | | | | | | | | | | function. The logic for this, and I want to emphasize that this is the logic for computing the *target* triple, is currently scattered throughout various different HostInfo classes ToolChain factoring functions. Best part, it is largely *duplicated* there. The goal is to hoist all of that up to here where we can deal with it once, and in a consistent manner. Unfortunately, this uncovers more fun problems: the ToolChains assume that the *actual* target triple is the one passed into them by these factory functions, while the *host* triple is the one in the driver. This already was a lie, and a damn lie, when the '-target' flag was specified. It only really worked when the difference stemmed from '-m32' and '-m64' flags. I'll have to fix that (and remove all the FIXMEs I've introduced here to document the problem) before I can finish hoisting the target-calculation logic. It's bugs all the way down today it seems... llvm-svn: 148839
* Make the auto-detection hack for the iOS simulator set the target triple ↵Eli Friedman2012-01-161-22/+25
| | | | | | correctly. Getting the target triple wrong mostly appears to work, but messes up in subtle cases; for example, we incorrectly conclude that fwrite is actually named fwrite$UNIX2003. Also shuffles around the auto-detection code a bit to try and make it a bit more reliable. Fixes <rdar://problem/10664848>. llvm-svn: 148249
* rename DefaultHostTriple into DefaultTargetTripleSebastian Pop2012-01-131-6/+6
| | | | llvm-svn: 148137
* Remove --hash-style from link command on Android.Evgeniy Stepanov2012-01-131-1/+4
| | | | | | Gnu hash is not supported by the Android loader. llvm-svn: 148113
* Revert changes to lib/Driver in r147917; I didn't mean to commit this.Eli Friedman2012-01-111-20/+19
| | | | llvm-svn: 147920
* Start refactoring code for capturing variables and 'this' so that it is ↵Eli Friedman2012-01-111-19/+20
| | | | | | shared between lambda expressions and block literals. llvm-svn: 147917
* Add support for the androideabi environment to our triple support, andChandler Carruth2012-01-101-1/+4
| | | | | | | | | | for the arm-linux-androideabi triple in particular. Also use this to do a better job of selecting soft FP settings. Patch by Evgeniy Stepanov. llvm-svn: 147872
* Handle a /etc/debian_version with a version number instead of a codename.Rafael Espindola2011-12-281-2/+2
| | | | | | Patch by Sylvestre Ledru. Fixes PR11673. llvm-svn: 147313
* Unweaken vtables as per ↵David Blaikie2011-12-201-0/+2
| | | | | | http://llvm.org/docs/CodingStandards.html#ll_virtual_anch llvm-svn: 146959
* Split the Windows toolchain definition into its own file. This isChandler Carruth2011-12-171-363/+4
| | | | | | | | | | | | | | | especially nice as the Windows toolchain needs the windows header files, and has lots of platform specific hooks in it. To facilitate the split, hoist a bunch of file-level static helpers into class-level static helpers. Spiff up their doxygen comments while there as they're now more likely to be looked up via docs. Hopefully, this will be followed by further breaking apart of the toolchain definitions. Most of the large and complex ones should likely live on their own. I'm looking at you Darwin. ;] llvm-svn: 146840
* Hexagon backend supportTony Linthicum2011-12-121-0/+67
| | | | llvm-svn: 146413
* Fix the --hash-style option when the target is MIPS as it isChandler Carruth2011-12-091-7/+18
| | | | | | | | incompatible with the MIPS ABI. Patch by Simon Atanasyan. llvm-svn: 146243
* Misc Minix-specific changes to clang:Eli Friedman2011-12-081-3/+1
| | | | | | | | | | | . move compiler-rt to a separate directory so the -L argument only includes compiler-rt (thanks joerg) . build all clang subdirs . switches the Minix platform to ELF . normalizes toolchain invocation Patch by Ben Gras. llvm-svn: 146206
* Allow clang to find gcc libs on suse ppc64Hal Finkel2011-12-081-1/+14
| | | | llvm-svn: 146142
* Driver: Add a --rtlib={compiler-rt,libgcc} argument which I plan to use to allowDaniel Dunbar2011-12-071-0/+10
| | | | | | dual support for compiler-rt on Linux, during bringup. llvm-svn: 146094
* Fix multilib library paths on ppc64 Linux. Patch by Michael Kostylev. PR11472.Eli Friedman2011-12-071-2/+9
| | | | llvm-svn: 146016
* [asan] Mac: do not link dynamic libs with the asan-rt, use -undefined ↵Kostya Serebryany2011-12-061-1/+4
| | | | | | dynamic_lookup for dynamic libs. Style fixes. Patch by glider@google.com llvm-svn: 145955
* Driver/Darwin: Add ASAN runtime library link support.Daniel Dunbar2011-12-011-0/+16
| | | | llvm-svn: 145651
* A couple driver fixes for PPC Linux. Patches by Michael Kostylev. ↵Eli Friedman2011-11-281-1/+2
| | | | | | PR11444/PR11445. llvm-svn: 145321
* clang/Darwin: Use the compiler-rt provided profile library.Daniel Dunbar2011-11-171-0/+13
| | | | llvm-svn: 144869
* Search for libstdc++.dylib in llvm-gcc's files on darwin10. rdar://10419079Bob Wilson2011-11-111-0/+5
| | | | llvm-svn: 144381
* Add Linux multiarch include directories for mips/mipsel. Patch from Simon ↵Eli Friedman2011-11-111-0/+10
| | | | | | Atanasyan. llvm-svn: 144358
* Fix an issue that Duncan discovered on a specific (no longer current)Chandler Carruth2011-11-091-8/+6
| | | | | | | | | | | | version of Ubuntu. It has a very broken multiarch configuration, and so we need special logic to handle it correctly. Fixing and testing this uncovered a few other trivial issues with the logic that are fixed as well. I added tests to cover this as it is hard to notice if you install recent versions of the OS. llvm-svn: 144165
* Misc fixes for clang driver on Mips Linux. Patch by Simon Atanasyan.Eli Friedman2011-11-081-0/+24
| | | | llvm-svn: 144108
* Add a default system include of '/include'. This isn't particularlyChandler Carruth2011-11-081-0/+5
| | | | | | | | | | | | useful when using Clang as a system-compiler, but its harmless. When using Clang as a cross-compiler, this can be very handy as quite a few toolchains ship their libc headers here rather than under '/usr/include'. For reference, this is the beginning of my work to also make the Clang driver more suitable as a cross-compiler. llvm-svn: 144089
* Rip out one of the features I added for the driver-include-management.Chandler Carruth2011-11-071-8/+2
| | | | | | | | | | | | | | | | We don't actually need a separate flag for non-sysrooted paths as the driver has to manage the sysroot anyways. The driver is not infrequently adding paths to the header search based on their existence on the filesystem. For that, it has to add the sysroot anyways, we should pass it on down to CC1 already joined. More importantly, the driver cannot in all cases distinguish between sysrooted paths and paths that are relative to the Clang binary's installation directory. Essentially, we always need to ignore the system root for these internal header search options. It turns out in most of the places we were already providing the system root in the driver, and then another one in CC1 so this fixes several bugs. llvm-svn: 143917
* Fix Linux libc++ usage. Somehow this slipped through during the port.Chandler Carruth2011-11-071-0/+8
| | | | | | | Test cases for this and all the rest of the port are still in the works, but will wait for a fixed computer and post 3.0 merging... llvm-svn: 143916
* Begin lifting some of the one-off checking logic into generic helperChandler Carruth2011-11-061-5/+3
| | | | | | routines on the base toolchain class. llvm-svn: 143900
* Move the GCC installation detection logic down into the Generic_GCCChandler Carruth2011-11-061-238/+239
| | | | | | | | | | toolchain. The logic is mostly generic already, and where possible should be made more generic. Also, it has no impact other than to expose a set of methods which each toolchain can then query to setup their desired configuration. These should be available to toolchains beyond just Linux. llvm-svn: 143899
* Remove an old OpenSUSE hack that is no longer needed -- it is exactlyChandler Carruth2011-11-061-5/+0
| | | | | | the same as a directory added further down in the new logic. llvm-svn: 143897
* Remove the HasMultilib check. It was essentially useless. The driver nowChandler Carruth2011-11-061-43/+25
| | | | | | | looks for evidence of a multilib installation, and adds the appropriate bits to the search paths. llvm-svn: 143896
* The version objects need to actually store the version strings; theyChandler Carruth2011-11-061-4/+4
| | | | | | aren't guaranteed to live long enough otherwise. llvm-svn: 143875
* Throw the switch and move all Linux header search over to the GCCChandler Carruth2011-11-061-334/+48
| | | | | | | | | | | | | | | | | | | | detection system that is providing the library paths and crt object files. This, modulo any bugs that need to be shaken out, resolves numerous bugs with how we handle header paths. Here are a few that I know of: - We no longer need to enumerate all GCC versions searched. - OpenSUSE searched GCC versions in the wrong order. - There were typos when selecting various patterns, etc. - We aren't stating quite some many directories now. - SysRoot didn't always work in a reasonable way. I'm working on tests for this, but the tests are making me and Lit sad. The real testing for this type of driver change is to try it out on various distributions. I'll hit the common ones right away, and start more thorough testing tomorrow after some sleep. llvm-svn: 143874
* Add a missing triple spotted by inspecting and testing of the includeChandler Carruth2011-11-061-1/+2
| | | | | | path triples. Also order the 32-bit triples a bit more reasonably. llvm-svn: 143873
* Lift the GCCVersion type into the header file and start persisting it inChandler Carruth2011-11-061-81/+55
| | | | | | | the detected GCC installation. This allows us to expose another aspect of what we detected: the GCC version. This will be used shortly. llvm-svn: 143871
* Switch some of these interfaces from std::string to StringRef and Twine.Chandler Carruth2011-11-061-5/+4
| | | | | | This will facilitate further use and recombinations of them. llvm-svn: 143869
* Take a better approach to detecting and selecting multiarch includeChandler Carruth2011-11-061-14/+35
| | | | | | | | directories. This way we stop at the first multiarch directory found on the system. This achieves the real intended result of pruning non-existent directories. llvm-svn: 143866
* Revert r143864, as the problem I was actually looking at can be solvedChandler Carruth2011-11-061-12/+0
| | | | | | | | | | | | | | | | | | | | a better way. The more I think about it the more worried I am that this hammer is simply too large. We should only be reaching out to the filesystem when doing interesting "detection" things, not gratuitously. Original commit message: Start pruning down the set of flags passed to CC1 for header search. This cleans up the CC1 invocations, and reduces the overhead there. We're still hammering the filesystem looking for the C++ standard libraries though. The only reservation I have about this policy is the case of virtualized files inside of CC1, but it's not clear what the best way to solve that is. The Driver consistently queries the actual filesystem to make its decisions. Changing that would be a very large undertaking. It might be worthwhile, but it's not an immediate goal. llvm-svn: 143865
* Start pruning down the set of flags passed to CC1 for header search.Chandler Carruth2011-11-061-0/+12
| | | | | | | | | | | | | | This cleans up the CC1 invocations, and reduces the overhead there. We're still hammering the filesystem looking for the C++ standard libraries though. The only reservation I have about this policy is the case of virtualized files inside of CC1, but it's not clear what the best way to solve that is. The Driver consistently queries the actual filesystem to make its decisions. Changing that would be a very large undertaking. It might be worthwhile, but it's not an immediate goal. llvm-svn: 143864
* Enhance the GCC version parsing and comparison logic to handle some moreChandler Carruth2011-11-051-18/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | edge cases and have better behavior. Specifically, we should actually prefer the general '4.6' version string over the '4.6.1' string, as '4.6.2' should be able to replace it without breaking rpaths or any other place that these paths have been embedded. Debian-based distributions are already using a path structure with symlinks to achieve in-place upgrades for patch versions. Now our parsing reflects this and we select the shorter paths instead of the longer paths. A separate issue was that we would not parse a leading patch version number even in the presence of a suffix. The above change makes this more problematic as it would cause a suffix being added to make us treat the entire thing as patch-version-agnostic, which it isn't. This changes the logic to distinguish between '4.4.x' and 4.4.1-x', and retain that the latter has *some* patch number information. Currently, we always bias toward the shorter and more canonical version strings. If it becomes important we can add more Debian like rules to produce sequences such as '4.4.1b' > '4.4.1' > '4.4.1-rc3' > '4.4.1-rc2' > '4.4.1-pre5', but I'm very doubtful this will ever matter or be desirable. I've made the tests for this logic a bit more interesting, and added some specific tests for logic that is now different. llvm-svn: 143841
* Remove a pointless member. I have no idea why I made this not a localChandler Carruth2011-11-051-2/+2
| | | | | | | | variable to begin with... As I'm planning to add include root information to this object, this would have caused confusion. It didn't even *actually* hold the include root by the time we were done with it. llvm-svn: 143840
* Remove a no-longer needed helper function. Thanks for implementing thisChandler Carruth2011-11-051-12/+4
| | | | | | Michael! llvm-svn: 143839
* Move the GCC installation detection helper a member of the LinuxChandler Carruth2011-11-051-236/+203
| | | | | | | | | | | | | | toolchain instead of merely using it in the constructor. This will allow us to query it when building include paths as well as the file search paths built in the constructor. I've lifted as little of it as I could into the header file. Eventually this will likely sink down into some of the Generic toolchains and be used on more platforms, but I'm starting on Linux so I can work out all the APIs needed there, where it is easiest to test and we have the most pressing need. llvm-svn: 143838
* Remove support for Gentoo subversion-ebuild installed llvm-gcc libstdc++Chandler Carruth2011-11-051-9/+0
| | | | | | | | | headers. As llvm-gcc is dead, and I have no idea if this ever really worked, I think it's time for it to go. More importantly, it makes it harder to generalize the include search logic. If someone really wants these to work, they can set the CPLUS_INCLUDE_PATH environment variable. llvm-svn: 143836
* Move the Linux header searching from the Frontend to the Driver. This isChandler Carruth2011-11-051-19/+456
| | | | | | | | | | | | | | | | the first (and diff-noisiest) step to making Linux header searching tremendously more principled and less brittle. Note that this step should have essentially no functional impact. We still search the exact same set of paths in the exact same order. The only change here is where the code implementing such a search lives. This has one obvious negative impact -- we now pass a ludicrous number of flags to the CC1 layer. That should go away as I re-base this logic on the logic to detect a GCC installation. I want to do this in two phases so the bots can tell me if this step alone breaks something, and so that the diffs of the refactoring make more sense. llvm-svn: 143822
* Try to reduce the nastiness that creeps in through Windows.h a bit.Benjamin Kramer2011-11-051-3/+3
| | | | llvm-svn: 143816
OpenPOWER on IntegriCloud