如何给CPU移植编译器
1个回答
展开全部
如果连GCC都不支持你的CPU的话,我劝你不要在上面花功夫了,不是一般人做得出来的,也不是一天两天做得出来的,相当于你要从头实现一次GCC中的汇编处理和连接处理,而首先要了解相关CPU的指令集,机器码,然后再谈别的。
所谓交叉编译环境都是指在GCC所支持的CPU的情况下,才能建立。
一个编译器有编译程序的时候,大概要经历预处理,语法,词法分析,优化,产生中间代码,编译,连接等过程,如果是一套GCC都不支持的CPU,预处理,语法,词法分析,优化过程可以跟与它差不多的CPU共享同样的过程,但产生中间代码,编译连接与具体的CPU有很大的相关性
我们现在举一个例子来说明:比如我们建立一个支持ARM的交叉编译环境
这个例子你与所说的要求还有一定区别(因为GCC支持ARM),不过通过这个例子可以引申出你需要做的事情,第一件要做的事情用在PC机上的GCC来编译一套用于ARM的编译工具,就是所谓的bilutils工具,包括用于ARM芯片的as,ld等程序,第二件事情就是用第一步中所产生的那套工具来编译GCC(用于ARM的),第三件事是用第二步所产生的工具来编译GLIBC库,当然,你也许还需要它对C++的支持,那么就得再编译对C++的支持,比如G++,STL库等
而LZ现在要做的工作除了上述要求之外,还有最重要的工作要做,就是在GCC中加入产生as,ld等工具的代码,很显然,这个工作量巨大,而且很难,比如你写一个最简单的C文件,里面仅声明一个整型变量,此时你自巳的编译器在前期处理阶段与x86没什么区别,可以照抄,那么如何让它变成机器码呢?这就是你需要做的工作,我没有做过类似的工作,在这里仅是建议,你需要去深入理解GCC源码,然后再加入你自己的实现,我想你加入的部分比起整个GCC来说,应该是非常少的,因为你可以共享很多与体系无法的代码。
所谓交叉编译环境都是指在GCC所支持的CPU的情况下,才能建立。
一个编译器有编译程序的时候,大概要经历预处理,语法,词法分析,优化,产生中间代码,编译,连接等过程,如果是一套GCC都不支持的CPU,预处理,语法,词法分析,优化过程可以跟与它差不多的CPU共享同样的过程,但产生中间代码,编译连接与具体的CPU有很大的相关性
我们现在举一个例子来说明:比如我们建立一个支持ARM的交叉编译环境
这个例子你与所说的要求还有一定区别(因为GCC支持ARM),不过通过这个例子可以引申出你需要做的事情,第一件要做的事情用在PC机上的GCC来编译一套用于ARM的编译工具,就是所谓的bilutils工具,包括用于ARM芯片的as,ld等程序,第二件事情就是用第一步中所产生的那套工具来编译GCC(用于ARM的),第三件事是用第二步所产生的工具来编译GLIBC库,当然,你也许还需要它对C++的支持,那么就得再编译对C++的支持,比如G++,STL库等
而LZ现在要做的工作除了上述要求之外,还有最重要的工作要做,就是在GCC中加入产生as,ld等工具的代码,很显然,这个工作量巨大,而且很难,比如你写一个最简单的C文件,里面仅声明一个整型变量,此时你自巳的编译器在前期处理阶段与x86没什么区别,可以照抄,那么如何让它变成机器码呢?这就是你需要做的工作,我没有做过类似的工作,在这里仅是建议,你需要去深入理解GCC源码,然后再加入你自己的实现,我想你加入的部分比起整个GCC来说,应该是非常少的,因为你可以共享很多与体系无法的代码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询