forked from StereoKit/StereoKit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SKShaders.targets
74 lines (63 loc) · 3.42 KB
/
SKShaders.targets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?xml version="1.0" encoding="utf-8"?>
<!-- Reference from here: http://reedbeta.com/blog/custom-toolchain-with-msbuild/
And another interesting ref over here: https://github.com/lexxmark/winflexbison/blob/master/custom_build_rules/win_bison_only/win_bison_custom_build.targets -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- Include definitions from SKShader.xml, which defines the SKShader item. -->
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)SKShader.xml" />
<!-- Hook up SKShader items to be built by the target. -->
<AvailableItemName Include="SKShader">
<Targets>SKShaderBuild</Targets>
</AvailableItemName>
</ItemGroup>
<!-- Switch compiler binary depending on the platform -->
<PropertyGroup>
<SKShadercExe Condition="'$(OS)'=='Windows_NT'">skshaderc.exe</SKShadercExe>
<SKShadercExe Condition="'$(OS)'!='Windows_NT'">skshaderc</SKShadercExe>
<SKAutoFindShaders Condition="'$(SKAutoFindShaders)' == ''">True</SKAutoFindShaders>
</PropertyGroup>
<!-- Automatically include shaders, library projects should not compile
shader files -->
<ItemGroup Condition="'$(SKAutoFindShaders)'=='True'">
<SKShader Include="$(SKAssetFolder)/**/*.hlsl">
<RelFile>%(RecursiveDir)%(Filename)%(Extension)</RelFile>
<RelFolder>%(RecursiveDir)</RelFolder>
</SKShader>
<!-- This doesn't currently account for shader include files. -->
<UpToDateCheckInput Include="$(SKAssetFolder)/**/*.hlsl"/>
</ItemGroup>
<!-- This target builds all SKShader items. This is skipped for Library
type projects. -->
<Target Name="StereoKit_ShaderBuild" Condition="'@(SKShader)'!=''" BeforeTargets="AssignTargetPaths" AfterTargets="StereoKit_Properties">
<!-- For debug builds, include shader debug info -->
<PropertyGroup>
<SKOpt Condition="'$(Configuration)'=='Release'">-o3</SKOpt>
<SKOpt Condition="'$(Configuration)'=='Debug'">-d</SKOpt>
<!-- Needs to be normalized for Linux, also a trailing '\' will act
as an escape character for quotes. -->
<IncludeFolderNormalized>$([MSBuild]::NormalizeDirectory('$(SKShaderStandardInclude)').TrimEnd('\'))</IncludeFolderNormalized>
</PropertyGroup>
<!-- Setup metadata for custom build tool -->
<ItemGroup>
<SKShader Condition="'%(SKShader.RelFile)'!=''">
<Command>"$([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)../tools/$(SKShadercExe)'))" $(SKOpt) -e -t xge -i "$(IncludeFolderNormalized)" -o "$([System.String]::Copy('$(IntermediateOutputPath)$(SKAssetDestination)/%(SKShader.RelFolder)').Replace('\','/'))" "%(SKShader.Identity)"</Command>
<Outputs>$(IntermediateOutputPath)$(SKAssetDestination)/%(SKShader.RelFile).sks</Outputs>
<RelativeName>%(SKShader.RelFile).sks</RelativeName>
</SKShader>
</ItemGroup>
<!-- Run the compile commands -->
<Exec Command="%(SKShader.Command)" Condition="'%(SKShader.Command)'!=''" Outputs="%(SKShader.Outputs)">
<Output ItemName="Generated" TaskParameter="Outputs" />
</Exec>
<!-- FileWrite them so they get cleaned up on rebuilds -->
<ItemGroup>
<FileWrites Include="%(SKShader.Outputs)"/>
</ItemGroup>
</Target>
<!-- Ensure shader binaries get properly included in the build process -->
<Target Name="StereoKit_ShaderCopy" BeforeTargets="StereoKit_ContentCopy" DependsOnTargets="StereoKit_ShaderBuild">
<ItemGroup>
<SKContent Include="$(IntermediateOutputPath)$(SKAssetDestination)/**/*.sks" />
</ItemGroup>
</Target>
</Project>