Skip to content

Commit b32aff0

Browse files
committed
chore: 支持 clang-cl 编译
1 parent 8cae9c3 commit b32aff0

18 files changed

+225
-140
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ jobs:
1111
runs-on: windows-latest
1212
strategy:
1313
matrix:
14+
compiler: ["MSVC", "ClangCL"]
1415
platform: ["x64", "ARM64"]
1516
packaged: ["unpackaged", "packaged"]
1617

@@ -22,7 +23,9 @@ jobs:
2223
python-version: '3.11'
2324

2425
- name: Build
25-
run: python publish.py ${{ matrix.platform }} ${{ matrix.packaged}}
26+
run: |
27+
$packagedOption = "${{ matrix.packaged }}" -eq "packaged" ? "--packaged" : ""
28+
python scripts/publish.py --compiler=${{ matrix.compiler }} --platform=${{ matrix.platform }} $packagedOption
2629
2730
- name: Store build
2831
if: ${{ matrix.packaged == 'unpackaged' }}

XamlIslandsCpp.sln

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XamlIslandsCpp", "src\XamlI
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{00AB63C3-0CD3-4944-B8E6-58C86138618D}"
99
ProjectSection(SolutionItems) = preProject
10-
src\Common.Pre.props = src\Common.Pre.props
10+
src\BuildOptions.props = src\BuildOptions.props
1111
src\Common.Post.props = src\Common.Post.props
12+
src\Common.Pre.props = src\Common.Pre.props
1213
src\HybridCRT.props = src\HybridCRT.props
1314
src\WinUI.targets = src\WinUI.targets
15+
src\UWPClangCL.props = src\UWPClangCL.props
1416
EndProjectSection
1517
EndProject
1618
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "AppPackage", "src\AppPackage\AppPackage.wapproj", "{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}"
@@ -21,62 +23,30 @@ Global
2123
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2224
Debug|ARM64 = Debug|ARM64
2325
Debug|x64 = Debug|x64
24-
DebugPackaged|ARM64 = DebugPackaged|ARM64
25-
DebugPackaged|x64 = DebugPackaged|x64
2626
Release|ARM64 = Release|ARM64
2727
Release|x64 = Release|x64
28-
ReleasePackaged|ARM64 = ReleasePackaged|ARM64
29-
ReleasePackaged|x64 = ReleasePackaged|x64
3028
EndGlobalSection
3129
GlobalSection(ProjectConfigurationPlatforms) = postSolution
3230
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Debug|ARM64.ActiveCfg = Debug|ARM64
3331
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Debug|ARM64.Build.0 = Debug|ARM64
3432
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Debug|x64.ActiveCfg = Debug|x64
3533
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Debug|x64.Build.0 = Debug|x64
36-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.DebugPackaged|ARM64.ActiveCfg = DebugPackaged|ARM64
37-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.DebugPackaged|ARM64.Build.0 = DebugPackaged|ARM64
38-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.DebugPackaged|x64.ActiveCfg = DebugPackaged|x64
39-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.DebugPackaged|x64.Build.0 = DebugPackaged|x64
4034
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Release|ARM64.ActiveCfg = Release|ARM64
4135
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Release|ARM64.Build.0 = Release|ARM64
4236
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Release|x64.ActiveCfg = Release|x64
4337
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.Release|x64.Build.0 = Release|x64
44-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.ReleasePackaged|ARM64.ActiveCfg = ReleasePackaged|ARM64
45-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.ReleasePackaged|ARM64.Build.0 = ReleasePackaged|ARM64
46-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.ReleasePackaged|x64.ActiveCfg = ReleasePackaged|x64
47-
{1239537C-E5B8-427A-9E7F-EA443D1F3529}.ReleasePackaged|x64.Build.0 = ReleasePackaged|x64
4838
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.Debug|ARM64.ActiveCfg = Debug|ARM64
4939
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.Debug|x64.ActiveCfg = Debug|x64
50-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.DebugPackaged|ARM64.ActiveCfg = DebugPackaged|ARM64
51-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.DebugPackaged|ARM64.Build.0 = DebugPackaged|ARM64
52-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.DebugPackaged|ARM64.Deploy.0 = DebugPackaged|ARM64
53-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.DebugPackaged|x64.ActiveCfg = DebugPackaged|x64
54-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.DebugPackaged|x64.Build.0 = DebugPackaged|x64
55-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.DebugPackaged|x64.Deploy.0 = DebugPackaged|x64
5640
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.Release|ARM64.ActiveCfg = Release|ARM64
5741
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.Release|x64.ActiveCfg = Release|x64
58-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.ReleasePackaged|ARM64.ActiveCfg = ReleasePackaged|ARM64
59-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.ReleasePackaged|ARM64.Build.0 = ReleasePackaged|ARM64
60-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.ReleasePackaged|ARM64.Deploy.0 = ReleasePackaged|ARM64
61-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.ReleasePackaged|x64.ActiveCfg = ReleasePackaged|x64
62-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.ReleasePackaged|x64.Build.0 = ReleasePackaged|x64
63-
{E3AA150F-D6E7-44AB-B8D8-EF290C0889EF}.ReleasePackaged|x64.Deploy.0 = ReleasePackaged|x64
6442
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Debug|ARM64.ActiveCfg = Debug|ARM64
6543
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Debug|ARM64.Build.0 = Debug|ARM64
6644
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Debug|x64.ActiveCfg = Debug|x64
6745
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Debug|x64.Build.0 = Debug|x64
68-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.DebugPackaged|ARM64.ActiveCfg = Debug|ARM64
69-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.DebugPackaged|ARM64.Build.0 = Debug|ARM64
70-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.DebugPackaged|x64.ActiveCfg = DebugPackaged|x64
71-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.DebugPackaged|x64.Build.0 = DebugPackaged|x64
7246
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Release|ARM64.ActiveCfg = Release|ARM64
7347
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Release|ARM64.Build.0 = Release|ARM64
7448
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Release|x64.ActiveCfg = Release|x64
7549
{2EA4389B-027B-4D0B-98BC-233607B540A6}.Release|x64.Build.0 = Release|x64
76-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.ReleasePackaged|ARM64.ActiveCfg = Release|ARM64
77-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.ReleasePackaged|ARM64.Build.0 = Release|ARM64
78-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.ReleasePackaged|x64.ActiveCfg = ReleasePackaged|x64
79-
{2EA4389B-027B-4D0B-98BC-233607B540A6}.ReleasePackaged|x64.Build.0 = ReleasePackaged|x64
8050
EndGlobalSection
8151
GlobalSection(SolutionProperties) = preSolution
8252
HideSolutionNode = FALSE

