Visual Studio新增对ARM64EC的支持

Visual Studio新增对ARM64EC的支持

作者:BlogUpdater |  时间:2021-08-16 |  浏览:1579 |  评论已关闭 条评论

ARM64EC(“Emulation Compatible”)是一种新的应用程序二进制接口(ABI),旨在用来在ARM平台为Windows 11编写应用程序。有了ARM64EC,你可以构建能够在ARM平台上运行的Native应用,也可以将现有的x64应用程序以增量化的方式迁移到ARM平台。

为什么开发者需要面向ARM64EC?
基于ARM平台所构建的应用程序,可以在对应的ARM设备上获取到完整的本机体验。但是,从开发者角度来说,将一个应用程序迁移到ARM平台不是一件容易的事情,因为只有将应用程序进程中的所有二进制组件都重新面向ARM平台编译一次,用户才能够享受到上述的本机体验。

有了ARM64EC,开发者可以将一个很小的代码工程作为起点,然后不断添加新的代码并进行增量编译。当你确认了代码中那些对性能影响最为深远的部分之后,你就可以将他们简单地编译为ARM64EC。应用程序剩余的部分可以继续保留为模拟x64模式,而重新以ARM64EC编译的代码部分将以本机代码执行。

另外,将x64和ARM64EC这两种代码混合并协同工作,实现了即使应用程序中的x64代码部分位于你无法控制的第三方代码库,也可以构建一个能在ARM平台上运行的应用程序。
举个例子,如果你的应用程序使用到了一些无法支持ARM平台的第三方库,没有关系,这些第三方库依然可以保留为x64模式。同时,进程内插件式应用程序中以ARM64EC编译的部分将以本机代码模式运行,而x64的插件将继续被加载和正常工作。

如何在Visual Studio中面向ARM64EC编译
如果需要在Visual Studio中将你的工程编译为ARM64EC,则你需要安装如下必要项目:
> 最新版本的Windows Insider SDK,这可以通过Windows Insider程序获得。
> 最新版本的Visual Studio 2019 预览版或者Visual Studio 2022预览版。
> 位于Visual Studio 安装程序中的ARM64EC工具。

安装好上述的必要项目之后,你就可以在MSBuild工程和CMake工程中将代码面向ARM64EC来编译了。

对于MSBuild工程
请先在Visual Studio中打开C++工程或者C++解决方案。如果你想新建一个全新工程,可以选择:[Create a new project] > [C++ Console App],如下图所示:

通过工具栏的[build] > [configuration manager],打开配置管理器,如下图所示:

在当前解决方案平台下拉列表中,选择来创建一个新的目标平台,如下图所示:

选择ARM64EC,并从x64配置中拷贝所有配置,然后勾选[Create new project platforms]勾选框,并点击[OK]按钮,如下图所示:

最后,请确保ARM64EC为当前激活的解决方案配置,然后选择[Build]来编译你的工程代码。

请注意:从设计上来说,在一个解决方案中,不是所有的工程都需要面向ARM64EC来进行编译,将它们编译为x64就可以了。请确保你将这些工程配置为x64目标平台,如下图所示:

对于CMake工程
如果你还没有安装CMake构建工具,则你需要在Visual Studio安装程序中安装它,如下图所示:

然后,在Visual Studio中打开你的C++ CMake工程,如果你希望新建一个全新的工程,可以点击[Create a new project] > [CMake project],如下图所示:

通过Visual Studio中已经集成的CMakePresets.json文件,新项目的默认活动配置将是 Windows,其目标是在本地 Windows 机器上配置和构建。这个场景正是我们所需要的。

通过活动的配置下拉框打开CMakePresets.json,然后选择[Manage Configurations]:

修改属性[architecture]为ARM64EC,如下图所示:

请注意,默认的生成器是Ninja,如果你使用Visual Studio生成器(2019或者2022),请修改[strategy]字段为”set”。

如果使用Ninja生成器,你还需要设置一些环境变量,在下图中,我们在CMakePresets中手动添加了一些环境变量:

接下来,保存好CMakePresets文件并确保活动的配置被设置为arm64ec。为了生成CMake缓存,你可以在菜单栏选择工程,然后选择Configure 。

最后,点击菜单栏的[build all],就可以将你的CMake工程面向ARM64EC平台进行编译了。

总结
老大哥已经向ARM设备发力了,你呢?
是不是该有些想法了?

最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《ARM64EC Support in Visual Studio》

最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。