---
name: "csc"
section: "1"
platform: "linux"
package: "chicken-bin"
version: "5.3.0-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/csc"
---

# csc(1)

driver program for the CHICKEN Scheme compiler

## NAME

**csc** – driver program for the CHICKEN Scheme compiler

## SYNOPSIS

**csc** \[*OPTION* *...*\] \[*FILENAME* *...*\]

## DESCRIPTION

**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.

- **-vv**

  Display information about translation progress.

- **-vvv**

  Display information about all compilation stages.

- **-version**

  Display Scheme compiler version and exit.

- **-release**

  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.

- **-to-stdout**

  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.

- **-c++**

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

- **-objc**

  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).

- **-no-parentheses-synonyms**

  Disables list delimiter synonyms.

- **-no-symbol-escape**

  Disables support for escaped symbols.

- **-r5rs-syntax**

  Disables the CHICKEN extensions to R5RS syntax.

- **-compile-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.

- **-no-compiler-syntax**

  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.

- **-no-trace**

  Disable rudimentary debugging information.

- **-profile**

  Executable emits profiling information.

- **-accumulate-profile**

  Executable emits profiling information in append mode.

- **-profile-name** *FILENAME*

  Name of the generated profile information file.

- **-types** *FILENAME*

  Load additional type database.

Optimization options:

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

  Enable certain sets of optimization options.

- **-optimize-leaf-routines**

  Enable leaf routine optimization.

- **-no-usual-integrations**

  Standard procedures may be redefined.

- **-u**, **-unsafe**

  Disable safety checks.

- **-local**

  Assume globals are only modified in current file.

- **-b**, **-block**

  Enable block-compilation.

- **-disable-interrupts**

  Disable interrupts in compiled code.

- **-f**, **-fixnum-arithmetic**

  Assume all numbers are fixnums.

- **-disable-stack-overflow-checks**

  Disables detection of stack-overflows.

- **-inline**

  Enable inlining.

- **-inline-limit** *LIMIT*

  Set inlining threshold.

- **-inline-global**

  Enable cross-module inlining.

- **-specialize**

  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.

- **-no-argc-checks**

  Disable argument count checks.

- **-no-bound-checks**

  Disable bound variable checks.

- **-no-procedure-checks**

  Disable procedure call checks.

- **-no-procedure-checks-for-usual-bindings**

  Disable procedure call checks only for usual bindings.

- **-no-procedure-checks-for-toplevel-bindings**

  Disable procedure call checks for toplevel bindings.

- **-strict-types**

  Assume variable do not change their type.

- **-clustering**

  Combine groups of local procedures into dispatch loop.

- **-lfa2**

  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.

- **-X** *FILENAME*, **-extend** *FILENAME*

  Load file before compilation commences.

- **-prelude** *EXPRESSION*

  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**()’).

- **-gui**

  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.

- **-libdir** *DIRECTORY*

  Override location of runtime library directory.

Options to other passes:

- **-C** *OPTION*

  Pass option to C compiler.

- **-L** *OPTION*

  Pass option to linker.

- **-I***\<DIR\>*

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

- **-L***\<DIR\>*

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

- **-k**

  Keep intermediate files.

- **-c**

  Stop after compilation to object files.

- **-t**

  Stop after translation to C.

- **-cc** *COMPILER*

  Select a C compiler other than the default.

- **-cxx** *COMPILER*

  Select a C++ compiler other than the default.

- **-ld** *COMPILER*

  Select a linker other than the default.

- **-static**

  Link with static CHICKEN libraries and extensions.

- **-F***\<DIR\>*

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

- **-framework** *NAME*

  Passed to linker on Mac OS X.

- **-rpath** *PATHNAME*

  Add directory to runtime library search path.

- **-Wl,...**

  Pass linker options.

- **-strip**

  Strip resulting binary.

Inquiry options:

- **-home**

  Show home-directory (where support files go).

- **-cflags**

  Show required C-compiler flags and exit.

- **-ldflags**

  Show required linker flags and exit.

- **-libs**

  Show required libraries and exit.

- **-cc-name**

  Show name of default C compiler used.

- **-cxx-name**

  Show name of default C++ compiler used.

- **-ld-name**

  Show name of default linker used.

- **-dry-run**

  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’.

- **-raw**

  Do not generate implicit init- and exit code.

- **-emit-external-prototypes-first**

  Emit prototypes for callbacks before foreign declarations.

- **-regenerate-import-libraries**

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

- **-ignore-repository**

  Do not refer to repository for extensions.

- **-keep-shadowed-macros**

  Do not remove shadowed macros.

- **-host**

  Compile for host when configured for cross-compiling.

- **-private-repository**

  Load extensions from executable path.

- **-deployed**

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

- **-no-elevation**

  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”.

## ENVIRONMENT

The following environment variables change the behaviour of **csc**:

- CSC\_OPTIONS

  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

[chicken(1)](/chicken/1.md)

More information can be found in the *CHICKEN User's Manual:* **http://wiki.call-cc.org/manual/index**.

## AUTHORS

The CHICKEN Team

## BUGS

Submit bug reports by e-mail to *chicken-janitors@nongnu.org*
