Skip to content

Commit ef4d378

Browse files
authored
Add Visual Studio 2026 support (#1609)
1 parent df67ed3 commit ef4d378

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

find-msvc-tools/src/find_tools.rs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,8 @@ pub enum VsVers {
212212
Vs16,
213213
/// Visual Studio 17 (2022)
214214
Vs17,
215+
/// Visual Studio 18 (2026)
216+
Vs18,
215217
}
216218

217219
/// Find the most recent installed version of Visual Studio
@@ -226,6 +228,7 @@ pub fn find_vs_version() -> Result<VsVers, String> {
226228

227229
match std::env::var("VisualStudioVersion") {
228230
Ok(version) => match &version[..] {
231+
"18.0" => Ok(VsVers::Vs18),
229232
"17.0" => Ok(VsVers::Vs17),
230233
"16.0" => Ok(VsVers::Vs16),
231234
"15.0" => Ok(VsVers::Vs15),
@@ -242,7 +245,9 @@ pub fn find_vs_version() -> Result<VsVers, String> {
242245
_ => {
243246
// Check for the presence of a specific registry key
244247
// that indicates visual studio is installed.
245-
if has_msbuild_version("17.0") {
248+
if has_msbuild_version("18.0") {
249+
Ok(VsVers::Vs18)
250+
} else if has_msbuild_version("17.0") {
246251
Ok(VsVers::Vs17)
247252
} else if has_msbuild_version("16.0") {
248253
Ok(VsVers::Vs16)
@@ -506,6 +511,10 @@ mod impl_ {
506511
}
507512
}
508513

514+
fn find_msbuild_vs18(target: TargetArch, env_getter: &dyn EnvGetter) -> Option<Tool> {
515+
find_tool_in_vs16plus_path(r"MSBuild\Current\Bin\MSBuild.exe", target, "18", env_getter)
516+
}
517+
509518
fn find_msbuild_vs17(target: TargetArch, env_getter: &dyn EnvGetter) -> Option<Tool> {
510519
find_tool_in_vs16plus_path(r"MSBuild\Current\Bin\MSBuild.exe", target, "17", env_getter)
511520
}
@@ -570,15 +579,17 @@ mod impl_ {
570579
target: TargetArch,
571580
env_getter: &dyn EnvGetter,
572581
) -> Option<Tool> {
573-
find_llvm_tool_vs17(tool, target, env_getter)
582+
find_llvm_tool_vs17plus(tool, target, env_getter, "18")
583+
.or_else(|| find_llvm_tool_vs17plus(tool, target, env_getter, "17"))
574584
}
575585

576-
fn find_llvm_tool_vs17(
586+
fn find_llvm_tool_vs17plus(
577587
tool: &str,
578588
target: TargetArch,
579589
env_getter: &dyn EnvGetter,
590+
version: &'static str,
580591
) -> Option<Tool> {
581-
vs16plus_instances(target, "17", env_getter)
592+
vs16plus_instances(target, version, env_getter)
582593
.filter_map(|mut base_path| {
583594
base_path.push(r"VC\Tools\LLVM");
584595
let host_folder = match host_arch() {
@@ -1376,6 +1387,11 @@ mod impl_ {
13761387
#[inline(always)]
13771388
pub(super) fn has_msbuild_version(version: &str, env_getter: &dyn EnvGetter) -> bool {
13781389
match version {
1390+
"18.0" => {
1391+
find_msbuild_vs18(TargetArch::X64, env_getter).is_some()
1392+
|| find_msbuild_vs18(TargetArch::X86, env_getter).is_some()
1393+
|| find_msbuild_vs18(TargetArch::Arm64, env_getter).is_some()
1394+
}
13791395
"17.0" => {
13801396
find_msbuild_vs17(TargetArch::X64, env_getter).is_some()
13811397
|| find_msbuild_vs17(TargetArch::X86, env_getter).is_some()
@@ -1412,7 +1428,9 @@ mod impl_ {
14121428
// see http://stackoverflow.com/questions/328017/path-to-msbuild
14131429
pub(super) fn find_msbuild(target: TargetArch, env_getter: &dyn EnvGetter) -> Option<Tool> {
14141430
// VS 15 (2017) changed how to locate msbuild
1415-
if let Some(r) = find_msbuild_vs17(target, env_getter) {
1431+
if let Some(r) = find_msbuild_vs18(target, env_getter) {
1432+
Some(r)
1433+
} else if let Some(r) = find_msbuild_vs17(target, env_getter) {
14161434
Some(r)
14171435
} else if let Some(r) = find_msbuild_vs16(target, env_getter) {
14181436
return Some(r);

src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,8 @@ pub mod windows_registry {
312312
Vs16,
313313
/// Visual Studio 17 (2022)
314314
Vs17,
315+
/// Visual Studio 18 (2026)
316+
Vs18,
315317
}
316318

317319
/// Find the most recent installed version of Visual Studio
@@ -326,6 +328,7 @@ pub mod windows_registry {
326328
::find_msvc_tools::VsVers::Vs15 => VsVers::Vs15,
327329
::find_msvc_tools::VsVers::Vs16 => VsVers::Vs16,
328330
::find_msvc_tools::VsVers::Vs17 => VsVers::Vs17,
331+
::find_msvc_tools::VsVers::Vs18 => VsVers::Vs18,
329332
_ => unreachable!("unknown VS version"),
330333
})
331334
}

0 commit comments

Comments
 (0)