CN107273176B - 一种适配硬件架构的编译方法及装置 - Google Patents
一种适配硬件架构的编译方法及装置 Download PDFInfo
- Publication number
- CN107273176B CN107273176B CN201610217448.8A CN201610217448A CN107273176B CN 107273176 B CN107273176 B CN 107273176B CN 201610217448 A CN201610217448 A CN 201610217448A CN 107273176 B CN107273176 B CN 107273176B
- Authority
- CN
- China
- Prior art keywords
- file
- compiling
- name
- processor
- control information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种适配硬件架构的编译方法及装置,所述方法包括:读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置;根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息;解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息;运行所述当前模块的编译脚本,根据所述控制信息将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。上述方案可提高编译效率和编译体系维护效率。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种适配硬件架构的编译方法及装置。
背景技术
一个大的计算机硬件体系架构,如手机,可能是64位的,也可能是32位的,也可能既是64位又32位的,而现在手机正趋向于既有64位处理器,又有32位处理器,这样的计算机既可以运行64位的程序也可以运行32位的程序,由此带来了软件编程的困扰,比如平台软件既要支持64位的应用,也要支持32位的应用,也可以指定支持其中一种,又如一个应用既可以按照编程人员的意愿编译成64位或者32位,或者两者都编。那么就对编译体系支持多处理器架构编译,以及同时支持多种处理器位数提出了要求。
然而,现有实现适配计算机硬件架构的编译方法中,特别是实现多架构处理器编译兼容的解决方案中,存在编译方法的效率较低,编译体系的维护较为复杂的问题。
发明内容
本发明解决的技术问题是提高编译的效率和维护编译系统的效率。
为解决上述技术问题,本发明实施例提供一种适配硬件架构的编译方法,所述方法包括:
读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置;
根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息;
解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息;
运行所述当前模块的编译脚本,根据所述控制信息将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。
可选地,所述控制信息用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。
可选地,所述输出所述当前模块的目标代码文件包括:
读取所述当前模块的输出环境配置文件,所述输出环境配置文件适于定义所述目标代码文件的目录结构;
基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段;
根据确定后的所述组合参数名称从所述目标代码的目录结构中找到所述目标代码文件的输出位置。
可选地,当根据所述控制信息将所述当前模块的至少一部分源文件进行编译时,通过以下方式输出临时文件:
当输出临时文件时,根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值;
基于所述修饰参数值得到与处理器位数值对应的临时文件目录名称;
根据所述临时文件目录名称找到所述临时文件的输出位置。
可选地,所述默认配置文件中设置有回调操作接口,所述对所述默认配置文件中的输入配置的至少一部分进行覆写,包括:通过所述回调操作接口执行回调操作以进行所述覆写。
可选地,所述默认配置文件中未被覆写的部分被继承并保留于所述覆写后的配置文件中。
可选地,采用如下方式确定被编译的源代码:
基于所述控制信息得到所述源文件的名称中的源文件名参数,进而确定所述源文件的名称,其中,所述源文件名参数适于区分不同的处理器位数和处理器架构对应的编译源文件;
根据所述编译源文件的名称确定被编译的源代码。
本发明实施例还提供一种适配硬件架构的编译装置,所述装置包括:
读取单元,适于读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置;
覆写单元,适于根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息;
解析单元,适于解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息;
编译单元,适于运行所述当前模块的编译脚本,根据所述控制信息将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。
可选地,所述控制信息用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。
可选地,所述编译单元包括:
输出环境配置读取子单元,适于读取所述当前模块的输出环境配置文件,所述输出环境配置文件适于定义所述目标代码文件的目录结构;
组合参数名确定子单元,适于基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段;
目标代码输出位置查找子单元,适于根据确定后的所述组合参数名称从所述目标代码的目录结构中找到所述目标代码文件的输出位置。
可选地,所述适配硬件架构的编译装置还包括:
修饰参数值确定子单元,适于根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值;
临时文件目录名确定子单元,适于基于所述修饰参数值得到与处理器位数值对应的临时文件目录名称;
临时文件输出位置查找子单元,适于根据所述临时文件目录名称找到所述临时文件的输出位置。
可选地,所述默认配置文件中设置有回调操作接口,所述覆写单元适于通过所述回调操作接口执行回调操作以进行所述覆写。
可选地,所述默认配置文件中未被覆写的部分被继承并保留于所述覆写后的配置文件中。
可选地,所述编译单元包括适于确定被编译的源代码的源代码确定子单元,所述源代码确定子单元包括:
源文件名确定模块,适于基于所述控制信息得到所述源文件的名称中的源文件名参数,进而确定所述源文件的名称,其中,所述源文件名参数适于区分不同的处理器位数和处理器架构对应的编译源文件;
编译源确定模块,适于根据所述编译源文件的名称确定被编译的源代码。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例的技术方案通过读取经过覆写后当前模块的输入配置文件,获取处理器架构相关信息,解析所述处理器架构相关信息以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适配的控制信息,从而可以根据所述控制信息判断出编译的目标运行设备的处理器架构是哪一个并且处理器架构的具体位数,进而可以进行相应适配的编译,由于控制信息指示了编译的目标运行设备的处理器特性,在编译动作相同时,可以复用一套与编译动作相关的编译脚本来编译成相适应的目标文件,不再需要针对不同的目标运行设备的处理器架构均分别做一套编译脚本,进而使工程师不再需要处理和维护不同的编译规则,从而可以提高维护编译系统的效率。与此同时,通过对所述默认配置文件的输入配置信息进行了覆写,工程师只需根据目标运行设备的处理器架构特性在所述当前配置输入文件中进行特定化的设置,而不再单独对不同处理器架构特性之间除各自特有配置以外的其他共同配置信息重复进行配置,从而可以提高编译的效率。
进一步地,本发明实施例通过利用组合变量的技术,具体而言,预先将目标代码的目录名称定义为与不同的处理器架构相适应,当解析出控制信息时,根据所述控制信息确定当前的目标代码文件对应的目录名称,从而查找到对应的目标代码文件的存放位置,实现根据处理器架构的不同区分不同的目标文件存放位置。
进一步地,本发明实施例通过预先定义临时文件输出目录的名称,而不同处理器位数下输出的临时文件目录名称有所区分,通过建立不同的控制信息与不同的临时文件目录名称的对应关系,从而可以根据控制信息确定临时文件目录名称,进而找到临时文件的输出位置,实现了不同处理器位数所相适应的临时输出目录区分,在对应的目录输出正确的临时文件。
附图说明
图1是本发明实施例中一种适配硬件架构的编译方法的流程图;
图2是本发明实施例中一种输出目标代码文件的方法流程图;
图3是本发明实施例中一种输出临时文件的方法流程图;
图4是本发明实施例中的一种适配硬件架构的编译装置的结构示意图;
图5是图4中所示的编译单元的一种结构示意图;
图6是图4中所示的编译单元的另一种结构示意图。
具体实施方式
如前所述,一个大的计算机硬件体系,如手机,其处理器架构的具体配置具有多样性,例如可能是64位的,也可能是32位的,也可能既是64位又32位的,而现在手机正趋向于既有64位处理器,又有32位处理器,这样的计算机既可以运行64位的程序也可以运行32位的程序,由此带来了软件编程的困扰,比如平台软件既要支持64位的应用,也要支持32位的应用,也可以指定支持其中一种,又如一个应用既可以按照编程人员的意愿编译成64位或者32位,或者两者都编。那么就对编译体系支持多处理器架构编译,以及同时支持多种处理器位数提出了要求。然而,现有实现多架构处理器编译兼容的解决方案中,编译的效率和编译体系的维护效率较低。
当目标运行设备存在多个处理器架构时,处理器之间特性可能不同,例如既有主架构、次架构,主架构和次架构又有可能是64位架构或32位架构,针对不同的处理器特性,也需要将不同的源代码编译成相适应的目标代码,但现有的做法是,对每一种排列组合下的处理器特性,都要编写对应的编译脚本,由此造成整个编译方法效率低下,编译脚本文件繁多,降低工程师的维护效率。同时每次针对不同的处理器环境,都要重复设置那些共同的环境配置信息,编译效率较低。
本发明实施例的技术方案通过读取经过覆写后当前模块的输入配置文件,获取处理器架构相关信息,解析所述处理器架构相关信息以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适配的控制信息,从而可以根据所述控制信息判断出编译的目标运行设备的处理器架构是哪一个并且处理器架构的具体位数,进而可以进行相应适配的编译,由于控制信息指示了编译的目标运行设备的硬件体系结构,在编译动作相同时,可以复用一套编译脚本文件编译成相适应的目标文件,不再需要针对不同的目标运行设备的处理器架构分别做一套编译脚本,进而使工程师不再需要处理和维护不同的编译规则,从而可以提高维护编译系统的效率。与此同时,通过对所述默认配置文件的输入配置信息进行了覆写,工程师只需根据目标运行设备的处理器架构特性在所述当前配置输入文件中进行特定化的设置,而不再单独对不同处理器架构特性之间除各自特有配置以外的其他共同配置信息重复进行配置,从而可以提高编译的效率。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
图1是本发明实施例中的一种适配硬件架构的编译方法的流程图。下面参照图1对所述编译方法的步骤进行说明。
步骤S101:读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置。
在具体实施中,读取默认配置文件的过程可以是读取多个默认设置文件的过程,例如可以根据默认配置文件在目录中存放的层级读取,读取的过程可以是与面向对象中继承相类似的过程,如读取当前项目的默认配置文件,该项目的默认配置文件继承全局编译输入的默认配置文件,进而读取所述全局编译输入的默认配置文件。
换言之,项目的默认配置文件可以沿用全局的默认配置文件中的各种默认输入配置。这些全局的默认输入配置中的部分配置信息比如环境变量值可以继续保留不变于项目的默认配置文件中,而部分的配置信息则可以因项目的默认配置文件重新定义而被改写。类似地,下一级目录的配置输入文件也可以沿用和改写上一级的配置信息。其中,这种改写上一级配置文件的过程在本申请文件中称为覆写。通过覆写可以进行当前编译的个性化输入配置,从而方便二次开发的工程师维护。
在具体实施中,所述默认配置文件可以是配置脚本类,用于配置环境变量,使得编译体系调用正确的环境脚本类去适配到目标设备的运行环境。所述配置脚本类可以由二次开发的工程师根据目标的运行设备的处理器结构特性进行特定的设置。
在具体实施中,可以由环境脚本类对所述默认脚本类中设置的环境变量进行处理。
在具体实施中,所述默认配置文件中设置有回调操作接口,设置所述回到操作接口相当于登记了某个特定文件的引用接口,具体可以在默认配置文件中使用include语句进行登记处理,当该特定文件被引用时即被回调,该特定文件可以对继承的默认配置文件进行覆写。
步骤S102:根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息。
在具体实施中,所述对所述默认配置文件中的输入配置的至少一部分进行覆写,包括:通过所述回调操作接口执行回调操作以进行所述覆写。通过覆写可以将继承后的默认配置文件进行特定化的设置,从而使得编译体系调用特定化设置后的环境变量来调用正确的环境脚本类进行处理,进而可以适配到运行环境。在本发明一实施例中,所述处理器架构相关信息即为特定化设置后的环境变量的值。
在具体实施中,所述默认配置文件中未被覆写的部分被继承并保留于所述覆写后的配置文件中。
可以理解的是,当编译体系中具有多层目录结构,多个默认配置文件存放于有上下级关系的多个目录中时,可以根据待编译模块的位置,按照目录结构从上至下的顺序,依次继承该待编译目录所在的目录层次中所有的默认配置文件。同样地,有关编译动作的编译脚本文件也可以类似地进行继承和覆写。由此,当编译动作一致时,可以复用编译动作的脚本文件,而只需将记录编译输入数据的配置文件进行个性化的更改设置,从而可以将编译体系化繁为简,提高编译效率,也便于工程师进行维护。
步骤S103:解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息。
在具体实施中,当前模块的环境脚本类被登记于全局的环境脚本类中,可以通过回调当前模块的环境脚本类,对所述处理器架构相关信息进行解析,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息。
在具体实施中,所述控制信息可以用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。所述目标运行设备可以是主机或目标手机,例如目标手机有两个处理器,分别为主处理器架构和次处理器架构,主处理器架构为64位,而次处理器架构为32位。如果控制信息指示的是主处理器架构64位,那么编译体系将把源文件编译成适配与该处理器的目标代码文件,从而可以连接得到可以在该目标手机上运行的64位应用。
在本发明一实施例中,可以把所述控制信息设为逻辑变量,由该逻辑变量的值来对另一变量值进行设置为64或32或其他,在利用所述另一变量进行后续编译,以适配不同的处理器架构的特性。解析的过程举例如下:当所述处理器架构相关信息由环境变量GLV_BUILD_INSTR_WIDTH_COMBO来进行定义,该环境变量的值可以是both、primary、secondary、64、32和16,其中,both表示既编译主架构又编译次架构,primary表示只编译主架构,secondary表示只编译次架构,64表示只编译64位架构(可能是主架构也可能是次架构),32等于只编译32位架构的32位指令(可能是主架构也可能是次架构),16等于只编译32位架构的16位指令(可能是主架构也可能是次架构)。假设从当前输入配置文件中没有设该环境变量,那么使用项目的默认输入配置文件中的缺省值,假设获得的该环境变量GLV_BUILD_INSTR_WIDTH_COMBO的值为secondary,表示编译次架构,那么可以将控制编译主架构的控制变量设为可供,控制编译次架构的控制变量设为true,再基于控制编译次架构的控制变量的值来进行适配性地编译。
步骤S104:运行所述当前模块的编译脚本,根据所述控制信息以及编译输入文件将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。
在具体实施中,动作默认设置记载于编译脚本中,数据默认设置记载于配置脚本,通过将编译脚本和环境脚本分开,可以实现数据和动作分开,减少数据和动作之间的耦合,理顺编体系框架结构,提升编译方法的效率。
在本发明一实施例中,通过运行当前模块的编译脚本,根据所述控制信息以及编译输入文件将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。所述编译输入文件可以指示源文件或者预编译文件,输出目标代码的格式、依赖的库等。
本发明实施例的技术方案通过读取经过覆写后当前模块的输入配置文件,获取处理器架构相关信息,解析所述处理器架构相关信息以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适配的控制信息,从而可以根据所述控制信息判断出编译的目标运行设备的处理器架构是哪一个并且处理器架构的具体位数,进而可以进行相应适配的编译,由于控制信息指示了编译的目标运行设备的硬件体系结构,在编译动作相同时,可以复用一套编译规则文件编译成相适应的目标文件,不再需要针对不同的目标运行设备的处理器架构分别做一套编译规则,进而使工程师不再需要处理和维护不同的编译规则,从而可以提高维护编译系统的效率。与此同时,通过对所述默认配置文件的输入配置信息进行了覆写,工程师只需根据目标运行设备的处理器架构特性在所述当前配置输入文件中进行特定化的设置,而不再单独对不同处理器架构特性之间除各自特有配置以外的其他共同配置信息重复进行配置,从而可以提高编译的效率。
由于在一个目标运行设备上,处理器架构可能是64位或32位,或者同时具有二者,在输出目标代码文件时,需要区分不同处理器位数对应的目标代码文件的存放目录。下面对此进行说明。
图2是本发明实施例中的一种输出当前模块的目标代码文件的流程图。下面参照图2进行说明。
步骤201:读取所述当前模块的输出环境配置文件,所述输出环境配置文件适于定义所述目标代码文件的目录结构。
在具体实施中,所述输出环境配置文件适于定义所述目标代码文件的目录结构,区分了不同处理器位数对应的输出路径。
步骤202:基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段。
在具体实施中,通过图1中的步骤S101值步骤S102得到所述控制信息,在需要输出目标文件目录时,可以基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段。
在具体实施中,所述组合参数名称与具体的目标代码文件的目录结构对应。例如,EXE_HOST_64对应的目录结构为host/bin64
在本发明一实施例中,所述组合参数名称可以是一个变量的值。例如,组合参数名称为EXE_HOST_64,可以将其中的HOST和64作为待确定具体值的字段,例如HOST对应A和64对应B,当确定编译目标为主机时得到A的值为HOST,而基于控制信息得到要编译适应64位处理器,则B为64,从而可以确定组合参数名称为EXE_HOST_64。
步骤203:根据确定后的所述组合参数名称从所述目标代码的目录结构中找到所述目标代码文件的输出位置。
沿用上例,由于EXE_HOST_64对应的目录结构为host/bin64,那么可以通过确定后的组合参数名称于EXE_HOST_64找到所述目标代码文件的输出位置。
本发明实施例通过利用组合变量的技术,具体而言,预先将目标代码的目录名称定义为与不同的处理器架构相适应,当解析出控制信息时,根据所述控制信息确定当前的目标代码文件对应的目录名称,从而查找到对应的目标代码文件的存放位置,实现根据处理器架构的不同区分不同的目标文件存放位置。
图3是本发明实施例中的一种输出临时文件的方法的流程图。下面参照图3进行说明。
步骤S301:根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值。
在具体实施中,通过图1中的步骤S101值步骤S102得到所述控制信息,在需要输出临时文件目录时,根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值。
步骤S302:基于所述修饰参数值得到与处理器位数值对应的临时文件目录名称。
在本发明一实施例中,所述修饰参数值设置于一基本变量值之后,两者的组合可以得到临时文件输出的目录名称。例如,基本的变量值为obj,所述修饰参数值可以为64或为空,当所述控制信息为true,其指示编译的目标运行设备的处理器为64位,则所述修饰参数值为64,那么临时文件输出的目录为obj64。由此,修饰变量值的变化可以区分不同的处理器位数。
在本发明的其他实施例中,也可根据实际想要设定的目录名来设定不同控制信息下对应的变量值,本领域技术人员应理解此处关于修饰参数值的应用。
步骤S303:根据所述临时文件目录名称找到所述临时文件的输出位置。
本发明实施例通过预先定义临时文件输出目录的名称,而不同处理器位数下输出的临时文件目录名称有所区分,通过建立不同的控制信息与不同的临时文件目录名称的对应关系,从而可以根据控制信息确定临时文件目录名称,进而找到临时文件的输出位置,实现了不同处理器位数所相适应的临时输出目录区分,在对应的目录输出正确的临时文件。
图4是本发明实施例中的一种适配硬件架构的编译装置的结构示意图,如图4所示的编译装置40可以包括:读取单元401、覆写单元402、解析单元403和编译单元404。
所述读取单元401,适于读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置;
所述覆写单元402,适于根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息;
解析单元403,适于解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息;
编译单元404,适于运行所述当前模块的编译脚本,根据所述控制信息将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。
在具体实施中,所述控制信息用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。
本发明实施例的适配硬件架构的编译装置40的描述可对应参照图1中适配硬件架构的编译方法的说明,不再赘述。
本发明实施例的技术方案通过读取经过覆写后当前模块的输入配置文件,获取处理器架构相关信息,解析所述处理器架构相关信息以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适配的控制信息,从而可以根据所述控制信息判断出编译的目标运行设备的处理器架构是哪一个并且处理器架构的具体位数,进而可以进行相应适配的编译,由于控制信息指示了编译的目标运行设备的硬件体系结构,在编译动作相同时,可以复用一套编译规则文件编译成相适应的目标文件,不再需要针对不同的目标运行设备的处理器架构分别做一套编译规则,进而使工程师不再需要处理和维护不同的编译规则,从而可以提高维护编译系统的效率。与此同时,通过对所述默认配置文件的输入配置信息进行了覆写,工程师只需根据目标运行设备的处理器架构特性在所述当前配置输入文件中进行特定化的设置,而不再单独对不同处理器架构特性之间除各自特有配置以外的其他共同配置信息重复进行配置,从而可以提高编译的效率
图5是图4中所示编译单元的一种结构示意图,所述编译单元404可以包括:
输出环境配置读取子单元4041,适于读取所述当前模块的输出环境配置文件,所述输出环境配置文件适于定义所述目标代码文件的目录结构;
组合参数名确定子单元4042,适于基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段;
目标代码输出位置查找子单元4043,适于根据确定后的所述组合参数名称从所述目标代码的目录结构中找到所述目标代码文件的输出位置。
在具体实施中,所述控制信息可以用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。
在具体实施中,所述默认配置文件中设置有回调操作接口,所述对所述默认配置文件中的输入配置的至少一部分进行覆写,包括:通过所述回调操作接口执行回调操作以进行所述覆写。
在具体实施中,所述默认配置文件中未被覆写的部分被继承并保留于所述覆写后的配置文件中。
本发明实施例通过利用组合变量的技术,具体而言,预先将目标代码的目录名称定义为与不同的处理器架构相适应,当解析出控制信息时,根据所述控制信息确定当前的目标代码文件对应的目录名称,从而查找到对应的目标代码文件的存放位置,实现根据处理器架构的不同区分不同的目标文件存放位置。
图6是图4中所示的另一种编译单元的结构示意图。所述编译单元404可以包括:输出环境配置读取子单元4041、组合参数名确定子单元4042和目标代码输出位置查找子单元4043。
所述输出环境配置读取子单元4041、所述组合参数名确定子单元4042和所述目标代码输出位置查找子单元4043的说明请参照图5中的对应描述,不再赘述。
本发明实施例中的编译单元404还可以包括:
修饰参数值确定子单元4044,适于根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值;
临时文件目录名确定子单元4045,适于基于所述修饰参数值得到与处理器位数值对应的临时文件目录名称;
临时文件输出位置查找子单元4046,适于根据所述临时文件目录名称找到所述临时文件的输出位置。
在具体实施中,所述编译单元404还可以包括适于确定被编译的源代码的源代码确定子单元4047。所述源代码确定子单元4047可以包括:源文件名确定模块和编译源确定模块。其中:
所述源文件名确定模块,适于基于所述控制信息得到所述源文件的名称中的源文件名参数,进而确定所述源文件的名称,其中,所述源文件名参数适于区分不同的处理器位数和处理器架构对应的编译源文件;
所述编译源确定模块,适于根据所述编译源文件的名称确定被编译的源代码。
本发明实施例通过预先定义临时文件输出目录的名称,而不同处理器位数下输出的临时文件目录名称有所区分,通过建立不同的控制信息与不同的临时文件目录名称的对应关系,从而可以根据控制信息确定临时文件目录名称,进而找到临时文件的输出位置,实现了不同处理器位数所相适应的临时输出目录区分,在对应的目录输出正确的临时文件。
本发明实施例通过预先将目标代码的目录名称定义为与不同的处理器架构相适应,当解析出控制信息时,根据所述控制信息确定当前的目标代码文件对应的目录名称,从而查找到对应的目标代码文件的存放位置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (14)
1.一种适配硬件架构的编译方法,适于读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置,其特征在于,还包括:
根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息;
解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息;
运行所述当前模块的编译脚本,根据所述控制信息将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。
2.根据权利要求1所述的适配硬件架构的编译方法,其特征在于,所述控制信息用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。
3.根据权利要求1所述的适配硬件架构的编译方法,其特征在于,所述输出所述当前模块的目标代码文件包括:
读取所述当前模块的输出环境配置文件,所述输出环境配置文件适于定义所述目标代码文件的目录结构;
基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段;
根据确定后的所述组合参数名称从所述目标代码的目录结构中找到所述目标代码文件的输出位置。
4.根据权利要求1所述的适配硬件架构的编译方法,其特征在于,当根据所述控制信息将所述当前模块的至少一部分源文件进行编译时,通过以下方式输出临时文件:
根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值;
基于所述修饰参数值得到与处理器位数值对应的临时文件目录名称;
根据所述临时文件目录名称找到所述临时文件的输出位置。
5.根据权利要求1所述的适配硬件架构的编译方法,其特征在于,所述默认配置文件中设置有回调操作接口,所述对所述默认配置文件中的输入配置的至少一部分进行覆写,包括:通过所述回调操作接口执行回调操作以进行所述覆写。
6.根据权利要求1所述的适配硬件架构的编译方法,其特征在于,所述默认配置文件中未被覆写的部分被继承并保留于所述覆写后的配置文件中。
7.根据权利要求1所述的适配硬件架构的编译方法,其特征在于,采用如下方式确定被编译的源代码:
基于所述控制信息得到所述源文件的名称中的源文件名参数,进而确定所述源文件的名称,其中,所述源文件名参数适于区分不同的处理器位数和处理器架构对应的编译源文件;
根据所述编译源文件的名称确定被编译的源代码。
8.一种适配硬件架构的编译装置,包括读取单元,适于读取默认配置文件,所述默认配置文件记录编译过程中的默认输入配置;其特征在于,还包括:
覆写单元,适于根据当前模块目录下的当前配置输入文件对所述默认配置文件中的默认输入配置的至少一部分进行覆写,以得到覆写后的配置文件,所述覆写后的配置文件中包含目标运行设备的处理器架构相关信息;
解析单元,适于解析所述处理器架构相关信息,以将编译适配到所述目标运行设备的处理器架构,并得到与所述目标运行设备的处理器架构相适应的控制信息;
编译单元,适于运行所述当前模块的编译脚本,根据所述控制信息将所述当前模块的至少一部分源文件进行编译,以输出所述当前模块的目标代码文件。
9.根据权利要求8所述的适配硬件架构的编译装置,其特征在于,所述控制信息用于指示所述目标代码文件所适配的处理器位数与目标处理器架构。
10.根据权利要求8所述的适配硬件架构的编译装置,其特征在于,所述编译单元包括:
输出环境配置读取子单元,适于读取所述当前模块的输出环境配置文件,所述输出环境配置文件适于定义所述目标代码文件的目录结构;
组合参数名确定子单元,适于基于所述控制信息确定组合参数名称,其中,所述控制信息作为所述组合参数名称的部分字段;
目标代码输出位置查找子单元,适于根据确定后的所述组合参数名称从所述目标代码的目录结构中找到所述目标代码文件的输出位置。
11.根据权利要求8所述的适配硬件架构的编译装置,其特征在于,所述编译单元还包括:
修饰参数值确定子单元,适于根据所述控制信息得到修饰参数值,所述修饰参数值为所述目标运行设备的目标处理器架构的处理器位数值;
临时文件目录名确定子单元,适于基于所述修饰参数值得到与处理器位数值对应的临时文件目录名称;
临时文件输出位置查找子单元,适于根据所述临时文件目录名称找到所述临时文件的输出位置。
12.根据权利要求8所述的适配硬件架构的编译装置,其特征在于,所述默认配置文件中设置有回调操作接口,所述覆写单元适于通过所述回调操作接口执行回调操作以进行所述覆写。
13.根据权利要求8所述的适配硬件架构的编译装置,其特征在于,所述默认配置文件中未被覆写的部分被继承并保留于所述覆写后的配置文件中。
14.根据权利要求8所述的适配硬件架构的编译装置,其特征在于,所述编译单元包括适于确定被编译的源代码的源代码确定子单元,所述源代码确定子单元包括:
源文件名确定模块,适于基于所述控制信息得到所述源文件的名称中的源文件名参数,进而确定所述源文件的名称,其中,所述源文件名参数适于区分不同的处理器位数和处理器架构对应的编译源文件;
编译源确定模块,适于根据所述编译源文件的名称确定被编译的源代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610217448.8A CN107273176B (zh) | 2016-04-08 | 2016-04-08 | 一种适配硬件架构的编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610217448.8A CN107273176B (zh) | 2016-04-08 | 2016-04-08 | 一种适配硬件架构的编译方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107273176A CN107273176A (zh) | 2017-10-20 |
CN107273176B true CN107273176B (zh) | 2020-05-12 |
Family
ID=60052473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610217448.8A Active CN107273176B (zh) | 2016-04-08 | 2016-04-08 | 一种适配硬件架构的编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107273176B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766048B (zh) * | 2017-10-23 | 2020-09-15 | 浪潮通用软件有限公司 | 一种页面编译方法及装置 |
CN107908407B (zh) * | 2017-12-11 | 2021-09-07 | 北京奇虎科技有限公司 | 编译方法、装置及终端设备 |
CN109981708A (zh) * | 2017-12-27 | 2019-07-05 | 浙江绍兴苏泊尔生活电器有限公司 | 联网设备控制方法及装置 |
CN108614691B (zh) * | 2018-04-19 | 2021-08-24 | 交叉信息核心技术研究院(西安)有限公司 | 网络功能的开发方法、系统、计算机设备和存储介质 |
CN110083360B (zh) * | 2019-04-26 | 2023-08-22 | 深圳乐信软件技术有限公司 | 一种应用程序代码的编译方法、装置、设备及存储介质 |
CN112181422A (zh) * | 2020-09-02 | 2021-01-05 | 苏州浪潮智能科技有限公司 | 一种Hadoop编译方法、装置及计算机可读存储介质 |
CN112506518B (zh) * | 2020-12-01 | 2023-07-14 | 东软睿驰汽车技术(沈阳)有限公司 | 基于配置文件的编译方法和装置 |
CN113065314B (zh) * | 2021-03-26 | 2023-02-28 | 山东英信计算机技术有限公司 | 一种基于xml文件格式的bios硬件适配方法及装置 |
CN114327490B (zh) * | 2022-03-04 | 2022-07-08 | 麒麟软件有限公司 | 国产操作系统适配Ceph的方法 |
CN117596120A (zh) * | 2023-11-21 | 2024-02-23 | 沧州信安保销毁设备有限公司 | 基于单向传输的安全运维方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402452A (zh) * | 2011-12-12 | 2012-04-04 | 深圳市共进电子股份有限公司 | 一种编译方法及装置 |
CN103678687A (zh) * | 2013-12-26 | 2014-03-26 | 北京奇虎科技有限公司 | 基于配置系统的项目创建方法及装置 |
CN104820613A (zh) * | 2015-05-27 | 2015-08-05 | 中国科学院自动化研究所 | 一种异构多核程序的编译方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924944B2 (en) * | 2012-06-29 | 2014-12-30 | Microsoft Corporation | Implementation of distributed methods that support generic functions |
-
2016
- 2016-04-08 CN CN201610217448.8A patent/CN107273176B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402452A (zh) * | 2011-12-12 | 2012-04-04 | 深圳市共进电子股份有限公司 | 一种编译方法及装置 |
CN103678687A (zh) * | 2013-12-26 | 2014-03-26 | 北京奇虎科技有限公司 | 基于配置系统的项目创建方法及装置 |
CN104820613A (zh) * | 2015-05-27 | 2015-08-05 | 中国科学院自动化研究所 | 一种异构多核程序的编译方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107273176A (zh) | 2017-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273176B (zh) | 一种适配硬件架构的编译方法及装置 | |
EP3204849B1 (en) | Systems and methods to update source code files | |
JP6294886B2 (ja) | アプリケーション用の中間言語コードからネイティブコードを生成すること | |
CN111796831B (zh) | 一种多芯片兼容的编译方法和装置 | |
CN112100072B (zh) | 应用程序代码的静态检测方法、装置、设备及介质 | |
US20150040112A1 (en) | Enabling Interoperability Between Software Applications By Utilizing Partial Binaries | |
CN112596739B (zh) | 一种数据的处理方法和装置 | |
CN112882718B (zh) | 编译处理方法、装置、设备及存储介质 | |
US20190179622A1 (en) | Performing a compiler optimization pass as a transaction | |
CN112379940B (zh) | 一种可执行文件处理方法、装置、电子设备及存储介质 | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
CN104375875A (zh) | 用于应用程序的编译优化的方法以及编译器 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
CN110968339B (zh) | 前端构建工具的方法、装置以及电子设备 | |
JP2817786B2 (ja) | シミュレーション装置及びシミュレーション方法 | |
CN104951290A (zh) | 优化软件的方法和设备 | |
US9075679B1 (en) | Creating a prerequisite checklist corresponding to a software application | |
KR20080013422A (ko) | 소프트웨어 프로젝트 빌드 방법 | |
CN114064114A (zh) | 一种动态库生成方法及装置 | |
CN114253554A (zh) | 一种代码处理方法、装置及存储介质 | |
CN107562430B (zh) | 一种针对移动π演算语言的文件处理功能的编译方法 | |
CN112612474A (zh) | 产品移植方法、装置、存储介质和电子设备 | |
US20180196676A1 (en) | Reduced save and restore instructions for call-clobbered registers | |
KR102361534B1 (ko) | 컴파일러를 이용한 난독화 방법 및 시스템 | |
CN116974550B (zh) | 一种通用三维地球可视化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |