我创建了我自己的(非常简单的)字节代码语言,以及一个执行它的虚拟机。它工作正常,但现在我想使用gcc(或任何其他免费提供的编译器)从普通的c程序为这台机器生成字节代码。所以问题是,如何修改或扩展gcc以便它可以输出我自己的字节代码?请注意,我不想将我的字节代码编译为机器代码,我想将c代码“编译”为(我自己的)字节代码。
我意识到这是一个潜在的大问题,最好的答案可能是“去看看gcc源代码”。我只是需要一些帮助来解决这个问题。我认为必须有一些关于这个主题的文章或书籍可以描述向gcc添加自定义生成器的过程,但我没有通过谷歌搜索找到任何东西。
答案 0 :(得分:25)
我正忙着将gcc移植到我们之前设计的8位处理器上。我对我们的机器来说是一项艰巨的任务,因为它是8位的,我们只有一个累加器,但如果你有更多的资源,它就变得容易了。这就是我们尝试使用gcc 4.9和使用cygwin来管理它的方式:
config.sub
周围添加您的体系结构名称,查找# Decode aliases for certain CPU-COMPANY combinations.
在该列表中添加| my_processor \
# Recognize the basic CPU types with company name.
添加到列表中:| my_processor-* \
搜索文件gcc/config.gcc
,在文件中查找案例$ {target}它在880行附近,按以下方式添加自己:
;;
my_processor*-*-*)
c_target_objs="my_processor-c.o"
cxx_target_objs="my_processor-c.o"
target_has_targetm_common=no
tmake_file="${tmake_file} my_processor/t-my_processor"
;;
gcc-4.9.0\gcc\config\my_processor
my_processor.c
my_processor.h
my_processor.md
my_processor.opt
my_processor-c.c
my_processor.def
my_processor-protos.h
constraints.md
predicates.md
README.txt
t-my_processor
gcc-4.9.0/build/object
../../configure --target=my_processor --prefix=path for my compiler --enable-languages="c"
答案 1 :(得分:9)
努力工作。
例如,我还使用自己的字节代码设计自己的“架构”,并希望使用GCC生成C / C ++代码。这就是我的方式:
当你完成后,你可以只使用c或c ++而不使用os-dependet库(你的架构上目前没有运行的操作系统),你现在应该(如果需要的话)用你的交叉编译器编译许多其他的库来一个好的框架。
答案 2 :(得分:3)
它没有那么难。如果您的目标机器与另一台机器合理,请将其RTL(?)定义作为起点并进行修改,然后make compile test
通过引导阶段;冲洗并重复直至其工作。您可能不必编写任何实际代码,只需编写机器定义模板。