Skip to content

Commit

Permalink
初步添加基于ucrtbase的VC-LTL模式(#1
Browse files Browse the repository at this point in the history
  • Loading branch information
mingkuang-Chuyu committed Aug 8, 2021
1 parent 1d97ae6 commit f47341f
Show file tree
Hide file tree
Showing 31 changed files with 6,202 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -360,4 +360,5 @@ MigrationBackup/
.ionide/

# Fody - auto-generated XML schema
FodyWeavers.xsd
FodyWeavers.xsd
*.7z
196 changes: 196 additions & 0 deletions Build.proj
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>

<!--
用于编译VC-LTL
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" -t:Build -m "I:\Visual Studio 2015\VC-LTL\src\Build.proj"
-->

<Project InitialTargets="ValidateSolutionConfiguration" DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
<SolutionExt>.sln</SolutionExt>
<SolutionFileName>YY.Windows.CRT.sln</SolutionFileName>
<SolutionName>YY.Windows.CRT</SolutionName>
<SolutionPath>$(SolutionDir)$(SolutionFileName)</SolutionPath>
<WindowsTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>Win32</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>x64</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>ARM</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>ARM64</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>

<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>Win32</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>x64</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>ARM</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>ARM64</Platform>
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>Win32</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>x64</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>ARM</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Static</Configuration>
<Platform>ARM64</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>

<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>Win32</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>x64</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>ARM</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
<ProjectReference Include="$(MSBuildThisFileDirectory)vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj">
<SkipNonexistentProjects>False</SkipNonexistentProjects>
<Configuration>Dynamic</Configuration>
<Platform>ARM64</Platform>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<AdditionalProperties>Configuration=%(Configuration); Platform=%(Platform); WindowsTargetPlatformMinVersion=%(WindowsTargetPlatformMinVersion)</AdditionalProperties>
</ProjectReference>
</ItemGroup>

<Target Name="ValidateSolutionConfiguration">
<Message Text="正在生成解决方案配置“$(Configuration)|$(Platform)”。" />
</Target>

<Target Name="Build">
<MSBuild Projects="@(ProjectReference)" BuildInParallel="True" Properties="PreferredToolArchitecture=x64;BuildingSolutionFile=true;SolutionDir=$(SolutionDir); SolutionExt=$(SolutionExt); SolutionFileName=$(SolutionFileName); SolutionName=$(SolutionName); SolutionPath=$(SolutionPath)"/>
</Target>

<Target Name="CopySpectreFiles" AfterTargets="Build">
<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\arm\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.10240.0\lib\ARM\libucrt.lib"
/>
<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\arm\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.19041.0\lib\ARM\libucrt.lib"
/>

<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\arm64\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.10240.0\lib\arm64\libucrt.lib"
/>
<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\arm64\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.19041.0\lib\arm64\libucrt.lib"
/>

<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\x64\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.10240.0\lib\x64\libucrt.lib"
/>
<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\x64\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.19041.0\lib\x64\libucrt.lib"
/>

<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\x86\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.10240.0\lib\Win32\libucrt.lib"
/>
<Copy
SourceFiles="$(MSBuildThisFileDirectory)bin\$(WindowsTargetPlatformVersion)\x86\ucrt.lib"
DestinationFiles="$(MSBuildThisFileDirectory)ucrt\10.0.19041.0\lib\Win32\libucrt.lib"
/>
</Target>

<Target Name="Pack" AfterTargets="CopySpectreFiles">
<PropertyGroup>
<ZipFileName Condition="'$(TagVersion)' == ''">VC-LTL-Binary.7z</ZipFileName>
<ZipFileName Condition="'$(TagVersion)' != ''">VC-LTL-$(TagVersion)-Binary.7z</ZipFileName>
</PropertyGroup>
<Exec Command="7z.exe a $(ZipFileName) config _msvcrt.h %22VC-LTL helper for Visual Studio.props%22 ucrt Readme.md -xr!*.objs.lib" WorkingDirectory="$(MSBuildThisFileDirectory)"/>
</Target>

</Project>
16 changes: 16 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# VC-LTL - An elegant way to compile lighter binaries.

> 这是VC-LTL 5.0版本,代码完全重构,仍然在试水中!如果是生产力环境中请使用[VC-LTL 4](https://github.com/Chuyu-Team/VC-LTL/releases/latest)

* QQ群: [633710173](https://shang.qq.com/wpa/qunwpa?idkey=21d51d8ad1d77b99ea9544b399e080ec347ca6a1bc04267fb59cebf22644a42a)


## 设计目标
1. ABI与微软完全兼容,无需重新构建现有静态库即可使用。
2. 计划提供二个模式,一种是ucrt模式『优先级更高』,直接使用微软的 ucrtbase,另外一种是msvcrt。
3. 兼容 Windows Vista以及更高版本。疑问,是否需要支持Windows XP?


## 其他
有更好的意见请跟我沟通。
70 changes: 70 additions & 0 deletions VC-LTL helper for Visual Studio.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<!--
作者:mingkuang
修改日期:2018-08-14
VC-LTL自动化加载配置,建议你将此文件单独复制到你的工程再使用,该文件能自动识别当前环境是否存在VC-LTL,并且自动应用。
使用方法:
1. 在属性管理器选择所有Release配置,然后右键选择“添加现有属性表”。
2. 务必保证所有依赖的静态库也均用VC-LTL重新编译。
VC-LTL默认搜索顺序
1. VC-LTL helper for Visual Studio.props所在目录,即 $(MSBuildThisFileDirectory)
2. 当前项目根目录,即 $(ProjectDir)VC-LTL
3. 前解决方案根目录,即 $(SolutionDir)VC-LTL
4. 当前项目父目录,即 $(ProjectDir)..\VC-LTL
5. 当前解决方案父目录,即 $(SolutionDir)..\VC-LTL
6. 注册表HKEY_CURRENT_USER\Code\VC-LTL@Root
把VC-LTL放在其中一个位置即可,VC-LTL就能被自动引用。
如果你对默认搜索顺序不满,你可以修改此文件。你也可以直接指定$(VC_LTL_Root)宏更加任性的去加载VC-LTL。
-->

<!--#####################################################################VC-LTL设置#####################################################################-->
<PropertyGroup>
<!--取消下方注释可以开启VC-LTL轻量模式,轻量模式更加注重体积控制,但是CRT规范将会维持在VS2008。如果你需要高度兼容微软UCRT,那么请不要打开此选项!!!-->
<!--<DisableAdvancedSupport>true</DisableAdvancedSupport>-->

<!--取消下方注释可以开启强制XP兼容模式,默认情况下仅在选择WinXP工具集时才开启。-->
<!--<SupportWinXP>true</SupportWinXP>-->
</PropertyGroup>
<!--####################################################################################################################################################-->





<PropertyGroup>
<!--Shared.props文件根目录存在VC-LTL?-->
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And (Exists('$(MSBuildThisFileDirectory)_msvcrt.h')) ">$(MSBuildThisFileDirectory)</VC_LTL_Root>

<!--当前项目根目录存在VC-LTL?-->
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And (Exists('$(ProjectDir)VC-LTL\_msvcrt.h')) ">$(ProjectDir)VC-LTL</VC_LTL_Root>

<!--当前解决方案根目录存在VC-LTL?-->
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And ('$(SolutionDir)'!='') And (Exists('$(SolutionDir)VC-LTL\_msvcrt.h')) ">$(SolutionDir)VC-LTL</VC_LTL_Root>

<!--当前项目父目录存在VC-LTL?-->
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And (Exists('$(ProjectDir)..\VC-LTL\_msvcrt.h')) ">$(ProjectDir)..\VC-LTL</VC_LTL_Root>

<!--当前解决方案父目录存在VC-LTL?-->
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And ('$(SolutionDir)'!='') And (Exists('$(SolutionDir)..\VC-LTL\_msvcrt.h')) ">$(SolutionDir)..\VC-LTL</VC_LTL_Root>

<!--如果本地工程没有,那么继续尝试通过注册表获取VC-LTL路径,双击Install.cmd可以自动产生此注册表。-->
<VC_LTL_Root Condition=" '$(VC_LTL_Root)'=='' ">$(Registry:HKEY_CURRENT_USER\Code\VC-LTL@Root)</VC_LTL_Root>
</PropertyGroup>

<ImportGroup Condition=" '$(VC_LTL_Root)'!=''">
<Import Project="$(VC_LTL_Root)\Config\config.props" Condition="Exists('$(VC_LTL_Root)\Config\config.props')"/>

<!--兼容模式,尝试加载老版本-->
<Import Project="$(VC_LTL_Root)\ltlvcrt.props" Condition="(!Exists('$(VC_LTL_Root)\Config\config.props')) And (Exists('$(VC_LTL_Root)\ltlvcrt.props'))"/>
</ImportGroup>
</Project>
43 changes: 43 additions & 0 deletions YY.Windows.CRT.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31515.178
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ucrt.vcruntime", "vcruntime.src\ucrt.vcruntime\ucrt.vcruntime.vcxproj", "{FEC996ED-01E9-4258-862F-58BF3AEFA893}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Dynamic|ARM = Dynamic|ARM
Dynamic|ARM64 = Dynamic|ARM64
Dynamic|x64 = Dynamic|x64
Dynamic|x86 = Dynamic|x86
Static|ARM = Static|ARM
Static|ARM64 = Static|ARM64
Static|x64 = Static|x64
Static|x86 = Static|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|ARM.ActiveCfg = Dynamic|ARM
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|ARM.Build.0 = Dynamic|ARM
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|ARM64.ActiveCfg = Dynamic|ARM64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|ARM64.Build.0 = Dynamic|ARM64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|x64.ActiveCfg = Dynamic|x64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|x64.Build.0 = Dynamic|x64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|x86.ActiveCfg = Dynamic|Win32
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Dynamic|x86.Build.0 = Dynamic|Win32
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|ARM.ActiveCfg = Static|ARM
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|ARM.Build.0 = Static|ARM
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|ARM64.ActiveCfg = Static|ARM64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|ARM64.Build.0 = Static|ARM64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|x64.ActiveCfg = Static|x64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|x64.Build.0 = Static|x64
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|x86.ActiveCfg = Static|Win32
{FEC996ED-01E9-4258-862F-58BF3AEFA893}.Static|x86.Build.0 = Static|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EC2630C9-26D4-4C44-9112-5F8D7EC4568E}
EndGlobalSection
EndGlobal
Empty file added _msvcrt.h
Empty file.

0 comments on commit f47341f

Please sign in to comment.