Как собрать coreutils с LLVM 3.4

Я пытаюсь собрать GNU Coreutils 8.23, используя цепочку инструментов LLVM 3.4. Один очень важный аспект - мне также нужен байт-код LLVM для всех coreutils. Поэтому мне нужно включить -emit-llvm в CFLAGS. Поэтому я удалил $(CFLAGS) из переменной LINK файла сборки coreutils. После этого я запускаю следующую команду:

make CC=/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang 
CCLD=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link 
IGNORE_UNUSED_LIBRARIES_CFLAGS= CFLAGS="-emit-llvm -S" 
VERBOSE=1 AM_CFLAGS= AM_LDFLAGS= 
AR=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-ar 
RANLIB=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-ranlib

и я получаю следующую ошибку:

/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link: src/libver.a:1:2:    error: expected integer
!<arch>
 ^
/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link: error loading file 'src/libver.a'

Есть идеи, как заставить это работать?

2 ответа

Решение

Попробуй это.

export CC="/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang"
export CXX="/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang++" 

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

Тогда в coreutils каталог, запустить ./configure (до этого запуска ./bootstrap если вы еще не запустили его). Бег ./configure проверяет, если ваш clang может правильно скомпилировать и создает Makefile с правильной конфигурацией.

Тогда сделай make а также make install как указано.

Файл lib '.a' здесь не читается по llvm-ссылке. Возможный неофициальный взлом на это, вероятно, заключается в том, чтобы выяснить Makefile, генерирующий эту библиотеку, и позволить

AR = llvm-link, ar option = -o(i.e. change ar rv to llvm-link -o), 

и отключите команду ranlib во время компиляции (вам не нужен ranlib при использовании llvm-link).

Затем сгенерированный файл '.a' представляет собой сшитый bc-файл, и этот файл '.a' должен быть восприимчив с помощью команды llvm-link, которую вы вызываете.

Другие вопросы по тегам