Я реализую язык с использованием 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-специфичный?