В настоящее время я зарегистрирован в курсе компиляторов и успешно создал небольшой компилятор в JAVA, который принимает файл как вход и записывает вывод NASM.
Мне было интересно, если бы я когда-либо решил распространять мой компилятор, как бы я упаковал ассемблер с ним?
Уверен, что я не могу попросить конечного пользователя сначала скомпилировать код в NASM, убедиться, что он установлен NASM, а затем использовать его для создания окончательного исполняемого файла!
Также, поскольку я хочу нацелить несколько разных систем, идея написания эффективного ассемблера для каждой намеченной цели, очевидно, представляет собой трудную и трудоемкую задачу (не говоря уже о невозможной) !!
Любая помощь приветствуется.Как включить ассемблер в компилятор
ответ
Вы можете выбрать ассемблер с открытым исходным кодом и пакет, который с вашим компилятором. Позаботьтесь о лицензии, однако лицензия ассемблера может потребовать, чтобы вы также опубликовали свой компилятор под определенной лицензией.
Конечно, это не решает вашу вторую проблему: как сделать эту платформу (или, по крайней мере, ЦП) независимой. Тогда переход на ассемблерный язык (или непосредственно на машинный код) - это не путь.
Решение может заключаться в использовании чужого бэкэнда. На данный момент LLVM несколько «горячая». В некотором смысле это работает, отправляя «язык независимой от платформы языка» в LLVM, а LLVM затем выводит для вас целевой код целевой платформы.
От www.nasm.us/pub/nasm/releasebuilds/2.11.08, кажется, что по крайней мере для Windows
и Mac OS X
платформ NASM
ассемблера может быть развернут как простой portable application в zip
файле.
Вы просто распространяете файлы zip
с вашим приложением и при необходимости извлекаете соответствующую необходимую платформу zip
во временный каталог и запускаете инструмент в фоновом режиме.
Некоторые дополнительные вопросы, которые необходимо прояснить, прежде чем принимать меры:
- как создать временный каталог с
Java
? - Как распаковать архив с помощью
Java
? - Как пометить исполняемый файл как исполняемый файл (например, как установить
chmod+x
), не угрожая пользователю? - Как вызвать ожидание фонового процесса в
Java
? - Что такое политика лицензирования перераспределения
NASM
? - У
NASM
есть необычные зависимости от третьей стороны, которые также должны быть отправлены? - как написать кросс-платформенный код
Java
и как сделать многоплатформенное тестирование? - ...
«Я уверен, что я не могу просить конечного пользователя ...» Я должен был иметь дело с пакетами, которые были намного сложнее установить, чем это. Особенно компиляторы GNU. Если я правильно понимаю ваш вопрос, вы можете автоматизировать процесс установки с помощью чего-то вроде [NSIS] (http://nsis.sourceforge.net). – ajb