Как создать LLVM использование GCC 4 в Windows?

Я смог создать 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 без взломов или обходных решений.

15
задан Steve314 22 May 2010 в 22:08
поделиться

1 ответ

Если сначала у вас нет успеха ...

Теперь я могу построить LLVM 2.6, используя MINGW GCC 4.4.0, и он не слишком усердно, как только вы знаете, как. Я до сих пор не могу запустить тесты деджагну, хотя с первого взгляда это не должно быть так сложно - скорее всего, мне понадобится пакеты Cygwin для деджагну и ожидать. Я также еще не построил LLVM-GCC.

Перед пошаговым шагом вот три проблемы ...


Проблема 1 ...

Попытка построить 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» - ответ, найденный в документации на чистую языку.


Проблема 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 » вставка ...

#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 и включена в сборки всех вариантов 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 - Да, я знаю, что я ранее сказал, что они не были там , но у меня была спутанная макет папки ...

  • mingw32 \ включает \ pthread.h
  • mingw32 \ включает \ kechn.h
  • mingw32 \ включает \ semaphore.h
  • mingw32 \ lib \ libpthread.

Это лучше, хотя, чтобы просто сказать настроить скрипт для отключения потоков ...

./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
  • GCC-Full-4.4.0-MINGW32-BIN-2.TAR.LZMA
  • MAKE-3.81-20090914-MINGW32-BIN.TAR.GZ
  • TCLTK-8.4.1-1.exe
  • Mssys-1.0.11.exe
  • Msysdtk-1.0.1.exe
  • Bash-3.1.17-2-MSYS-1.0.11-BIN.TAR.LZMA
  • Bison-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-DLL-0.TAR.LZMA

Этот список пакетов может быть больше, чем необходимо - в частности, 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 Настройка параметров скрипта в частности.

12
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: