Module @specs-feup/clava - v3.0.8

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.

Execute the following commands to build Clava-JS in a folder called workspace:

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:

{
"type": "module",
"workspaces": [
"clava/Clava-JS",
"lara-framework/Lara-JS"
]
}

Starting from the workspace directory, execute the following commands to build Clava-JS:

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:

mkdir clava/Clava-JS/java-binaries
cp -r ./clava/ClavaWeaver/build/install/ClavaWeaver/lib ./clava/Clava-JS/java-binaries

Install the package globally:

npm install -g @specs-feup/clava

It should now be available as a command in the terminal:

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:

npm link @specs-feup/clava

You can execute Clava-JS by running the following on your terminal

npx clava classic <scriptfile.js> -p "<c++ files or folders>"

Additionally, if you would like to see the help menu

npx clava --help

or run in watch mode

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:

./clava/ClavaWeaver/build/install/ClavaWeaver/bin/ClavaWeaver

You can get debugging information using a DEBUG environment variable. This variable is used by the debug module to determine what to expose.

DEBUG="*" npx clava classic <scriptfile.js> <your CLI options>

Clava has a CMake package, check the link for more details on how to use it.

Index

Modules

clava/analysis/Analyser clava/analysis/AnalyserResult clava/analysis/analysers/BoundsAnalyser clava/analysis/analysers/BoundsResult clava/analysis/analysers/DoubleFreeAnalyser clava/analysis/analysers/DoubleFreeResult clava/analysis/CheckBasedAnalyser clava/analysis/Checker clava/analysis/checkers/ChgrpChecker clava/analysis/checkers/ChmodChecker clava/analysis/checkers/ChownChecker clava/analysis/checkers/CinChecker clava/analysis/checkers/ExecChecker clava/analysis/checkers/FprintfChecker clava/analysis/checkers/FscanfChecker clava/analysis/checkers/GetsChecker clava/analysis/checkers/LambdaChecker clava/analysis/checkers/MemcpyChecker clava/analysis/checkers/PrintfChecker clava/analysis/checkers/ScanfChecker clava/analysis/checkers/SprintfChecker clava/analysis/checkers/StrcatChecker clava/analysis/checkers/StrcpyChecker clava/analysis/checkers/SyslogChecker clava/analysis/checkers/SystemChecker clava/analysis/CheckResult clava/analysis/Fix clava/analysis/MessageGenerator clava/analysis/ResultFormatManager clava/analysis/ResultList clava/Clava clava/ClavaCode clava/ClavaJavaTypes clava/ClavaJoinPoints clava/ClavaType clava/cmake/CMaker clava/cmake/CMakerSources clava/cmake/CMakerUtils clava/cmake/compilers/CMakeCompiler clava/cmake/compilers/GenericCMakeCompiler clava/code/DecomposeResult clava/code/DoToWhileStmt clava/code/ForToWhileStmt clava/code/GlobalVariable clava/code/Inliner clava/code/Outliner clava/code/RemoveShadowing clava/code/SimplifyAssignment clava/code/SimplifyTernaryOp clava/code/StatementDecomposer clava/Format clava/gprofer/Gprofer clava/graphs/cfg/CfgBuilder clava/graphs/cfg/CfgEdge clava/graphs/cfg/CfgEdgeType clava/graphs/cfg/CfgNodeData clava/graphs/cfg/CfgNodeType clava/graphs/cfg/CfgUtils clava/graphs/cfg/NextCfgNode clava/graphs/cfg/nodedata/CaseData clava/graphs/cfg/nodedata/DataFactory clava/graphs/cfg/nodedata/GotoData clava/graphs/cfg/nodedata/HeaderData clava/graphs/cfg/nodedata/IfData clava/graphs/cfg/nodedata/InstListNodeData clava/graphs/cfg/nodedata/LabelData clava/graphs/cfg/nodedata/LoopData clava/graphs/cfg/nodedata/ReturnData clava/graphs/cfg/nodedata/ScopeNodeData clava/graphs/cfg/nodedata/SwitchData clava/graphs/ControlFlowGraph clava/graphs/scg/ScgEdgeData clava/graphs/scg/ScgNodeData clava/graphs/scg/StaticCallGraphBuilder clava/graphs/StaticCallGraph clava/hdf5/Hdf5 clava/hls/HLSAnalysis clava/hls/MathAnalysis clava/hls/MathHInfo clava/hls/TraceInstrumentation clava/liveness/LivenessAnalyser clava/liveness/LivenessAnalysis clava/liveness/LivenessUtils clava/MathExtra clava/memoi/_MemoiGenHelper clava/memoi/MemoiAnalysis clava/memoi/MemoiGen clava/memoi/MemoiProf clava/memoi/MemoiTarget clava/memoi/MemoiUtils clava/mpi/MpiAccessPattern clava/mpi/MpiScatterGatherLoop clava/mpi/MpiUtils clava/mpi/patterns/IterationVariablePattern clava/mpi/patterns/MpiAccessPatterns clava/mpi/patterns/ScalarPattern clava/opencl/KernelReplacer clava/opencl/KernelReplacerAuto clava/opencl/OpenCLCall clava/opencl/OpenCLCallVariables clava/opt/Inlining clava/opt/NormalizeToSubset clava/opt/PrepareForInlining clava/parser/BatchParser clava/pass/DecomposeDeclStmt clava/pass/DecomposeVarDeclarations clava/pass/LocalStaticToGlobal clava/pass/SimplifyLoops clava/pass/SimplifyReturnStmts clava/pass/SimplifySelectionStmts clava/pass/SingleReturnFunction clava/pass/TransformSwitchToIf clava/stats/OpsBlock clava/stats/OpsCost clava/stats/OpsCounter clava/stats/StaticOpsCounter clava/util/ClavaDataStore clava/util/CodeInserter clava/util/FileIterator clava/vitishls/VitisHls clava/vitishls/VitisHlsReportParser clava/vitishls/VitisHlsUtils core Joinpoints lara/benchmark/ClavaBenchmarkInstance lara/code/Energy lara/code/Logger lara/code/Timer lara/metrics/EnergyMetric lara/metrics/ExecutionTimeMetric weaver/WeaverLauncher