CppSharp v0.11.0 Release Notes

    • ๐ŸŽ The NuGet package now supports Linux and macOS as well

    • โฌ†๏ธ Upgrade to .NET Core 3.1 and improve build system

    • ๐Ÿ‘‰ Make auto-compiling of C# work with .NET Core

    • โž• Adding extract interface pass

    • โž• Add a log for changes per release

    • ๐Ÿ›  Fixed alias of signed char cannot be marshaled

    • โž• Add missing quotes to support paths with spaces in build scripts

    • ๐Ÿ‘ Ignore the still unsupported dependent type names

    • Rewrite GenerateEnumFromMacros helper to also look into enum items.

    • ๐Ÿ›  Fix generation of overloads in NAPI by re-ordering final calculated states.

    • โšก๏ธ Update expression evaluator code from latest upstream.

    • ๐Ÿ‘Œ Improve visiting options implementation in CodeGenerator.

    • Clean multiline function signatures in the AST converter.

    • ๐Ÿ›  Fix generation of text blocks using NewLineKind.IfNotEmpty.

    • Git ignore IDEA project folders.

    • ๐Ÿ”„ Change XML comments to be tested at run-time

    • Generate valid C++ for pointers in template args

    • ๐Ÿ‘ Better detect invalid specialized functions

    • Simplify the marking of invalid functions

    • Generate valid C++ for protected constructors

    • Generate valid C++ for protected destructors

    • Only implement abstract classes in C++ for ctors/dtors

    • ๐Ÿ›  Fix test generation for QuickJS generator.

    • โœ‚ Remove unused code in QuickJS module generator.

    • โž• Add enum support to QuickJS generator.

    • Marshaling correctness fix for enum and primitive types in NAPI.

    • Abstract marshaler into overridable method in NAPI sources.

    • Extract NAPI VarPrefix and ArgumentPrefix to base class.

    • โž• Add missing clang headers

    • ๐ŸŽ Create a single nuget package that supports windows / linux / macos

    • ๐Ÿ”จ Refactor QuickJS generator structure to follow NAPI patterns.

    • โž• Add initial QuickJS primitive type support and test suite.

    • โœ… Ensure a tested specialization is really generated

    • โœ… Place all output of tests in their own directories

    • ๐Ÿ‘‰ Use C++17 in all native projects

    • 0๏ธโƒฃ Disable getter/setter to property pass by default in non-managed backends.

    • ๐Ÿ›  Fix forward include collector to consider value class semantics in function returns.

    • Factor VarPrefix and ArgumentPrefix helpers into base marshaler.

    • Implement basic visiting behavior in some CodeGenerator overloads.

    • Normalize visiting overloads to be virtual.

    • Flush Module.ExternalClassTemplateSpecializations to avoid emitting the same specialization in multiple files

    • โž• Add initial Node and N-API testing infrastructure and tests.

    • โšก๏ธ Big update to NAPI generator with initial support for basic examples.

    • โž• Add DFA/NFA state machine utility code.

    • Replace outdated Clang compiler flags such as std=c++1z and replace it with std=c++17

    • ๐Ÿ”„ Change GenerateSequentialLayout default value to true

    • Simplify TU.FileRelativeDirectory by using Path.GetDirectoryName.

    • โšก๏ธ Update driver to only generate system modules for C# generators.

    • โž• Add ILibrary.GenerateCode as a custom code generation callback.

    • โฌ†๏ธ Upgrade .NET projects to C# 8.0.

    • ๐Ÿ‘Œ Improve generation of type printing declaration names for C language.

    • Rework constructor generation in C++ code generator.

    • ๐Ÿ“œ Setup include dirs on the module instead of parser options in the CLI.

    • ๐Ÿ‘Œ Improve error handling in CLI and avoid defaulting to a generator on unknown option..

    • โž• Add N-API generator support to the CLI.

    • Extract and re-use GetIncludePath across multiple generators.

    • ๐Ÿ›  Fix TU.FileRelativeDirectory to be more robust against some paths.

    • Fully resolve include dirs paths in driver option validation.

    • ๐Ÿ›  Fix ShouldGenerateClassNativeField to use NeedsBase instead of HasBase.

    • โšก๏ธ Update Class.HasNonIgnoredBase to use the actual base class.

    • ๐Ÿ›  Fix rename pass not handling some declarations due to early return.

    • ๐Ÿ“ฆ Manage package versions centrally

    • โž• Add LanguageVersion.CPP20 support

    • Only upload artifacts from master branch

    • โœ… Make unit tests independent of the generator

    • โœ… Simplify code that regenerates test bindings

    • Only use premake for native projects and improve c# projects.

    • ๐Ÿšš Move GeneratorTestFixture type to its own file.

    • ๐Ÿ›  Fix typo and move alignment offsets to cpp file

    • โœ… Export or implement accessible functions in tests

    • Export symbols for indirectly accessible constructors

    • ๐Ÿ— Publish artifacts for CI builds (#1533)

    • ๐Ÿ›  Fix importing/exporting redeclaration in symbols

    • ๐Ÿ— CI: Add Restore step to make it easier to analyze build times

    • Don't warn repeatedly about an existing LLVM dir

    • Don't download LLVM if its destination exists

    • ๐Ÿ›  Fix the expression-generator after changed paths

    • ๐Ÿ›  Fix a regressive crash when generating parser bindings

    • โœ‚ Remove redundant overrides from the generated C++/CLI

    • โš  Disable the msvc warning about unexported template specializations

    • ๐Ÿ›  Fix naive version comparison

    • ๐Ÿ›  Fix GCC version detection

    • ๐Ÿ— Move all LLVM files to /build/llvm

    • Ignore premake5 binaries

    • โœ‚ Remove secondary Zstandard compression from LLVM packages

    • ๐Ÿ— Show a message explaining how to build LLVM when a pre-built package is unavailable.

    • ๐Ÿ›  Fix wrong LLVM package name when GCC version is >= 10

    • โž• Add LLVM commands to build.sh

    • โœ… Test using a specialization from a dependent module

    • โž• Add install_tools target to build.sh and fix LLVM CI.

    • ๐Ÿ— Deprecate GCC 7 and add GCC 10 build for LLVM CI.

    • ๐Ÿšš Move generated .vcxproj files back to their original place

    • โž• Add missing -configuration option to build.sh script

    • 0๏ธโƒฃ Replace Generate*.bat files with a single generate.sh which uses VS2019 by default

    • โœ‚ Remove DownloadDeps.bat file

    • โž• Add build.sh and test.sh with execute permissions

    • ๐Ÿ Only search for MSVC toolchain in Windows

    • ๐Ÿ“ฆ Generate correct LLVM package name regardless of the current operating system

    • ๐Ÿ‘ Avoid using "action:vs* filter because there are better ones that are more specific (#1523)

    • Convert the visiting options to an enum

    • โšก๏ธ Update CanCheckCodeGenInfo to check function types as well.

    • Check for a dependent expression before walking variable initializer.

    • ๐Ÿ›  Some Premake robustness fixes for Clang toolchain.

    • ๐Ÿ–จ Use explicit native type printer kind in CLI headers code.

    • โœ… Ignore testing the incorrect marshalling of parameters typed const& to primitives

    • ๐Ÿ‘ Don't check the unsupported operator= for symbols

    • โž• Add initial NAPI and JS generator.

    • โž• Add initial QuickJS generator.

    • โž• Add C++ generator support to the CLI.

    • โœ‚ Remove artificial limitations for cross-generation in CLI.

    • Simplify target-specific message output code in CLI.

    • โž• Add a new option to set a prefix for generated files in CLI.

    • ๐Ÿ‘Œ Improve module naming heuristics and add an option for setting it explicitly.

    • ๐Ÿ‘ Implement C support as generator kind in CLI.

    • ๐Ÿ”จ Refactor string.Format calls in CLI.

    • Implement Method.HasSameSignature for signature comparison.

    • Implement Method.ToString() to help with debugging.

    • ๐Ÿ— A temporary hack to deal with a bug in MSVC v142 - VS 2019 build tools

    • Don't wrap trivial constructors and destructors

    • Ensure bindings are regenerated as needed without using DisableFastUpToDateCheck (#1511)

    • Continue implementation of C++ generator.

    • โž• Add pass to fix up pure C++ methods to C++ generator.

    • ๐Ÿ–จ More robust C++ type printing of incomplete class declarations.

    • ๐Ÿ’พ Save existing parameter when doing C++ parameter type printing.

    • โž• Add initial C base generator.

    • Check if module exists before using it in C code generator.

    • More robust enum generation for C family languages in C code generator.

    • ๐Ÿ›  Fix C generator GenerateMethodSpecifier to support pure and const specifiers.

    • โž• Add set of generated declarations to CLITypeReferences.

    • โž• Add initial block visitor to GeneratorOutputPass.

    • Only add files to module if module is not null.

    • โž• Add per-declaration support for decl maps.

    • โž• Add BlockGenerator.NeedsNewLine helper property.

    • ๐Ÿ›  Fix class nested enums to be handled by the rename pass.

    • Document recently added GenerationOutputMode option.

    • โž• Add TypeQualifiersMode to Type and implement in C++ type printer.

    • โž• Add new VisitQualifiedType overload to visitors.

    • Set include path as weell as file path when creating a new TU.

    • ๐Ÿ›  Fix IsGeneratedOverride to take virtual methods into account.

    • โž• Add some helper class hierarchy methods.

    • ๐Ÿ›  Fix CppMarshal WriteClassInstance to deal with incomplete classes.

    • Rework Generator interface and add GenerationOutputMode option.

    • ๐Ÿ‘Œ Improve IsTypeComplete to be more robust.

    • ๐Ÿ‘Œ Improve ignored check for decls with explicit generation kinds.

    • Generate acessor methods for C targets in field to property pass..

    • Set the correct enum integer type in GenerateEnumFromMacros.

    • ๐Ÿ›  Fix ignored base checking in CheckIgnoredDecls.

    • ๐Ÿ“œ Be more strict when constructing a regex for parsing macros.

    • ๐Ÿ– Handle enum items in rename pass.

    • ๐Ÿ›  Fix code to use BaseClass property instead of first base.

    • โž• Add initial implementation of declaration maps.

    • โœ‚ Remove unsupported Visual Studio versions from generate options

    • ๐Ÿ“‡ Rename GenerateProjects.bat to Generate.bat

    • โž• Add GenerateVS2019.bat shortcut similar to GenerateMake.bat

    • Prevent projects from picking up obj files that are generated sometimes (#1508)

    • ๐Ÿ›  Fix all of our warnings in the parser

    • ๐Ÿ›  Fix error in Tests.lua by requiring gmake2 module.

    • โž• Add a GCC 9 build to the LLVM CI build matrix.

    • ๐Ÿ›  Fix minor issue when invoking Premake without an action.

    • Compress LLVM archives using zstd.

    • ๐Ÿ— Call MSBuild in x86 build with Win32 platform.

    • ๐Ÿ— Pass the target architecture when building LLVM.

    • ๐Ÿ— Publish artifacts after building LLVM.

    • ๐Ÿ›  Fix VS environment paths by setting global env variables.

    • ๐ŸŽ Do not use LLD when building LLVM under macOS.

    • Generate C++ for constructors of abstract types

    • ๐Ÿ“ฆ Use NUnit3TestAdapter package (#1504)

    • โž• Add a build for LLVM to the CI

    • ๐Ÿ Use correct C# parser bindings for windows x64 (#1501)

    • Avoid installing NUnit if its already installed. (#1500)

    • โœ… Generate code from tests where libraries appear

    • ๐Ÿ›  Fix generation of SequentialLayout structures (#1499)

    • โšก๏ธ Update parser bindings. (#1497)

    • ๐Ÿ›  Fix CS0162 warning about unreachable code (#1492)

    • ๐Ÿ›  Fix CS0109 warnings about new keyword not being required. (#1493)

    • Enable Multi-processor Compilation (MSVC)

    • ๐Ÿ›  Fix C4273 warnings about inconsistent dll linkage (#1491)

    • ๐Ÿ›  Fix warnings about unnecessary using directives. (#1489)

    • ๐Ÿ›  Fix C4251 warnings (#1487)

    • Avoid generating an interface with a Dispose method if we already inherit from IDisposable. (#1486)

    • ๐Ÿ›  Fix finding of symbols for members of templates

    • โš  Always ignore warnings about missing PDB files

    • โฌ‡๏ธ Reduce number of "download progress" messages. (#1482)

    • Mark variables with constant expressions as found

    • ๐Ÿ‘‰ Make the CPP ABI visible only to the STD symbols

    • Generate valid C++ for destructors of nested types

    • Always use the mangled names as reported by Clang

    • ๐Ÿ‘ท Switch CI to GitHub Actions

    • Call the destructor instead of deleting the object in the generated symbols

    • ๐Ÿ“œ Regenerate the parser bindings with sequential layouts (#1479)

    • โœ‚ Remove dummy variable and use discards instead available since C# 7.0 (#1478)

    • Fallback to LayoutKind.Explicit when a custom alignment is specified. (#1476)

    • โœ‚ Remove Layout.GetSize() method as it's no longer relevant (#1474)

    • ๐Ÿ›  Fix String.CSharpSignatureType returning incorrect type when the given type is a pointer or a reference. (#1473)

    • ๐Ÿ”ฆ Expose if a variable is a constant expression

    • ๐Ÿ›  Fix the generation of sequential layouts

    • ๐Ÿ— Create projects which always build generated code

    • Simplify the marshalling of returned pointers (#1470)

    • VTable: improve codegen & make it thread safe (#1469)

    • Create VTables class to cache delegates pointing to native virtual methods (#1468)

    • ๐Ÿ‘Œ Improve UTF32Marshaller performance (#1467)

    • ๐Ÿ‘Œ Improve generation of C# (#1466)

    • ๐ŸŽ Reduce calls to ConcurrentDictionary to improve performance (#1464)

    • Ensure expression is a valid float constant before trying to append f suffix (#1465)

    • ๐Ÿ›  Fix passing of CMake options to LLVM on Windows

    • โšก๏ธ Update the kind of completed specializations (#1460)

    • ๐Ÿ›  Fix ambiguous conversion functions (#1458)

    • Prevent string destructor from being called twice when its passed by value (#1455)

    • โœ‚ Remove unsupported calling convention usage (#1454)

    • ๐Ÿ›  Fix PInvokeStackImbalance when calling C++ methods (#1453)

    • Load symbols at startup to avoid very expensive ResolveSymbol calls everywhere (#1447)

    • ๐Ÿ›  Fix IntPtr array marshalling bug and move hard to read code to CppSharp.Runtime (#1446)

    • ๐Ÿ›  Fix string marshalling bug and move hard to read code to CppSharp.Runtime (#1445)

    • Add support for const char32_t* and fix const wchar_t* in linux / osx (#1444)

    • Copy arrays of primitive values using System.Buffers.MemoryCopy (#1440)

    • ๐Ÿ›  Fix marshalling for bool arrays (#1439)

    • ๐Ÿ›  Fix wrong [MarshalAs(UnmanagedType)] for strings (#1438)

    • โœ‚ Remove call argument to fix broken build (#1436)

    • ๐Ÿ‘ Basic support for static constexpr variables (#1435)

    • โž• Add support for C++ character literals (u, U, L) (#1434)

    • โฌ†๏ธ Upgrade premake in preparation for .NET Core (#1298)

    • 0๏ธโƒฃ Use C# 'default literal' to avoid using a type's name that may be renamed (#1432)

    • โž• Add missing Variable.Type null check. (#1430)

    • ๐Ÿ›  Fix generated constructor cant use placement new when class overloads operator new (#1431)

    • ๐Ÿ›  Fix generation of VS projects under non-Windows platforms.

    • ๐Ÿ›  Fix wrong marshalling for static member arrays (#1428)

    • ๐Ÿ›  Fix wrong generated destructor

    • Ignore non-const data() method for std types like basic_string c++17

    • ๐Ÿ›  Fix crash when trying to read a CXXRecordDecl that doesn't have a definition (#1426)

    • โœ‚ RemovePass is now generic.

    • โž• Added the ability to remove a built-in pass.

    • ๐Ÿ›  Fix anonymous member name colliding with enclosing type name (#1425)

    • ๐Ÿ‘ Allow the users to overwrite CppSharp type maps.

    • Find libraries even when given with no extensions

    • โž• Add an option for building with Visual Studio 2019

    • ๐Ÿ›  Fix GCC path detection for Ubuntu 20.

    • ๐Ÿšš Move libraries to a new class for linking options

    • ๐Ÿ›  Fix memory leaks when using the driver

    • ๐Ÿ“œ Simplify ClangParser by making it static

    • Pack the lld headers as well

    • โœ… Import native DLL-s (tests and parser) with MSVC

    • โœ… Implement and export all methods in tests