Novolis Docs
novolis-codegen / getting-started.md

Getting started

dotnetcodegennovolis

Codegen pipeline, reflection, and binding generators used across the platform.

Published guide: https://novolis-platform.github.io/.github/novolis-codegen/

Prerequisites

Configure GPR once from a sibling novolis-governance checkout:

pwsh -File d:\novolis\novolis-governance\scripts\configure-gpr-user-nuget.ps1

Install

dotnet add package Novolis.CodeGen.Bindings

Local multi-repo iteration uses ProjectReference mode via d:\novolis\Novolis.Platform.slnx — never a local NuGet folder feed.

C-ABI binding emitters

Novolis.CodeGen.Bindings emits C ABI interop and thin C# façades. It supports native C libraries and C++ libraries behind an extern "C" shim; it does not bind C++ classes directly.

Describe exported functions with typed signatures, including the generated parameter names:

var imports = new InteropExportsFragment(
    Id: "example",
    SchemaVersion: 1,
    Header: null,
    Description: "Example C ABI.",
    DllName: "example",
    Policy: new InteropPolicySpec([], [], "AggressiveInlining", UseDisableRuntimeMarshalling: true),
    Structs: [],
    Imports:
    [
        new InteropImportSpec(
            "example_open",
            NativeSignature.Create(
                NativeType.NativeInt,
                new NativeParameter("path", NativeType.Utf8String))),
    ]);

Register jobs with the factories (BindingEmitJob.LibraryImport, DynamicExports, FacadeForward), then call BindingCodegen.Generate from Novolis.CodeGen.Bindings.Roslyn. Use the generic BindingCodegenHost<TPhase, TContext> only when you need Roslyn hooks.

Complete tiny consumer: d:\novolis\novolis-lab\labs\codegen\TinyExprBindings\. Keep generated source in a T1 structural-equivalence test when replacing an existing emitter.

Next