publish.py renamed to scripts/publish.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import subprocess
44
import shutil
55
import glob
6-
from xml.etree import ElementTree
6+
import argparse
77

88
try:
99
# https://docs.github.com/en/actions/learn-github-actions/variables
@@ -14,15 +14,12 @@
1414
except:
1515
pass
1616

17-
platform = "x64"
18-
isPackaged = False
19-
if len(sys.argv) >= 2:
20-
platform = sys.argv[1]
21-
if not platform in ["x64", "ARM64"]:
22-
raise Exception("非法参数")
23-
24-
if len(sys.argv) == 3:
25-
isPackaged = sys.argv[2].lower() == "packaged"
17+
argParser = argparse.ArgumentParser()
18+
argParser.add_argument("--compiler", choices=["MSVC", "ClangCL"], default="MSVC")
19+
argParser.add_argument("--platform", choices=["x64", "ARM64"], default="x64")
20+
argParser.add_argument("--use-native-march", action="store_true")
21+
argParser.add_argument("--packaged", action="store_true")
22+
args = argParser.parse_args()
2623

2724
#####################################################################
2825
#
@@ -50,13 +47,13 @@
5047
#
5148
#####################################################################
5249

53-
curDir = os.path.dirname(__file__)
50+
curDir = os.path.normpath(os.path.dirname(__file__) + "\\..\\")
5451
os.chdir(curDir)
5552

