CSC(1)

πŸ“¦ version 6.0.0, in arch rolling

πŸ’… CSC(1) β€” it's the CHICKEN Scheme compiler driver, bestie

okay so real quick, the header situation: this is CSC(1) from the General Commands Manual, and the program's actual name is csc. That's the whole vibe. Now let's get into it ✨


🌸 NAME

csc β€” the driver program for the CHICKEN Scheme compiler. she's the middleman, the main character, the one who actually gets stuff done 🫢

πŸ¦‹ SYNOPSIS

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

πŸ‘‘ DESCRIPTION

csc is the program that calls up the CHICKEN compiler and your host system's C compiler, so together they can turn a Scheme source file β€” or C files that CHICKEN generated β€” into a whole executable. it's giving backstage crew at the school play, honestly πŸ’…

So what even is a FILENAME here? It can be:

  • a Scheme source file name, with an optional extension, or
  • a C / C++ / Objective-C source, object, or library file name, with an extension.

And OPTION can be any of the following, which we're gonna go through all of, no skipping, iykyk πŸŽ€

⭐ General options

  • -h, -help β€” shows you the usage text and dips out.
  • -v, -verbose β€” shows compiler notes plus all the tool invocations. the receipts, basically.
  • -vv β€” spills the tea on translation progress.
  • -vvv β€” every single compilation stage, no crumbs left behind.
  • -version β€” shows the Scheme compiler version and exits.
  • -release β€” shows the release number and exits.

πŸŽ€ File and pathname options

  • -o FILENAME, -output-file FILENAME β€” names your target executable. your baby, your choice.
  • -I PATHNAME, -include-path PATHNAME β€” gives included files an alternative path to live in.
  • -to-stdout β€” writes the compiler output to stdout (and yeah, it implies -t).
  • -s, -shared, -dynamic β€” generates a dynamically loadable shared object file. ✨

πŸ’œ Language options

  • -D SYMBOL, -feature SYMBOL β€” registers a feature identifier.
  • -no-feature SYMBOL β€” turns a builtin feature identifier off.
  • -c++ β€” compiles via a C++ source file (.cpp).
  • -objc β€” compiles via an Objective-C source file (.m).
  • -i, -case-insensitive β€” doesn't preserve the case of read symbols. case? never heard of her.
  • -K, -keyword-style STYLE β€” enables an alternative keyword-syntax. your STYLE choices are prefix, suffix, or none.
  • -no-parentheses-synonyms β€” disables list delimiter synonyms.
  • -no-symbol-escape β€” disables support for escaped symbols.
  • -r7rs-syntax β€” disables the CHICKEN extensions to R7RS syntax.
  • -compile-syntax β€” makes macros available at run-time.
  • -j MODULE, -emit-import-library MODULE β€” writes compile-time module information into a separate file.
  • -J, -emit-all-import-libraries β€” emits import-libraries for all the defined modules. all of them. periodt.
  • -no-compiler-syntax β€” disables expansion of compiler-macros.
  • -m NAME, -module NAME β€” wraps the compiled code in a module with the given name.
  • -M, -module-registration β€” always generates module registration code, even when import libraries are emitted.
  • -N, -no-module-registration β€” does not generate module registration code. this one overrides -module-registration.

πŸ”₯ Translation options

  • -x, -explicit-use β€” doesn't use the units library and eval by default.
  • -P, -check-syntax β€” stops compiling right after macro-expansion.
  • -A, -analyze-only β€” stops compiling after the first analysis pass.

πŸ’€ Debugging options

  • -w, -no-warnings β€” disables warnings. ignorance is bliss, lowkey.
  • -d0, -d1, -d2, -d3, -debug-level NUMBER β€” sets the level of available debugging information.
  • -no-trace β€” disables the rudimentary debugging information.
  • -profile β€” the executable emits profiling information.
  • -accumulate-profile β€” the executable emits profiling information in append mode.
  • -profile-name FILENAME β€” name of the generated profile information file.
  • -types FILENAME β€” loads an additional type database.

🌈 Optimization options

  • -O, -O0, -O1, -O2, -O3, -O4, -O5, -optimize-level NUMBER β€” enables certain sets of optimization options. pick your fighter.
  • -optimize-leaf-routines β€” enables leaf routine optimization.
  • -no-usual-integrations β€” lets standard procedures be redefined.
  • -u, -unsafe β€” disables safety checks. ⚠️ you are on your own, bestie.
  • -local β€” assumes globals are only modified in the current file.
  • -b, -block β€” enables block-compilation.
  • -disable-interrupts β€” disables interrupts in compiled code.
  • -f, -fixnum-arithmetic β€” assumes all numbers are fixnums.
  • -disable-stack-overflow-checks β€” disables detection of stack-overflows.
  • -inline β€” enables inlining.
  • -inline-limit LIMIT β€” sets the inlining threshold.
  • -inline-global β€” enables cross-module inlining.
  • -specialize β€” performs type-based specialization of primitive calls.
  • -oi FILENAME, -emit-inline-file FILENAME β€” generates a file with globally inlinable procedures (this one implies -inline -local).
  • -consult-inline-file FILENAME β€” explicitly loads an inline file.
  • -ot FILENAME, -emit-types-file FILENAME β€” writes type-declaration information into a file.
  • -no-argc-checks β€” disables argument count checks.
  • -no-bound-checks β€” disables bound variable checks.
  • -no-procedure-checks β€” disables procedure call checks.
  • -no-procedure-checks-for-usual-bindings β€” disables procedure call checks only for usual bindings.
  • -no-procedure-checks-for-toplevel-bindings β€” disables procedure call checks for toplevel bindings.
  • -strict-types β€” assumes variables don't change their type.
  • -lfa2 β€” performs an additional lightweight flow-analysis pass.
  • -unroll-limit LIMIT β€” specifies the inlining limit for self-recursive calls.
  • -merge-reusable-closures β€” enables closure reuse.
  • -merge-shareable-closures β€” enables closure sharing.

