如何将应用切换至毕昇编译构建
发表于 2023/12/12
0
应用切换编译器通常包含三个阶段:
修改编译器名称
编译器二进制的driver名称不同,以毕昇和GNU工具链为例,c编译器的名称分别为clang 和 gcc。
常见的场景如下:
适配编译选项
不同编译器对编译选项的支持度不同,毕昇在选项命名上与gcc基本保持一致,但仍有少量gcc选项,毕昇会因为没有提供对应的功能等原因不提供支持,需要修改适配。在允许的范围内,毕昇会持续改进支持或无感替换编译选项。
当前已知的一些需要适配的选项如下:
选项 | 选项解释 | 建议适配动作 |
---|---|---|
-fdec-math | 毕昇直接支持对应功能,但没有控制选项 | 直接删除 |
-fallow-argument-mismatch | GCC用于关闭额外添加的检查的选项,毕昇未设置对应的检查 | 直接删除 |
-march=native | 使用默认架构生效的指令集 | 换用-mtune=native |
-ffpe-summary=xxx | 浮点异常相关选项,aarch64上不支持浮点异常 | 直接删除 |
-freg-struct-return aarch64 | 上不支持对应功能 | 直接删除 |
-mabi=lp64 | 毕昇编译器默认为lp64 | 直接删除 |
-znow, --whole-archive, --no-whole-archive, -soname | 对应参数毕昇需要额外添加-Wl选项指定传递给链接器 | 例如-znow需要修改为-Wl,-znow |
-print-multi-os-directory | 毕昇不支持通过该选项获得库的相对路径 | 更改为直接使用硬编码完成对应实现 |
-std=xxx | 毕昇不支持使用c语言标准编译cpp文件 | 删除对应选项 |
此处考虑到初学者,简要讲一下如何将选项加到构建工程当中。
常见的构建工程有GNU makefile 和 cmake 两种形式。
(1)对于makefile已经生成的工程,通常将选项使用CFLAGS、CXXFLAGS、FFLAGS 等环境变量中,与make指令一起使用。如:
a. CFLAGS=”-O3”make
b. 如果对makefile不熟悉,可以直接加到CC、CXX、CF 参数编译器后
c. CC=”clang -O3” make xxx
(2)对于cmake工程,可以在生成makefile前使用-DCMAKE_C_FLANGS、-DCMAKE_CXX_FLANGS、-DCMAKE_FC_FLANGS宏控制生成相关的选项。如:
a. cmake -DCMAKE_C_FLANGS=”-O3”
无论哪种方式,其本质都是让编译器接收到相关选项。常见的开源工程都会配备verbose模式用以检查当前的构建选项。可以使用make VERBOSE=1使能。
一个正常的构建指令则至少包括 编译器+目标编译文件+编译选项(可选)如:
clang test.c -O3
其中clang 是编译器前端,作为driver必须出现在第一个位置。test.c 是目标文件,必须指定通常由makefile规则指定。-O3 则是可选的优化选项。优化选项与目标文件的位置可以相互变换。
根据适配情况调整代码
不同编译器对语法标准的支持度,以及语法规范的宽松度不同。毕昇当前对于语法检验严格程度相较于gcc较高,因此会对少量不符合语法规范的场景进行告警或报错,需要进行整改适配。
举例如下:
更多相关问题FAQ: