blob: c14f80de02dce533d46ab0fc42a60527d1fa278c [file] [edit]
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