Ответ 1
Если сначала вам не удается...
Теперь я могу создать LLVM 2.6 с помощью MinGW GCC 4.4.0, и это не слишком сложно, как только вы знаете, как это сделать. Я все еще не могу запускать тесты DejaGNU, хотя на первый взгляд это не должно быть так сложно - скорее всего, мне понадобятся пакеты CygWin для dejagnu и ожидайте. Я еще не создал 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 <string> " 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 configure script обнаруживает поддержку pthreads и использует ее, но используемая библиотека pthreads-w32, кажется, не полностью совместима.
Одним из способов решения является удаление следующих файлов из mingw gcc 4.4.0, как предлагается в http://markmail.org/message/d7zw2zjq7svevsci - да, я знаю, что ранее я сказал их там не было, но у меня была путаница в папке...
- mingw32\включать\pthread.h
- mingw32\включать\sched.h
- mingw32\включать\semaphore.h
- mingw32\Lib\libpthread.a
Лучше, однако, просто сказать configure script отключить потоки...
./configure --disable-threads
Итак, шаги...
Сначала установите следующие пакеты MinGW и MSYS...
- Binutils-2.20-1-mingw32-bin.tar.gz
- mingwrt-3,17-mingw32-dev.tar.gz
- mingwrt-3,17-mingw32-dll.tar.gz
- w32api-3,14-mingw32-dev.tar.gz
- НКА-полная-4,4,0-mingw32-бен-2.tar.lzma
- макияж 3.81-20090914-mingw32-bin.tar.gz
- tcltk-8.4.1-1.exe
- MSYS-1.0.11.exe
- msysDTK-1.0.1.exe
- bash -3.1.17-2-MSYS-1.0.11-bin.tar.lzma
- Бизон-2.4.1-1-MSYS-1.0.11-bin.tar.lzma
- Flex-2.5.35-1-MSYS-1.0.11-bin.tar.lzma
- libregex-0.12-1-MSYS-1.0.11-длл-0.tar.lzma
Этот список пакетов может быть более чем необходимо - в частности, tcl tk требуется только для тестов DejaGNU, которые я еще не получил.
Убедитесь, что папка \bin вашей установки MinGW находится в PATH (панель управления, система, расширенные переменные среды).
Извлечь llvm-2.6.tar.gz
Отредактируйте файл C:\llvm-2.6\lib\ExecutionEngine\Interpreter\ExternalFunctions.cpp, а сразу после строки "#include <string> " добавьте строку
#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-target = host-only и -enable-doxygen configure script в частности.