已开启
Support clang build (modify 2 meson.build) #619
AtomGit-Bot创建于 2024年9月19日
Support clang build (modify 2 meson.build) #619
已开启
从refs/pull/619/head合入到master
合并受阻
openeuler-ci-bot
2024年9月19日 评论:
2024年9月19日 评论:
Hi yanyir, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: sig-high-performance-network, and any of the maintainers: @nlgwcy , @li-yangyang20 , @bitcoffee , @jiangheng12 , @lilijun606 , @LemmyHuang , @li-huisong , @compile_success


AtomGit-Bot
2024年9月19日 评论:
2024年9月19日 评论:
当前仓库存在以下 保护分支 :
| Protected Branch | Version | Release |
|---|---|---|
| * master | 23.11 | 20 |
| openEuler-20.03-LTS-SP4 | 19.11 | 34 |
| openEuler-22.03-LTS-SP1 | 21.11 | 68 |
| openEuler-22.03-LTS-SP3 | 21.11 | 68 |
| openEuler-22.03-LTS-SP4 | 21.11 | 69 |
| openEuler-24.03-LTS | 23.11 | 20 |
| openEuler-24.03-LTS-Next | 23.11 | 20 |
| openEuler-24.09 | 23.11 | 20 |
评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作
注意:
- /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
- 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭


2024年9月19日 添加了
openeuler-cla/yes
标签
openeuler-ci-bot
2024年9月19日 评论:
2024年9月19日 评论:
门禁正在运行, 您可以通过以下链接查看实时门禁检查结果.
若您对门禁结果含义不清晰或者遇到问题不知如何解决,可参考门禁指导手册
门禁入口及编码规范检查: multiarch/src-openeuler/trigger/dpdk/1119/console


2024年9月19日 添加了
ci_processing
标签
此处折叠了114条消息 查看更多
0046-modify-some-meson.build-to-fix-clang-build.patch
@@ -24,0 +36,0 @@
36+ )
37+
38++cc_param = ''
39++kernel_compile_file = '/lib/modules/' + run_command('uname', '-r').stdout().strip() + '/build/include/generated/compile.h'
是不是可以在/usr/src/kernels/${uname -r}/.config中查看CONFIG_CC_VERSION_TEXT


openeuler-ci-bot
8月22日 评论:
8月22日 评论:
/check-cla


8月22日 删除了label:openeuler-cla/yes
8月22日 添加了label:openeuler-cla/yes
openeuler-ci-bot
8月22日 评论:
8月22日 评论:
本PR基于这个oEEP,旨在使得该软件包可以同时支持GCC和LLVM构建。
所做修改如下:
drivers/meson.build中的'-Wl,-z,relro,-z,now,-z,noexecstack'作为链接参数而非编译参数传入;clang不支持的-pie和-Wtrampolines参数则改为当编译器支持时才添加。kernel/linux/igb_uio/meson.build中执行的make命令添加指定CC参数,当kernel使用clang时添加CC=clang,以避免make默认使用GNU GCC导致构建igb_uio时的编译器链接器和内核构建时使用的不同致使构建失败。%[ "%{toolchain}" == "clang" ? "-fgcc-compatible" : "" ]使得在用clang工具链编译时添加-fgcc-compatible至CFLAGS。在修改前使用clang构建多次出现如下错误,软件包构建失败:
问题分析:
上述错误的根源是,原本
0002-dpdk-add-secure-compile-option-and-fPIC-option.patch使得在drivers/meson.build中增加如下代码:于是构建时的
c_args会添加上上述选项。而clang中链接选项需要传给链接器而不是以编译器参数传入,且不支持-pie和-Wtrampolines选项。这导致了在执行
drivers/common/mlx5/meson.build中的时,在检测
infiniband/mlx5dv.h等中的定义时,gcc对测试代码能成功编译并检测出定义情况,以mlx5dv_devx_obj_create为例:而clang编译由于命令行使用了
-Werror=unknown-warning-option -Werror=unused-command-line-argument两个参数,所以会报错clang: error: -Wl,-z,relro,-z,now,-z,noexecstack: 'linker' input unused [-Werror,-Wunused-command-line-argument]从而导致检测失败(同理,-pie和-Wtrampolines也会导致clang error)。又因为在
drivers/common/mlx5/linux/meson.build中使用了数组来确定是否定义宏:从而,对于
build-clang/drivers/common/mlx5/mlx5_autoconf.h,会对应地得到:#undef HAVE_IBV_DEVX_OBJ而
build-gcc/drivers/common/mlx5/mlx5_autoconf.h中则是:#define HAVE_IBV_DEVX_OBJ而在
drivers/common/mlx5/linux/mlx5_glue.h中通过该宏是否定义来决定是否定义一些结构体:#ifndef HAVE_IBV_DEVX_OBJ struct mlx5dv_devx_obj; struct mlx5dv_devx_umem { uint32_t umem_id; }; struct mlx5dv_devx_uar { void *reg_addr; void *base_addr; uint32_t page_id; }; #endif由于上述原因clang构建时并没有定义
HAVE_IBV_DEVX_OBJ,因此中间的几个原本在infiniband/mlx5dv.h中以及定义过的结构体被重新定义了,导致了开头所述的error: redefinition of ...的问题。drivers/meson.build中的'-Wl,-z,relro,-z,now,-z,noexecstack'改为作为链接参数而非编译参数传入;clang不支持的-pie和-Wtrampolines参数则改为当编译器支持时才添加后可以修复上述问题上述问题修复后构建软件包会出现报错:
igb_uio由0001-add-igb_uio.patch引入,该报错的原因是igb_uio使用make构建时的命令并未指定编译器,默认使用了gcc而非clang,与kernel构建时使用的编译器clang不同。源代码中仅仅在kernel/linux/meson.build中指定了仅当交叉编译时会显式指定CC以及LD,而全部使用clang的情况并不会判定为交叉编译。kernel/linux/igb_uio/meson.build中执行的make命令添加指定CC参数,当kernel使用clang时添加CC=clang后上述问题消失,clang构建成功。 添加的获取kernel使用的编译器是否为clang的代码比较粗糙,但我不太知道有没有更好的获取该信息的方法。原本有一个很好的方案,即直接使用CC=cc.get_id(),但这样在OBS验证工程中并没有全部通过,在验证工程Mega:24.09有遇到过与上述报错恰恰相反的报错,即kernel使用gcc构建而其他都使用clang构建(也就是meson检测到的C编译器为clang)的情况,原因不太清楚。在CFLAGS添加
-fgcc-compatible是因为在线上OBS验证工程Mega-LLVM:24.03中提供的standard_aarch64环境中,会出现如下失败日志:然而Mega:24.09的aarch64就不会出现该报错,且在上述修复后构建成功。经过对比构建日志发现二者环境中的CFLAGS不同,进而尝试之下发现添加
-fgcc-compatible可以解决该问题。(笔者没有aarch64线下构建环境,具体原因暂不太清楚)09/30补充:经指导,上文中两个问题的具体原因为:
https://build.tarsier-infra.isrc.ac.cn/package/show/home:yy:branches:Mega-LLVM-clang:24.03/dpdk