CN117573095A - 一种支持持续集成的交叉编译框架的搭建及编译方法 - Google Patents

一种支持持续集成的交叉编译框架的搭建及编译方法 Download PDF

Info

Publication number
CN117573095A
CN117573095A CN202311738732.6A CN202311738732A CN117573095A CN 117573095 A CN117573095 A CN 117573095A CN 202311738732 A CN202311738732 A CN 202311738732A CN 117573095 A CN117573095 A CN 117573095A
Authority
CN
China
Prior art keywords
compiling
cross
tool chain
tool
framework
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.)
Pending
Application number
CN202311738732.6A
Other languages
English (en)
Inventor
陈昊钦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CETC 32 Research Institute
Original Assignee
CETC 32 Research Institute
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CETC 32 Research Institute filed Critical CETC 32 Research Institute
Priority to CN202311738732.6A priority Critical patent/CN117573095A/zh
Publication of CN117573095A publication Critical patent/CN117573095A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种支持持续集成的交叉编译框架,作为开发式的交叉编译框架,支持自动化部署交叉编译环境,可持续性地部署、管理不同架构(ARM、MIPS、PPC等),不同体系(GCC、LLVM)的交叉编译工具链,并支持可视化界面进行编译过程控制。

Description

一种支持持续集成的交叉编译框架的搭建及编译方法
技术领域
本发明涉及电子技术领域,具体涉及一种支持持续集成的交叉编译框架。
背景技术
随着计算机技术和信息网络技术的飞速发展,嵌入式系统的应用越来越广泛,而嵌入式产品以其小巧、使用方便、实用等特点越来越受到人们的青睐。特别是近几年来,嵌入式产品越来越多的被应用于各个领域,如国防、工业控制、通信、办公自动化和消费电子领域等。
由于嵌入式系统一般都运行在内存较小、显示设备简陋甚至没有的目标机平台上,没有能力在其上进行本地编译,所以需要在有能力进行源代码编译的宿主机平台上进行编译,宿主机平台CPU架构或操作系统与目标平台不同,就需要使用交叉编译工具链生成运行在目标机平台上的可执行文件。
通常交叉编译环境的搭建步骤包括:安装交叉编译工具链、配置系统环境变量、编写Makefile、执行交叉编译。安装交叉编译工具链具体操作是根据目标平台的体系结构和操作系统,在宿主机上安装对应的交叉编译工具链。交叉编译工具链包括编译器、链接器、汇编器等工具,用于将宿主机上的代码编译成目标平台上可执行的代码;配置系统环境变量具体操作是将交叉编译工具链的路径添加到系统环境变量中,以便在命令行中可以直接使用交叉编译工具。编写Makefile具体操作是根据需要,编写文本文件Makefile,其中包含编译和链接的规则,通过make命令可以自动化执行这些规则;执行交叉编译的具体操作时在交叉编译环境搭建完成后,通过命令行执行make命令,调用makefile进行编译,生成可执行文件。
发明内容
本发明需要解决的技术问题是:1、交叉编译工具链在部署时需要修改系统环境变量,多个不同架构、不同体系的交叉编译工具链同时部署时易出现不兼容问题,并且每当对交叉编译工具链进行增、删、改操作时,都需要同步维护系统环境变量,不仅繁琐,还容易出错。2、需要根据每个项目不同需求通过文本编写Makefile,比如链接不同的运行库、引用不同的头文件路径等,对用户技术能力要求太高,同时人工编写Makefile的可维护性差,可复用性低。3、通过命令行执行交叉编译,和编写代码的环境脱离,用户使用非常不便,同时编译过程通过系统控制台打印,对于编译过程中的信息、警告、错误没有区分,更没有对错误代码的定位功能,用户无法通过编译过程便捷地定位排查问题。
本发明的技术方案是提供了一种支持持续集成的交叉编译框架的搭建方法,其特征在于,包括以下步骤:
步骤1:基于Eclipse插件开发的标准,扩展Eclipse CDT框架的交叉编译功能相关扩展点,开发支持GCC和LLVM工具链的插件,不固定工具链部署信息,实现工具链配置文件解析器,提供工具链部署信息的解析服务以及Makefile自动生成功能。
步骤2:使用YAML语法的工具链配置文件存储工具链部署信息,在工具链配置文件中以指定格式编写工具链的工具链部署信息;工具链配置文件解析器能够自动遍历并解析指定路径下的工具链配置文件,识别工具链部署信息,并将工具链部署信息传递给EclipseCDT框架,从而实现交叉工具链的环境部署,并将工具链信息映射到可视化界面进行控制和功能调用。
优选地,所述工具链部署信息包括环境变量和工具链命令。
优选地,所述工具链配置文件与工具链为一一对应关系。
本发明的技术方案还提供了一种支持持续集成的交叉编译框架的编译方法,其特征在于,采用如上所述的一种支持持续集成的交叉编译框架的搭建方法搭建的交叉编译框架,所述编译方法包括以下步骤:
自动遍历并解析集成开发环境下指定目录中的交叉工具链配置文件,创建编译器定义模型;
将编译器定义模型的数据结构和属性信息进行萃取,初始化GCC/LLVM交叉编译环境框架并生成构建配置界面;
对交叉编译环境框架的工具链命令、目标可执行程序属性、环境变量、构建路径进行设置,通知交叉编译环境框架更新配置界面;
读取配置界面中用户设置的编译、链接、汇编、预处理、编译后指令并通知交叉编译环境框架更新;
配置界面提供构建操作功能,对交叉编译框架发送构建或清理命令;
交叉编译框架执行构建或清理,根据工具链命令、目标可执行程序属性、环境变量、构建路径自动生成Makfile并根据其中编译规则调用对应工具;
编译过程通过对工具的输出重定向,定向输出编译过程,显示指令执行过程、高亮错误和警告信息、错误代码超链接定位。
本发明提供一种支持持续集成的交叉编译框架,作为开发式的交叉编译框架,支持自动化部署交叉编译环境,可持续性地部署、管理不同架构(ARM、MIPS、PPC等),不同体系(GCC、LLVM)的交叉编译工具链,并支持可视化界面进行编译过程控制。
附图说明
图1为编译器持续集成示意图;
图2为GCC工具链配置文件示意图;
图3为LLVM工具链配置文件示图
图4为工具链设置示意图;
图5为自动生成的makefile示意图;
图6为编译过程示意图;
图7为交叉编译框架自动部署工具链环境并执行编译过程;
图8为编译器配置文件。
具体实施方式
下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
如图1-图6所示,在本实施例中,一种支持持续集成的交叉编译框架的搭建方法包括以下步骤:
步骤1:基于Eclipse插件开发的标准,扩展Eclipse CDT框架的交叉编译功能相关扩展点,定制开发支持GCC和LLVM工具链的插件,但并不固定具体的工具链部署信息,比如环境变量、工具链命令,实现工具链配置文件解析器,提供工具链部署信息的解析服务以及Makefile自动生成功能。
步骤2:使用YAML语法的工具链配置文件存储工具链部署信息,在工具链配置文件中以指定格式编写工具链的环境变量、工具链命令等部署信息,每一个工具链对应一个工具链配置文件。工具链配置文件解析器自动遍历并解析指定路径下的工具链配置文件,识别工具链的部署信息,将工具链环境变量、工具链命令等信息传递给Eclipse CDT框架,完成交叉工具链的环境部署,并将工具链信息映射到可视化界面进行控制和功能调用。
以上方式可以实现对针对龙芯、飞腾、申威CPU/DSP等不同硬件平台以及LLVM/GCC不同架构的工具链的自动化部署,并且依托于工具链配置文件的文本格式的特性,实现工具链的持续集成。
如图7所示,在本实施例中,一种支持持续集成的交叉编译框架的编译方法,采用上述一种支持持续集成的交叉编译框架的搭建方法搭建的交叉编译框架,所述编译方法包括以下步骤:
自动遍历并解析集成开发环境下指定目录中的交叉工具链配置文件,创建编译器定义模型。
将编译器定义模型的数据结构和属性信息进行萃取,初始化GCC/LLVM交叉编译环境框架并生成构建配置界面。
对交叉编译环境框架的工具链命令、目标可执行程序属性、环境变量、构建路径等进行设置,通知交叉编译环境框架更新配置界面。
读取配置界面中用户设置的编译、链接、汇编、预处理、编译后指令并通知交叉编译环境框架更新。
配置界面提供构建操作功能,可对交叉编译框架发送构建或清理命令。
交叉编译框架执行构建或清理,根据工具链命令、目标可执行程序属性、环境变量、构建路径等自动生成Makfile并根据其中编译规则调用对应工具。
编译过程通过对工具的输出重定向,定向输出编译过程,显示指令执行过程、高亮错误和警告信息、错误代码超链接定位。
实施举例,编译器配置文件解析方案。
配置文件语法采用YAML,遍历解析在IDE/host/toolchain目录下的文件夹,如IDE/host/toolchain/config文件夹下的meta.yaml,获取其中存储的编译器部署信息。
编译器部署信息格式规则如下,编译器的配置文件如图8所示。
接口标识(---!!cn.com.ecict.rede.metamodel.v1.Toolchain)。
id(唯一标示string 0-255)。
vendor(编译器架构enumeration GCC、LLVM、TI)。
GCC:代表GCC架构工具链,如果UI界面对工程选择了自动生成makefile,可以生成GCC交叉工具链makefile框架。
LLVM:代表LLVM架构工具链,如果UI界面对工程选择了自动生成makefile,可以生成LLVM交叉工具链makefile框架。
TI:代表TI的工具链,如果UI界面对工程选择了自动生成makefile,可以生成TI的交叉工具链makefile框架。
description(UI描述string 0-255)。
archeitectures(cpu架构和操作系统定义接口cpu架构对应进行自动筛选enumeration)。
path(编译器可执行程序路径,比如gnumips64编译器的可执行程序位于IDE/host/toolchain/gnumips64/bin目录下,这里填写相对IDE/host/toolchai的路径:gnumips64/bin)。
除了path设置的环境变量,IDE自动会配置环境变量,windows系统会自动加上IDE/host/common/bin,这个路径是IDE自带的一个mingw环境,linux系统会自动加上linux系统环境变量。如果除以上环境变量,编译器自身需要一些自定义环境变量,可以在path后增加,比如path可以写成gnumips64/bi;${REDE_HOME}/host/toolchain/.gnumips64/otherenv/bin。
其中${REDE_HOME}是IDE自动生成的环境变量,值是IDE安装目录路径。
prefix:(编译器命令前后缀后缀由相对应交叉编译框架自动补全比如vendor是GCC的工具链,prefix为mipsel-elf-,编译指令会自动补全为mipsel-elf-gcc或mipsel-elf-g++。注意,vendor是LLVM和TI的不会自动补全。
artifactName:编译生成的目标文件名支持使用变量${ProjName},即工程名。
artifactExtension:编译生成的目标文件后缀,和artifactName组成完成目标文件全名,比如artifactExtension为obj,则编译完成生成目标文件${ProjName}.obj。
preBuild:预处理指令,编译前执行,多条命令的话使用‘&’进行连接。
postBuild:编译后指令,编译完成后执行,多条命令的话使用‘&’进行连接。
实施举例,自动生成Makefile方案。
如果工程UI界面勾选自动生成makefile,在工程执行编译后,自动生成makefile脚本。Makefile脚本定义了全局变量包括头文件路径、库路径、库、编译选项,并默认include reworks.mk通过控制reworks.mk的生成内容,从而对Makefile脚本定义的全局变量包括头文件路径、库路径、库、编译选项进行修改。
如果工程UI界面没有勾选自动生成makefile,可以人工编写Makefile,IDE仍然会提供subdir.mk进行工程内源码自动扫描,如果需要可以引用。
自动生成的Makefile格式:
变量:REWORKS_CFLAGS
头文件路径,在源码编译阶段时使用,如:
变量:REWORKS_LDFLAGS
库路径以及链接选项,在*.o进行链接时使用,如:
变量:REWORKS_LIBS_GROUP
库文件在*.o进行链接时使用,如:
1)变量:REDE_HOME(IDE安装路径)。
2)变量:PRODUCT_HOME(当前嵌入式操作系统资源文件夹路径,target下文件夹路径)。
3)变量:HOST_HOME(IDE安装路径下host文件夹路径)。
实施举例,Makefile:(IDE自动生成)
实施举例,reworks.mk(通过ftl模板生成)。
CPU:=csp_ft2000ahk_64
CONFIG:=../config
REWORKS_INC:=
REWORKS_LIBPATH:=
REWORKS_LIBS:=
REWORKS_CFLAGS:=
REWORKS_LDFLAGS:=
include$(CONFIG)/dev.mk
include$(CONFIG)/kernel.mk
LD_OBJS=$(OBJS)
REWORKS_CFLAGS+=$(REWORKS_INC)
REWORKS_LDFLAGS+=$(REWORKS_LIBPATH)$(CONFIG_LD_FLAGS)
REWORKS_LIBS_GROUP:=-Wl,--start-group$(REWORKS_LIBS)-Wl,--end-group
实施举例,subdir.mk(IDE自动生成)。
objects.mk:(IDE自动生成)。
#####################################################################
#Automatically-generated file.Do not edit!
#####################################################################
USER_OBJS:=
LIBS:=-Wl,--start-group-Wl,--end-group$(REWORKS_LIBS_GROUP)
本发明的实施例有益效果是:
1、自动部署交叉编译工具链环境,无需修改系统环境变量,可兼容多个不同架构、不同体系的交叉编译工具链同时部署。
2、自动生成Makefile,无需用户掌握相关技术,通过可视化界面设置即可完成项目定制。
3、通过可视化界面直接在编写代码的环境中执行交叉编译,同时编译过程直接在编写代码的环境中打印,对于编译过程中的信息、警告、错误通过颜色区分,并对错误代码支持代码自动定位功能,可便捷地定位排查问题。