56-
outDir = f"{curDir}\\publish\\{platform}{'-sideload' if isPackaged else ''}\\"
53+
outDir = f"{curDir}\\publish\\{args.platform}{'-sideload' if args.packaged else ''}\\"
5754

5855
p = subprocess.run(
59-
f'"{msbuildPath}" src\\{"AppPackage" if isPackaged else "XamlIslandsCpp"} -restore "-p:RestorePackagesConfig=true;Configuration=Release{"Packaged" if isPackaged else ""};Platform={platform};OutDir={outDir};SolutionDir={curDir}\\{(";AppInstallerUri=" + outDir) if isPackaged else ""}"'
56+
f'"{msbuildPath}" src\\{"AppPackage" if args.packaged else "XamlIslandsCpp"} -m -t:Rebuild -restore "-p:RestorePackagesConfig=true;Configuration=Release;Platform={args.platform};UseClangCL={args.compiler == "ClangCL"};UseNativeMicroArch={args.use_native_march};IsPackaged={args.packaged};OutDir={outDir};SolutionDir={curDir}\\{(";AppInstallerUri=" + outDir) if args.packaged else ""}"'
6057
)
6158
if p.returncode != 0:
6259
raise Exception("编译失败")
@@ -77,10 +74,10 @@ def remove_file(file):
7774
except:
7875
pass
7976

80-
if isPackaged:
77+
if args.packaged:
8178
msixPath = glob.glob("AppPackage\\AppPackages\\AppPackage_*\\AppPackage_*.msix")[0]
8279
cerPath = glob.glob("AppPackage\\AppPackages\\AppPackage_*\\AppPackage_*.cer")[0]
83-
msixName = f"XamlIslandsCpp-{platform}.msix"
80+
msixName = f"XamlIslandsCpp-{args.platform}.msix"
8481
cerName = "TemporaryKey.cer"
8582
remove_file(msixName)
8683
remove_file(cerName)

src/AppPackage/AppPackage.wapproj

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<VisualStudioVersion>17.0</VisualStudioVersion>
66
</PropertyGroup>
77
<PropertyGroup Label="Configuration">
8-
<BaseIntermediateOutputPath>$(SolutionDir)obj\$(Platform)\$(Configuration)\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
9-
<OutputPath>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutputPath>
8+
<BaseIntermediateOutputPath>$(SolutionDir)\obj\$(Platform)\$(Configuration)\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
9+
<OutputPath>$(SolutionDir)\bin\$(Platform)\$(Configuration)\</OutputPath>
1010
</PropertyGroup>
1111
<PropertyGroup>
1212
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
@@ -17,7 +17,6 @@
1717
<ProjectGuid>e3aa150f-d6e7-44ab-b8d8-ef290c0889ef</ProjectGuid>
1818
<TargetPlatformVersion>10.0.26100.0</TargetPlatformVersion>
1919
<TargetPlatformMinVersion>10.0.18362.0</TargetPlatformMinVersion>
20-
<DefaultLanguage>en-US</DefaultLanguage>
2120
<DebuggerType>NativeOnly</DebuggerType>
2221
<GenerateAppInstallerFile>true</GenerateAppInstallerFile>
2322
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
@@ -56,7 +55,7 @@
5655

5756
<!-- 只支持 DebugPackaged 或 ReleasePackaged 配置打包 -->
5857
<Target Name="VerifyConfiguration" BeforeTargets="BeforeBuild">
59-
<Error Text="Unsupported configuration!" Condition="!$(Configuration.EndsWith('Packaged'))" />
58+
<Error Text="Not packaged!" Condition="!$(IsPackaged)" />
6059
</Target>
6160

6261
<!-- 由于 x-generate 不起作用,这个脚本用于检测支持的语言并填充 Resources 节点 -->

