如何在编译器中包含汇编程序
How to include an assembler in a compiler
我目前正在参加一个编译器课程,并且已经在 JAVA 中成功构建了一个小型编译器,它接受一个文件作为输入并写入 NASM 输出。
然而,我想知道如果我决定分发我的编译器,我将如何用它打包一个汇编器?
我确定我不能要求最终用户先将代码编译为 NASM,确保 he/she 已安装 NASM,然后使用它来构建最终的可执行文件!
此外,由于我想针对几个不同的系统,为每个预期目标编写高效汇编器的想法显然是一项艰巨且耗时(更不用说看似不可能的任务)!
感谢您的帮助。
您可以 select 一个开源汇编程序并将其与您的编译器打包在一起。但是,请注意许可证,汇编程序的许可证可能还要求您在特定许可证下发布编译器。
当然这并不能解决你的第二个问题:如何让这个平台(或者至少CPU)独立。然后通过汇编语言(或直接到机器代码)不是要走的路。
一个解决方案可能是使用其他人的后端。 LLVM 目前有点 "hot"。在某种程度上,这是通过将 "platform independent assembly language" 发送到 LLVM 来实现的,然后 LLVM 会为您输出目标平台的目标代码。
来自 www.nasm.us/pub/nasm/releasebuilds/2.11.08 it seems that at least for Windows
and Mac OS X
platforms the NASM
assembler can be deployed as simple portable application 的 zip
文件。
您只需将 zip
文件与您的应用程序一起分发,并在需要时将适当的特定于平台的 zip
提取到一个临时目录中,并在后台 运行 该工具。
在采取行动之前需要进一步澄清的一些主题:
- 如何使用
Java
创建临时目录?
- 如何使用
Java
解压缩压缩文件?
- 如何在不威胁用户的情况下将可执行文件标记为可执行文件(例如如何设置
chmod+x
)?
- 如何在
Java
中生成等待后台进程?
NASM
的再分发许可政策是什么?
NASM
是否有不常见的第 3 方依赖项也必须交付?
- 如何编写跨平台
Java
代码以及如何进行多平台测试?
- ...
我目前正在参加一个编译器课程,并且已经在 JAVA 中成功构建了一个小型编译器,它接受一个文件作为输入并写入 NASM 输出。
然而,我想知道如果我决定分发我的编译器,我将如何用它打包一个汇编器?
我确定我不能要求最终用户先将代码编译为 NASM,确保 he/she 已安装 NASM,然后使用它来构建最终的可执行文件!
此外,由于我想针对几个不同的系统,为每个预期目标编写高效汇编器的想法显然是一项艰巨且耗时(更不用说看似不可能的任务)!
感谢您的帮助。
您可以 select 一个开源汇编程序并将其与您的编译器打包在一起。但是,请注意许可证,汇编程序的许可证可能还要求您在特定许可证下发布编译器。
当然这并不能解决你的第二个问题:如何让这个平台(或者至少CPU)独立。然后通过汇编语言(或直接到机器代码)不是要走的路。
一个解决方案可能是使用其他人的后端。 LLVM 目前有点 "hot"。在某种程度上,这是通过将 "platform independent assembly language" 发送到 LLVM 来实现的,然后 LLVM 会为您输出目标平台的目标代码。
来自 www.nasm.us/pub/nasm/releasebuilds/2.11.08 it seems that at least for Windows
and Mac OS X
platforms the NASM
assembler can be deployed as simple portable application 的 zip
文件。
您只需将 zip
文件与您的应用程序一起分发,并在需要时将适当的特定于平台的 zip
提取到一个临时目录中,并在后台 运行 该工具。
在采取行动之前需要进一步澄清的一些主题:
- 如何使用
Java
创建临时目录? - 如何使用
Java
解压缩压缩文件? - 如何在不威胁用户的情况下将可执行文件标记为可执行文件(例如如何设置
chmod+x
)? - 如何在
Java
中生成等待后台进程? NASM
的再分发许可政策是什么?NASM
是否有不常见的第 3 方依赖项也必须交付?- 如何编写跨平台
Java
代码以及如何进行多平台测试? - ...