You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+29-26Lines changed: 29 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,14 +15,15 @@ For details of releases, see the [release notes](https://github.com/UbiquityDotN
15
15
Ubiquity.NET.Llvm provides LLVM language and runtime bindings for .NET based applications.
16
16
Ubiquity.NET.Llvm's goal is to provide a robust Class library that accurately reflects the
17
17
underlying LLVM C++ model. This is done through an extended LLVM-C API bundled as a native
18
-
library (LibLLVM). Ubiquity.NET.Llvm uses the support of LibLLVM to gain access to the LLVM
19
-
class library and project it into a .NET managed library that reflects the original class
20
-
library design as best as possible.
18
+
library (`Ubiquity.NET.LibLLVM`). Ubiquity.NET.Llvm uses the support of LibLLVM to gain
19
+
access to the LLVM class library and project it into a .NET managed library that reflects
20
+
the original class library design as best as possible.
21
21
22
22
The goal is to match the original class model as closely as possible, while providing an
23
23
object model to .NET applications that feels familiar and consistent with common styles and
24
24
patterns in .NET Framework applications. Thus, while class, method and enumeration names are
25
-
similar to their counterparts in LLVM, they are not always identical.
25
+
similar to their counterparts in LLVM, they are not always identical (especially casing and
26
+
use of `_`).
26
27
27
28
### Brief History
28
29
Ubiquity.NET.Llvm was initially developed as a means to leverage LLVM as the back-end for an
@@ -36,24 +37,25 @@ code generator that was tied to the ARMv4 Instruction set. ([Llilum](https://www
36
37
Ubiquity.NET.Llvm has continued to evolve and improve and remains a distinct project as it
37
38
has no dependencies on Llilum or any of its components. Ubiquity.NET.Llvm is viable for any
38
39
.NET applications wishing to leverage the functionality of the LLVM libraries from .NET
39
-
applications.
40
+
applications. In fact, it's most common use now is for supporting JIT execution of Domain
41
+
Specific Languages (DSL) though it is not limited to that as the [Kaleidoscope Tutorials](#kaleidoscope-tutorial)
42
+
show an interactive JIT implementation along with full AOT compilation.
40
43
41
44
Ubiquity.NET.Llvm began with LLVM 3.4 as a C++/CLI wrapper which enabled a closer binding to
42
45
the original C++ object model then the official LLVM-C API supported. As Ubiquity.NET.Llvm
43
46
progressed so to did LLVM. Eventually, the LLVM code base migrated to requiring C++/11
44
47
support in the language to build. This became an issue for the C++/CLI wrapper as the
45
-
Microsoft C++/CLI compiler didn't support the C++11 syntax. Thus a change was made to
46
-
Ubiquity.NET.Llvm to move to an extended C API with a C# adapter layer to provide the full
47
-
experience .NET developers expect. While the transition was a tedious one very little
48
-
application code required changes. LLVM and Ubiquity.NET.Llvm have continued to progress and
49
-
Ubiquity.NET.Llvm is currently based on LLVM 20.1.x.
48
+
Microsoft C++/CLI compiler didn't support the `C++11` syntax. Thus, a change was made to
49
+
`Ubiquity.NET.Llvm` to move to an extended C API with a C# adapter layer to provide the full
50
+
experience .NET developers expect. While the transition was a tedious one, very little
51
+
application code required changes. LLVM and `Ubiquity.NET.Llvm` have continued to progress
52
+
and `Ubiquity.NET.Llvm` is currently based on LLVM 20.1.x.
50
53
51
54
There are a few major goals of the current release that required breaking changes:
52
55
1) AOT compilation of applications leveraging this library
53
-
- While this goal is not yet fully realized many steps were taken to aid in getting
54
-
there.
55
56
2) Platform independence
56
-
- Again, not fully realized yet but many steps were taken to aid in getting there.
57
+
- Not fully realized in this release yet but many steps were taken to aid in getting
58
+
there.
57
59
* The largest impediment is the massive resource requirements of building the native
58
60
LLVM libraries for a given runtime. Building them runs afoul of the limitations of
59
61
every available OSS not to mention exceeding the size of a NUGET package to host
@@ -72,16 +74,16 @@ package is built for the "AnyCPU" platform and references the Ubiquity.NET.Llvm.
72
74
package to bring in the native binary support. Ubiquity.NET.Llvm.Interop contains code to
73
75
dynamically detect the platform it is running on and load the appropriate native library.
74
76
This allows applications to build for AnyCPU without creating multiple build configurations
75
-
and release vehicles for applications. (Any new platforms would need to update the dynamic
76
-
loading support and include the appropriate P/Invokable binaries - consuming apps would not
77
-
need to change except to pick up a new package version.)
77
+
and release vehicles for applications. Any new platforms would need to update the dynamic
78
+
loading support and include the appropriate P/Invokable binaries. Consuming apps would not
79
+
need to change except to pick up a new package version.
78
80
79
81
### CI Build NuGet Packages
80
-
The CI Builds of the NuGet package built from the latest source in the master branch are
81
-
available as build artifacts from the build. Unfortunately with an all GitHub build via
82
-
GitHub Actions we don't have a good story for accessing the packages from unreleased
83
-
automated CI builds. While GitHub does support a package registry (GPR), it really doesn't
84
-
meet the needs of CI builds. In particular:
82
+
The CI Builds of the NuGet package built from the latest source in the `develop` branch are
83
+
available as build artifacts. Unfortunately with an all GitHub build via GitHub Actions we
84
+
don't have a good story for accessing the packages from unreleased automated CI builds.
85
+
While GitHub does support a package registry (GPR), it really doesn't meet the needs of CI
86
+
builds. In particular:
85
87
* GPR Doesn't support deletion of older CI build packages (Cluttering the feed)
86
88
* GPR requires complex login/Tokens just to get packages from the feed, despite being a
87
89
public repository...
@@ -92,7 +94,8 @@ used for publishing releases. (Official NuGet will serve that role for releases)
92
94
and PR build packages are available as artifacts from the GitHub actions that build them.
93
95
94
96
### API Documentation
95
-
The full API documentation on using Ubiquity.NET.Llvm is available on the [Ubiquity.NET.Llvm documentation site](https://ubiquitydotnet.github.io/Llvm.NET/).
97
+
The full API documentation on using Ubiquity.NET.Llvm is available on the
0 commit comments