[LLVMdev] Problem compiling LLVM under Cygwin/Mingw
Alain Frisch
alain at frisch.fr
Tue Aug 7 02:49:04 PDT 2007
Hello Anton,
Thanks for your help!
Anton Korobeynikov wrote:
> Oh, this seems to be killer mix :) GCC (at least native mingw32 port)
> has known problems being running on Vista.
I've been using this combination for a month without a problem. (But
indeed, I've heard about weird things too.)
>> Is LLVM supposed to work with this version of GCC (probably using the
>> -mno-cygwin option to get a Mingw-like behavior)?
> Honestly speaking, I never tried this. I always used "plain" mingw32
> plus msys as a shell. Wiki mentions exactly this case.
Actually, I did not do anything special with ./configure, so I guess
LLVM was configured to use Cygwin's GCC (without -mno-cygwin). So I was
using one of the supported configurations:
checking build system type... i686-pc-cygwin
checking host system type... i686-pc-cygwin
checking target system type... i686-pc-cygwin
checking type of operating system we're going to host on... Cygwin
checking target architecture... x86
If I pass "--host=i386-pc-mingw32" to configure, the compilation fails
almost immediatly:
llvm[1]: Compiling DynamicLibrary.cpp for Debug build
In file included from DynamicLibrary.cpp:34:
Win32/DynamicLibrary.inc:19:22: dbghelp.h: No such file or directory
In file included from DynamicLibrary.cpp:34:
Win32/DynamicLibrary.inc:27: warning: ignoring #pragma comment
Win32/DynamicLibrary.inc: In static member function `static bool
llvm::sys::DynamicLibrary::LoadLibraryPermanently(const char*,
std::string*)':
Win32/DynamicLibrary.inc:120: error: `EnumerateLoadedModules' undeclared
(first use this function)
Win32/DynamicLibrary.inc:120: error: (Each undeclared identifier is
reported only once for each function it appears in.)
I'll try to compile LLVM first in pure Cygwin mode. I attach the output
of ./configure (conf.log) and of make (build.log), in case you can find
something weird in it. I've also tried to fix the errors directly in
SelectionDAG.cpp by resolving by hand the ambiguous call, e.g.:
@@ -341,7 +341,7 @@
LoadSDNode *LD = cast<LoadSDNode>(N);
ID.AddInteger(LD->getAddressingMode());
ID.AddInteger(LD->getExtensionType());
- ID.AddInteger(LD->getLoadedVT());
+ ID.AddInteger((int) LD->getLoadedVT());
ID.AddPointer(LD->getSrcValue());
ID.AddInteger(LD->getSrcValueOffset());
ID.AddInteger(LD->getAlignment());
(and similarly for all the other ambiguous calls in SelectionDAG.cpp).
Does the coercion look reasonnable here? I guess that more recent
versions of GCC are clever enough to lift the ambiguity. That should not
depend on the OS. Is anyone still using GCC 3.4.4?
With these modifications, I could compile LLVM without any further
problem. Maybe the fix above should be included if this is the only
problem with GCC 3.4.4?
>> llvm[3]: Compiling PredicateSimplifier.cpp for Debug build
>> PredicateSimplifier.cpp: In member function `bool
>> <unnamed>::VRPSolver::below(llvm::Instruction*)':
>> PredicateSimplifier.cpp:1417: warning: control reaches end of non-void
>> function
>> PredicateSimplifier.cpp: In member function `bool
>> <unnamed>::DomTreeDFS::dominates(llvm::Instruction*, llvm::Instruction*)':
>> PredicateSimplifier.cpp:247: warning: control reaches end of non-void
>> function
> That's strange. Is it possible to update to gcc 3.4.5? (I'm using this
> for windows builds).
It doesn't seem to be packaged in Cygwin, and I cannot break the
existing system, so I will try to continue with the current version.
Can you try to look into preprocessed source? How
> is assert() expanded there?
The assert at line 241 is expanded into:
((!"Instructions not found in parent BasicBlock?") ? (void)0 :
__assert("PredicateSimplifier.cpp", 241, "!\"Instructions not found in
parent BasicBlock?\""));
>> llvm[3]: Linking Debug Loadable Module LLVMHello.dll
>> mklib: link: warning: undefined symbols not allowed in i686-pc-cygwin
>> shared libraries
> It seems, that configure machinery was confused by mix of cygwin
> environment and mingw32 tools. Can you try to reconfigure with
> --host=i386-pc-mingw32 ?
See above. It was actually a pure Cygwin installation (sorry for the
confusion).
> In fact LLVM plugins (which are shared
> libraries) are not supported on windows due to difference in linker
> stuff (static vs dynamic).
I know what you mean. FWIW, I've been working on a way to emulate
POSIX-like dlopen API under Windows: http://alain.frisch.fr/flexdll.html
That could give a solution to make LLVM plugins work under Windows.
Alain
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: conf.log
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070807/e4b97ec6/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: build.log
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070807/e4b97ec6/attachment-0001.ksh>
More information about the llvm-dev
mailing list