Skip to content
Draft
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
19 changes: 18 additions & 1 deletion native/windows/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@ bool SUPPORT_DIRECT3D = SUPPORT_DIRECT3D_VAR == "1" || SUPPORT_DIRECT3D_VAR.ToLo
#load "../../scripts/cake/native-shared.cake"
#load "../../scripts/cake/msbuild.cake"

string GetSpectreLibPath(string arch)
{
// Normalize architecture names to match spectre lib directory structure
var spectreArch = arch.ToLower() switch {
"win32" => "x86",
"arm64" => "arm64",
_ => arch.ToLower()
};

var spectrePaths = GetDirectories($"{VS_INSTALL}/VC/Tools/MSVC/*/lib/spectre/{spectreArch}");
if (spectrePaths.Count == 0) {
throw new Exception($"Could not find spectre library path for {spectreArch}, please ensure that --vsinstall is used or the envvar VS_INSTALL is set.");
}
return spectrePaths.First().FullPath;
}

string VARIANT = BUILD_VARIANT ?? "windows";

Information("Native Arguments:");
Expand All @@ -38,6 +54,7 @@ Task("libSkiaSharp")
var clang = string.IsNullOrEmpty(LLVM_HOME.FullPath) ? "" : $"clang_win='{LLVM_HOME}' ";
var win_vcvars_version = string.IsNullOrEmpty(VC_TOOLSET_VERSION) ? "" : $"win_vcvars_version='{VC_TOOLSET_VERSION}' ";
var d = CONFIGURATION.ToLower() == "release" ? "" : "d";
var spectreLibPath = GetSpectreLibPath(arch);

GnNinja($"{VARIANT}/{arch}", "SkiaSharp",
$"target_os='win'" +
Expand All @@ -59,7 +76,7 @@ Task("libSkiaSharp")
clang +
win_vcvars_version +
$"extra_cflags=[ '-DSKIA_C_DLL', '/MT{d}', '/EHsc', '/Z7', '/guard:cf', '-D_HAS_AUTO_PTR_ETC=1' ] " +
$"extra_ldflags=[ '/DEBUG:FULL', '/DEBUGTYPE:CV,FIXUP', '/guard:cf' ] " +
$"extra_ldflags=[ '/DEBUG:FULL', '/DEBUGTYPE:CV,FIXUP', '/guard:cf', '/LIBPATH:{spectreLibPath}' ] " +
ADDITIONAL_GN_ARGS);

var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}");
Expand Down
9 changes: 9 additions & 0 deletions native/windows/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@
<ObjectFileName>$(IntDir)</ObjectFileName>
<ControlFlowGuard>Guard</ControlFlowGuard>
<BufferSecurityCheck>true</BufferSecurityCheck>
<AdditionalOptions>/Qspectre %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -166,6 +167,7 @@
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<ControlFlowGuard>Guard</ControlFlowGuard>
<BufferSecurityCheck>true</BufferSecurityCheck>
<AdditionalOptions>/Qspectre %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -185,6 +187,7 @@
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<ControlFlowGuard>Guard</ControlFlowGuard>
<BufferSecurityCheck>true</BufferSecurityCheck>
<AdditionalOptions>/Qspectre %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -206,12 +209,14 @@
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<ControlFlowGuard>Guard</ControlFlowGuard>
<BufferSecurityCheck>true</BufferSecurityCheck>
<AdditionalOptions>/Qspectre %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalOptions>/DEBUGTYPE:CV,FIXUP</AdditionalOptions>
<AdditionalLibraryDirectories>$(VCToolsInstallDir)lib\spectre\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ControlFlowGuard>true</ControlFlowGuard>
</Link>
</ItemDefinitionGroup>
Expand All @@ -229,12 +234,14 @@
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<ControlFlowGuard>Guard</ControlFlowGuard>
<BufferSecurityCheck>true</BufferSecurityCheck>
<AdditionalOptions>/Qspectre %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalOptions>/DEBUGTYPE:CV,FIXUP</AdditionalOptions>
<AdditionalLibraryDirectories>$(VCToolsInstallDir)lib\spectre\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ControlFlowGuard>true</ControlFlowGuard>
</Link>
</ItemDefinitionGroup>
Expand All @@ -252,12 +259,14 @@
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<ControlFlowGuard>Guard</ControlFlowGuard>
<BufferSecurityCheck>true</BufferSecurityCheck>
<AdditionalOptions>/Qspectre %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalOptions>/DEBUGTYPE:CV,FIXUP</AdditionalOptions>
<AdditionalLibraryDirectories>$(VCToolsInstallDir)lib\spectre\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ControlFlowGuard>true</ControlFlowGuard>
</Link>
</ItemDefinitionGroup>
Expand Down
19 changes: 18 additions & 1 deletion native/winui-angle/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,22 @@ string ANGLE_VERSION = GetVersion("ANGLE", "release");
#load "../../scripts/cake/native-shared.cake"
#load "../../scripts/cake/msbuild.cake"

string GetSpectreLibPath(string arch)
{
// Normalize architecture names to match spectre lib directory structure
var spectreArch = arch.ToLower() switch {
"win32" => "x86",
"arm64" => "arm64",
_ => arch.ToLower()
};

var spectrePaths = GetDirectories($"{VS_INSTALL}/VC/Tools/MSVC/*/lib/spectre/{spectreArch}");
if (spectrePaths.Count == 0) {
throw new Exception($"Could not find spectre library path for {spectreArch}, please ensure that --vsinstall is used or the envvar VS_INSTALL is set.");
}
return spectrePaths.First().FullPath;
}

Task("sync-ANGLE")
.WithCriteria(IsRunningOnWindows())
.Does(() =>
Expand Down Expand Up @@ -106,6 +122,7 @@ Task("ANGLE")
if (Skip(arch)) return;

var suffix = wasdk ? "_wasdk" : "";
var spectreLibPath = GetSpectreLibPath(arch);

try
{
Expand All @@ -124,7 +141,7 @@ Task("ANGLE")
$"angle_enable_gl_desktop_backend=false " +
$"angle_enable_vulkan=false " +
$"extra_cflags=[ '/guard:cf', '/GS' ] " +
$"extra_ldflags=[ '/guard:cf' ]");
$"extra_ldflags=[ '/guard:cf', '/LIBPATH:{spectreLibPath}' ]");

RunNinja(ANGLE_PATH, $"out/winui{suffix}/{arch}", target);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<WarningLevel>Level4</WarningLevel>
<AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>
<AdditionalOptions>%(AdditionalOptions) /bigobj /Qspectre</AdditionalOptions>
<PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<ControlFlowGuard>Guard</ControlFlowGuard>
Expand All @@ -120,6 +120,7 @@
<ModuleDefinitionFile>SkiaSharp_Views_WinUI_Native.def</ModuleDefinitionFile>
<AdditionalOptions>/DEBUGTYPE:CV,FIXUP</AdditionalOptions>
<ControlFlowGuard>true</ControlFlowGuard>
<AdditionalLibraryDirectories>$(VCToolsInstallDir)lib\spectre\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
Expand Down