{"id":31757,"date":"2023-02-15T23:10:31","date_gmt":"2023-02-15T23:10:31","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=31757"},"modified":"2023-02-15T23:10:31","modified_gmt":"2023-02-15T23:10:31","slug":"minecrafts-wsl-build-time-cut-in-half-after-working-with-visual-studio-c-team","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/minecrafts-wsl-build-time-cut-in-half-after-working-with-visual-studio-c-team\/","title":{"rendered":"Minecraft\u2019s WSL build time cut in half after working with Visual Studio C++ team"},"content":{"rendered":"<p><span class=\"TextRun Highlight SCXW53374813 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\" data-ccp-charstyle-defn=\"{&quot;ObjectId&quot;:&quot;86a7fd9e-34ee-4cb8-aaca-d1890361eb29|8&quot;,&quot;ClassId&quot;:1073872969,&quot;Properties&quot;:[469775450,&quot;normaltextrun&quot;,201340122,&quot;1&quot;,134233614,&quot;true&quot;,469778129,&quot;normaltextrun&quot;,335572020,&quot;1&quot;,469778324,&quot;Default Paragraph Font&quot;]}\">The Minecraft <\/span><\/span><span class=\"TextRun Highlight SCXW53374813 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">Publishing team, within Mojang Studios,<\/span><\/span> <span class=\"TextRun Highlight SCXW53374813 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">reached out to the Visual Studio C++ team because they needed to expand C++ development to a new platform (Linux) while respecting their existing technological base (<\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">MSBuild<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">) and these constraints prevented them from pursuing more established cross-platform pipelines. When developing with these technical constraints, they were experiencing issues with extremely slow full rebuild times on WSL (40-50 minutes!) and remote Linux systems with <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">MSBuild<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">.\u202f For reference, the same rebuild would take around 20 minutes for Windows. The Visual Studio C++ team met with them extensively to <\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">identify<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\"> the issues and develop solutions that fit these constraints, and <\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">ultimately this<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\"> made <\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">a huge difference<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">, with all <\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\">build<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"normaltextrun\"> times reduced by 50% and matching the performance of other platforms they develop for.\u202f<\/span><span class=\"NormalTextRun SCXW53374813 BCX8\" data-ccp-charstyle=\"eop\" data-ccp-charstyle-defn=\"{&quot;ObjectId&quot;:&quot;86a7fd9e-34ee-4cb8-aaca-d1890361eb29|9&quot;,&quot;ClassId&quot;:1073872969,&quot;Properties&quot;:[469775450,&quot;eop&quot;,201340122,&quot;1&quot;,134233614,&quot;true&quot;,469778129,&quot;eop&quot;,335572020,&quot;1&quot;,469778324,&quot;Default Paragraph Font&quot;]}\">\u202f<\/span><\/span><span class=\"EOP SCXW53374813 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2023\/02\/rsz_2minecraftlegends_wallpaper_1920x1080.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-31758\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2023\/02\/rsz_2minecraftlegends_wallpaper_1920x1080.png\" alt=\"Minecraft Legends artwork\" width=\"960\" height=\"540\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2023\/02\/rsz_2minecraftlegends_wallpaper_1920x1080.png 960w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2023\/02\/rsz_2minecraftlegends_wallpaper_1920x1080-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2023\/02\/rsz_2minecraftlegends_wallpaper_1920x1080-768x432.png 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<blockquote><p><em><span class=\"TextRun SCXW72302669 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW72302669 BCX8\">\u201c<\/span><\/span><span class=\"TextRun Highlight SCXW72302669 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW72302669 BCX8\" data-ccp-charstyle=\"normaltextrun\" data-ccp-charstyle-defn=\"{&quot;ObjectId&quot;:&quot;86a7fd9e-34ee-4cb8-aaca-d1890361eb29|8&quot;,&quot;ClassId&quot;:1073872969,&quot;Properties&quot;:[469775450,&quot;normaltextrun&quot;,201340122,&quot;1&quot;,134233614,&quot;true&quot;,469778129,&quot;normaltextrun&quot;,335572020,&quot;1&quot;,469778324,&quot;Default Paragraph Font&quot;]}\">After receiving the updates and adapting our workflows, our experience developing for Linux with Visual Studio is as pleasant and as performant as any of their other platforms. Initial configuration is now minimal and once <\/span><span class=\"NormalTextRun SCXW72302669 BCX8\" data-ccp-charstyle=\"normaltextrun\">it\u2019s<\/span><span class=\"NormalTextRun SCXW72302669 BCX8\" data-ccp-charstyle=\"normaltextrun\"> set up, everything works as expected. Being able to develop for multiple platforms using the same tools and build configuration is a huge win, certainly better than <\/span><span class=\"NormalTextRun SCXW72302669 BCX8\" data-ccp-charstyle=\"normaltextrun\">maintaining<\/span><span class=\"NormalTextRun SCXW72302669 BCX8\" data-ccp-charstyle=\"normaltextrun\"> a separate build system for Linux.<\/span><span class=\"NormalTextRun SCXW72302669 BCX8\" data-ccp-charstyle=\"eop\" data-ccp-charstyle-defn=\"{&quot;ObjectId&quot;:&quot;86a7fd9e-34ee-4cb8-aaca-d1890361eb29|9&quot;,&quot;ClassId&quot;:1073872969,&quot;Properties&quot;:[469775450,&quot;eop&quot;,201340122,&quot;1&quot;,134233614,&quot;true&quot;,469778129,&quot;eop&quot;,335572020,&quot;1&quot;,469778324,&quot;Default Paragraph Font&quot;]}\">\u201d &#8211; Isaac Dayton, from the Minecraft Legends team<\/span><\/span><\/em><\/p><\/blockquote>\n<p><span class=\"NormalTextRun SCXW230853168 BCX8\">To learn more about th<\/span><span class=\"NormalTextRun SCXW230853168 BCX8\">is experience<\/span><span class=\"NormalTextRun SCXW230853168 BCX8\"> from Isaac Dayton from the Minecraft team, please read the full story at:<strong> <a href=\"http:\/\/aka.ms\/minecraft-success-story\">aka.ms\/minecraft-success-story<\/a><\/strong><\/span><strong><span class=\"NormalTextRun SpellingErrorV2Themed SCXW230853168 BCX8\">.<\/span><\/strong><\/p>\n<h3><span class=\"TextRun SCXW60752840 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW60752840 BCX8\" data-ccp-parastyle=\"heading 2\">Send us feedback!<\/span><\/span><span class=\"EOP SCXW60752840 BCX8\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><a class=\"Hyperlink SCXW16123617 BCX8\" href=\"https:\/\/visualstudio.microsoft.com\/vs\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW16123617 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW16123617 BCX8\" data-ccp-charstyle=\"Hyperlink\">Download Visual Studio<\/span><\/span><\/a><span class=\"TextRun SCXW16123617 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW16123617 BCX8\"> and give our cross-platform tooling a try<\/span><span class=\"NormalTextRun SCXW16123617 BCX8\">!<\/span><span class=\"NormalTextRun SCXW16123617 BCX8\"> If you <\/span><span class=\"NormalTextRun SCXW16123617 BCX8\">have any feedback for us on how to improve our cross-platform tooling for you,<\/span><span class=\"NormalTextRun SCXW16123617 BCX8\"> the comments below are open and we are also available <\/span><span class=\"NormalTextRun SCXW16123617 BCX8\">on Twitter <\/span><\/span><a class=\"Hyperlink SCXW16123617 BCX8\" href=\"https:\/\/twitter.com\/visualc\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW16123617 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW16123617 BCX8\" data-ccp-charstyle=\"Hyperlink\">@VisualC<\/span><\/span><\/a><span class=\"TextRun Highlight SCXW16123617 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW16123617 BCX8\">) or via email at\u202f<\/span><\/span><a class=\"Hyperlink SCXW16123617 BCX8\" href=\"mailto:visualcpp@microsoft.com\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Highlight Underlined SCXW16123617 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW16123617 BCX8\" data-ccp-charstyle=\"Hyperlink\">visualcpp@microsoft.com<\/span><\/span><\/a><span class=\"TextRun Highlight Underlined SCXW16123617 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW16123617 BCX8\" data-ccp-charstyle=\"Hyperlink\">.<\/span><\/span><span class=\"EOP SCXW16123617 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Minecraft Publishing team, within Mojang Studios, reached out to the Visual Studio C++ team because they needed to expand C++ development to a new platform (Linux) while respecting their existing technological base (MSBuild) and these constraints prevented them from pursuing more established cross-platform pipelines. When developing with these technical constraints, they were experiencing issues [&hellip;]<\/p>\n","protected":false},"author":85413,"featured_media":31758,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,3927,279],"tags":[],"class_list":["post-31757","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","category-game-development","category-linux"],"acf":[],"blog_post_summary":"<p>The Minecraft Publishing team, within Mojang Studios, reached out to the Visual Studio C++ team because they needed to expand C++ development to a new platform (Linux) while respecting their existing technological base (MSBuild) and these constraints prevented them from pursuing more established cross-platform pipelines. When developing with these technical constraints, they were experiencing issues [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/31757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/85413"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=31757"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/31757\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/31758"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=31757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=31757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=31757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}