SPeCS Packages Documentation
    Preparing search index...

    Module @specs-feup/clava - v3.5.1

    Clava-JS

    Clava source-to-source compiler running on top of Node.js.

    Current version only works on Node 20 and 22.

    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.

    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/liveness/LivenessAnalyser
    clava/liveness/LivenessAnalysis
    clava/liveness/LivenessUtils
    clava/MathExtra
    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
    core
    Joinpoints
    lara/benchmark/ClavaBenchmarkInstance
    lara/code/Energy
    lara/code/Logger
    lara/code/Timer
    lara/metrics/EnergyMetric
    lara/metrics/ExecutionTimeMetric
    weaver/WeaverLauncher