我已经能够使用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中工作正常,没有任何黑客或变通方法.
Ste*_*314 12
如果一开始你没有成功......
我现在可以使用MinGW GCC 4.4.0构建LLVM 2.6,一旦你知道如何,它就不会太难了.我仍然无法运行DejaGNU测试,虽然乍一看不应该那么难 - 我很可能需要为dejagnu和期望的CygWin包.我还没有建立llvm-gcc.
在一步一步之前,这里有三个问题......
尝试使用标准构建指令构建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
Run Code Online (Sandbox Code Playgroud)
解决方法是使用"make -k -fexceptions" - 在纯语言文档中找到答案.
即使第一个解决方法,出现以下编译器错误...
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
Run Code Online (Sandbox Code Playgroud)
似乎正在指定一个禁用内置"alloca"的选项.
解决方法是编辑问题文件
C:\llvm-2.6\lib\ExecutionEngine\Interpreter\ExternalFunctions.cpp
Run Code Online (Sandbox Code Playgroud)
在"#include <string>"行之后,插入...
#define alloca __builtin_alloca
Run Code Online (Sandbox Code Playgroud)
即使修复了编译错误,示例程序也不会运行.运行时错误是......
Assertion failed: errorcode == 0, file RWMutex.cpp, line 87
Run Code Online (Sandbox Code Playgroud)
这与使用pthreads库有关,在RWMutex.cpp的以下行中
86: // Initialize the rwlock
87: errorcode = pthread_rwlock_init(rwlock, &attr);
88: assert(errorcode == 0);
Run Code Online (Sandbox Code Playgroud)
基本问题是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中删除以下文件- 是的,我知道我之前说他们不在那里,但我的文件夹布局很混乱. ..
不过,最好简单地告诉configure脚本禁用线程......
./configure --disable-threads
Run Code Online (Sandbox Code Playgroud)
首先,安装以下MinGW和MSYS包...
这个包列表可能超过了需要 - 特别是只有deckGNU测试需要tcl tk,我还没有完成它.
确保MinGW安装的\ bin文件夹位于PATH(控制面板,系统,高级,环境变量)上.
提取llvm-2.6.tar.gz
编辑文件C:\ llvm-2.6\lib\ExecutionEngine\Interpreter\ExternalFunctions.cpp,然后在"#include <string>"行后面添加行
#define alloca __builtin_alloca
Run Code Online (Sandbox Code Playgroud)
启动MSYS命令提示符,然后运行...
cd /c/llvm-2.6
./configure --disable-threads
make -k CXXFLAGS=-fexceptions
Run Code Online (Sandbox Code Playgroud)
我假设你将llvm解压缩到c:\ llvm-2.6
方便的提示 - 尝试"./configure --help"
请考虑--enable-targets = host-only和--enable-doxygen配置脚本选项.
| 归档时间: |
|
| 查看次数: |
4345 次 |
| 最近记录: |