src/BuildOptions.props

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<!-- 不要直接修改这些选项,应通过 BuildOptions.props.user 或命令行参数覆盖 -->
4+
<PropertyGroup>
5+
<!-- 使用 clang-cl 编译 -->
6+
<UseClangCL>false</UseClangCL>
7+
<!-- 针对当前硬件生成优化代码,只在使用 clang-cl 编译时有效 -->
8+
<UseNativeMicroArch>false</UseNativeMicroArch>
9+
<!-- 编译为打包应用 (暂不支持) -->
10+
<IsPackaged>false</IsPackaged>
11+
</PropertyGroup>
12+
13+
<!-- 用户自定义编译选项 -->
14+
<Import Project="$(MSBuildThisFileDirectory)\BuildOptions.props.user" Condition="Exists('$(MSBuildThisFileDirectory)\BuildOptions.props.user')" />
15+
</Project>

src/ClassLibrary/ClassLibrary.vcxproj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,17 @@
2020
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
2121
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.26100.0</WindowsTargetPlatformVersion>
2222
<WindowsTargetPlatformMinVersion>10.0.18362.0</WindowsTargetPlatformMinVersion>
23-
<IntDir>$(SolutionDir)obj\$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
23+
<IntDir>$(SolutionDir)\obj\$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
2424
<!-- 打包时应输出到子文件夹,否则其他项目的 winmd 会干扰 cppwinrt 生成 XamlTypeInfo.g.cpp -->
25-
<OutDir Condition="$(IsPackaged)">$(SolutionDir)bin\$(Platform)\$(Configuration)\$(MSBuildProjectName)\</OutDir>
26-
<OutDir Condition="!$(IsPackaged)">$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
27-
<GeneratedFilesDir>$(IntDir)Generated Files\</GeneratedFilesDir>
25+
<OutDir Condition="$(IsPackaged)">$(SolutionDir)\bin\$(Platform)\$(Configuration)\$(MSBuildProjectName)\</OutDir>
26+
<OutDir Condition="!$(IsPackaged)">$(SolutionDir)\bin\$(Platform)\$(Configuration)\</OutDir>
27+
<GeneratedFilesDir>$(IntDir)\Generated Files\</GeneratedFilesDir>
2828
<AppxBundlePlatforms>x64|arm64</AppxBundlePlatforms>
2929
<DesktopCompatible>true</DesktopCompatible>
3030
<DisableEmbeddedXbf>false</DisableEmbeddedXbf>
3131
<XamlComponentResourceLocation>nested</XamlComponentResourceLocation>
3232
<GenerateLibraryLayout>true</GenerateLibraryLayout>
33+
<GenerateBuildCompilePassWinMD>false</GenerateBuildCompilePassWinMD>
3334
</PropertyGroup>
3435
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
3536
<PropertyGroup Label="Configuration">
@@ -65,6 +66,7 @@
6566
<ModuleDefinitionFile>ClassLibrary.def</ModuleDefinitionFile>
6667
</Link>
6768
</ItemDefinitionGroup>
69+
<Import Project="..\UWPClangCL.props" Condition="$(UseClangCL)" />
6870
<ItemGroup>
6971
<ClInclude Include="pch.h" />
7072
<ClInclude Include="UserControl.h">
@@ -123,6 +125,6 @@
123125
</Target>
124126
<!-- 防止生成的 winmd 被复制到输出文件夹 -->
125127
<PropertyGroup Condition="!$(IsPackaged)">
126-
<CppWinRTProjectWinMD>$(CppWinRTMergedDir)$(RootNamespace).winmd</CppWinRTProjectWinMD>
128+
<CppWinRTProjectWinMD>$(CppWinRTMergedDir)\$(RootNamespace).winmd</CppWinRTProjectWinMD>
127129
</PropertyGroup>
128130
</Project>

