emlai / ts-llvm

TypeScript to LLVM compiler (abandoned)
MIT License
284 stars 20 forks source link
aot compiler javascript llvm llvm-compiler llvm-node native typescript typescript-compiler

Notice: This project is not being actively worked on. If you're interested to pick it up, let me know. See #12.

ts-llvm Build Status

ts-llvm is a compiler for TypeScript that generates LLVM code, which can then be optimized using all existing LLVM optimizations, and converted further into e.g. native code, WebAssembly, or JavaScript (using emscripten).

It uses the TypeScript Compiler API to parse and typecheck the input TypeScript code. The resulting TypeScript AST is transformed into LLVM IR using the llvm-node bindings. ts-llvm also provides a runtime library written in C++ that implements native replacements for built-in TypeScript APIs such as console.log.

ts-llvm is still in very early stages of development. For example, it cannot yet compile most TypeScript programs and it doesn't yet do any garbage collection. If you're willing to contribute, any help will be greatly appreciated. For questions you can create a GitHub issue or ask on the ts-llvm Slack.

Check out the language features roadmap and the standard library roadmap to see what has been implemented so far, and what still needs to be implemented for the v1.0 release.

Goals

Related projects

Building from source

  1. You need to have LLVM installed on your system.
  2. Run npm install to install other dependencies. If llvm-config is not on your PATH, you may need to tell llvm-node where to find LLVM on your system, e.g. by running npm config set cmake_LLVM_DIR $(path-to-llvm/bin/llvm-config --cmakedir) before npm install.
  3. If you want ts-llvm to generate native code, you need to have llc and g++ (any C++ compiler) on your PATH. llc will not be required once llvm-node gains support for the LLVM legacy PassManager and addPassesToEmitFile APIs. g++ will not be required once ts-llvm learns to detect the system C++ compiler on its own.

Once everything above is set up, you can use the following commands:

License

ts-llvm is licensed under the MIT license.