使用CMake构建metallib

3
我有一些`.metal`文件,并想将它们编译为`.metallib`格式。整个构建系统使用的是CMake,我也打算使用它来编译`.metal`文件。
要构建`.metallib`文件,我必须使用以下两个命令:
xcrun -sdk macosx metal -c MyLibrary.metal -o MyLibrary.air
xcrun -sdk macosx metallib MyLibrary.air -o MyLibrary.metallib

有没有一种方便的方法使用 CMake,我可以设定编译器,CMake 就会自动完成所有操作?或者我应该使用 add_custom_command,并手动调用 xcrun?
2个回答

3

TL;DR 两种方式,使用自定义命令/目标和添加新语言都是有效的。选择似乎取决于可重用性、分发范围、目标用户等权衡考虑。个人而言,我最初会选择前者。


话虽如此,如果您选择使用add_custom_command/add_custom_target方法,它可以让您走得更远。只需确保您提供实际目标并将其与自定义命令的OUTPUT链接起来,以便能够设置适当的依赖关系并避免在依赖项仍然是最新状态时重新执行目标。例如,

set(FOO_FILE "foo.txt")

add_custom_command(OUTPUT ${FOO_FILE}
  COMMAND ${CMAKE_COMMAND} -E touch ${FOO_FILE}
  WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
  COMMENT "Creating ${FOO_FILE}"
  VERBATIM)

add_custom_target(foo DEPENDS ${FOO_FILE})

添加新语言的方法比较复杂,因为它旨在更加通用,并且作为CMake功能提供语言支持(即不绑定到特定项目)。为此,您需要定义语言的各个方面,例如编译器和用于处理源文件的规则。除此之外,还包括功能检测和测试。有关更详细的文档,请查看此处
然而,调查实际由CMake支持的语言可能会有所帮助。我建议您查看CUDA下的CMake Modules目录(这将导致您查看CompilerPlatform子目录)。 注意:通过邮件列表进行挖掘,我遇到了这个线程,它提到第二种方法可能无法与非基于Makefile的生成器很好地配合使用。从该线程(或现有文档)中无法清楚地了解情况,也无法尝试,因为我没有使用此类工具(例如MSVC或Xcode)。

谢谢!最终我使用了add_custom_commandadd_custom_target。对于每个.metal文件,我设置了用于创建.airadd_custom_command。然后我定义了用于创建.metallib的自定义命令。 - M.S.

-1
# metal kernel
set(SRC_METAL_KERNEL
  "src/rgb2bgr.metal"
  "src/yuv2rgb.metal"
)
set_source_files_properties(${SRC_METAL_KERNEL} PROPERTIES LANGUAGE METAL)

# set metal version
if(TARGETOS STREQUAL "mac")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=macos-metal2.0")
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=macos-metal2.0")
else()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=ios-metal2.0")
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=ios-metal2.0")
endif()

add_library(MetalLibary STATIC ${SRC_METAL_KERNEL})

set(ADDITIONAL_LINKER_FLAGS "-framework Metal -framework MetalPerformanceShaders")
target_link_libraries(MetalLibary ${ADDITIONAL_LINKER_FLAGS})

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Ethan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接