src/Common.Post.props

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3-
<PropertyGroup Condition="$(IsDebug)" Label="Configuration">
3+
<PropertyGroup Condition="'$(Configuration)' == 'Debug'" Label="Configuration">
44
<UseDebugLibraries>true</UseDebugLibraries>
55
<LinkIncremental>true</LinkIncremental>
66
</PropertyGroup>
7-
<PropertyGroup Condition="!$(IsDebug)" Label="Configuration">
7+
<PropertyGroup Condition="'$(Configuration)' == 'Release'" Label="Configuration">
88
<UseDebugLibraries>false</UseDebugLibraries>
99
<LinkIncremental>false</LinkIncremental>
1010
</PropertyGroup>
@@ -13,7 +13,7 @@
1313
<ClCompile>
1414
<PrecompiledHeader>Use</PrecompiledHeader>
1515
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
16-
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
16+
<PrecompiledHeaderOutputFile>$(IntDir)\pch.pch</PrecompiledHeaderOutputFile>
1717
<PreprocessorDefinitions>_WINDOWS;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;WINRT_NO_MODULE_LOCK;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1818
<WarningLevel>Level4</WarningLevel>
1919
<SDLCheck>true</SDLCheck>
@@ -23,28 +23,41 @@
2323
<!-- 禁用 RTTI ,因为它会导致二进制膨胀 -->
2424
<RuntimeTypeInfo>false</RuntimeTypeInfo>
2525
<MultiProcessorCompilation>true</MultiProcessorCompilation>
26-
<!-- /await:strict: 禁用协程的非标准语言扩展 -->
26+
<!-- /utf-8: 源代码使用 UTF-8 格式 -->
2727
<!-- /Zc:__cplusplus: 更新 __cplusplus 宏 -->
2828
<!-- /volatile:iso: 禁用 volatile 的语义扩展 -->
29-
<!-- /fp:contract: 生成浮点收缩指令。浮点收缩指令是将两个浮点操作合并为一个指令的机器指令,例如 Fused-Multiply-Add (FMA) -->
30-
<!-- fp:contract 可以和其他 fp 选项同时存在,因此每个项目可以分别指定自己的浮点模型 -->
31-
<AdditionalOptions>%(AdditionalOptions) /bigobj /utf-8 /await:strict /Zc:__cplusplus /volatile:iso /fp:contract</AdditionalOptions>
29+
<AdditionalOptions>/bigobj /utf-8 /Zc:__cplusplus /volatile:iso %(AdditionalOptions)</AdditionalOptions>
30+
<!-- /await:strict: 禁用协程的非标准语言扩展 -->
31+
<AdditionalOptions Condition="!$(UseClangCL)">/await:strict %(AdditionalOptions)</AdditionalOptions>
32+
<!-- -fstrict-vtable-pointers: 缓存虚表指针,这要求不能通过非法手段改变对象的动态类型 -->
33+
<!-- -funsafe-math-optimizations: 以降低精度为代价提高浮点运算速度 -->
34+
<!-- -fno-math-errno: 浮点操作不设置 errno,这使一些数学函数可以内联 -->
35+
<AdditionalOptions Condition="$(UseClangCL)">/clang:-Wno-missing-designated-field-initializers /clang:-Wno-missing-field-initializers /clang:-fstrict-vtable-pointers /clang:-funsafe-math-optimizations /clang:-fno-math-errno %(AdditionalOptions)</AdditionalOptions>
36+
<!-- -mcx16: 启用 CX16 指令,Windows 从 8.1 开始要求 CPU 支持它 -->
37+
<AdditionalOptions Condition="$(UseClangCL) And '$(Platform)' == 'x64'">/clang:-mcx16 %(AdditionalOptions)</AdditionalOptions>
38+
<!-- -march=native: 针对当前硬件生成优化代码 -->
39+
<AdditionalOptions Condition="$(UseClangCL) And $(UseNativeMicroArch)">/clang:-march=native %(AdditionalOptions)</AdditionalOptions>
3240
</ClCompile>
3341
</ItemDefinitionGroup>
34-
<ItemDefinitionGroup Condition="$(IsDebug)">
42+
<ItemDefinitionGroup Condition="'$(Configuration)' == 'Debug'">
3543
<ClCompile>
3644
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
3745
</ClCompile>
3846
</ItemDefinitionGroup>
39-
<ItemDefinitionGroup Condition="!$(IsDebug)">
47+
<ItemDefinitionGroup Condition="'$(Configuration)' == 'Release'">
4048
<ClCompile>
49+
<!-- Release 下不允许编译警告 -->
50+
<TreatWarningAsError>true</TreatWarningAsError>
4151
<WholeProgramOptimization>true</WholeProgramOptimization>
4252
<FunctionLevelLinking>true</FunctionLevelLinking>
4353
<IntrinsicFunctions>true</IntrinsicFunctions>
4454
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
4555
<!-- /Gw: 链接时删除未使用和重复的数据,可以减小二进制文件体积 -->
4656
<!-- /Zc:checkGwOdr: 防止 /Gw 导致某些 ODR 违规被忽略 -->
47-
<AdditionalOptions>%(AdditionalOptions) /Gw /Zc:checkGwOdr</AdditionalOptions>
57+
<AdditionalOptions>/Gw %(AdditionalOptions)</AdditionalOptions>
58+
<AdditionalOptions Condition="!$(UseClangCL)">/Zc:checkGwOdr %(AdditionalOptions)</AdditionalOptions>
59+
<!-- clang-cl 不支持 /LTCG,应使用 LTO -->
60+
<AdditionalOptions Condition="$(UseClangCL)">/clang:-flto %(AdditionalOptions)</AdditionalOptions>
4861
</ClCompile>
4962
<Link>
5063
<EnableCOMDATFolding>true</EnableCOMDATFolding>
@@ -54,7 +67,7 @@
5467
</ItemDefinitionGroup>
5568

