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.

Sharpmake

build

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, run the "bootstrap" script (".bat" for Windows, ".sh" for Unix platforms), open the solution in Visual Studio and build the solution in Release. The binaries will be found in the tmp/bin/release directory.

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.

Functional tests are generating test projects and building them to test functionality

used toolset for functional tests:

tools\FastBuild - v1.04. http://www.fastbuild.org

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.

Owner
Ubisoft
Ubisoft open source projects.
Ubisoft
Comments
  • Clang toolset support in VS2019

    Clang toolset support in VS2019

    While trying to generate projects with 'Clang' compiler support, I noticed that the built-in LLVM toolset support in VS2019 is not working when using : conf.Options.Add(Sharpmake.Options.Vc.General.PlatformToolset.LLVM);

    To fix this, I had to make 2 changes in Sharpmake code, making the result identical to what VisualStudio set on a new project with LLVM toolset :

    1. Change the toolset name. Sharpmake currently set 'llvm' in the .vcxprj file but VC2019 expects 'ClangCL' ProjectOptionsGenerator.cs : 1133 Options.Option(Options.Vc.General.PlatformToolset.LLVM, () => { context.Options["PlatformToolset"] = "ClangCL"; })
    2. Set the default Clang tool path to '$(LLVMInstallDir)' Util.cs : 1739 return GetRegistryLocalMachineSubKeyValue(registryKeyString, null, @"$(LLVMInstallDir)"); // null to get default

    It could also be nice of the documentation mentioned how to activate the LLVM toolset.

  • Add support to generate .NET Core projects.

    Add support to generate .NET Core projects.

    • I think most csproj features are still usable so only changed the minimum set to get the projects recognized by visual studio.
    • Tested with Visual Studio 2017 and 2019.
    • Tested linux netcoreapp1.0 and 2.2

    Next step I'll be trying to generate .NET Core versions sharpmake itself.

  • /generateDebugSolution does not work

    /generateDebugSolution does not work

    Following along with the example here: https://github.com/ubisoftinc/Sharpmake/blob/master/docs/OVERVIEW.md#create-a-debugging-environment

    I've added the /generateDebugSolution option to my build:

    ..\bin\Sharpmake.Application.exe /sources(@"main.sharpmake.cs") /verbose /generateDebugSolution

    The result is as follows:

    E:\dev\C++\fbxdebugger\build>..\bin\Sharpmake.Application.exe /sources(@"main.sharpmake.cs") /verbose /generateDebugSolution
    [00:00] sharpmake
    [00:00]   arguments : /sources(@"main.sharpmake.cs") /verbose /generateDebugSolution
    [00:00]   directory : E:\dev\C++\fbxdebugger\build
    [00:00]
    [00:00] input sources:
    [00:00]   E:\dev\C++\fbxdebugger\build\main.sharpmake.cs
    [00:00]   building projects and solutions configurations using 8 tasks...
    [00:00]     build done in 0.0 sec
    
    Error:
    The type "Sharpmake.DebugSolution" does not declare a constructor, please add one to allow Sharpmake to detect source file from construction callstack.
    [00:00]         While running E:\dev\C++\fbxdebugger\bin\Sharpmake.Application.exe
            @9/21/2018 11:52:39 PM: Exception message (level 0):
            Unhandled exception in thread pool
            Inner exception message (level 1):
            Cannot create instances of type: DebugSolution, caught exception message Exception has been thrown by the target of an invocation.. Make sure default ctor is public
            Inner exception message (level 2):
            Exception has been thrown by the target of an invocation.
            Inner exception message (level 3):
            The type "Sharpmake.DebugSolution" does not declare a constructor, please add one to allow Sharpmake to detect source file from construction callstack.
    
            Stack trace:
            Inner exception stack trace (level 3):
       at Sharpmake.Util.GetStackSourceFileTopMostTypeOf(Type type, String& sourceFile)
       at Sharpmake.Solution.Initialize(Type targetType)
       at Sharpmake.DebugSolution..ctor()
            Inner exception stack trace (level 2):
       at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
       at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
       at System.Activator.CreateInstance(Type type, Boolean nonPublic)
       at System.Activator.CreateInstance(Type type)
       at Sharpmake.Solution.CreateProject(Type solutionType, List`1 fragmentMasks)
            Inner exception stack trace (level 1):
       at Sharpmake.Solution.CreateProject(Type solutionType, List`1 fragmentMasks)
       at Sharpmake.Builder.LoadSolutionType(Type type)
       at Sharpmake.Builder.BuildProjectAndSolutionTask(Object parameter)
       at Sharpmake.ThreadPool.ThreadWork(Object obj)
            Root stack trace (level 0):
       at Sharpmake.ThreadPool.Wait()
       at Sharpmake.Builder.BuildProjectAndSolution()
       at Sharpmake.Application.Program.CreateBuilder(BaseBuildContext context, Argument parameters, Boolean allowCleanBlobs, Boolean generateDebugSolution)
       at Sharpmake.Application.Program.GenerateAll(BaseBuildContext buildContext, Argument parameters)
       at Sharpmake.Application.Program.Main()
    

    my sharpmake source file is as follows:

    using System.IO; // for Path.Combine
    using Sharpmake; // contains the entire Sharpmake object library.
    
    // Represents the project that will be generated by Sharpmake and that contains
    // the sample C++ code.
    [Generate]
    class BasicsProject : Project
    {
        private string ImGuiRootPath;
        public BasicsProject()
        {
            // The name of the project in Visual Studio. The default is the name of
            // the class, but you usually want to override that.
            Name = "Basics";
    
            // The directory that contains the source code we want to build is the
            // same as this one. This string essentially means "the directory of
            // the script you're reading right now."
            SourceRootPath = @"[project.SharpmakeCsPath]\..\src";
            ImGuiRootPath = @"[project.SourceRootPath}\..extern\imgui";
    
            SourceFiles.Add(@"[project.ImGuiRootPath]\imgui.cpp");
            SourceFiles.Add(@"[project.ImGuiRootPath]\imgui_draw.cpp");
            SourceFiles.Add(@"[project.ImGuiRootPath]\imgui_widgets.cpp");
    
            // Specify the targets for which we want to generate a configuration
            // for. Instead of creating multiple targets manually here, we can
            // use the binary OR operator to define multiple targets at once.
            // Sharpmake will generate all combinations possible and generate a
            // target for it.
            //
            // The code below is the same as creating 4 separate targets having
            // those flag combinations:
            //    * Platform.win32, DevEnv.vs2015, Optimization.Debug
            //    * Platform.win32, DevEnv.vs2015, Optimization.Release
            //    * Platform.win64, DevEnv.vs2015, Optimization.Debug
            //    * Platform.win64, DevEnv.vs2015, Optimization.Release
            AddTargets(new Target(
                // we want a target that builds for both 32 and 64-bit Windows.
                Platform.win32 | Platform.win64,
    
                // we only care about Visual Studio 2017. (Edit as needed.)
                DevEnv.vs2017,
    
                // of course, we want a debug and a release configuration.
                Optimization.Debug | Optimization.Release));
        }
    
        // Sets the properties of each configuration (conf) according to the target.
        //
        // This method is called once for every target specified by AddTargets. Since
        // we only want vs2015 targets and we want 32- and 64-bit targets, each having
        // a debug and a release version, we have 1 x 2 x 2 targets to configure, so it
        // will be called 4 times.
        //
        // If we had instead specified vs2012 | vs2015 | vs2017 it would have been
        // called 12 times. (3 x 2 x 2)
        [Configure]
        public void ConfigureAll(Project.Configuration conf, Target target)
        {
            // Specify where the generated project will be. Here we generate the
            // vcxproj in a /generated directory.
            conf.ProjectPath = Path.Combine("[project.SharpmakeCsPath]", "generated");
            conf.IncludePaths.Add(@"[project.SourceRootPath]\..\extern\imgui");
        }    
    }
    
    // Represents the solution that will be generated and that will contain the
    // project with the sample code.
    [Generate]
    class BasicsSolution : Solution
    {
        public BasicsSolution()
        {
            // The name of the solution.
            Name = "Basics";
    
            // As with the project, define which target this solution builds for.
            // It's usually the same thing.
            AddTargets(new Target(
                Platform.win32 | Platform.win64,
                DevEnv.vs2017,
                Optimization.Debug | Optimization.Release));
        }
    
        // Configure for all 4 generated targets. Note that the type of the
        // configuration object is of type Solution.Configuration this time.
        // (Instead of Project.Configuration.)
        [Configure]
        public void ConfigureAll(Solution.Configuration conf, Target target)
        {
            // Puts the generated solution in the /generated folder too.
            conf.SolutionPath = @"[solution.SharpmakeCsPath]\generated";
    
            // Adds the project described by BasicsProject into the solution.
            // Note that this is done in the configuration, so you can generate
            // solutions that contain different projects based on their target.
            //
            // You could, for example, exclude a project that only supports 64-bit
            // from the 32-bit targets.
            conf.AddProject<BasicsProject>(target);
        }
    
        [Main]
        public static void SharpmakeMain(Arguments sharpmakeArgs)
        {
            // Tells Sharpmake to generate the solution described by BasicsSolution.
            sharpmakeArgs.Generate<BasicsSolution>();
        }
    }
    
  • GoogleTest + Sharpmake

    GoogleTest + Sharpmake

    Visual Studio propose an integration of the GoogleTest framework through "Google Test Adapter" extension. Which allow us to use "Test Explorer Windows". That give us a new project property group: image I tried to add a new dll project with all dependencies of gtest (googletest). But the gtest project have packages.config file with references (from visual studio gtest template): image

    I wasn't able to find a hook in Sharpmake API to deal with those elements.

    Do you have any advice how I could add GTest project with Sharpmake.

  • error CA1416 causes bootstrap to fail

    error CA1416 causes bootstrap to fail

    Hello, I'm new to sharpmake - When running the bootstrap.bat I'm failing to compile due to a series of errors like:

    Sharpmake\Sharpmake\Util.cs(1115,54): error CA1416: 'RegistryKey.OpenSubKey(string)' is supported on 'windows' [C:\redacted\Sharpmake\Sharpmake \Sharpmake.csproj]

    After some quick searching I found: https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1416

    Unless I'm misinterpreting the setup instructions or that link, I think this means some additional annotations may be needed in the source, or some settings changed for the bootstrap process.

    For my environment I'm using VS 2019 Enterprise.

  • Symbols not loading in debug solution

    Symbols not loading in debug solution

    Hi,

    I'm using sharpmake on a small project but I've never gotten the debugging solution to work properly. I can use it to edit my code and it provides me with intellisense but I'm unable to debug. It seems that VS never loads the symbols for the solution.

    Any ideas?

    Thanks, Jonathan

  • Add support for VcxprojUserFile.LocalDebuggerAttach

    Add support for VcxprojUserFile.LocalDebuggerAttach

    In my project I hot reload DLL plugins, and for this reason I want to attach my debugger to a running executable instead of launching it.

    The regression tests succeeded, I don't know if I have to provide anything else. Thank you!

  • Errors running bootstrap.bat

    Errors running bootstrap.bat

    Hi. I've been using a branched version of Sharpmake for a few years (I love it). I wanted to get in on the new stuff that's been in development, so I thought I'd get a clean build. However, I can't run the bootstrap.bat without getting the errors. I could solve some of these by force-adding a two NUGet packages, but I ran into more issues and, and that that's not the way to do it anyway.

    Any suggestions?

    Jens

    C:\platforms\Sharpmake>bootstrap.bat MSBuild batch path: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsMSBuildCmd.bat"


    ** Visual Studio 2017 MSBuild Command Prompt ** Copyright (c) 2017 Microsoft Corporation


    Compiling Sharpmake.Application/Sharpmake.Application.csproj in "Debug|AnyCPU"... msbuild -t:build -restore "Sharpmake.Application/Sharpmake.Application.csproj" /nologo /verbosity:m /p:Configuration="Debug" /p:Platform="AnyCPU" Restore completed in 33,02 ms for C:\platforms\Sharpmake\Sharpmake\Sharpmake.csproj. CSC : error CS8032: An instance of analyzer Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers.EnableConcurrentExecutionAnalyzer cannot be created from C:\Users\jens.nuget\packages\microsoft.codeanalysis.analyzers\3.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll : Could not load file or assembly 'Microsoft.CodeAnalysis, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependen cies. The system cannot find the file specified.. [C:\platforms\Sharpmake\Sharpmake\Sharpmake.csproj] ...

  • Resolve AdditionalSourceRootPaths before use

    Resolve AdditionalSourceRootPaths before use

    The AdditionalSourceRootPaths member never had the paths it contained resolved, resulting in paths that had mixed folder separators to not be looked up correctly inside of ResolveSourceFiles.

    Ex: A path added to AdditionalSourcerootPaths on Mac OSX set as:

    @"[project.SharpmakeCsPath]..\externals\SomeExternal"

    that expanded to:

    /Users/SomeUser/Documents/SomeProject/sharpmake\..\externals\SomeExternal

    would fail to have the files in the directory looked up. Calling ResolvePath on the member causes the path to be normalized to:

    /Users/SomeUser/Documents/SomeProject/externals/SomeExternal

  • AdditionalCompilerOptions per file

    AdditionalCompilerOptions per file "/bigobj"

    How can I add a custom build option per file? I am using AdditionalCompilerOptions for project, I would like to add "/bigobj" for a given cpp file.

  • TextTemplatingFilePreprocessor

    TextTemplatingFilePreprocessor

    Hi,

    I have a number of text templates that are using the TextTemplatingFilePreprocessor value in the generation tags. I can't seem to find a way to added them to a project. The code seems to use AdditionalNone to allow for this, but it doesn't work. Anyone have any idea of how to set this. Or is there a way to customize the tags it contains?

    Thank you

  • Bump actions/checkout from 3.1.0 to 3.3.0

    Bump actions/checkout from 3.1.0 to 3.3.0

    Bumps actions/checkout from 3.1.0 to 3.3.0.

    Release notes

    Sourced from actions/checkout's releases.

    v3.3.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3.2.0...v3.3.0

    v3.2.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3.1.0...v3.2.0

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Configuration default tagged option is not serialized

    Configuration default tagged option is not serialized

    Hello,

    I want to generate a csproj containing: <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

    i try by doing this

            public override void Configure(Configuration conf, Target target)
            {
                base.Configure(conf, target);
                conf.Options.Add(Options.CSharp.AutoGenerateBindingRedirects.Disabled);
            }
    

    By the way it is not serialized, because this option is tagged with Default attribute (i guess). (If i put Enabled it is serialized) Moreover the default option should be true since recently (https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection)

    The automatic binding redirection feature affects desktop apps that target .NET Framework 4.5.1 or a later version. If you haven't explicitly enabled or disabled autogenerated binding redirection and you upgrade an existing project, the feature is automatically enabled.

    Thank you.

  • Portable debug types for C# projects

    Portable debug types for C# projects

    As of now, Sharpmake is only supporting the "default" debug type options for C# projects. Those are full and pdbonly. However, there are two more options for generating portable Program Debug Database as described in the Microsoft's documentation: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/code-generation

    The portable and embedded options are useful for tools that support only the open-source standard: https://github.com/dotnet/core/blob/90ff62b74898499466bb8423d44bedf4b34bf9b0/Documentation/diagnostics/portable_pdb.md

  • /multithreaded(false) doesn't get added to generated solution

    /multithreaded(false) doesn't get added to generated solution

    When passing /sources, /generateDebugSolution and multithreaded arguments: the multithreaded argument doesn't get passed to the launch profile of the generated debug solution. Only the sources parameter seems to come along for the ride.

    /multithreaded(false) can be helpful when debugging, that's how I figured this out. I was hoping to debug generation without threads getting in the way. :)

  • Bump Basic.Reference.Assemblies.Net60 from 1.3.0 to 1.4.1 in /Sharpmake

    Bump Basic.Reference.Assemblies.Net60 from 1.3.0 to 1.4.1 in /Sharpmake

    Bumps Basic.Reference.Assemblies.Net60 from 1.3.0 to 1.4.1.

    Release notes

    Sourced from Basic.Reference.Assemblies.Net60's releases.

    Release v1.4.1

    Create release 1.4.1

    Release v1.4.0

    Create release 1.4.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
