We use gradle to build the compiler. It comes with a wrapper script (gradlew or gradlew.bat in
the root of the repository) which downloads appropriate version of gradle
automatically as long as you have JDK (version >= 11) installed.
All gradle tasks are case-insensitive.
| Command | Description |
|---|---|
./gradlew :cli:jarDep |
build a jar file which includes all the dependencies which can be found at cli/build/libs.A short-hand version of this task is ./gradlew jarDep. |
./gradlew :cli:copyJarDep |
build jarDep and copy it to the current directory.A short-hand version of this task is ./gradlew copyJarDep. |
./gradlew :api:assemble |
build Arend extension API jar which can be found at api/build/libs. |
./gradlew test |
run all tests. |
On Windows, you may replace ./gradlew with gradlew.
To see the command line options of the application, run java -jar cli-[version]-full.jar --help
after running the jarDep task.
Here's an instruction on how to work with gradle projects in IntelliJ IDEA.
You may also need the following plugins:
- Gradle and Groovy -- bundled plugins, needed for building the project
- ANTLR v4 grammar for editing the parser
- Protobuf for editing the serialized protobuf
- Kotlin for editing the build scripts
- Arend for editing Arend code
Arend is split into several subprojects:
| Subproject | Description |
|---|---|
buildSrc |
built before the project is built. This subproject runs the ANTLR parser generator. |
parser |
the generated ANTLR parser (the generation is done in buildSrc) |
proto |
generated protobuf classes. |
api |
open API for writing Arend extensions. |
base |
the Arend typechecker. It depends on api, proto. |
cli |
the CLI frontend of Arend with the ANTLR parser. It depends on base, parser, api, proto. |
The purpose of parser is to avoid introducing the dependency of the ANTLR
generator to other subprojects which only requires
the generated parser along with a small ANTLR runtime
(since it's a dependency of buildSrc instead of parser).
The root project contains all the tests,
and it depends on project cli.
The tests are based on JUnit 4.
If you want to move tests to a separate subproject, we wish you good luck.