forked from stride3d/stride
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStride.Native.Windows.Lld.targets
More file actions
186 lines (142 loc) · 11 KB
/
Stride.Native.Windows.Lld.targets
File metadata and controls
186 lines (142 loc) · 11 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
Stride.Native.Windows.Lld.targets
Windows native compilation and linking using Clang+LLD
This replaces the MSVC-based approach and provides cross-platform
consistency for Windows builds.
Note: This file is meant to be included by Stride.Native.targets
-->
<!--
Windows Clang+LLD Compilation Target (x86)
Compiles C/C++ files for 32-bit Windows using clang and links with LLD
-->
<Target Name="_StrideCompileNativeWindows_X86_Lld"
Inputs="@(StrideNativeCFile);@(StrideNativeHFile)"
Outputs="$(OutputObjectPath)\win-x86\compiled"
Condition="'$(StrideNativeBuildModeClang)' == 'true'">
<MakeDir Directories="$(OutputObjectPath)\win-x86"/>
<!-- Compile C files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' != '.cpp'"
Command=""$(StrideNativeClangCommand)" -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClang) -DNEED_DLL_EXPORT -o "$(OutputObjectPath)\win-x86\%(StrideNativeCFile.Filename).obj" -c "%(StrideNativeCFile.FullPath)" -fms-extensions -DWINDOWS_DESKTOP -target i686-pc-windows-msvc"
ContinueOnError="false" />
<!-- Compile C++ files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' == '.cpp'"
Command=""$(StrideNativeClangCommand)" -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClangCPP) $(StrideNativeClang) -DNEED_DLL_EXPORT -o "$(OutputObjectPath)\win-x86\%(StrideNativeCFile.Filename).obj" -c "%(StrideNativeCFile.FullPath)" -fms-extensions -DWINDOWS_DESKTOP -target i686-pc-windows-msvc"
ContinueOnError="false" />
<!-- Create marker file -->
<Touch AlwaysCreate="true" Files="$(OutputObjectPath)\win-x86\compiled" />
</Target>
<!--
Windows Clang+LLD Linking Target (x86)
Links compiled .obj files for 32-bit Windows using LLVM LLD with MSVC ABI
-->
<Target Name="_StrideLinkNativeWindows_X86_Lld"
Inputs="$(OutputObjectPath)\win-x86\compiled"
Outputs="$(StrideNativeOutputPath)\runtimes\win-x86\native\$(StrideNativeOutputName).dll"
Condition="'$(StrideNativeBuildModeClang)' == 'true'">
<MakeDir Directories="$(StrideNativeOutputPath)\runtimes\win-x86\native"/>
<!-- Link DLL using Clang driver with LLD -->
<Exec Command=""$(StrideNativeClangCommand)" -shared -fuse-ld=lld -target i686-pc-windows-msvc -o "$(StrideNativeOutputPath)\runtimes\win-x86\native\$(StrideNativeOutputName).dll" -Wl,-subsystem:windows -Wl,-nxcompat -L"$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x86" @(StrideNativeCFile->'"$(OutputObjectPath)\win-x86\%(Filename).obj"', ' ') "$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x86\libNativePath.lib" "$(StrideNativePathLibsWindows_x86)" -lkernel32 -luser32 -lole32 -loleaut32 -luuid -ladvapi32 -lshell32"
ContinueOnError="false" />
<Message Text="[Stride] Linked $(StrideNativeOutputName).dll for Windows x86" Importance="normal" />
</Target>
<!--
Windows Clang+LLD Compilation Target (x64)
Compiles C/C++ files for 64-bit Windows using clang and links with LLD
-->
<Target Name="_StrideCompileNativeWindows_X64_Lld"
Inputs="@(StrideNativeCFile);@(StrideNativeHFile)"
Outputs="$(OutputObjectPath)\win-x64\compiled"
Condition="'$(StrideNativeBuildModeClang)' == 'true'">
<MakeDir Directories="$(OutputObjectPath)\win-x64"/>
<!-- Compile C files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' != '.cpp'"
Command=""$(StrideNativeClangCommand)" -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClang) -DNEED_DLL_EXPORT -o "$(OutputObjectPath)\win-x64\%(StrideNativeCFile.Filename).obj" -c "%(StrideNativeCFile.FullPath)" -fms-extensions -DWINDOWS_DESKTOP -target x86_64-pc-windows-msvc"
ContinueOnError="false" />
<!-- Compile C++ files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' == '.cpp'"
Command=""$(StrideNativeClangCommand)" -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClangCPP) $(StrideNativeClang) -DNEED_DLL_EXPORT -o "$(OutputObjectPath)\win-x64\%(StrideNativeCFile.Filename).obj" -c "%(StrideNativeCFile.FullPath)" -fms-extensions -DWINDOWS_DESKTOP -target x86_64-pc-windows-msvc"
ContinueOnError="false" />
<!-- Create marker file -->
<Touch AlwaysCreate="true" Files="$(OutputObjectPath)\win-x64\compiled" />
</Target>
<!--
Windows Clang+LLD Linking Target (x64)
Links compiled .obj files for 64-bit Windows using LLVM LLD with MSVC ABI
-->
<Target Name="_StrideLinkNativeWindows_X64_Lld"
Inputs="$(OutputObjectPath)\win-x64\compiled"
Outputs="$(StrideNativeOutputPath)\runtimes\win-x64\native\$(StrideNativeOutputName).dll"
Condition="'$(StrideNativeBuildModeClang)' == 'true'">
<MakeDir Directories="$(StrideNativeOutputPath)\runtimes\win-x64\native"/>
<!-- Debug: Show what libraries are being linked -->
<Message Text="[Stride] Linking libraries: libNativePath.lib $(StrideNativePathLibsWindows)" Importance="high" />
<Message Text="[Stride] Object files: @(StrideNativeCFile->'$(OutputObjectPath)\win-x64\%(Filename).obj')" Importance="high" />
<!-- Link DLL using Clang driver with LLD -->
<Exec Command=""$(StrideNativeClangCommand)" -shared -fuse-ld=lld -target x86_64-pc-windows-msvc -o "$(StrideNativeOutputPath)\runtimes\win-x64\native\$(StrideNativeOutputName).dll" -Wl,-subsystem:windows -Wl,-nxcompat -L"$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x64" @(StrideNativeCFile->'"$(OutputObjectPath)\win-x64\%(Filename).obj"', ' ') "$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x64\libNativePath.lib" "$(StrideNativePathLibsWindows_x64)" -lkernel32 -luser32 -lole32 -loleaut32 -luuid -ladvapi32 -lshell32"
ContinueOnError="false" />
<Message Text="[Stride] Linked $(StrideNativeOutputName).dll for Windows x64" Importance="normal" />
</Target>
<!--
Windows Clang+LLD Compilation Target (ARM64)
Compiles C/C++ files for ARM64 Windows using clang and links with LLD
Conditional: Only if StrideNativeWindowsArm64Enabled is true
-->
<Target Name="_StrideCompileNativeWindows_ARM64_Lld"
Inputs="@(StrideNativeCFile);@(StrideNativeHFile)"
Outputs="$(OutputObjectPath)\win-arm64\compiled"
Condition="'$(StrideNativeBuildModeClang)' == 'true' AND '$(StrideNativeWindowsArm64Enabled)' == 'true'">
<MakeDir Directories="$(OutputObjectPath)\win-arm64"/>
<!-- Compile C files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' != '.cpp'"
Command=""$(StrideNativeClangCommand)" -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClang) -DNEED_DLL_EXPORT -o "$(OutputObjectPath)\win-arm64\%(StrideNativeCFile.Filename).obj" -c "%(StrideNativeCFile.FullPath)" -fms-extensions -DWINDOWS_DESKTOP -target aarch64-pc-windows-msvc"
ContinueOnError="false" />
<!-- Compile C++ files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' == '.cpp'"
Command=""$(StrideNativeClangCommand)" -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClangCPP) $(StrideNativeClang) -DNEED_DLL_EXPORT -o "$(OutputObjectPath)\win-arm64\%(StrideNativeCFile.Filename).obj" -c "%(StrideNativeCFile.FullPath)" -fms-extensions -DWINDOWS_DESKTOP -target aarch64-pc-windows-msvc"
ContinueOnError="false" />
<!-- Create marker file -->
<Touch AlwaysCreate="true" Files="$(OutputObjectPath)\win-arm64\compiled" />
</Target>
<!--
Windows Clang+LLD Linking Target (ARM64)
Links compiled .obj files for ARM64 Windows using LLVM LLD with MSVC ABI
-->
<Target Name="_StrideLinkNativeWindows_ARM64_Lld"
Inputs="$(OutputObjectPath)\win-arm64\compiled"
Outputs="$(StrideNativeOutputPath)\runtimes\win-arm64\native\$(StrideNativeOutputName).dll"
Condition="'$(StrideNativeBuildModeClang)' == 'true' AND '$(StrideNativeWindowsArm64Enabled)' == 'true'">
<MakeDir Directories="$(StrideNativeOutputPath)\runtimes\win-arm64\native"/>
<!-- Debug: Show what libraries are being linked -->
<Message Text="[Stride] Linking libraries: libNativePath.lib $(StrideNativePathLibsWindows)" Importance="high" />
<Message Text="[Stride] Object files: @(StrideNativeCFile->'$(OutputObjectPath)\win-arm64\%(Filename).obj')" Importance="high" />
<!-- Link DLL using Clang driver with LLD (MinGW target to avoid CRT conflicts) -->
<Exec Command=""$(StrideNativeClangCommand)" -shared -fuse-ld=lld -target aarch64-pc-windows-msvc -o "$(StrideNativeOutputPath)\runtimes\win-arm64\native\$(StrideNativeOutputName).dll" -Wl,-subsystem:windows -Wl,-nxcompat -L"$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-arm64" @(StrideNativeCFile->'"$(OutputObjectPath)\win-arm64\%(Filename).obj"', ' ') "$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-arm64\libNativePath.lib" "$(StrideNativePathLibsWindowsArm64)" -lkernel32 -luser32 -lole32 -loleaut32 -luuid -ladvapi32 -lshell32"
ContinueOnError="false" />
<Message Text="[Stride] Linked $(StrideNativeOutputName).dll for Windows ARM64" Importance="normal" />
</Target>
<!--
Master Windows Clang+LLD Compilation Target
Orchestrates compilation and linking for all Windows architectures
This is the main entry point for the new Windows build approach
-->
<Target Name="CompileNativeClang_Windows_Lld"
Inputs="@(StrideNativeCFile);@(StrideNativeHFile)"
Outputs="@(StrideNativeOutput)"
Condition="('$(TargetFramework)' == '$(StrideFramework)') And $([MSBuild]::IsOSPlatform('Windows')) And $(DesignTimeBuild) != true And $(BuildingProject) != false And '$(StrideNativeBuildModeClang)' == 'true'"
BeforeTargets="CoreCompile"
DependsOnTargets="_StrideRegisterNativeOutputs">
<!-- Compile for all architectures -->
<CallTarget Targets="_StrideCompileNativeWindows_X86_Lld" />
<CallTarget Targets="_StrideCompileNativeWindows_X64_Lld" />
<CallTarget Targets="_StrideCompileNativeWindows_ARM64_Lld" />
<!-- Link for all architectures -->
<CallTarget Targets="_StrideLinkNativeWindows_X86_Lld" />
<CallTarget Targets="_StrideLinkNativeWindows_X64_Lld" />
<CallTarget Targets="_StrideLinkNativeWindows_ARM64_Lld" />
<!-- Workaround: forcing C# rebuild so that timestamps are up to date -->
<Delete Files="@(IntermediateAssembly)"/>
<Message Text="[Stride] Windows native build completed using Clang+LLD" Importance="high" />
</Target>
</Project>