| How To Use The Cogent Compiler | |
| ============================== | |
| Command-line Arguments | |
| ------------------------------------ | |
| The Cogent compiler accepts | |
| a large number of command-line arguments, | |
| which are either *commands*, | |
| directing the compiler to produce particular outputs, | |
| or *flags*, | |
| influencing the compiler's behaviour as it works. | |
| .. comment: | |
| In typical use, | |
| only a small number of the commands and flags are used, | |
| the most common of which | |
| (and those listed by ``--help`` by default) are: | |
| --parse \ | |
| parse Cogent source code | |
| -t, --typecheck \ | |
| typecheck surface program | |
| -d, --desugar \ | |
| desugar surface program and re-type it | |
| --normal \ | |
| normalise core language and re-type it | |
| --mono \ | |
| monomorphise core language and re-type it | |
| -g, --code-gen \ | |
| generate C code | |
| --build-info \ | |
| log how cogent is being invoked by generating BUILD_INFO file; | |
| implied by any collective commands | |
| -C, --c-refinement \ | |
| [COLLECTIVE] generate all files needed for the C refinement proof | |
| -F, --functional-correctness \ | |
| [COLLECTIVE] generate all files needed for the functional correctness proof | |
| -A, --all \ | |
| [COLLECTIVE] generate everything | |
| --libgum-dir \ | |
| display directory where standard gum headers are installed | |
| (can be set by COGENT_LIBGUM_DIR environment variable) | |
| -h, --help \ | |
| display help message; | |
| optionally including a verbosity from 0 to 4, defaulting to 1 | |
| -v, -V, --version \ | |
| show the Cogent compiler's version number | |
| -O LEVEL, --optimisation=LEVEL \ | |
| set optimisation level (0, 1, 2, d, n, s or u; default -Od) | |
| .. highlight:: bash | |
| A typical invocation might be:: | |
| $ cogent -g -o generated \ | |
| --infer-c-funcs=main.ac \ | |
| --infer-c-types=abstract/Grid.ah \ | |
| mandelbrot.cogent | |
| Commands | |
| ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| --ast-c \ | |
| parse C file with Cogent antiquotation and print AST | |
| --stack-usage=FILE \ | |
| parse a stack usage ``.su`` file generated by gcc; ``FILE`` optional | |
| --parse \ | |
| parse Cogent source code | |
| -t, --typecheck \ | |
| typecheck surface program | |
| -d, --desugar \ | |
| desugar surface program and re-type it | |
| --normal \ | |
| normalise core language and re-type it | |
| --simplify \ | |
| simplify core language and re-type it | |
| --mono \ | |
| monomorphise core language and re-type it | |
| -g, --code-gen \ | |
| generate C code | |
| --ast-parse \ | |
| display surface language AST | |
| --ast-tc \ | |
| display type-checked surface language AST | |
| --ast-desugar \ | |
| display desugared core language AST | |
| --ast-normal \ | |
| display normalised core language AST | |
| --ast-simpl \ | |
| display simplified core language AST | |
| --ast-mono \ | |
| display monomorphised core language AST | |
| -i, --repl \ | |
| run Cogent REPL | |
| --docgent \ | |
| generate HTML documentation from Docgent comments; | |
| must be enabled at Cogent compile time | |
| --pretty-parse \ | |
| pretty-print surface language | |
| -T, --pretty-tc \ | |
| pretty-print type-checked surface language | |
| -D, --pretty-desugar \ | |
| pretty-print desugared core language | |
| --pretty-normal \ | |
| pretty-print normalised core language | |
| --pretty-simpl \ | |
| pretty-print simplified core language | |
| --pretty-mono \ | |
| pretty-print monomorphised core language | |
| --hs-shallow-desugar \ | |
| generate Haskell shallow embedding (desugared core) | |
| --hs-shallow-desugar-tuples \ | |
| generate Haskell shallow embedding (desugared core, with Haskell tuples) | |
| --hs-ffi \ | |
| generate Haskell FFI code to access generated C code | |
| (including a ``.hsc`` module for types | |
| and a ``.hs`` module for functions) | |
| --deep-desugar \ | |
| generate Isabelle deep embedding (desugared core) | |
| --deep-normal \ | |
| generate Isabelle deep embedding (normalised core) | |
| --deep-mono \ | |
| generate Isabelle deep embedding (monomorphised core) | |
| --shallow-desugar \ | |
| generate Isabelle shallow embedding (desugared core) | |
| --shallow-normal \ | |
| generate Isabelle shallow embedding (normalised core) | |
| --shallow-mono \ | |
| generate Isabelle shallow embedding (monomorphised core) | |
| --shallow-desugar-tuples \ | |
| enerate Isabelle shallow embedding (desugared core, with HOL tuples) | |
| --scorres-desugar \ | |
| generate scorres (desugared core) | |
| --scorres-normal \ | |
| generate scorres (normalised core) | |
| --scorres-mono \ | |
| generate scorres (monomorphised core) | |
| --shallow-consts-desugar \ | |
| generate constant definitions for shallow embedding (desugared core) | |
| --shallow-consts-normal \ | |
| generate constant definitions for shallow embedding (normalised core) | |
| --shallow-consts-mono \ | |
| generate constant definitions for shallow embedding (monomorphised core) | |
| --shallow-consts-desugar-tuples \ | |
| generate constant definitions for shallow embedding (desugared core, with HOL tuples) | |
| --shallow-tuples-proof \ | |
| generate proof for shallow tuples embedding | |
| --normal-proof \ | |
| generate Isabelle proof of normalisation | |
| --mono-proof \ | |
| generate monomorphisation proof | |
| --ac-install \ | |
| generate an Isabelle theory to install AutoCorres | |
| --corres-setup \ | |
| generate Isabelle lemmas for c-refinement | |
| --corres-proof \ | |
| generate Isabelle proof of c-refinement | |
| --type-proof-normal \ | |
| generate Isabelle proof of type correctness of normalised AST | |
| --type-proof \ | |
| generate Isabelle proof of type correctness of normal-mono AST | |
| --all-refine \ | |
| generate shallow-to-C refinement proof (*collective*) | |
| --root \ | |
| generate an Isabelle ROOT file | |
| --table-c-types \ | |
| generate a table of Cogent and C type correspondence | |
| --table-shallow \ | |
| generate a table of type synonyms for shallow embedding | |
| --table-abs-func-mono \ | |
| generate a table of monomorphised abstract functions | |
| --table-abs-type-mono \ | |
| generate a table of monomorphised abstract types | |
| -G, --graph-gen \ | |
| generate graph for graph-refine | |
| --build-info \ | |
| log how cogent is being invoked by generating ``BUILD_INFO`` file; | |
| implied by any collective commands | |
| -C, --c-refinement \ | |
| generate all files needed for the C refinement proof (*collective*) | |
| -F, --functional-correctness \ | |
| generate all files needed for the functional correctness proof (*collective*) | |
| -A, --all \ | |
| generate all possible outputs (*collective*) | |
| -Q, --quickcheck \ | |
| generate QuickCheck related artifacts (*collective*) | |
| --libgum-dir \ | |
| display directory where standard gum headers are installed | |
| (can be set by the ``$COGENT_LIBGUM_DIR`` environment variable) | |
| -v, -V, --version \ | |
| show version number | |
| All Flags | |
| ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| -o NAME, --output-name=NAME \ | |
| specify base name for output files; | |
| by default, derived from name of source Cogent file | |
| --proof-name=NAME \ | |
| specify Isabelle theory file name; | |
| by default, derived from name of source Cogent file | |
| --abs-type-dir=PATH \ | |
| abstract type definitions will be in ``PATH/abstract/``, | |
| which must exist (default is ``./``) | |
| --dist-dir=PATH \ | |
| specify path to all output files (default is ``./``) | |
| --fake-header-dir=PATH \ | |
| specify path to fake C header files | |
| --root-dir=PATH \ | |
| specify path to top-level directory (for imports in theory files only, default is ``./``) | |
| --cust-ty-gen=FILE \ | |
| config file to customise type generation | |
| --entry-funcs=FILE \ | |
| give a list of Cogent functions that are only called from outside | |
| --ext-types=FILE \ | |
| give external type names to C parser | |
| --infer-c-funcs=FILE \ | |
| infer Cogent abstract function definitions | |
| (can be specified multiple times) | |
| --infer-c-types=FILE \ | |
| infer Cogent abstract type definitions | |
| (can be specified multiple times) | |
| --name-cache=FILE \ | |
| specify the name cache file to use | |
| --proof-input-c=FILE \ | |
| specify input C file to generate proofs; | |
| defaults to the same base name as input Cogent file | |
| --prune-call-graph=FILE \ | |
| specify Cogent entry-point definitions | |
| --cogent-pp-args=ARG \ | |
| arguments given to Cogent preprocessor | |
| (same as for cpphs; can be specified multiple times) | |
| --cpp=PROG \ | |
| set which C-preprocessor to use (default to ``cpp``) | |
| --cpp-args=ARG \ | |
| arguments given to C-preprocessor (default to ``$CPPIN -P -o $CPPOUT``) | |
| --ddump-smt \ | |
| dump verbose SMT-solving information | |
| --ddump-tc \ | |
| dump (massive) surface typechecking internals | |
| --ddump-tc-ctx \ | |
| dump surface typechecking with context | |
| --ddump-tc-filter=KEYWORDS \ | |
| a space-separated list of keywords to indicate | |
| which groups of info to display; | |
| possible keywords are ``gen``, ``sol``, ``post``, ``tc`` | |
| --ddump-to-file=FILE \ | |
| dump debugging output to specific file instead of terminal | |
| --ddump-pretty-ds-no-tc \ | |
| dump the pretty printed desugared expression before typechecking | |
| --fcheck-undefined, --fno-check-undefined \ | |
| check for undefined behaviours in C (default enabled) | |
| -B, --fdisambiguate-pp \ | |
| when pretty-printing, also display internal representation as comments | |
| --fffi-c-functions \ | |
| generate FFI functions in the C code | |
| (should be used when ``-Q``/``--quickcheck`` is specified) | |
| --fflatten-nestings, --fno-flatten-nestings \ | |
| flatten out nested structs in C code (does nothing; default is disabled) | |
| --ffncall-as-macro, --fno-fncall-as-macro \ | |
| generate macros instead of real function calls (default is disabled) | |
| --ffull-src-path \ | |
| display full path for source file locations | |
| --ffunc-purity-attr, --fno-func-purity-attr \ | |
| generate GCC attributes to classify purity of Cogent functions (default is enabled) | |
| --fgen-header, --fno-gen-header \ | |
| generate build info header in all output files (default is disabled) | |
| --fintermediate-vars, --fno-intermediate-vars \ | |
| generate intermediate variables for Cogent expressions (default is enabled) | |
| --flax-take-put, --fno-lax-take-put \ | |
| allow take/put type operators on abstract datatypes (default is disabled) | |
| --flet-in-if, --fno-let-in-if \ | |
| put binding of a ``let`` inside an ``if``\ -clause (default is enabled) | |
| --fletbang-in-if, --fno-letbang-in-if \ | |
| put binding of a ``let!`` inside an ``if``\ -clause (default is enabled) | |
| --fml-typing-tree, --fno-ml-typing-tree \ | |
| generate ML typing tree in type proofs (default is enabled) | |
| --fnormalisation=NF, --fno-normalisation \ | |
| normalise (or don't normalise) the core language | |
| to the *NF* normal form, | |
| which may be ``anf``, ``knf``, or ``lnf``; | |
| the default is to normalise to ``anf`` | |
| --fpragmas, --fno-pragmas \ | |
| preprocess pragmas (default is enabled) | |
| --fpretty-errmsgs, --fno-pretty-errmsgs \ | |
| enable/disable pretty-printing of error messages | |
| (requires ANSI support; default is enabled) | |
| --freverse-tc-errors, --fno-reverse-tc-errors \ | |
| reverse the order of type errors printed | |
| --fshare-linear-vars, --fno-share-linear-vars \ | |
| reuse C variables for linear objects (default is disabled) | |
| --fshow-types-in-pretty, --fno-show-types-in-pretty \ | |
| show inferred types of each AST node | |
| when doing pretty-printing (default is disabled) | |
| --fsimplifier, --fno-simplifier \ | |
| enable or disabled simplifier on core language (default is disabled) | |
| --fsimplifier-level=NUMBER \ | |
| number of iterations simplifier does | |
| (default is 4; no effect if simplifier disabled) | |
| --fstatic-inline, --fno-static-inline \ | |
| mark generated C functions as ``static inline`` (default is enabled) | |
| --ftuples-as-sugar, --fno-tuples-as-sugar \ | |
| treat tuples as syntactic sugar to unboxed records, | |
| which gives better performance; or don't | |
| (default is enabled) | |
| --ftc-ctx-constraints, --fno-tc-ctx-constraints \ | |
| display (or don't display) constraints in type errors (default is disabled) | |
| --ftc-ctx-len=NUMBER \ | |
| set the depth for printing error context in typechecker (default is 3) | |
| --ftp-with-bodies, --fno-tp-with-bodies \ | |
| generate type proof with bodies (default is enabled) | |
| --ftp-with-decls, --fno-typ-with-decls \ | |
| generate type proof with declarations (default is enabled) | |
| --funion-for-variants, --fno-union-for-variants \ | |
| use union types for variants in C code; | |
| this cannot be verified (default is disabled) | |
| --funtyped-func-enum, --fno-untyped-func-enum \ | |
| use untyped function ``enum`` type (default is enabled) | |
| --fuse-compound-literals, --fno-use-compound-literals \ | |
| use compound literals when possible in C code; | |
| otherwise, create new variables | |
| (default is enabled) | |
| --fwrap-put-in-let, --fno-wrap-put-in-let \ | |
| ``Put`` always appears in a ``Let``-binding when normalised | |
| (default is disabled) | |
| -O LEVEL, --optimisation=LEVEL \ | |
| set optimisation level to one of | |
| ``-O0``, [TODO] no optimisations; | |
| ``-O1``, [TODO] some optimisations; | |
| ``-O2``, [TODO] more optimisations; | |
| ``-Od``, [TODO] (default); | |
| ``-On``, [TODO]; | |
| ``-Os``, [TODO] size; | |
| ``-Ou``, [TODO] | |
| --Wall \ | |
| issue all warnings | |
| -w, --Wno-warn \ | |
| turn off all warnings | |
| --Wwarn \ | |
| warnings are treated only as warnings, not as errors (default is enabled) | |
| -E, --Werror \ | |
| make any warning into a fatal error (default is disabled) | |
| --Wdodgy-take-put, --Wno-dodgy-take-put \ | |
| enable/disable warnings on ill-formed ``take`` or ``put`` in types | |
| (default is enabled) | |
| --Wdynamic-variant-promotion, --Wno-dynamic-variant-promotion \ | |
| enable/disable warnings on dynamic variant type promotion | |
| (default is disabled) | |
| --Wimplicit-int-lit-promotion, --Wno-implicit-int-lit-promotion \ | |
| enable/disable warning on implicit integer literal promotion | |
| (default is enabled) | |
| --Wmono, --Wno-mono \ | |
| enable/disable warnings during monomorphisation | |
| (default is disabled) | |
| --Wunused-local-binds, --Wno-unused-local-binds \ | |
| enable/disable warnings about unused local binders | |
| (default is disabled) | |
| -q, --quiet \ | |
| do not display compilation progress | |
| -x, --fdump-to-stdout \ | |
| dump all output to stdout | |
| --interactive \ | |
| interactive compiler mode | |
| --type-proof-sorry-before=FUN_NAME \ | |
| bad hack: ``sorry`` all type proofs for functions that precede given function name |