Использование Clang на Mingw 64bit

Я хочу добавить еще GCC в среду MinGW-64bit в Windows 7, используя стандартную библиотеку из gcc. Я использую gcc_x64_4.8.1_win32_seh_rev1 и Qt из http://sourceforge.net/projects/mingwbuilds/.

Я построил clang 3.3 в этой среде без каких-либо флагов (просто обойти проблему компиляции HAVE_EHTABLE_SUPPORT).

Я использую процесс сборки qmake, и файл проекта имеет эти строки дополнительно для clang (только режим выпуска):

QMAKE_CC = clang
QMAKE_CXX = clang++
QMAKE_CXXFLAGS_RELEASE += -Wno-ignored-attributes
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1"
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++"
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32"
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/x86_64-w64-mingw32/include"

Компиляция сбрасывается до:

C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++\bits/random.h:106:26: error:
      __int128 is not supported on this target
      { typedef unsigned __int128 type; };
                         ^

Поиск в Интернете дал ссылки на _mingw.h, но я не знаю, что там не так:

#if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) && \
    !defined(__SIZEOF_INT128__) /* clang >= 3.1 has __int128 but no size macro */
#define __SIZEOF_INT128__ 16
#endif

Ответ 1

Проверьте эту ссылку: https://web.archive.org/web/20140301212210/http://www.bencode.net/blog/2012/10/20/clangonwindows/

Это учебник по этапам установки для создания функциональной сборки Clang++, работающей в Windows 8 и MinGW. Windows 8 и Windows 7 имеют много общего, этот учебник можно использовать для выполнения вашей задачи.

=============================================== ===

Шаг 1

Установите MinGW. Использование mingw-get-inst-20120426.exe идет с предварительно упакованными каталогами репозитория, которые объединяются в GCC 4.6.1, а не в 4.7.x, которые на момент написания Clang не поддерживают плавно. Вам понадобятся компилятор C, компилятор С++, MSYS Basic System и MinGW Developer Toolkit MinGW.

Шаг 2

Python 2.x. Установите Python Interpreter и Libraries в c:\MinGW\bin.

Шаг 3

Установите Subversion. Я пошел с пакетом Subversion 1.7.7 (Windows 64-bit) из CollabNet.

Оформить заказ LLVM:

cd C:\mingw\msys\1.0 mkdir src cd src svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

Оформить заказ Clang:

cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..

Checkout Compiler-RT:

cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..

Шаг 4

Заголовки и библиотеки С++. Clang попытается автоматически исследовать структуру каталогов MinGWs для набора поддерживаемых путей libstdС++. Для 32-разрядных i686-w64-mingw32 и 64-разрядных x86_64-w64-mingw32 Clang предполагает следующее:

  • some_directory/бен/gcc.exe
  • some_directory/бен/clang.exe
  • some_directory/bin/лязг ++. EXE
  • some_directory/бен/../включают/С++/GCC_version
  • some_directory/бен/../включают/С++/GCC_version/x86_64-w64-mingw32
  • some_directory/бен/../включают/С++/GCC_version/i686-w64-mingw32
  • some_directory/бен/../включают/С++/GCC_version/назад
  • some_directory/бен/../x86_64-w64-mingw32/включить
  • some_directory/бен/../i686-w64-mingw32/включить
  • some_directory/бен/../включают

Эта логика зондирования может быть найдена в InitHeaderSearch.cpp, расположенном здесь (строка 374 на момент написания):

  • C:\MinGW\MSYS\1,0\SRC\LLVM\инструменты\лязг\Lib\Frontend\InitHeaderSearch.cpp

Убедитесь, что версия gcc, которую использовал ваш установщик MinGW, соответствует поддерживаемой версии (например, 4.6.2 - это мой случай), посмотрев здесь C:\mingw\lib\gcc\mingw32\4.6.2.

Если ваша версия gcc не поддерживается автоматически, Clang будет использоваться для разрешения стандартных библиотек и заголовков - вы этого хотите. Какой-то популярный способ помочь Клану найти их (если он этого еще не сделал):

  • Укажите параметр configure --with-gcc-toolchain (до сборки), чтобы сообщить Clang, где установлен gcc, содержащий желаемый libstdС++.
  • Создайте символическую ссылку, например. если у вас есть 4.7.2, и только до 4.7.0 находится в логике автоматического зондирования, создайте символическую ссылку 4.7.0 для 4.7.2.
  • Измените InitHeaderSearch.cpp в вашей конкретной среде до создания Clang.

Шаг 5

Build. Использование оболочки MinGW. Кредиты Питу для этого.

cd /src
mkdir build
cd build
export CC=gcc
export CXX=g++
../llvm/configure --disable-docs --enable-optimized --enable-targets=x86,x86_64 --prefix=/mingw
make
make install

Кредит на оригинальную работу: Написал Бен Симмондс 20 октября 2012 г.