A Visual Studio extension that provides enhanced support for editing High Level Shading Language (HLSL) files
A Visual Studio extension that provides enhanced support for editing High Level Shading Language (HLSL) files

HLSL Tools for Visual Studio This extension is for Visual Studio 2017 / 2019. Go here for the Visual Studio Code extension. HLSL Tools is a Visual Stu

Dec 27, 2022
A Visual Studio extension containing a collection of tools to help contributing code to the Chromium project.

VsChromium VsChromium is a Visual Studio Extension containing a collection of tools useful for editing, navigating and debugging code. VsChromium was

Dec 30, 2022
Is this hardware solution the ultimate in switch bounce elimination? Simple PCB, cheap components = final solution!
Is this hardware solution the ultimate in switch bounce elimination? Simple PCB, cheap components = final solution!

#230 Ultimate Switch Bounce Eliminator Direct link to video: https://youtu.be/b2uUYiGrS5Y It's time to try a final, alternative approach to the ubiqui

Nov 7, 2022
A D++ Discord Bot template for Visual Studio 2019 (x64 and x86)

D++ Windows Bot Template A D++ Discord Bot template for Visual Studio 2019 (x64 and x86, release and debug). The result of this tutorial. This templat

Dec 24, 2022
Small commandlet for generating a complete project using UE4SS header dump, Project File and Plugin Manifest

