Sharpmake is an open-source C#-based solution for generating project definition files, such as Visual Studio projects and solutions, GNU makefiles, Xcode projects, etc.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Sharpmake.Application - Fixes GUID casing in csproj. Oct 3, 2018
Sharpmake.Generators [FastBuild] No longer write aliases in bff files for intermediate sub… Oct 3, 2018
Sharpmake.Platforms Expose ExtraFiles from the Compiler section in FastBuildCompilerSettings Oct 3, 2018
Sharpmake.UnitTests - Split AnalyseSourceFiles in two methods, one to parse includes from… Oct 3, 2018
Sharpmake Adds C# suppress warning for all sources. Oct 3, 2018
docs Complete incomplete sentence Oct 11, 2017
samples Update sharpmakeGen reference files. Oct 3, 2018
.appveyor.yml Adds bootstrap-sharpmake.bat to appveyor script. Oct 3, 2018
.editorconfig Submitted the Sharpmake repository. Sep 22, 2017
.gitattributes - Register .sharpmake extension to visual assist for vs2017 Oct 3, 2018
.gitignore New feature: File Custom Build Steps Oct 3, 2018
GenerateMdbFiles.bat Add a script to generate MDB files: those are needed for Windows-comp… Oct 3, 2018
Intro.md Update Intro with solution and main Oct 4, 2017
LICENSE.md Added license file. Sep 22, 2017
README.md Add AppVeyor build status badge to README.md Oct 3, 2018
Sharpmake.sln New feature: File Custom Build Steps Oct 3, 2018
Sharpmake.sln.DotSettings Submitted the Sharpmake repository. Sep 22, 2017
UpdateSamplesOutput.bat New feature: File Custom Build Steps Oct 3, 2018
UpdateSharpmakeProjects.bat Submitted the Sharpmake repository. Sep 22, 2017
bootstrap-sharpmake.bat WIP: add sharpmake boostrap batch file, to compile sharpmake and gene… Oct 3, 2018
deploy_binaries.py Improve deploy script: test that source and target folders are differ… Oct 3, 2018
nuget.config - Added nuget.config for enabling automatic restore of package even i… Oct 3, 2018
regression_test.py Fixup python3 only feature Oct 3, 2018
visualstudio.sharpmake.bat Submitted the Sharpmake repository. Sep 22, 2017
visualstudio.sharpmake.reg - Register .sharpmake extension to visual assist for vs2017 Oct 3, 2018

README.md

Sharpmake

Build status

Introduction

Sharpmake is a generator for Visual Studio projects and solutions. It is similar to CMake and Premake, but it is designed for speed and scale. Sharpmake has been used at Ubisoft to generate several thousands of vcxproj, csproj and sln files in a matter of seconds, and each of these projects can support a large number of Visual Studio configurations as well.

That makes Sharpmake ideal for the development of multi-platform games, where the number of platforms, the different levels of optimization, the multiple rendering APIs on PC and the level editor can quickly multiply the number of configurations a given code base must support. Sharpmake generates all those configurations at once, very quickly. Thus, it becomes trivial to generate and regenerate the entire project.

Sharpmake uses C# for scripting, hence the name. That means that you can edit your scripts in Visual Studio (or Visual Studio Code) and have a complete IntelliSense programming experience.

Sharpmake can also generate makefiles and Xcode projects, but it is currently only available for Windows. With .NET Core and .NET Standard though, it is our hope that it will eventually cross the platform barrier. In the meanwhile, you may have luck using it with Mono.

Sharpmake was developed internally at Ubisoft for Assassin's Creed 3 in 2011. After experimenting with the other existing tools, it became clear that none of these solutions were performant enough to generate the number of configurations needed (at least not in a trivial way) and that a custom generator was needed.

Documentation

The best place for the Sharpmake documentation is the wiki on GitHub. The Sharpmake source code also comes with samples that you can study.

Building Sharpmake

Building Sharpmake is quite straightforward. Clone the repo on GitHub, open the solution in Visual Studio and build the solution in Release. The binaries will be found in the Sharpmake.Application/bin/Release. You can run the deploy_binaries.py script to automatically fetch the binaries and copy them in a Binaries folder.

More Platforms

Sharpmake originally had support for game consoles, but Ubisoft pulled it out because those could not be open sourced. Sharpmake now has an extension system that allows support for these consoles to be added back at runtime.

If you need support for these platforms and are an authorized developer, you can contact the SDK provider to get platform extension for Sharpmake.

Contributing

Tests

We will only accept merge requests that pass every tests. The unit tests are written with NUnit and the regression tests are ran by comparing the samples' output with a reference output. You can run the regression_tests.py script after having built the solution in Visual Studio to run the regression tests.

Because the regression tests just do a direct comparison with the output, it is possible to get a false negative after having done a good change. In that case, please update the tests so they match the output after your change. You can run the UpdateSamplesOutput.bat and UpdateSharpmakeProjects.bat batch files to automatically overwrite the reference output files.

Naturally, we also recommend that you put your own tests after fixing a bug or adding a feature to help us avoid regressions.

Additional Platforms

If you want to add support for an additional platform, please make sure that the platform is open and that you are not breaking your NDA. Ubisoft has not published platform support for most video game consoles for that exact reason. We will not accept merge requests for new platforms that are not completely open for development.