tcldr
1
Hi, do we have any update on when SPM will be able to fully support Metal targets?
As it stands, you can quite far by creating a package with three targets:
- Renderer (PublicSwift module with dependencies on 2 and 3)
- ShaderLibrary (Swift target which also includes .metal files and code for setting up a MTLLibrary. Dependency on 3)
- ShaderTypes (C Target which includes .h header file with types shared between the CPU and GPU)
However, there are a couple of big issues with this set-up:
- I haven't been successful in finding a way for the .metal files to be able to include source from the ShaderTypes module with the expected
#import "<ShaderTypes/ShaderTypes.h>". You need to do a relative import #import "../ShaderTypes/include/ShaderTypes.h" which isn't ideal.
- It's not possible to profile shader code as raised in this post Can't profile Metal shaders within a package.
Perhaps this is something that could be taken care of with a new Swift Package plugin, but then it would need to somehow prevent/cancel the system .metallib build and also ensure the appropriate flags are set as the Metal library evolves.
7 Likes
capnslipp
(Slipp Douglas Thompson)
2
I've solved issue #1 with symlinking the appropriate headers (Sources/«target-name»/include/) from the Metal target to the Obj-C target (which Swift imports). 1 copy in source control, 2 identical copies as far as SPM is concerned.