This is the reference manual for building and developing Spoofax, as well as information about its internals.
Spoofax is the integration of many different tools, compilers, (meta-)languages, (meta-)libraries, and runtime components. This integration is made concrete in the spoofax-releng Git repository on GitHub. This repository contains all components via Git submodules, which are updated by our build farm that builds Spoofax whenever one of its components in a submodule changes.
Spoofax currently contains the following subcomponents as submodules:
releng- Release engineering scripts for managing and building the spoofax-releng repostory.
- Java libraries and runtimes
mb-rep— Libraries for program representation such as abstract terms
mb-exec— Stratego interpreter and utilities
jsglr— JSGLR parser
spoofax— Spoofax Core, a cross platform API to Spoofax languages
spoofax-maven— Maven integration for Spoofax Core
spoofax-sunshine— Command-line integration for Spoofax Core
spoofax-eclipse— Eclipse plugin for Spoofax Core
spoofax-intellij— IntelliJ plugin for Spoofax Core
- Meta-languages and libraries
esv— Editor service language
sdf— Syntax Definition Formalisms, containing the SDF2 and SDF 3 languages
strategoxt— Stratego compiler, runtime, and editor
nabl— Name binding languages, containing the NaBL and NaBL2 languages, and support libraries for NaBL2
ts— Type system language
dynsem— Dynamic semantics language
metaborg-coq— Coq signatures and syntax definition
spt— Spoofax testing language
runtime-libraries— NaBL support libraries, incremental task engine for incremental name and type analysis
Furthermore, this repository contains a Bash script
./b that redirects into the Python release engineering scripts in the
releng submodule. These scripts support managing this Git repository, version management, generation of Eclipse instances, building Spoofax, and releasing new versions of Spoofax.
The following how-tos explain how to set up Maven and other required tools for building and developing Spoofax, how to build and develop Spoofax, how to write this documentation, and explains some of the internals of Spoofax components.