Я смог создать LLVM 2.6 (llvm-2.6.tar.gz пакет) использование MinGW GCC 3.4.5. Я не протестировал правильно, но это, кажется, работает.
Проблема, у меня есть мои собственные библиотеки, которые не создают использование GCC3, но которые хорошо работают в GCC4 (шаблонные проблемы). Я полагаю, что первая официальная версия GCC4 для MinGW является GCC 4.4.0.
Править
Устраненный помехи - все полезное в "испытанный это попробовало ту" информацию, находится теперь в ответе.
Править
Большая часть этого вопроса/ответа избыточна с LLVM 2.7 - стандарт настраивает, делает стандартную программу, хорошо работает в MinGW без взломов или обходных решений.
Если сначала у вас нет успеха ...
Теперь я могу построить LLVM 2.6, используя MINGW GCC 4.4.0, и он не слишком усердно, как только вы знаете, как. Я до сих пор не могу запустить тесты деджагну, хотя с первого взгляда это не должно быть так сложно - скорее всего, мне понадобится пакеты Cygwin для деджагну и ожидать. Я также еще не построил LLVM-GCC.
Перед пошаговым шагом вот три проблемы ...
Попытка построить LLVM с использованием стандартных инструкций по сборке не удается с После ошибки компилятора в сигналах.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» - ответ, найденный в документации на чистую языку.
Даже при первом обходном пути возникает следующая ошибка компилятора ...
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
#define alloca __builtin_alloca
Даже при фиксированных ошибках компиляции примерные программы не будут работать. Ошибки времени выполнения являются ...
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 и включена в сборки всех вариантов GCC4, включая неофициальные сборки TDM, а также в том числе Mingw GCC 4.4.0. Это было , включенные в MINGW GCC 3.4.5, поэтому LLVM строит нормально с параметрами по умолчанию на этом компиляторе. Использование 4.4.0, Scriptre скрипт LLVM определяет поддержку Pthreads и использует ее - но используемые библиотеки Pthreads-W32, кажется, не полностью совместимы.
Один обходной путь состоит в том, чтобы удалить следующие файлы из MingW GCC 4.4.0, как предложено в http://markmail.org/message/d7zw2zjq7svevsci - Да, я знаю, что я ранее сказал, что они не были там , но у меня была спутанная макет папки ...
Это лучше, хотя, чтобы просто сказать настроить скрипт для отключения потоков ...
./configure --disable-threads
Сначала установите следующие пакеты MingW и MSYS ...
Этот список пакетов может быть больше, чем необходимо - в частности, TCL TK необходим только для тестов дежагну, которые я еще не работал.
Убедитесь, что папка \ bin вашей установки MINGW находятся на пути (панель управления, система, расширенные переменные среды).
Экстракт LLVM-2.6.TAR.GZ
Отредактируйте файл C: \ LLVM-2.6 \ lib \ ExecutionEngine \ интерпретатор \ ExternalFunctions.cpp, а сразу после линии «#include
#define alloca __builtin_alloca
Запустите командную строку MSYS и запустите ...
cd /c/llvm-2.6
./configure --disable-threads
make -k CXXFLAGS=-fexceptions
Я предполагаю, что вы извлекли LLVM к C: \ LLVM-2.6
Handy Hint - попробуйте «./Configure --help»
Рассмотрим TheLable-Targets = Только для хоста и TENABLE-DOXYGON Настройка параметров скрипта в частности.