πŸ“ Configuration options

  • -unit NAME β€” compiles the file as a library unit.
  • -uses NAME β€” declares a library unit as used.
  • -heap-size NUMBER β€” specifies the heap-size of the compiled executable.
  • -nursery NUMBER, -stack-size NUMBER β€” specifies the nursery size of the compiled executable. (these two share a line in the original, so they're sharing a bullet here too πŸ’•)
  • -X FILENAME, -extend FILENAME β€” loads a file before compilation commences.
  • -prelude EXPRESSION β€” adds an expression to the beginning of the source file.
  • -postlude EXPRESSION β€” adds an expression to the end of the source file.
  • -prologue FILENAME β€” includes a file before the main source file.
  • -epilogue FILENAME β€” includes a file after the main source file.
  • -e, -embedded β€” compiles as embedded, meaning it does not generate main().
  • -gui β€” compiles as a GUI application.
  • -link NAME β€” links an extension with the compiled executable (implies -uses).
  • -R NAME, -require-extension NAME β€” requires an extension and imports it in the compiled code.
  • -dll, -library β€” compiles multiple units into a dynamic library.
  • -libdir DIRECTORY β€” overrides the location of the runtime library directory.

🫢 Options to other passes

  • -C OPTION β€” passes an option to the C compiler.
  • -L OPTION β€” passes an option to the linker.
  • -I<DIR> β€” passes β€œ-I<DIR>” to the C compiler (adds an include path).
  • -L<DIR> β€” passes β€œ-L<DIR>” to the linker (adds a library path).
  • -k β€” keeps the intermediate files. souvenirs ✨
  • -c β€” stops after compilation to object files.
  • -t β€” stops after translation to C.
  • -cc COMPILER β€” picks a C compiler that isn't the default.
  • -cxx COMPILER β€” picks a C++ compiler that isn't the default.
  • -ld COMPILER β€” picks a linker that isn't the default.
  • -static β€” links with static CHICKEN libraries and extensions.
  • -F<DIR> β€” passes β€œ-F<DIR>” to the C compiler (adds a framework header path on Mac OS X).
  • -framework NAME β€” passed to the linker on Mac OS X.
  • -rpath PATHNAME β€” adds a directory to the runtime library search path.
  • -Wl,... β€” passes linker options.
  • -strip β€” strips the resulting binary.

πŸ” Inquiry options

  • -home β€” shows the home-directory (that's where the support files go).
  • -cflags β€” shows the required C-compiler flags and exits.
  • -ldflags β€” shows the required linker flags and exits.
  • -libs β€” shows the required libraries and exits.
  • -cc-name β€” shows the name of the default C compiler in use.
  • -cxx-name β€” shows the name of the default C++ compiler in use.
  • -ld-name β€” shows the name of the default linker in use.
  • -dry-run β€” just shows the commands it would execute, doesn't run them (implies -v). all talk, no walk, iconic.

πŸ™ˆ Obscure options

  • -debug MODES β€” displays debugging output for the given modes.
  • -compiler PATHNAME β€” uses a compiler other than the default chicken.
  • -raw β€” does not generate implicit init- and exit code.
  • -emit-external-prototypes-first β€” emits prototypes for callbacks before foreign declarations.
  • -regenerate-import-libraries β€” always emits import libraries, even when their contents haven't changed. heads up: the default behaviour is to preserve existing import libraries.
  • -ignore-repository β€” does not refer to the repository for extensions.
  • -keep-shadowed-macros β€” does not remove shadowed macros.
  • -host β€” compiles for host when configured for cross-compiling.
  • -private-repository β€” loads extensions from the executable path.
  • -deployed β€” links the support file to be used from a deployed executable (sets rpath accordingly, if it's supported on this platform).
  • -no-elevation β€” embeds a manifest on Windows to suppress elevation warnings for programs named install or setup.
πŸ’‘ also!! options can be collapsed when unambiguous, so β€œ-vkfO” is the exact same thing as β€œ-v -k -fixnum-arithmetic -optimize”. shortcuts are valid, bestie.

🌱 ENVIRONMENT

These environment variables change how csc behaves:

  • CSC_OPTIONS β€” can hold default options that get passed to every single invocation of csc. set it once, forget it, live your life πŸ¦‹

⭐ EXIT STATUS

The csc utility exits 0 on success, and >0 if an error occurs. that's it, that's the whole mood.

πŸ’– SEE ALSO

More info lives in the CHICKEN User's Manual: http://wiki.call-cc.org/manual/index.

πŸ‘‘ AUTHORS

The CHICKEN Team. legends, honestly.

πŸ’€ BUGS

Submit bug reports by e-mail to chicken-janitors@nongnu.org. don't be shy, they're nice 🫢


k that's the whole page!! mwah πŸ’‹ this was the CSC(1) entry from the Debian packaging, dated Apr 26, 2017 β€” go forth and compile, you gorgeous genius you πŸŽ€βœ¨πŸ’…

πŸ“¦ where this page comes from
  • arch rolling: chicken 6.0.0-1 Β· BSD-3-Clause AND GPL-2.0-or-later AND custom:Public-Domain
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms