-
-
Notifications
You must be signed in to change notification settings - Fork 815
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
请增加AppleTVSimulator,iPhoneSimulator,WatchSimulator等平台的arm64架构的支持 #2185
Comments
目前这两方案,都会有点问题,暂时我还没想到更好的方案。
首先是这个参数不通用,需要对各种地方获取特殊的参数处理,要透传进包,工具链,还得单独加各种接口获取它,各种特殊处理
分平台,尽管更合理,但是一个就是改动大,有些地方会 broken ,影响最大的还是 xmake-repo 仓库的所有包, 原本 |
但是我认为要想完整支持Apple的这些东西,还是要用第二种方案。因为第一种方案,不能对simulator的min-version进行设置,现实情况很可能要对这个进行设置的。无论哪种方案都要不少改动,多做测试就是了,反正github actions是免费的,多做各种情况的测试就行了,如果API需要做调整的话,将大版本提升到V3呗。 |
这个其实还好吧,就是把 现在的问题其实是值不值得实现这个功能而已,有多少人用xmake做Apple开发,如果很少几个人用来做Apple开发也没必要花大力气做这个。 |
还有一个办法是: 增加3个platform: iphone = iPhoneOS + iPhoneSimulator 这3种阿情况下,关于version-min的设置使用环境变量: 之类的 |
没你想的那么简单,牵扯的地方多了,光你说的这处改名,就会 broken 掉现有 xmake-repo 所有 ios 包。。 除了值不值,还得要看改动后 兼容性,维护成本,可维护性。。要综合考虑的,在还没想到可行方案前,我暂时不会动。 |
每新增一个平台,xmake-repo 仓库的所有包 要新增一倍的维护成本,所以内置平台我会尽量保持收敛 |
目前这边能想到的改动最小,兼容性和通用性都还可以的方案,就是增加一个通用的配置参数
对于 iphoneos 平台,默认是 iphone,也可以显式切到 simulator 而对于 linux, windows, macos ,可以默认为空,暂时不需要,如有需要,后期可以扩展,比如 surface, pad, ...,如果编译配置依赖特定设备的话。 对于自定义工具链和交叉编译,用于可以自定义运行的嵌入式设备类型。。 对于包管理和包配置,基本不用做改动,还是 iphoneos 等现有平台处理,需要区分 simulator,可以用 对于 target,也会提供 对于描述域,可以用 @leleliu008 @xq114 可以评估下,如果觉得这样 ok,我就开始弄了,目前我没想到更好的方案,如果你们有更好的方案,也可以提过来。 |
用toolchain区分怎么样?xmake f -p iphoneos --toolchain=iphonesimulator/watchsimulator ... 默认还是iphone |
我之前有想过,工具链不太好弄,目前 iphoneos/watchtv/appletv 几个平台,其实都是共用一个 xcode 工具链,99%都是相同的工具链逻辑,没必要拆这么细,而且一个是工具链,iphonesimulator 这种只是目标代码运行的 设备环境差异,并不算工具链差异,概念抽象上,也不对。 另外,尽管现在是 如果用户使用 |
用额外参数也行,但感觉这个device参数不太通用,毕竟其他平台上没有这个概念,加缩写-d就更没必要了。我觉得参数名就叫iosdevice=simulator/iostarget=simulator就好了,同时提供一个显式设置xcode sdk目录的接口,如果没有设置iosdevice那就自动从sdk目录取,这样显式设置sdk目录为simulator的目录也能起到设置iosdevice的作用 |
其他平台上也会有这样的sdk variant,但都用一个device不合适。例如windows上有uwp/win32的区别,uwp用不同的sdk,但他们的device是一样的。还不如对每个sdk区别单独加参数,类似android ndk那样 |
现在的问题是,必须要通过一个通用的参数来控制,因为要给 package:is_xxx target:is_xxx 都要暴露这个通用接口,在各种地方判断使用的。。。单纯只是给 ios 加参数,就没法在 package/target 中开放接口来判断它了。。 |
所以目前来讲,不是所有平台都需要,不需要的,单纯忽略这个参数就行了。。只有需要的 才去判断它。。当然,如果有更好的命名,也可以提出来 我原本是想考虑用 --target 参数的,不过这跟 target 又有点混淆了 |
做成 ios 特有参数也可以,暂定 |
不对吧,如果用户这么传入参数 另外,ios这个术语是对原来iPhoneOS增加了iPad后合并的称谓,并不包含watch和tv |
我觉得做成toolchain的config是比较合适的,当然命名上可能还有待商榷。cmake的搞法是ios simulator用不同的toolchain,而uwp直接复用了交叉编译的CMAKE_SYSTEM_NAME。xmake这里复用cross的target_os参数似乎也行,但逻辑上我感觉不如toolchain config直观合理。uwp可以用package:toolchain("msvc"):config("app_platform")这样的来判断 |
iphonesimulator/watchsimulator/appletvsimulator都是不同的sdk,要区分的,ios不行可以改--appledevice=iphonesimulator/watchsimulator/appletvsimulator/simulator/iphone/watch/appletv |
只需要
表示真机,只是说,如果用户非要设置值进来,那就等价于
当然,通常完全可以不用去写明 |
这样不是更简洁明了? |
用 |
不行, 而且 |
初步支持了 #2204 参数暂定 默认真机 $ xmake f -p iphoneos
$ xmake f -p watchos
$ xmake f -p appletvos 模拟器 $ xmake f -p iphoneos --appledev=simulator
$ xmake f -p watchos --appledev=simulator
$ xmake f -p appletvos --appledev=simulator 并且兼容对之前的处理都做了兼容。 package/target 里面可以通过 |
我合进 dev 了,可以试下,xmake update -s dev |
我测试了 |
你在什么场景下需要该功能?
目前,Apple已经全面支持了
arm64
架构,但是xmake
只支持了x86_64
,已经无法满足现实需要。Apple M1(arm64) 第一款推出到现在已经有一年多了,已经发布了2次,很多人已经买了这种机器,使用模拟器也是很常见的,所以有必要支持。
描述可能的解决方案
方案1: 增加一个参数控制是否是模拟器平台,比如使用
--simulator
,这样对现有代码的改动可能比较小。方案2: 重新实现。将os和simulator分开,这样好理解,但是重写风险太大,耗时。
描述你认为的候选方案
No response
其他信息
https://developer.apple.com/documentation/xcode-release-notes/xcode-12_2-release-notes
The text was updated successfully, but these errors were encountered: