An open API service indexing awesome lists of open source software.

https://github.com/mllif/mllif-project

MLLIF is a MLIR based Language to Language Interoperability Flyover - with a goal to integrate API of all programming languages.
https://github.com/mllif/mllif-project

clang clang-frontend clang-plugin clangir interop interoperability llvm llvm-clang mlir

Last synced: 7 months ago
JSON representation

MLLIF is a MLIR based Language to Language Interoperability Flyover - with a goal to integrate API of all programming languages.

Awesome Lists containing this project

README

          

# 🎉 Welcome to MLLIF!

***MLLIF*** is a MLIR-based Language-to-Language Interoperability Flyover -
with a goal to integrate API of all programming languages.

For details, See [docs](https://mllif.sharp0802.com)!

## 📈 Currently...

| | Frontend | Backend |
|:---:|:--------:|:-------:|
| C | ⚗️ | 📌 |
| C++ | ⚗️ | ⚗️ |
| C# | ⚗️ | ⚗️ |

- ✅ : Implemented, tested enough
- ⚗️ : Implemented, but in experimental state
- 🦺 : Working in progress
- 📌 : Planned

## 📦 Dependencies

| | Origin | Tested on |
|:--------------------:|:---------------------------------:|:----------------:|
| LLVM/Clang (ClangIR) | https://github.com/llvm/clangir | git (2025-01-18) |
| RapidXML | https://rapidxml.sourceforge.net/ | 1.13 |

* **Tested on *git*** means it tested with submodule or local-clone of master branch of it

## 🧐 Briefly, How does this work?

> [!WARNING]
> Currently, CMake script supports clang-based languages only
> because this method depends on `mllif-cir`.
> For details, See [docs](https://mllif.sharp0802.com).

You can use CMake function `add_mllif_library` in `cmake/UseMLLIF.cmake`:

```cmake
add_mllif_library( ...)
```

as:

```cmake
add_mllif_library(my-project CXX main.cxx foo.cxx)
```

> [!NOTE]
> language should be language identifier in CMake

It generates platform-dependent shared-object file with MSM file
(MLLIF-symbol-model; it's just XML :P).

Let's assume target created with this command uses language ***'A'***.
Bridge from host-language (***B***) to servant-language (***A***) involves from this MSM file.
Then, with FFI in each language, runtime of ***B*** calls bridge between ***A*** and ***B***.
And that bridge calls runtime of ***A*** (created shared-object).

By this approach, Each language can call each other in single process,
without any additional communication technics (such as TCP, Unix socket, shared memory, etc...).

For details, See [docs](https://mllif.sharp0802.com)!