ilg-ul wrote: > I wonder if this would need to be somewhat target specific.
I took a first look, and it seems target specific. The strategy was to search for `InstalledDir` and see how it is used. It looks like in many places both locations are used, which means things are not that bad: ```c++ getProgramPaths().push_back(getDriver().getInstalledDir()); if (getDriver().getInstalledDir() != D.Dir) getProgramPaths().push_back(D.Dir); ``` At a closer look, my specific issue is related only to picking the system headers, the libraries seem to be identified correctly. This now clearly explains the errors I encountered, compiling with the system headers and linking with the clang own libraries cannot work if the versions are too far apart. For example the code identifying the C++ headers is in Darwin.cpp, where only `InstalledDir` is checked: ``` // Get from '<install>/bin' to '<install>/include/c++/v1'. // Note that InstallBin can be relative, so we use '..' instead of // parent_path. llvm::SmallString<128> InstallBin = llvm::StringRef(getDriver().getInstalledDir()); // <install>/bin llvm::sys::path::append(InstallBin, "..", "include", "c++", "v1"); if (getVFS().exists(InstallBin)) { addSystemInclude(DriverArgs, CC1Args, InstallBin); return; } else if (DriverArgs.hasArg(options::OPT_v)) { llvm::errs() << "ignoring nonexistent directory \"" << InstallBin << "\"\n"; } ``` I'll extend the code to also check `Dir` and this should fix my problem. I'll take a look at the other targets too, but I'm not sure that I'll be able to provide fixes for all, since I don't know them, and I don't want to mess anything. https://github.com/llvm/llvm-project/pull/68091 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits