Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/build-windows-full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ jobs:
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- uses: microsoft/setup-msbuild@v2
- name: Build
run: |
msbuild build\Stride.sln `
-restore -m:1 -nr:false `
dotnet build build\Stride.sln `
-p:StrideNativeBuildMode=Clang `
-m:1 -nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StridePlatforms=Windows `
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/build-windows-runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ jobs:
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- uses: microsoft/setup-msbuild@v2
- name: Build
run: |
msbuild build\Stride.Runtime.sln `
-restore -m:1 -nr:false `
dotnet build build\Stride.Runtime.sln `
-p:StrideNativeBuildMode=Clang `
-m:1 -nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StridePlatforms=Windows `
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/test-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ jobs:
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- uses: microsoft/setup-msbuild@v2
- name: Build
run: |
msbuild build\Stride.Tests.${{ github.event.inputs.test-category || inputs.test-category || 'Simple' }}.slnf `
-restore -m:1 -nr:false `
dotnet build build\Stride.Tests.${{ github.event.inputs.test-category || inputs.test-category || 'Simple' }}.slnf `
-p:StrideNativeBuildMode=Clang `
-m:1 -nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StridePlatforms=Windows `
Expand Down
4 changes: 3 additions & 1 deletion sources/engine/Stride.Audio/Stride.Native.Libs.targets
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<StrideNativePathLibsWindows>libCelt.lib</StrideNativePathLibsWindows>
<StrideNativePathLibsWindows_x86>$(MSBuildThisFileDirectory)..\..\..\deps\NativePath\dotnet\win-x86\libCelt.lib</StrideNativePathLibsWindows_x86>
<StrideNativePathLibsWindows_x64>$(MSBuildThisFileDirectory)..\..\..\deps\NativePath\dotnet\win-x64\libCelt.lib</StrideNativePathLibsWindows_x64>
<StrideNativePathLibsWindowsArm64>$(MSBuildThisFileDirectory)..\..\..\deps\NativePath\dotnet\win-arm64\libCelt.lib</StrideNativePathLibsWindowsArm64>
<StrideNativePathLibsUWP>libCelt.lib Xaudio2.lib</StrideNativePathLibsUWP>
</PropertyGroup>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<StrideNativePathLibsWindows>LibOVR.lib</StrideNativePathLibsWindows>
<StrideNativePathLibsWindows_x86>$(MSBuildThisFileDirectory)..\..\..\deps\NativePath\dotnet\win-x86\LibOVR.lib</StrideNativePathLibsWindows_x86>
<StrideNativePathLibsWindows_x64>$(MSBuildThisFileDirectory)..\..\..\deps\NativePath\dotnet\win-x64\LibOVR.lib</StrideNativePathLibsWindows_x64>
<StrideNativePathLibsWindowsArm64>$(MSBuildThisFileDirectory)..\..\..\deps\NativePath\dotnet\win-arm64\LibOVR.lib</StrideNativePathLibsWindowsArm64>
</PropertyGroup>

<!--
Expand Down
186 changes: 186 additions & 0 deletions sources/native/Stride.Native.Windows.Lld.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,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="&quot;$(StrideNativeClangCommand)&quot; -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClang) -DNEED_DLL_EXPORT -o &quot;$(OutputObjectPath)\win-x86\%(StrideNativeCFile.Filename).obj&quot; -c &quot;%(StrideNativeCFile.FullPath)&quot; -fms-extensions -DWINDOWS_DESKTOP -target i686-pc-windows-msvc"
ContinueOnError="false" />

<!-- Compile C++ files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' == '.cpp'"
Command="&quot;$(StrideNativeClangCommand)&quot; -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClangCPP) $(StrideNativeClang) -DNEED_DLL_EXPORT -o &quot;$(OutputObjectPath)\win-x86\%(StrideNativeCFile.Filename).obj&quot; -c &quot;%(StrideNativeCFile.FullPath)&quot; -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="&quot;$(StrideNativeClangCommand)&quot; -shared -fuse-ld=lld -target i686-pc-windows-msvc -o &quot;$(StrideNativeOutputPath)\runtimes\win-x86\native\$(StrideNativeOutputName).dll&quot; -Wl,-subsystem:windows -Wl,-nxcompat -L&quot;$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x86&quot; @(StrideNativeCFile->'&quot;$(OutputObjectPath)\win-x86\%(Filename).obj&quot;', ' ') &quot;$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x86\libNativePath.lib&quot; &quot;$(StrideNativePathLibsWindows_x86)&quot; -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="&quot;$(StrideNativeClangCommand)&quot; -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClang) -DNEED_DLL_EXPORT -o &quot;$(OutputObjectPath)\win-x64\%(StrideNativeCFile.Filename).obj&quot; -c &quot;%(StrideNativeCFile.FullPath)&quot; -fms-extensions -DWINDOWS_DESKTOP -target x86_64-pc-windows-msvc"
ContinueOnError="false" />

<!-- Compile C++ files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' == '.cpp'"
Command="&quot;$(StrideNativeClangCommand)&quot; -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClangCPP) $(StrideNativeClang) -DNEED_DLL_EXPORT -o &quot;$(OutputObjectPath)\win-x64\%(StrideNativeCFile.Filename).obj&quot; -c &quot;%(StrideNativeCFile.FullPath)&quot; -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="&quot;$(StrideNativeClangCommand)&quot; -shared -fuse-ld=lld -target x86_64-pc-windows-msvc -o &quot;$(StrideNativeOutputPath)\runtimes\win-x64\native\$(StrideNativeOutputName).dll&quot; -Wl,-subsystem:windows -Wl,-nxcompat -L&quot;$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x64&quot; @(StrideNativeCFile->'&quot;$(OutputObjectPath)\win-x64\%(Filename).obj&quot;', ' ') &quot;$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-x64\libNativePath.lib&quot; &quot;$(StrideNativePathLibsWindows_x64)&quot; -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="&quot;$(StrideNativeClangCommand)&quot; -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClang) -DNEED_DLL_EXPORT -o &quot;$(OutputObjectPath)\win-arm64\%(StrideNativeCFile.Filename).obj&quot; -c &quot;%(StrideNativeCFile.FullPath)&quot; -fms-extensions -DWINDOWS_DESKTOP -target aarch64-pc-windows-msvc"
ContinueOnError="false" />

<!-- Compile C++ files -->
<Exec Condition="'%(StrideNativeCFile.Extension)' == '.cpp'"
Command="&quot;$(StrideNativeClangCommand)&quot; -gcodeview -fno-ms-extensions -nobuiltininc -nostdinc++ $(StrideNativeClangCPP) $(StrideNativeClang) -DNEED_DLL_EXPORT -o &quot;$(OutputObjectPath)\win-arm64\%(StrideNativeCFile.Filename).obj&quot; -c &quot;%(StrideNativeCFile.FullPath)&quot; -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="&quot;$(StrideNativeClangCommand)&quot; -shared -fuse-ld=lld -target aarch64-pc-windows-msvc -o &quot;$(StrideNativeOutputPath)\runtimes\win-arm64\native\$(StrideNativeOutputName).dll&quot; -Wl,-subsystem:windows -Wl,-nxcompat -L&quot;$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-arm64&quot; @(StrideNativeCFile->'&quot;$(OutputObjectPath)\win-arm64\%(Filename).obj&quot;', ' ') &quot;$(MSBuildThisFileDirectory)..\..\deps\NativePath\dotnet\win-arm64\libNativePath.lib&quot; &quot;$(StrideNativePathLibsWindowsArm64)&quot; -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>
Loading
Loading