我已经能够使用MinGW GCC 3.4.5构建LLVM 2.6(llvm-2.6.tar.gz包)。我没有正确测试,但似乎有效。
麻烦的是,我有自己的库,不使用GCC3构建,但在GCC4(模板问题)中工作正常。我相信MinGW的第一个官方GCC4版本是GCC 4.4.0。
修改的
整洁 - 在“试过这个尝试过的”信息中有用的一切现在都在答案中。
修改的
这个问题/答案的大部分都是LLVM 2.7的冗余 - 标准配置,make例程在MinGW中正常工作,没有任何黑客或解决方法。
答案 0 :(得分:12)
如果一开始你没有成功......
我现在可以使用MinGW GCC 4.4.0构建LLVM 2.6,一旦你知道如何,它就不会太难了。我仍然无法运行DejaGNU测试,虽然乍一看不应该那么难 - 我很可能需要为dejagnu和期望的CygWin包。我还没有建立llvm-gcc。
在逐步之前,这里有三个问题......
<小时/> 问题1 ...
尝试使用标准构建指令构建llvm失败了 在Signals.cpp(win32 / Program.inc)中出现编译器错误
llvm[1]: Compiling Signals.cpp for Release build
In file included from Signals.cpp:33:
Win32/Signals.inc: In function 'LONG LLVMUnhandledExceptionFilter(_EXCEPTION_POINTERS*)':
Win32/Signals.inc:234: error: exception handling disabled, use -fexceptions to enable
解决方法是使用“make -k -fexceptions” - 在纯语言文档中找到答案。
<小时/> 问题2 ...
即使使用第一种解决方法,也会发生以下编译错误......
ExternalFunctions.cpp: In function 'bool ffiInvoke(void (*)(), llvm::Function*, const std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> >&, const llvm::TargetData*, llvm::GenericValue&)':
ExternalFunctions.cpp:207: error: 'alloca' was not declared in this scope
似乎正在指定一个禁用内置“alloca”的选项。
解决方法是编辑问题文件
C:\llvm-2.6\lib\ExecutionEngine\Interpreter\ExternalFunctions.cpp
在“#include&lt; string&gt;”之后line,insert ...
#define alloca __builtin_alloca
<小时/> 问题3 ......
即使修复了编译错误,示例程序也不会运行。运行时错误是......
Assertion failed: errorcode == 0, file RWMutex.cpp, line 87
这与pthreads库的使用有关,在以下几行中 RWMutex.cpp
86: // Initialize the rwlock
87: errorcode = pthread_rwlock_init(rwlock, &attr);
88: assert(errorcode == 0);
基本问题是pthreads支持包含在MinGW GCC中,并包含在AFAICT的所有GCC4变体版本中 - 包括非官方TDM版本,以及MinGW GCC 4.4.0。这是不包含在MinGW GCC 3.4.5中,这就是为什么LLVM在该编译器上使用默认选项构建正常的原因。使用4.4.0,LLVM配置脚本检测pthreads支持并使用它 - 但使用的pthreads-w32库似乎不完全兼容。
一种解决方法是按照http://markmail.org/message/d7zw2zjq7svevsci中的建议从mingw gcc 4.4.0中删除以下文件 - 是的,我知道我之前说他们不在那里,但是我的文件夹布局混乱... < / p>
最好是简单地告诉配置脚本禁用线程...
./configure --disable-threads
<小时/> 所以,步骤是......
首先,安装以下MinGW和MSYS包......
这个包列表可能超过了需要 - 特别是只有deckGNU测试才需要tcl tk,我还没有这个测试。
确保MinGW安装的\ bin文件夹位于PATH(控制面板,系统,高级,环境变量)上。
提取llvm-2.6.tar.gz
编辑文件C:\ llvm-2.6 \ lib \ ExecutionEngine \ Interpreter \ ExternalFunctions.cpp,在“#include&lt; string&gt;”行之后,添加行
#define alloca __builtin_alloca
启动MSYS命令提示符,然后运行...
cd /c/llvm-2.6
./configure --disable-threads
make -k CXXFLAGS=-fexceptions
我假设您将llvm解压缩到c:\ llvm-2.6
方便提示 - 尝试“./configure --help”
特别考虑--enable-targets = host-only和--enable-doxygen配置脚本选项。