Apple 文档:
Building a Library with Metal’s Command-Line Tools
Metal Shading Language for Core Image Kernels

1. 在 Build Rules 结合 xcrun 编译生成Core Image 用的 kernel 文件

*.metal: .metal 格式文件
*.ci.metal: 是自定义的文件后缀格式.

1.工程引入两个文件:ColorLUT_1.ci.metal 和 ColorLUT_1.ci.metal, 文件内容一样,编译报错:
/Users/victor/Documents/MyDoc/MetalStudy/Code/MetalLib试验/air-lld:1:1: 3 duplicated symbols for target 'air64-apple-macosx12.1.0' air-lld command failed with exit code 1 (use -v to see invocation)

原因: 两个metal文件默认被编译到 default.metallib, 符号重复定义了。
2. 添加编译规则后报错:
cannot load '/Users/victor/Documents/MyDoc/MetalStudy/Code/MetalLib试验/ColorLUT_1.ci.metal': The file was not recognized as a valid object file
cannot load '/Users/victor/Documents/MyDoc/MetalStudy/Code/MetalLib试验/ColorLUT_2.metal': The file was not recognized as a valid object file

网上多数方法和Apple文档 Metal Shading Language for Core Image Kernels
是说在 Building Settings | Metal Compiler 中设置-fcikernel, 但是最新xcode 创建的项目中没有 Metal Compiler 生成选项。

注:当然也可以更改工程文件格式:见文档: Xcode 版本升级后找不到网上提到的相关配置了

解决参考Apple 课程Build Metal-based Core Image kernels with Xcode中的方法:
介绍如何在Build Rules编写脚本,而不是修改Build Settings.
具体来说,只需为 .ci.metal 和 .ci.air 编写脚本即可。
.ci.metal 是:

xcrun metal -c $MTL_HEADER_SEARCH_PATHS -fcikernel "${INPUT_FILE_PATH}" -o "${SCRIPT_OUTPUT_FILE_0}"

并配置输出文件:
$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).air

.ci.air 是:

xcrun metallib -cikernel "${INPUT_FILE_PATH}" -o "${SCRIPT_OUTPUT_FILE_0}"

并配置输出文件:
$(METAL_LIBRARY_OUTPUT_DIR)/$(INPUT_FILE_BASE).metallib

看起来像这样:

补充:

  1. 添加编译规则后还是错误: cannot load ‘/Users/victor/Documents/MyDoc/MetalStudy/Code/MetalLib试验/ColorLUT_1.ci.metal’: The file was not recognized as a valid object file
    不知道为什么,我删除Demo新建后,成功了,可能之前的Demo有别的设置问题。
  2. 编译规则中常见变量输出:
echo "INPUT_FILE_NAME=$INPUT_FILE_NAME"
echo "DERIVED_FILES_DIR=$DERIVED_FILES_DIR"
echo "INPUT_FILE_BASE=$INPUT_FILE_BASE"
echo "INPUT_FILE_DIR=$INPUT_FILE_DIR"
echo "INPUT_FILE_PATH=$INPUT_FILE_PATH"
echo "SOURCE_ROOT=$SOURCE_ROOT"
echo "SCRIPT_OUTPUT_FILE_0=$SCRIPT_OUTPUT_FILE_0"
echo "MTL_HEADER_SEARCH_PATHS=$MTL_HEADER_SEARCH_PATHS"

Build Metal-based Core Image kernels with Xcode相关推荐

  1. WWDC20 Session 清单(06-23)

    又一年 WWDC.今年 session 的数量多达 200+,是往年的 2 倍.小集继续为您整理每天的 session 清单,方便您根据自己的喜好来选择内容. Adopt the new look o ...

  2. WWDC20 CoreImage 专题

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者:Lucca,iOS 初学者,目前就职于字节跳动 ...

  3. 深入分析Android (build/core/*.mk脚本)

    深入分析Android (build/core/*.mk脚本) 文档简要整理Android的make脚本的内容.以供备忘和参考. 1.    Build Layers Build Layers描述的是 ...

  4. Xcode build解密

    详见 obji中国,http://www.objccn.io/ 近些日子我们被宠坏了 -- 我们只需要单击 Xcode 中的一个按钮(这个按钮看起来有点像是在播放一些音乐的动作),过几秒钟之后,我们的 ...

  5. xcode升级到14后出现error build

    xcode升级到14后出现的问题 error build: Multiple commands produce '/Users//Library/Developer/Xcode/DerivedData ...

  6. 苹果框架学习(二) Metal

    文章目录 苹果框架学习(二) Metal Metal简介 1. Essentials 1.1 基本任务和概念 1.2 将OpenGL代码迁移到Metal 1.3 将您的Metal代码移植到苹果Arm芯 ...

  7. Mac Xcode崩溃 (打开ios项目引起崩溃)

    bug: 每次打开此工程都会导致Xcode崩溃. 其他工程没有问题. 解决办法: 1.确定本地跟服务器没有需要更新和提交的代码 2.把本地工程移到废纸篓 3.从新check out工程 4.新工程完美 ...

  8. 手把手教你在应用里用上iOS机器学习框架Core ML

    2017-06-10 Cocoa开发者社区 2017年的WWDC上,苹果发布了Core ML这个机器学习框架.现在,开发者可以轻松的使用Core ML把机器学习功能集成到自己的应用里,让应用变得更加智 ...

  9. Xcode开发技巧——调试

    断点(Breakpoint)断点是调试中非常重要的一个手段.由于在执行到某些代码前需要执行许多其它代码,不可能用单步跟踪一条一条执行过来,这时只要在需要暂停的地方设置一个断点,然后让程序运行,当执行到 ...

最新文章

  1. python软件安装及设置_入门Python——1.软件安装与基础语法
  2. tensorflow 利用索引获取tensor特定元素
  3. java制作文本框中的表格输入List数据
  4. from rfc 2068 hypertext怎么解决_“饮水思源”英语怎么翻译
  5. Linux下 vim代码编译器的使用
  6. js 单精度浮点数转10进制_js浮点数精度问题的前世今生?
  7. 《python股票量化交易从入门到实践》摘要
  8. 《Flutter 控件大全》第五十五个:InkWell和Ink
  9. 如何排两列的序计算机考试,excel中两列数据怎么一起排序?excel两列同时排序的方法...
  10. 每日一题【33】解析几何-椭圆的垂径定理与焦半径公式
  11. D - Petya and Array(树状数组,二分)
  12. 输入FILCO蓝牙键盘的PIN
  13. 360篡改Edge、Google浏览器主页的应对方法
  14. java方法和数组的概念及法
  15. 计算机蓝屏代码0xc0000020,Win10打开软件提示“损坏的映像 错误0xc0000020”的解决方法...
  16. 蓝桥杯:互质数及其定义
  17. 设计模式-备忘录模式(快照模式)
  18. 1688API接口seller_info - 获得店铺详情
  19. 奇梦达全面停产 启动破产程序
  20. Go与Nginx(lua-resty-string)跨语言加解密

热门文章

  1. 概念:蓝筹主板创业板新三板科创板
  2. 进制和ASCII转换工具
  3. 【翻译】设备管理器—英特尔网卡属性设置高级选项的功能
  4. 数据分析八大模型:漏斗模型
  5. 网站链接被微信屏蔽禁止访问的解决办法
  6. 微信内网页链接被多人投诉导致拦截的解决方案
  7. 自考软考需要做什么题,自考软考真题哪里有呢?
  8. gcd时间复杂度分析
  9. iwifi 技术规范
  10. 麒麟信安天机存储加密系统——国家密码管理局商用密码认证产品