Skip to content

Commit 1d51322

Browse files
committed
Support Visual Studio 2026
1 parent c9e682c commit 1d51322

File tree

6 files changed

+180
-125
lines changed

6 files changed

+180
-125
lines changed

kmake/src/Exporters/VisualStudioExporter.ts

Lines changed: 88 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -192,65 +192,78 @@ export class VisualStudioExporter extends Exporter {
192192
async exportSolution(project: Project, from: string, to: string, platform: string, vrApi: any, options: any) {
193193
this.clion.exportSolution(project, from, to, platform, vrApi, options);
194194

195-
this.writeFile(path.resolve(to, project.getSafeName() + '.sln'));
196-
197-
if (Options.visualStudioVersion === VisualStudioVersion.VS2022) {
198-
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
199-
this.p('# Visual Studio Version 17');
200-
this.p('VisualStudioVersion = 17.0.31903.59');
201-
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
202-
}
203-
else if (Options.visualStudioVersion === VisualStudioVersion.VS2019) {
204-
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
205-
this.p('# Visual Studio Version 16');
206-
this.p('VisualStudioVersion = 16.0.28729.10');
207-
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
208-
}
209-
else if (Options.visualStudioVersion === VisualStudioVersion.VS2017) {
210-
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
211-
this.p('# Visual Studio 15');
212-
this.p('VisualStudioVersion = 15.0.26228.4');
213-
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
214-
}
215-
else if (Options.visualStudioVersion === VisualStudioVersion.VS2015) {
216-
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
217-
this.p('# Visual Studio 14');
218-
this.p('VisualStudioVersion = 14.0.25420.1');
219-
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
220-
}
221-
else if (Options.visualStudioVersion === VisualStudioVersion.VS2013) {
222-
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
223-
this.p('# Visual Studio 2013');
224-
this.p('VisualStudioVersion = 12.0.21005.1');
225-
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
226-
}
227-
else if (Options.visualStudioVersion === VisualStudioVersion.VS2012) {
228-
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
229-
this.p('# Visual Studio 2012');
195+
if (Options.visualStudioVersion === VisualStudioVersion.VS2026) {
196+
this.writeFile(path.resolve(to, project.getSafeName() + '.slnx'));
197+
this.p('<Solution>');
198+
this.p('<Configurations>', 1);
199+
this.p('<Platform Name="x64" />', 2);
200+
this.p('<Platform Name="x86" />', 2);
201+
this.p('</Configurations>', 1);
202+
this.p('<Project Path="Project1.vcxproj" Id="' + project.getUuid().toString().toLowerCase() + '" />', 1);
203+
this.p('</Solution>');
204+
this.closeFile();
230205
}
231206
else {
232-
this.p('Microsoft Visual Studio Solution File, Format Version 11.00');
233-
this.p('# Visual Studio 2010');
234-
}
235-
const solutionUuid = crypto.randomUUID();
236-
this.writeProjectDeclarations(project, solutionUuid);
237-
this.p('Global');
238-
this.p('GlobalSection(SolutionConfigurationPlatforms) = preSolution', 1);
239-
for (let config of this.getConfigs(platform)) {
240-
for (let system of this.getSystems(platform)) {
241-
this.p(config + '|' + this.renameSystem(system) + ' = ' + config + '|' + this.renameSystem(system), 2);
207+
this.writeFile(path.resolve(to, project.getSafeName() + '.sln'));
208+
209+
if (Options.visualStudioVersion === VisualStudioVersion.VS2022) {
210+
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
211+
this.p('# Visual Studio Version 17');
212+
this.p('VisualStudioVersion = 17.0.31903.59');
213+
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
242214
}
215+
else if (Options.visualStudioVersion === VisualStudioVersion.VS2019) {
216+
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
217+
this.p('# Visual Studio Version 16');
218+
this.p('VisualStudioVersion = 16.0.28729.10');
219+
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
220+
}
221+
else if (Options.visualStudioVersion === VisualStudioVersion.VS2017) {
222+
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
223+
this.p('# Visual Studio 15');
224+
this.p('VisualStudioVersion = 15.0.26228.4');
225+
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
226+
}
227+
else if (Options.visualStudioVersion === VisualStudioVersion.VS2015) {
228+
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
229+
this.p('# Visual Studio 14');
230+
this.p('VisualStudioVersion = 14.0.25420.1');
231+
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
232+
}
233+
else if (Options.visualStudioVersion === VisualStudioVersion.VS2013) {
234+
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
235+
this.p('# Visual Studio 2013');
236+
this.p('VisualStudioVersion = 12.0.21005.1');
237+
this.p('MinimumVisualStudioVersion = 10.0.40219.1');
238+
}
239+
else if (Options.visualStudioVersion === VisualStudioVersion.VS2012) {
240+
this.p('Microsoft Visual Studio Solution File, Format Version 12.00');
241+
this.p('# Visual Studio 2012');
242+
}
243+
else {
244+
this.p('Microsoft Visual Studio Solution File, Format Version 11.00');
245+
this.p('# Visual Studio 2010');
246+
}
247+
const solutionUuid = crypto.randomUUID();
248+
this.writeProjectDeclarations(project, solutionUuid);
249+
this.p('Global');
250+
this.p('GlobalSection(SolutionConfigurationPlatforms) = preSolution', 1);
251+
for (let config of this.getConfigs(platform)) {
252+
for (let system of this.getSystems(platform)) {
253+
this.p(config + '|' + this.renameSystem(system) + ' = ' + config + '|' + this.renameSystem(system), 2);
254+
}
255+
}
256+
this.p('EndGlobalSection', 1);
257+
this.p('GlobalSection(ProjectConfigurationPlatforms) = postSolution', 1);
258+
this.writeProjectBuilds(project, platform);
259+
this.p('EndGlobalSection', 1);
260+
this.p('GlobalSection(SolutionProperties) = preSolution', 1);
261+
this.p('HideSolutionNode = FALSE', 2);
262+
this.p('EndGlobalSection', 1);
263+
this.postSolution();
264+
this.p('EndGlobal');
265+
this.closeFile();
243266
}
244-
this.p('EndGlobalSection', 1);
245-
this.p('GlobalSection(ProjectConfigurationPlatforms) = postSolution', 1);
246-
this.writeProjectBuilds(project, platform);
247-
this.p('EndGlobalSection', 1);
248-
this.p('GlobalSection(SolutionProperties) = preSolution', 1);
249-
this.p('HideSolutionNode = FALSE', 2);
250-
this.p('EndGlobalSection', 1);
251-
this.postSolution();
252-
this.p('EndGlobal');
253-
this.closeFile();
254267

255268
await this.exportProject(from, to, project, platform, project.isCmd(), options.noshaders, options);
256269
this.exportFilters(from, to, project, platform);
@@ -502,6 +515,8 @@ export class VisualStudioExporter extends Exporter {
502515
return 'v142';
503516
case VisualStudioVersion.VS2022:
504517
return 'v143';
518+
case VisualStudioVersion.VS2026:
519+
return 'v145';
505520
default:
506521
throw 'Unknown Visual Studio version';
507522
}
@@ -779,14 +794,26 @@ export class VisualStudioExporter extends Exporter {
779794
});
780795
}
781796

797+
getVCProjectVersion() {
798+
switch (Options.visualStudioVersion) {
799+
case VisualStudioVersion.VS2017:
800+
return '15.0';
801+
case VisualStudioVersion.VS2019:
802+
return '16.0';
803+
case VisualStudioVersion.VS2022:
804+
return '17.0';
805+
case VisualStudioVersion.VS2026:
806+
return '18.0';
807+
default:
808+
return null;
809+
}
810+
}
811+
782812
async globals(platform: string, indent: number) {
783813
let windowsTargetVersion = Options.visualStudioVersion === VisualStudioVersion.VS2017 ? '10.0.16299.0' : '10.0.14393.0';
784814

785-
if (Options.visualStudioVersion === VisualStudioVersion.VS2022 || Options.visualStudioVersion === VisualStudioVersion.VS2019) {
786-
this.p('<VCProjectVersion>16.0</VCProjectVersion>', indent);
787-
}
788-
else if (Options.visualStudioVersion === VisualStudioVersion.VS2017) {
789-
this.p('<VCProjectVersion>15.0</VCProjectVersion>', indent);
815+
if (this.getVCProjectVersion()) {
816+
this.p('<VCProjectVersion>' + this.getVCProjectVersion() + '</VCProjectVersion>', indent);
790817
}
791818

792819
if (platform === Platform.WindowsApp) {
@@ -859,7 +886,7 @@ export class VisualStudioExporter extends Exporter {
859886
this.p('</ItemGroup>', 1);
860887
this.customItemGroups(1);
861888
this.p('<PropertyGroup Label="Globals">', 1);
862-
this.p('<ProjectGuid>{' + project.getUuid().toString().toUpperCase() + '}</ProjectGuid>', 2);
889+
this.p('<ProjectGuid>{' + project.getUuid().toString().toLowerCase() + '}</ProjectGuid>', 2);
863890
// p("<Keyword>Win32Proj</Keyword>", 2);
864891
// p("<RootNamespace>" + project.Name + "</RootNamespace>", 2);
865892
await this.globals(platform, 2);

kmake/src/VisualStudioVersion.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
VS2015: 'vs2015',
66
VS2017: 'vs2017',
77
VS2019: 'vs2019',
8-
VS2022: 'vs2022'
8+
VS2022: 'vs2022',
9+
VS2026: 'vs2026'
910
};

lib/kmake/Exporters/VisualStudioExporter.js

Lines changed: 86 additions & 60 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/kmake/Exporters/VisualStudioExporter.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/kmake/VisualStudioVersion.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/kmake/VisualStudioVersion.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)