Есть ли binutils для llvm?

В набор инструментов компилятора LLVM входит gcc, совместимый с обычным gcc. Преимущество использования llvm-gcc заключается в том, что он идет к произвольной цели, то есть обычный gcc скажет, что такой цели нет, когда вы попытаетесь скомпилировать в случайную архитектуру, скажем, mips-apple-darwin. Однако llvm-gcc фактически создаст компилятор для Mac OS X на процессоре mips.

Однако вот в чем загвоздка: чтобы выполнить сборку для случайной цели, вам уже нужны binutils, созданные для этой цели. Таким образом, если у вас есть цель, в которую llvm скомпилируется, а binutils не может, то вы не сможете создать компилятор, потому что GNU Binutils не поддерживает эту цель.

Итак... Вот вопрос: существует ли эквивалент llvm-binutils, например llvm-gcc, совместимый с GNU Binutils? (имеется в виду тот, который строится для произвольной цели, а не из списка.)

РЕДАКТИРОВАТЬ:

Под произвольным я имею в виду, что я не выбираю цель при запуске llvm-gcc, я выбираю цель при компиляции llvm-gcc. Значение: если я попытаюсь скомпилировать GCC для mips-apple-darwin, я получу неподдерживаемую цель. Но если я соберу llvm-gcc для mips-apple-darwin, он будет работать до тех пор, пока у меня есть mips-apple-darwin-as и mips-apple-darwin-ld.


person Leo Izen    schedule 08.03.2011    source источник
comment
Примечание: LLVM 2.9 находится в разработке, и это должна быть последняя версия, поддерживающая llvm-gcc. Начиная с версии 3.0 LLVM будет использовать либо CLang, либо Dragon Egg.   -  person Matthieu M.    schedule 09.03.2011


Ответы (2)


Насколько я могу судить, LLVM не компилируется для произвольной цели. У вас должны быть все включения и определения, соответствующие вашей цели, и, как правило, llvm имеет серверную часть для генерации кода для указанной цели. Прочтите «Можно ли скомпилировать код C или C++ в независимый от платформы биткод LLVM?» из http://llvm.org/docs/FAQ.html .

Чтобы ответить на вопрос, llvm не использует GNU binutils, llvm имеет свои собственные «binutils» для генерации кода (так называемый основной проект LLVM). Дизассемблер и отладчик являются частью проекта LLDB.

Где LLVM обеспечивает некоторую независимость, так это на уровне языка. Ваш проект может быть закодирован на C/C++, Ada, Fortran и т. д. llvm поставляется с возможностью преобразования вашего кода в промежуточное представление. Этот IR в конечном итоге сгенерирует код.

person Laurent G    schedule 09.03.2011

llvm-gcc не поддерживает произвольные цели. llvm-gcc должен быть собран специально для любой заданной цели. clang+LLVM может. Я пытаюсь сделать именно это с ellcc: http://ellcc.org. Я использую binutils для сборки и компоновки.

person Richard Pennington    schedule 10.03.2011