Skip to content

Compile a NativeLibrary with NativeAOT #14883

@lukemerrick

Description

@lukemerrick

Is your feature request related to a problem? Please describe.

I tried to use the new .NET 7 NativeAOT NativeLibrary feature in F#, adapting the C# official example into the following code:

// My attempt to expose a simple function in a Native Library build.
namespace HelloLib

open System.Runtime.InteropServices

module Say =
    [<UnmanagedCallersOnly(EntryPoint= "hello")>]
    let hello name =
        printfn "Hello %s" name

Unfortunately, the F# compiler just returned a generic This attribute is currently unsupported by the F# compiler. Applying it will not achieve its intended effect.

This is frustrating because there is this lovely 3 year old example of doing an F# native library in .NET SDK version 3, which makes it seem like the current lack of support is a bit of a regression compared to the state of Native AOT in 2020.

Describe the solution you'd like

I would like F# to support building a NativeLibrary. Short of this, adding some newbie-friendly information to the F# documentation explaining the current state of Native AOT and the expectation for future support would also be helpful.

Describe alternatives you've considered

I have considered trying to wrap an F# library in a C# native library, but that feels like too much of a hack. I also am a .NET and compilers novice, so I'm not sure that this approach would even work. If this would likely work and is actually a good workaround at the moment, any pointers as to how to accomplish this would also be appreciated!

dotnet --info output
dotnet --info
.NET SDK:
 Version:   7.0.102
 Commit:    4bbdd14480

Runtime Environment:
 OS Name:     manjaro
 OS Version:  
 OS Platform: Linux
 RID:         manjaro-x64
 Base Path:   /usr/share/dotnet/sdk/7.0.102/

Host:
  Version:      7.0.2
  Architecture: x64
  Commit:       d037e070eb

.NET SDKs installed:
  7.0.102 [/usr/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.NETCore.App 7.0.2 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Planned

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions