Как собрать 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, которую вы вызываете.