Files
langkit/README.md

133 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

Langkit
=======
Langkit (nickname for language kit) is a tool whose purpose is to make it easy
to create syntactic and semantic analysis engines. Write a language
specification in our Python DSL and Langkit will generate for you an Ada
library with bindings for the C and Python programming languages.
The generated library is meant to provide a basis to write tooling, including
tools working on potentially changing and incorrect code, such as IDEs.
The currently main Langkit user is
[Libadalang](https://github.com/AdaCore/libadalang), a high performance
semantic engine for the Ada programming language.
Dependencies
------------
2020-06-01 18:34:53 +02:00
To use Langkit, you will need:
* A Python 3.11 interpreter (or more recent). Python2 is no longer supported.
* Some Python libraries, including the Mako template system for Python (see
`requirements-pypi.txt` and `requirements-github.txt` for the full list).
2020-06-01 18:34:53 +02:00
* A recent version of the GNAT Ada compiler, either from your OS's packages, or
use [Alire](https://alire.ada.dev/docs/#toolchain-management) to get one.
2020-06-01 18:34:53 +02:00
* The [gnatcoll-core](https://github.com/AdaCore/gnatcoll-core) library.
* Ada bindings for GMP and Libiconv, from
[gnatcoll-bindings](https://github.com/AdaCore/gnatcoll-bindings).
* The [VSS](https://github.com/AdaCore/VSS) library.
* The [Prettier-Ada](https://github.com/AdaCore/prettier-ada) library.
* The [AdaSAT](https://github.com/AdaCore/adasat) library.
For all Ada libraries (GNATcoll, VSS, Prettier-Ada, AdaSAT), make sure to
install the version that corresponds to the version of Langkit that is built.
For instance, build all `24.1` branches, or all `master` branches. Mixing
versions is not supported.
Install
-------
We assume below that all the Ada dependencies are installed under the
2025-02-19 14:10:56 +01:00
`$PREFIX` directory, and that the environment is properly set up to use it:
2025-02-19 14:10:56 +01:00
* GPRbuild has access to project files (`$PREFIX/share/gpr` is in
`GPR_PROJECT_PATH`, for example).
2025-02-19 14:10:56 +01:00
* The dynamic linker has access to shared libraries (`$PREFIX/lib` is in
`LD_LIBRARY_PATH`, for exmaple).
First, clone the `adasat` repository in the `langkit` subdirectory of the
`langkit` repository:
$ (cd langkit; git clone https://github.com/AdaCore/adasat)
Then, install the Langkit Python package itself:
$ pip install .
Build the Liblktlang support library:
$ python manage.py make --no-mypy --library-types=static,static-pic,relocatable
2020-06-01 18:34:53 +02:00
Install the `Langkit_Support` library:
$ python manage.py install-langkit-support $PREFIX --library-types=static,static-pic,relocatable
Install the Liblktlang support library:
$ python -m langkit.scripts.lkm install -c lkt/langkit.yaml $PREFIX --library-types=static,static-pic,relocatable --disable-all-mains
$ pip install lkt/build/python
If you are interested in shared (`relocatable`) libraries only, you can omit
the `--library-types` arguments.
2020-06-01 18:34:53 +02:00
Testing
-------
In order to run the testsuite, launch the following command from the top-level
directory:
$ python manage.py test
2020-06-01 18:34:53 +02:00
This is just a wrapper passing convenient options to the real testsuite
driver that is in `testsuite/testsuite.py`.
Note that even though the testsuite framework requires Python 3.11, it is
possible to run the tests themselves using a different Python interpreter. For
instance, to run them using Python 3.7, run:
$ python manage.py test --with-python=python3.7
If you want to learn more about this test driver's options (for instance to run
tests under Valgrind), add a `-h` flag.
Documentation
-------------
The developer and user's documentation for Langkit is in `langkit/doc`. You can
consult it as a text files or you can build it. For instance, to generate HTML
documents, run from the top directory:
2021-11-06 17:38:32 +01:00
$ make -C doc html
And then open the following file in your favorite browser:
2021-11-06 17:38:32 +01:00
doc/_build/html/index.html
Bootstrapping a new language engine
-----------------------------------
Nothing is more simple than getting an initial project skeleton to work on a
new language engine. Imagine you want to create an engine for the Foo language,
run from the top-level directory:
$ python -m langkit.scripts.create_project Foo
This creates a `langkit.yaml` configuration file in the current directory as
well as a `foo` directory with Lkt sources for a minimal lexer and parser, that
you can build with:
$ python -m langkit.scripts.lkm make
Here you are!
Developer tools
---------------
Langkit uses mako templates generating Ada, C and Python code. This can be hard
to read. To ease development, Vim syntax files are available under the `utils`
directory (see `makoada.vim`, `makocpp.vim`). Install them in your
`$HOME/.vim/syntax` directory to get automatic highlighting of the template
files.