Для какой платформы я могу скомпилировать двоичные файлы, используя LLVM (низкоуровневая виртуальная машина)? - PullRequest
6 голосов
/ 04 сентября 2011

Я заинтересован в использовании компилятора Clang от LLVM.LLVM претендует на кроссплатформенность, однако неясно, на какие платформы можно ориентироваться.Я сделал довольно много Googling по этому вопросу, но, похоже, не так много информации о поддерживаемых платформах LLVM.Единственное, что я нашел, было "это" , что немного сбивает с толку.Я не уверен, означает ли это, что я могу скомпилировать двоичные файлы для этих платформ, используя LLVM, или он работает только на этих платформах (или на обеих).Может ли кто-нибудь, кто знает больше о компиляторе LLVM / Clang, сказать мне, на какие платформы я могу ориентироваться, используя Clang или любой другой интерфейс LLVM?Мне нужна конкретная информация (например, «Она поддерживает Windows 32-битную, Windows 64-битную, Linux 32-битную, Linux 64-битную и т. Д.). Спасибо!

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

Хорошо, я думаюЯ просто запутался в том, что такое LLVM. Из того, что я только что понял, LLVM - просто интерпретатор байт-кода. Поскольку LLVM интерпретируется, насколько медленнее двоичные файлы LLVM по сравнению с исполняемыми двоичными файлами? Так что, если важна производительность, LLVM не является правильнымвыбор? "Здесь" Я нашел поддерживаемые им архитектуры, но в нем не сказано, какие операционные системы он поддерживает. Работает ли он на всех операционных системах, если я избегаю кода, зависимого от платформы? Я буду искать другие статьи, которые объясняютLLVM более подробно, если я могу найти любой.

Ответы [ 4 ]

8 голосов
/ 04 сентября 2011

С установленным llvm введите

llc -version

, и вы увидите что-то вроде

  Registered Targets:
    alpha   - Alpha [experimental]
    arm     - ARM
    bfin    - Analog Devices Blackfin [experimental]
    c       - C backend
    cellspu - STI CBEA Cell SPU [experimental]
    cpp     - C++ backend
    mblaze  - MBlaze
    mips    - Mips
    mipsel  - Mipsel
    msp430  - MSP430 [experimental]
    ppc32   - PowerPC 32
    ppc64   - PowerPC 64
    ptx32   - PTX (32-bit) [Experimental]
    ptx64   - PTX (64-bit) [Experimental]
    sparc   - Sparc
    sparcv9 - Sparc V9
    systemz - SystemZ
    thumb   - Thumb
    x86     - 32-bit X86: Pentium-Pro and above
    x86-64  - 64-bit X86: EM64T and AMD64
    xcore   - XCore

Перейдите на github.com и найдите mbed_samples, чтобы увидеть, как llvm и clang используются для кросс-компиляциидля АРМ.Где-то вокруг blinker03 или 04, где он входит. LLVM работает одинаково для любой платформы, шаг llc - это когда вы выбираете цель, компиляция, оптимизация и т. Д. Все независимы от платформы (хорошо, вы можете использовать, например, -m32выбрать размер int), затем ООО доставит вас к зависимому от платформы ассемблеру.

5 голосов
/ 07 сентября 2011

Существует множество возможных применений LLVM с точки зрения целевой машины.

3 голосов
/ 04 сентября 2011

В соответствии с инструкцией clang clang может быть нацелен на X86, Arm с частичной поддержкой PPC, SPARC и MSP430.

Clang также может генерировать байт-код LLVM.LLVM может работать на довольно много платформ .

Итак, если вам нужен собственный машинный код, тогда список довольно маленький.Если вам нужен байт-код LLVM, у вас есть более широкий выбор платформ.

1 голос
/ 04 сентября 2011

Я только отвечаю на вопрос редактора здесь (вероятно, было бы более уместно сделать новый вопрос).

Этот является хорошим архитектурным обзором LLVM. Эта страница также содержит тонну документации по всем аспектам LLVM.

Короткая версия заключается в том, что LLVM - это оптимизатор и серверная часть традиционного компилятора.Он работает с байт-кодом, который по сути является его промежуточным представлением кода и используется для оптимизации и генерации окончательного двоичного файла.Интерфейсы LLVM независимы и используют собственные внутренние AST для генерации байт-кода.

LLVM на самом деле довольно гибок, когда речь идет о том, когда вы хотите сгенерировать окончательный двоичный файл.Вы можете сделать это прямо сейчас или отложить до установки программы.Я полагаю, что вы даже можете использовать его JIT для генерации окончательного двоичного файла во время выполнения (не уверен на 100% в этом).Основное преимущество такой задержки в том, что она может применять оптимизации, специфичные для среды, в которой она выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...