UE4GameProjectGenerator Small commandlet for generating a complete project using UE4SS header dump, Project File and Plugin Manifest Usage Compile the

Nov 27, 2022
Bungie's Oni modified so it compiles with Microsoft Visual Studio 2019.

OniFoxed What's this? This is a modified variant of the recently leaked Oni source code so that it compiles under Microsoft Visual Studio 2019 with so

Dec 2, 2022
A Visual Studio template used to create Cobalt Strike BOFs
A Visual Studio template used to create Cobalt Strike BOFs

Introduction Cobalt Strike beacon object files (BOFs) is a feature that added to the beacon in order to allow rapid beacon extendibility in a more OPS

Dec 28, 2022
Visual Studio Extension that installs additional color themes
Visual Studio Extension that installs additional color themes

Using this Extension Download and install the extension Restart Visual Studio Navigate to Tools > Options > Environment > General and select your colo

Dec 19, 2022
Visual Studio Test Adapter for Catch2

Test Adapter for Catch2 Within Visual Studio, the Test Explorer is a convenient way to run and debug unit tests. This test adapter adds support for th

Dec 25, 2022
Visual Studio native debugger extension to help debug native applications using Mono.
Visual Studio native debugger extension to help debug native applications using Mono.

Unity Mixed Callstack UnityMixedCallstack is a Visual Studio 2017/2019 extension to help debug native applications embedding Mono, like Unity. If you

