@specs-feup/clava
Version:
A C/C++ source-to-source compiler written in Typescript
109 lines (76 loc) • 2.63 kB
Markdown
# Clava-JS
Clava source-to-source compiler running on top of Node.js.
Current version only works on Node 18 and 20.
To test Clava-JS you can try the [Clava project template](https://github.com/specs-feup/clava-project-template).
## Installing dev environment
Execute the following commands to build Clava-JS in a folder called `workspace`:
```bash
mkdir workspace
cd workspace
touch package.json
git clone https://github.com/specs-feup/specs-java-libs.git
git clone https://github.com/specs-feup/lara-framework.git
git clone https://github.com/specs-feup/clava.git
```
In the `workspace` directory, edit the `package.json` file and add the following:
```json
{
"type": "module",
"workspaces": [
"clava/Clava-JS",
"lara-framework/Lara-JS"
]
}
```
Starting from the `workspace` directory, execute the following commands to build Clava-JS:
```bash
npm install
npm run build -w lara-framework/Lara-JS
npm run build -w clava/Clava-JS
npm install
cd clava/ClavaWeaver
gradle installDist
cd ../..
```
Finally, copy the JARs in the folder `./clava/ClavaWeaver/build/install/ClavaWeaver/lib` into a new folder called java-binaries in `./clava/Clava-JS`:
```bash
mkdir clava/Clava-JS/java-binaries
cp -r ./clava/ClavaWeaver/build/install/ClavaWeaver/lib ./clava/Clava-JS/java-binaries
```
Install the package globally:
```bash
npm install -g @specs-feup/clava
```
It should now be available as a command in the terminal:
```bash
npx clava classic <your CLI options, pass a non-existing flag, such as -dummy, to check the options>
```
If you want to reflect local changes in Clava-JS (or Lara-JS) in the installed command, use the `link` option:
```bash
npm link @specs-feup/clava
```
## Executing Clava-JS
You can execute Clava-JS by running the following on your terminal
```bash
npx clava classic <scriptfile.js> -p "<c++ files or folders>"
```
Additionally, if you would like to see the help menu
```bash
npx clava --help
```
or run in watch mode
```bash
npx clava classic <scriptfile.js> -w <directory/file to watch> -c <clava config file>
```
To create a Clava config file, launch the Java-based GUI:
```bash
./clava/ClavaWeaver/build/install/ClavaWeaver/bin/ClavaWeaver
```
## Debugging
You can get debugging information using a `DEBUG` environment variable.
This variable is used by the [debug](https://www.npmjs.com/package/debug) module to determine what to expose.
```bash
DEBUG="*" npx clava classic <scriptfile.js> <your CLI options>
```
## CMake
Clava has a [CMake package](https://github.com/specs-feup/clava/tree/staging/CMake), check the link for more details on how to use it.