[cfe-dev] Header Search Paths with MinGW
Fernando Pelliccioni
fpelliccioni at gmail.com
Tue Aug 31 06:50:55 PDT 2010
Hi,
I found a problem and I am writing to propose a solution, I would like to
know what you think.
I am working on Win32 with MinGW (GCC 4.4)
I quote an extract of the InitHeaderSearch class (
/tools/clang/lib/Frontend/InitHeaderSearch.cpp )
//----------------------------------------------------------------------------------------------------
void InitHeaderSearch::AddMinGWCPlusPlusIncludePaths(llvm::StringRef Base,
llvm::StringRef Arch,
llvm::StringRef
Version) {
AddPath(Base + "/" + Arch + "/" + Version + "/include",
System, true, false, false);
AddPath(Base + "/" + Arch + "/" + Version + "/include/c++",
System, true, false, false);
AddPath(Base + "/" + Arch + "/" + Version + "/include/c++/backward",
System, true, false, false);
}
void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths(const llvm::Triple
&triple) {
//...
case llvm::Triple::MinGW64:
// Try gcc 4.4.0
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw64", "4.4.0");
// Try gcc 4.3.0
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw64", "4.3.0");
// Fall through.
case llvm::Triple::MinGW32:
// Try gcc 4.4.0
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.4.0");
// Try gcc 4.3.0
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.3.0");
break;
//...
}
//----------------------------------------------------------------------------------------------------
For example, in this line ...
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.4.0");
... "mingw32" corresponds to the parameter "Arch" of function
"AddMinGWCPlusPlusIncludePaths". It is harcoded!
In GCC, if I want to know what is the Header Seach Path, I can run ...
> g++ -v -c xxx.cpp
...
#include "..." search starts here:
#include <...> search starts here:
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/mingw32
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/backward
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include-fixed
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../mingw32/include
End of search list.
...
I tried another implementation of MinGW (GCC 4.6) in which I got X.
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++/i686-pc-mingw32
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++/backward
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/../../../../include
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include-fixed
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/../../../../i686-pc-mingw32/include
The problem is in the "Arch" parameter, in one implementation I have
"mingw32" and in the other "i686-pc-mingw32"
How I can know which parameter to use?
The answer is...
> g++ -dumpmachine
mingw32
or in the second MinGW implementation...
> g++ -dumpmachine
i686-pc-mingw32
To fix this, I propose to add a new preprocessor #define on "config.h" and
"llvm-config.h", like the following...
#define LLVM_MINGW_DUMPMACHINE "mingw32"
LLVM_MINGW_DUMPMACHINE is fed in the CMake configuration phase, and can be
used in the InitHeaderSearch class as follows...
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc",
llvm::StringRef(LLVM_MINGW_DUMPMACHINE), "4.4.0");
The files involved are:
/cmake/config-ix.cmake
/cmake/modules/GetTargetTriple.cmake
/include/llvm/Config/config.h.cmake
/include/llvm/Config/llvm-config.h.cmake
/include/llvm/Config/config.h.in
/include/llvm/Config/llvm-config.h.in
/tools/clang/lib/Frontend/InitHeaderSearch.cpp
I want to know what do you think about this solution. If you approve, I will
send the patches.
The next step is to avoid the hardcoding of "c:/MinGW/lib/gcc"...
Thanks and Regards.
Fernando Pelliccioni.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100831/760f14ae/attachment.html>
More information about the cfe-dev
mailing list