2015-04-04 2 views
3

В настоящее время я зарегистрирован в курсе компиляторов и успешно создал небольшой компилятор в JAVA, который принимает файл как вход и записывает вывод NASM.

Мне было интересно, если бы я когда-либо решил распространять мой компилятор, как бы я упаковал ассемблер с ним?

Уверен, что я не могу попросить конечного пользователя сначала скомпилировать код в NASM, убедиться, что он установлен NASM, а затем использовать его для создания окончательного исполняемого файла!

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

Любая помощь приветствуется.Как включить ассемблер в компилятор

+1

«Я уверен, что я не могу просить конечного пользователя ...» Я должен был иметь дело с пакетами, которые были намного сложнее установить, чем это. Особенно компиляторы GNU. Если я правильно понимаю ваш вопрос, вы можете автоматизировать процесс установки с помощью чего-то вроде [NSIS] (http://nsis.sourceforge.net). – ajb

ответ

3

Вы можете выбрать ассемблер с открытым исходным кодом и пакет, который с вашим компилятором. Позаботьтесь о лицензии, однако лицензия ассемблера может потребовать, чтобы вы также опубликовали свой компилятор под определенной лицензией.

Конечно, это не решает вашу вторую проблему: как сделать эту платформу (или, по крайней мере, ЦП) независимой. Тогда переход на ассемблерный язык (или непосредственно на машинный код) - это не путь.

Решение может заключаться в использовании чужого бэкэнда. На данный момент LLVM несколько «горячая». В некотором смысле это работает, отправляя «язык независимой от платформы языка» в LLVM, а LLVM затем выводит для вас целевой код целевой платформы.

0

От 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 и как сделать многоплатформенное тестирование?
  • ...