Эффективно использовать LLVM через различные платформы - PullRequest
1 голос
/ 30 мая 2019

Я реализую язык с использованием LLVM (C #, .NET Core). Я предполагаю, что этот язык будет иметь кросс-платформенную совместимость в том смысле, что его конечный исполняемый файл скомпилирован для локальной машины, например, Windows 10 x64 или Linux.

Для достижения этой цели моя текущая стратегия заключается в реализации утилиты CLI-оболочки, которая использует библиотеку компилятора моего языка (которая использует LLVM) вместе с упакованным исполняемым файлом LLVM для различных платформ.

Итак, мой инструмент CLI автоматически вызывает инструменты LLVM (llc, lli, lld-link и т. Д.).

Однако это означает, что мне нужно упаковать инструменты LLVM, скомпилированные для каждой платформы, на которую я хочу ориентироваться (вместе с некоторыми библиотеками, такими как libc для Unix-подобной системы, чтобы обеспечить совместимость и согласованность версий?).

Итак, если я хочу нацеливаться на следующие платформы:

ubuntu16, ubuntu14, armv7a, windows x86_64, debian8, ...

Я бы буквально должен был как-то приобрести соответствующие им исполняемые инструменты LLVM.

Языковая библиотека, утилита CLI и инструменты LLVM сжаты («упакованы») в простой ZIP-файл.

Я склонен к полностью управляемой системе, поэтому я не хотел бы заставлять пользователей устанавливать инструменты LLVM на свои локальные машины.

Должен ли я упаковать язык / компилятор в стандартные методы упаковки, используемые соответствующими платформами, напр. .RPM для Fedora и т. Д .?

Есть ли альтернативный, эффективный (универсальный) метод для этого, особенно без необходимости включать в пакет инструменты и библиотеки LLVM?

Как другие кросс-платформенные компиляторы решают эту проблему, или это только LLVM-специфичный?

1 Ответ

1 голос
/ 30 мая 2019

Вы можете статически связать весь LLVM с вашим приложением .NET и выполнять все задачи, которые эти инструменты выполняют внутри вашего компилятора. Это, собственно, то, что делает clang - за исключением того, что он использует внешний компоновщик.

...