Claims (4)

1.一种支持持续集成的交叉编译框架的搭建方法,其特征在于,包括以下步骤:
步骤1:基于Eclipse插件开发的标准,扩展Eclipse CDT框架的交叉编译功能相关扩展点,开发支持GCC和LLVM工具链的插件,不固定工具链部署信息,实现工具链配置文件解析器,提供工具链部署信息的解析服务以及Makefile自动生成功能。
步骤2:使用YAML语法的工具链配置文件存储工具链部署信息,在工具链配置文件中以指定格式编写工具链的工具链部署信息;工具链配置文件解析器能够自动遍历并解析指定路径下的工具链配置文件,识别工具链部署信息,并将工具链部署信息传递给Eclipse CDT框架,从而实现交叉工具链的环境部署,并将工具链信息映射到可视化界面进行控制和功能调用。
2.如权利要求1所述的一种支持持续集成的交叉编译框架的搭建方法,其特征在于,所述工具链部署信息包括环境变量和工具链命令。
3.如权利要求1所述的一种支持持续集成的交叉编译框架的搭建方法,其特征在于,所述工具链配置文件与工具链为一一对应关系。
4.一种支持持续集成的交叉编译框架的编译方法,其特征在于,采用如权利要求1所述的一种支持持续集成的交叉编译框架的搭建方法搭建的交叉编译框架,所述编译方法包括以下步骤:
自动遍历并解析集成开发环境下指定目录中的交叉工具链配置文件,创建编译器定义模型;
将编译器定义模型的数据结构和属性信息进行萃取,初始化GCC/LLVM交叉编译环境框架并生成构建配置界面;
对交叉编译环境框架的工具链命令、目标可执行程序属性、环境变量、构建路径进行设置,通知交叉编译环境框架更新配置界面;
读取配置界面中用户设置的编译、链接、汇编、预处理、编译后指令并通知交叉编译环境框架更新;
配置界面提供构建操作功能,对交叉编译框架发送构建或清理命令;
交叉编译框架执行构建或清理,根据工具链命令、目标可执行程序属性、环境变量、构建路径自动生成Makfile并根据其中编译规则调用对应工具;
编译过程通过对工具的输出重定向,定向输出编译过程,显示指令执行过程、高亮错误和警告信息、错误代码超链接定位。
CN202311738732.6A 2023-12-15 2023-12-15 一种支持持续集成的交叉编译框架的搭建及编译方法 Pending CN117573095A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311738732.6A CN117573095A (zh) 2023-12-15 2023-12-15 一种支持持续集成的交叉编译框架的搭建及编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311738732.6A CN117573095A (zh) 2023-12-15 2023-12-15 一种支持持续集成的交叉编译框架的搭建及编译方法

Publications (1)

Publication Number Publication Date
CN117573095A true CN117573095A (zh) 2024-02-20

Family

ID=89895581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311738732.6A Pending CN117573095A (zh) 2023-12-15 2023-12-15 一种支持持续集成的交叉编译框架的搭建及编译方法

Country Status (1)

Country Link
CN (1) CN117573095A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117931205A (zh) * 2024-03-22 2024-04-26 北京智芯微电子科技有限公司 嵌入式集成开发系统、方法及电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117931205A (zh) * 2024-03-22 2024-04-26 北京智芯微电子科技有限公司 嵌入式集成开发系统、方法及电子设备

Similar Documents

Publication Publication Date Title
US8091071B2 (en) Method and system for template-based code generation
US10705511B2 (en) Abstraction layers for automation applications
US8056062B2 (en) Methods and systems for converting application code in turbine control systems
US10331425B2 (en) Automated source code adaption to inject features between platform versions
CN111736954B (zh) 多智能合约虚拟机实现方法、多智能合约虚拟机及系统
CN109324799A (zh) 一种代码编译方法、计算机装置及计算机可读存储介质
US9965257B2 (en) Automatic configuration of project system from project capabilities
CN117573095A (zh) 一种支持持续集成的交叉编译框架的搭建及编译方法
US20060184924A1 (en) Intelligent platform management interface firmware architecture and method of building the same
CN115525280A (zh) 前端代码生成方法及装置、存储介质及电子设备
JP2009157533A (ja) プログラマブルコントローラシステム
CN104881396A (zh) 图形化程序的编译文件形成方法
CN110209565B (zh) 一种元数据模型调试方法及其装置
US20180364991A1 (en) Method and system for preparing code to be executed by programmable control devices
CN111552480B (zh) 跨平台编译方法、装置、设备及可读存储介质
KR101035097B1 (ko) 모바일기기를 위한 검증이력관리 시스템 및 그 방법
CN115658140A (zh) 一种sdk的打包方法、装置、终端以及存储介质
CN110647349A (zh) 一种实现iOS APP持续交付的方法
JP2008052688A (ja) プログラムのパッチデータ生成装置
CN114721647B (zh) 一种基于无代码应用开发的面向对象编程方法
CN110442520A (zh) 一种基于plc编程语言的交叉调试系统及方法
KR20040103497A (ko) 그래픽 유저 인터페이스 생성 방법 및 장치
CN113448591A (zh) 一种基于python快速创建iOS工程的方法
WO2020026737A1 (ja) サポート装置およびサポートプログラム
CN116755701A (zh) 安卓系统UI源码构建到Android Studio方法

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