5669
<!-- HybridCRT -->
57-
<Import Project="$(MSBuildThisFileDirectory)HybridCRT.props" />
70+
<Import Project="$(MSBuildThisFileDirectory)\HybridCRT.props" />
5871

5972
<!-- _CopyFilesMarkedCopyLocal 有一个 bug:即使没有复制任何文件也会更改 @(FileWrites),经常导致 -->
6073
<!-- up-to-date 检查失败。这个任务用于在 _CopyFilesMarkedCopyLocal 执行后修正 @(FileWrites)。 -->

src/Common.Pre.props

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,18 @@
1717
<Configuration>Release</Configuration>
1818
<Platform>ARM64</Platform>
1919
</ProjectConfiguration>
20-
<ProjectConfiguration Include="DebugPackaged|x64">
21-
<Configuration>DebugPackaged</Configuration>
22-
<Platform>x64</Platform>
23-
</ProjectConfiguration>
24-
<ProjectConfiguration Include="DebugPackaged|ARM64">
25-
<Configuration>DebugPackaged</Configuration>
26-
<Platform>ARM64</Platform>
27-
</ProjectConfiguration>
28-
<ProjectConfiguration Include="ReleasePackaged|x64">
29-
<Configuration>ReleasePackaged</Configuration>
30-
<Platform>x64</Platform>
31-
</ProjectConfiguration>
32-
<ProjectConfiguration Include="ReleasePackaged|ARM64">
33-
<Configuration>ReleasePackaged</Configuration>
34-
<Platform>ARM64</Platform>
35-
</ProjectConfiguration>
3620
</ItemGroup>
3721

22+
<!-- 编译选项 -->
23+
<Import Project="$(MSBuildThisFileDirectory)\BuildOptions.props" />
24+
3825
<PropertyGroup>
39-
<IsDebug>$(Configuration.StartsWith('Debug'))</IsDebug>
40-
<IsPackaged>$(Configuration.EndsWith('Packaged'))</IsPackaged>
4126
<DefaultLanguage>en-US</DefaultLanguage>
42-
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
27+
<PreferredToolArchitecture Condition="'$(PreferredToolArchitecture)' == ''">x64</PreferredToolArchitecture>
28+
</PropertyGroup>
29+
30+
<PropertyGroup Label="Configuration">
31+
<PlatformToolset Condition="$(UseClangCL)">ClangCL</PlatformToolset>
32+
<PlatformToolset Condition="!$(UseClangCL)">v143</PlatformToolset>
4333
</PropertyGroup>
4434
</Project>

0 commit comments

Comments
 (0)