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