Nov 28, 2022
Useful UE4 Visual Studio extensions.
Useful UE4 Visual Studio extensions.

UE4 Smarter Macro Indenting This extension was designed to fix the unnecessary and annoying "smart" indenting that Visual Studio likes to do around va

Dec 16, 2022
Half-Life Singleplayer SDK 2.3, updated to compile with Visual Studio 2019. Provided as-is with no further support. See the README for more information.

Half Life 1 SDK LICENSE Half Life 1 SDK Copyright© Valve Corp. THIS DOCUMENT DESCRIBES A CONTRACT BETWEEN YOU AND VALVE CORPORATION (“Valve”). PLEASE

Oct 10, 2022
A CANopen protocol for all systems such as embedded, PC, etc.
A CANopen protocol for all systems such as embedded, PC, etc.

Easy CANopen Easy CANopen is a protocol for shaping the CAN-bus message in a specific way that suits industrail automation. CANopen is a very difficul

Jan 4, 2023
A general solution to simulate execution of virtualized instructions (vmprotect/themida, etc.).
A general solution to simulate execution of virtualized instructions (vmprotect/themida, etc.).

vmp_runner A general solution to simulate execution of virtualized instructions (vmprotect/themida, etc.) based on Unicorn. 一个基于Unicorn模拟执行虚拟化指令(vmpro

Dec 28, 2022
Cross-platform tool to extract wavetables and draw envelopes from sample files, exporting the wavetable and generating the appropriate SFZ text to use in a suitable player.
Cross-platform tool to extract wavetables and draw envelopes from sample files, exporting the wavetable and generating the appropriate SFZ text to use in a suitable player.

wextract Cross-platform tool to extract wavetables and draw envelopes from sample files, exporting the wavetable and generating the appropriate SFZ te

Jan 5, 2022
Contains Algorithms and Competitive Programming sites solutions (codeforces, codechef, etc.)

✨ hacktoberfest2021 ?? ?? Contributing to hacktoberfest 2021 Welcome to hacktoberfest 2021 Public Repository. ????‍?? A month-long celebration from Oc

Oct 22, 2022
The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-source and can be used with OpenOCD as a general-purpose programmer
The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-source and can be used with OpenOCD as a general-purpose programmer

pico-probe-programmer The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-sou

Oct 15, 2022
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.

RRxIO - Robust Radar Visual/Thermal Inertial Odometry RRxIO offers robust and accurate state estimation even in challenging visual conditions. RRxIO c

Dec 20, 2022
Visual Leak Detector for Visual C++ 2008-2015

Visual Leak Detector Introduction Visual C++ provides built-in memory leak detection, but its capabilities are minimal at best. This memory leak detec

Jan 8, 2023