-
-
Notifications
You must be signed in to change notification settings - Fork 818
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CMAKE_SYSTEM_PROCESSOR is missing when building packages on mingw #3174
Comments
感觉还是跟特定包的 cmakelists 有关。。直接去掉或者加 arch 也有可能 break 其他之前好的包。。而且现在 mingw 下遇到这种问题包不是很多,大部分都是 ok 的,建议还是先包配置里面根据不同的包自己 设置下 DCMAKE_SYSTEM_PROCESSOR 就行了。。 现在整个仓库需要显式设置 CMAKE_SYSTEM_PROCESSOR 的也仅仅三个包而已,直接内部改,反而增加破坏其他更多包的风险,还没法挨个全部测一遍。所以等以后如果遇到的多了再说。 |
不是特定包有关,cmake要交叉编译就要两个都指定或者都不指定的,指定其一是非法操作 |
而且我看了下,xmake-repo中CMAKE_SYSTEM_PROCESSOR 的值还设置错了,没有x86_64这个值只有AMD64 |
所以更应该在 xmake-repo 去设置它们,谁知道每个包的 CMAKE_SYSTEM_PROCESSOR 的值判断是否都能处理 AMD64,要是有些仅仅判断 AMD64,有些又是判断的 x86_64 在 tools.cmake 去写死,压根没法兼容所有包,还不如每个包根据自身 cmakelists 情况适配,设置错的提 pr 修改下对应包就好了 |
https://learn.microsoft.com/en-us/windows/win32/winprog64/wow64-implementation-details#environment-variables cmake在windows上以 全放到包里是有问题的,很多包探测不到架构但不报错,像tbb这个,需要debug很久才知道问题出在哪里,对自己写package的开发者尤其不友好。像tbb编译不过的还好,万一编译能过但不能运行那就太坑了
不存在这种情况,cmake对这个值的使用有规定的,windows上amd64是标准值必须兼容,x86_64只会出现在linux等系统上。mingw是不会有x86_64这种架构的 |
比如这个,人家 port 进来的 cmakelists,就是仅仅判断了 x86_64 说明这东西值压根没有规范,用户可以随意设置。。根本没法内部写死来判断 就算 cmake 有规定,用户写 cmakelists 也不会一定按这个来哈。。还不是会各种 break |
这个cmake直接拿到mingw下都没法正常探测,只有在xmake里才能运行,这是写包的问题,一个原生cmake项目总不可能默认在xmake里跑吧。这里帮他改一下就好了 |
或者类似CMAKE_INSTALL_LIBDIR的做法,给一个默认值同时允许包内部修改 |
所以每个写 cmakelists 的开发者,不一定完全按照 CMAKE_SYSTEM_PROCESSOR 规定去写的,还不是要各种打 patch 跟现在包里设置 CMAKE_SYSTEM_PROCESSOR 也没啥区别。。 |
关键是现在已经上百个包,改了容易 break 很多,我没法保证一定不会有破坏性。。但是直接特定包加,一定不会对历史包有影响。 |
我看了下,这个包压根不支持mingw,他探测的是linux的交叉编译 |
我只是举个例子,说明开发者完全可以随意判断,不按规定来 |
不按规定来说明他们的cmake在环境内不加任何参数都跑不起来,只能支持交叉编译,正常开发者都不会这么干吧。这种情况很少见的 |
现在显式设置 CMAKE_SYSTEM_PROCESSOR 不也很少见么,到现在也就遇到几个。为了很少见的几个 case ,去内部改动,出现可能得破坏性,得不偿失 |
这跟 现在 默认值空,允许包里设置 CMAKE_SYSTEM_PROCESSOR 也没啥区别 |
其实mingw的包没有那么多,其中还有很多是header-only的,有些包不支持mingw就是因为mingw上给的参数不按标准来,导致本来可以在mingw跑的编译不过。。考虑兼容性我理解,但对未来的贡献者不能增加他们的负担啊 |
1 similar comment
其实mingw的包没有那么多,其中还有很多是header-only的,有些包不支持mingw就是因为mingw上给的参数不按标准来,导致本来可以在mingw跑的编译不过。。考虑兼容性我理解,但对未来的贡献者不能增加他们的负担啊 |
所以我刚说了,先包里先直接改,等后面遇到这种的问题多了,再调整。。如果遇不到几个,那也不会增加多少负担。 |
这不一样,改完之后可以保证一个包不加参数在mingw能跑,xmake里mingw也能跑。 |
现在不改,除了几个包,大部分也都是不加参数 直接能跑 |
行吧,我先改包了,这个issue可以放这里,如果有人mingw莫名其妙编译不过了可以参考 |
github 里随便搜搜 mingw 的,都能找到 x86_64 的,没用 AMD64 所以这玩意,压根对开发者没约束,除非 cmake 强制限制死 写的不对就报错。。 https://github.com/ceph/ceph-ci/blob/18874b74dd2afa6e5e42654f6e3b0623a0c4595e/mingw_conf.sh#L65 如果后续类似问题 遇到的多了,也可以直接全 xmake-repo 搜下当前 CMAKE_SYSTEM_PROCESSOR 的各种适配,参考着内部才能做更好的调整。。 |
加进去了 |
Added |
Xmake 版本
2.7.3
操作系统版本和架构
Windows 10
描述问题
xmake在mingw上构建cmake包的时候会指定-DCMAKE_SYSTEM_NAME=Windows,但未指定CMAKE_SYSTEM_PROCESSOR
xmake/xmake/modules/package/tools/cmake.lua
Line 450 in cdd00fc
这会导致cmake认为在交叉编译,但CMAKE_SYSTEM_PROCESSOR为空 https://blog.csdn.net/10km/article/details/83106740#:~:text=%E5%A6%82%E6%9E%9C%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%AA%E6%98%AF%E5%AE%9A%E4%B9%89%E4%BA%86%20CMAKE_SYSTEM_NAME%2C%E5%B0%B1%E4%BC%9A%E5%87%BA%E7%8E%B0%20CMAKE_SYSTEM_PROCESSOR%20%E4%B8%BA%E7%A9%BA%E8%BF%99%E7%A7%8D%E5%A5%87%E6%80%AA%E7%9A%84%E9%97%AE%E9%A2%98%E3%80%82%20%E5%8F%A6%E5%A4%96%E7%BB%8F%E6%B5%8B%E8%AF%95%E5%A6%82%E6%9E%9C%E5%9C%A8,CMakeLists.txt%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%94%A8set%E5%91%BD%E4%BB%A4%E8%AE%BE%E7%BD%AE%20CMAKE_SYSTEM_NAME%20%E7%9A%84%E5%80%BC%2C%E5%B9%B6%E4%B8%8D%E4%BC%9A%E5%BD%B1%E5%93%8D%20CMAKE_SYSTEM_PROCESSOR%20%E7%9A%84%E5%80%BC%EF%BC%9A
从而引起一些包故障,例如tbb
https://github.com/oneapi-src/oneTBB/blob/66c6d8e3305363642d6284410881fda82f5c9c96/cmake/compilers/GNU.cmake#L39-L41
期待的结果
方案一:去掉-DCMAKE_SYSTEM_NAME=Windows设置,让cmake来自动处理mingw上的编译而不是作为交叉编译;
方案二:同时加上-DCMAKE_SYSTEM_PROCESSOR=AMD64/x86/ARM64
工程配置
No response
附加信息和错误日志
No response
The text was updated successfully, but these errors were encountered: