我正在为运行字节码的嵌入式设备开发操作系统。基本上是一个微型JVM。 在这样做的过程中,我能够编译和运行Java应用程序到字节码(ish)并在例如Atmega1284P上闪存。
现在我已经添加了对C应用程序的支持:我使用几个工具编译和处理它,并通过一些手动编辑,我最终获得在我的操作系统上运行的字节码。 这个过程非常麻烦和沉重,我想自动化它。
目前,我正在使用makefile来自动编译和刷新Java应用程序&操作系统到设备。
C应用程序的所有步骤大致如下,包括连续的手动步骤:
(1)使用Docker运行带有lljvm的Linux容器,该容器将.c文件编译为.class文件(另请参阅https://github.com/davidar/lljvm/tree/master)
(2)使用ClassFileAnalyzer工具(https://github.com/davidar/jasmin)将此c.class文件转换为jasmin文件(http://classfileanalyzer.javaseiten.de/)
(3)通过替换/调整一些字符串
在文本编辑器中手动编辑此jasmin文件(4)使用jasmin
将修改后的jasmin文件再次转换为.class文件(5)将这个.class文件放在一个文件夹中,其余的makefile(已经制作并从Java应用程序部署操作系统和类文件的那些文件)可以接管。
当前的选项似乎只是继续使用makefile,但这有点笨拙(我已经有5个不同的makefile,这将进一步扩展该链)。我也读过一些关于scons的文章。从本质上讲,我想知道哪些是推荐的工具或者是复杂构建的好方法。
答案 0 :(得分:1)
希望这可能会有所帮助,但这样的问题可能会成为激烈讨论的主题,而没有太多有用的结果。
正如其他人的评论所指出的,您确实需要自动执行从.c
文件开始的步骤,以便将其与系统的其余部分集成。
制作通常没什么问题,你不会通过切换到SCons来赢得太多。你可以通过更多方式表达自己想做的事情。除了其他意义之外,如果你想直接在构建系统及其规则中编写自动化,你也可以使用Python而不仅仅是shell(虽然这应该是一个问题,你也可以从make中调用Python代码) )。但目标,先决条件,配方的本质仍然存在。并且需要为那些.c
的集成步骤编写必要的自动化。
如果你真的想看看其他选择。您可能会对bazel感兴趣。缺点是最初努力编写必要的规则以满足您的需求可能代价高昂。根据项目的规模,可能只是太多了。另一方面,一旦完成,它将非常容易使用(将这些规则应用于增长的代码库),你也可以抛弃容器并依靠其更轻量级的沙盒和外部规则来获取工具和您构建所需的位...所有这些都只有一个系统用于构建描述。