csc - Man Page

driver program for the CHICKEN Scheme compiler

Examples (TL;DR)


csc[OPTION ...] [FILENAME ...]


csc is a program that invokes the CHICKEN compiler and the host systems C compiler to generate an executable from a Scheme source file or C files generated by CHICKEN.

FILENAME is a Scheme source file name with optional extension or a C/C++/Objective-C source, object or library file name with extension. OPTION may be one of the following:

General options:

-h, -help

Display usage text and exit.

-v, -verbose

Show compiler notes and tool-invocations.


Display information about translation progress.


Display information about all compilation stages.


Display Scheme compiler version and exit.


Display release number and exit.

File and pathname options:

-o FILENAME, -output-file FILENAME

Specifies target executable name.

-I PATHNAME, -include-path PATHNAME

Specifies alternative path for included files.


Write compiler to stdout (implies -t).

-s, -shared, -dynamic

Generate dynamically loadable shared object file.

Language options:

-D SYMBOL, -feature SYMBOL

Register feature identifier.

-no-feature SYMBOL

Disable builtin feature identifier.


Compile via a C++ source file (.cpp).


Compile via Objective-C source file (.m).

Syntax related options:

-i, -case-insensitive

Don't preserve case of read symbols.

-K, -keyword-style STYLE

Enable alternative keyword-syntax (prefix, suffix or none).


Disables list delimiter synonyms.


Disables support for escaped symbols.


Disables the CHICKEN extensions to R5RS syntax.


Macros are made available at run-time.

-j MODULE, -emit-import-library MODULE

Write compile-time module information into separate file.

-J, -emit-all-import-libraries

Emit import-libraries for all defined modules.


Disable expansion of compiler-macros.

-m NAME, -module NAME

Wrap compiled code in module of the given name.

-M, -module-registration

Always generate module registration code, even when import libraries are emitted.

-N, -no-module-registration

Do not generate module registration code. Overrides -module-registration.

Translation options:

-x, -explicit-use

Do not use units ‘library’ and ‘eval’ by default.

-P, -check-syntax

Stop compilation after macro-expansion.

-A, -analyze-only

Stop compilation after first analysis pass.

Debugging options:

-w, -no-warnings

Disable warnings.

-d0, -d1, -d2, -d3, -debug-level NUMBER

Set level of available debugging information.


Disable rudimentary debugging information.


Executable emits profiling information.


Executable emits profiling information in append mode.

-profile-name FILENAME

Name of the generated profile information file.


Load additional type database.

Optimization options:

-O, -O0, -O1, -O2, -O3, -O4, -O5, -optimize-level NUMBER

Enable certain sets of optimization options.


Enable leaf routine optimization.


Standard procedures may be redefined.

-u, -unsafe

Disable safety checks.


Assume globals are only modified in current file.

-b, -block

Enable block-compilation.


Disable interrupts in compiled code.

-f, -fixnum-arithmetic

Assume all numbers are fixnums.


Disables detection of stack-overflows.


Enable inlining.

-inline-limit LIMIT

Set inlining threshold.


Enable cross-module inlining.


Perform type-based specialization of primitive calls.

-oi FILENAME, -emit-inline-file FILENAME

Generate file with globally inlinable procedures (implies -inline -local).

-consult-inline-file FILENAME

Explicitly load inline file.

-ot FILENAME, -emit-types-file FILENAME

Write type-declaration information into file.


Disable argument count checks.


Disable bound variable checks.


Disable procedure call checks.


Disable procedure call checks only for usual bindings.


Disable procedure call checks for toplevel bindings.


Assume variable do not change their type.


Combine groups of local procedures into dispatch loop.


Perform additional lightweight flow-analysis pass.

-unroll-limit LIMIT

Specifies inlining limit for self-recursive calls.

Configuration options:

-unit NAME

Compile file as a library unit.

-uses NAME

Declare library unit as used.

-heap-size NUMBER

Specifies heap-size of compiled executable.

-nursery NUMBER -stack-size NUMBER

Specifies nursery size of compiled executable.


Load file before compilation commences.


Add expression to beginning of source file.

-postlude EXPRESSION

Add expression to end of source file.

-prologue FILENAME

Include file before main source file.

-epilogue FILENAME

Include file after main source file.

-e, -embedded

Compile as embedded (don't generate ‘main()’).


Compile as GUI application.

-link NAME

Link extension with compiled executable (implies ‘-uses’).

-R NAME, -require-extension NAME

Require extension and import in compiled code.

-dll, -library

Compile multiple units into a dynamic library.


Override location of runtime library directory.

Options to other passes:


Pass option to C compiler.


Pass option to linker.


Pass “-I<DIR>” to C compiler (add include path).


Pass “-L<DIR>” to linker (add library path).


Keep intermediate files.


Stop after compilation to object files.


Stop after translation to C.


Select a C compiler other than the default.


Select a C++ compiler other than the default.


Select a linker other than the default.


Link with static CHICKEN libraries and extensions.


Pass “-F<DIR>” to C compiler (add framework header path on Mac OS X).

-framework NAME

Passed to linker on Mac OS X.


Add directory to runtime library search path.


Pass linker options.


Strip resulting binary.

Inquiry options:


Show home-directory (where support files go).


Show required C-compiler flags and exit.


Show required linker flags and exit.


Show required libraries and exit.


Show name of default C compiler used.


Show name of default C++ compiler used.


Show name of default linker used.


Just show commands executed, don't run them (implies ‘-v’).

Obscure options:

-debug MODES

Display debugging output for the given modes.

-compiler PATHNAME

Use a compiler other than the default ‘chicken’.


Do not generate implicit init- and exit code.


Emit prototypes for callbacks before foreign declarations.


Always emit import libraries, even when their contents haven't changed. The default behaviour is to preserve existing import libraries.


Do not refer to repository for extensions.


Do not remove shadowed macros.


Compile for host when configured for cross-compiling.


Load extensions from executable path.


Link support file to be used from a deployed executable (sets ‘rpath’ accordingly, if supported on this platform.)


Embed manifest on Windows to supress elevation warnings for programs named ‘install’ or ‘setup’.

Options can be collapsed if unambiguous, so “-vkfO” is the same as “-v -k -fixnum-arithmetic -optimize”.


The following environment variables change the behaviour of csc:


Can hold default options that should be passed to every invocation of csc.

Exit Status

The csc utility exits 0 on success, and >0 if an error occurs.

See Also


More information can be found in the CHICKEN User's Manual.




Submit bug reports by e-mail to

Referenced By

chicken(1), chicken-do(1), chicken-install(1), chicken-profile(1), csi(1), feathers(1).

April 26, 2017