<tscreen><verb>
---------------------------------------------------------------------------
-Usage: cl65 [options] file [...]
-Short options:
- -c Compile and assemble but don't link
- -d Debug mode
- -g Add debug info
- -h Help (this text)
- -l Create an assembler listing
- -m name Create a map file
- -mm model Set the memory model
- -o name Name the output file
- -r Enable register variables
- -t sys Set the target system
- -u sym Force an import of symbol `sym'
- -v Verbose mode
- -vm Verbose map file
- -C name Use linker config file
- -Cl Make local variables static
- -D sym[=defn] Define a preprocessor symbol
- -I dir Set a compiler include directory path
- -L path Specify a library search path
- -Ln name Create a VICE label file
- -O Optimize code
- -Oi Optimize code, inline functions
- -Or Optimize code, honour the register keyword
- -Os Optimize code, inline known C funtions
- -S Compile but don't assemble and link
- -T Include source as comment
- -V Print the version number
- -W Suppress warnings
- -Wa options Pass options to the assembler
- -Wl options Pass options to the linker
+Usage: cl65 [options] file [...]
+Short options:
+ -c Compile and assemble but don't link
+ -d Debug mode
+ -g Add debug info
+ -h Help (this text)
+ -l Create an assembler listing
+ -m name Create a map file
+ -mm model Set the memory model
+ -o name Name the output file
+ -r Enable register variables
+ -t sys Set the target system
+ -u sym Force an import of symbol `sym'
+ -v Verbose mode
+ -vm Verbose map file
+ -C name Use linker config file
+ -Cl Make local variables static
+ -D sym[=defn] Define a preprocessor symbol
+ -I dir Set a compiler include directory path
+ -L path Specify a library search path
+ -Ln name Create a VICE label file
+ -O Optimize code
+ -Oi Optimize code, inline functions
+ -Or Optimize code, honour the register keyword
+ -Os Optimize code, inline known C funtions
+ -S Compile but don't assemble and link
+ -T Include source as comment
+ -V Print the version number
+ -W Suppress warnings
+ -Wa options Pass options to the assembler
+ -Wl options Pass options to the linker
Long options:
- --add-source Include source as comment
- --asm-args options Pass options to the assembler
- --asm-define sym[=v] Define an assembler symbol
- --asm-include-dir dir Set an assembler include directory
- --bss-label name Define and export a BSS segment label
- --bss-name seg Set the name of the BSS segment
- --cfg-path path Specify a config file search path
- --check-stack Generate stack overflow checks
- --code-label name Define and export a CODE segment label
- --code-name seg Set the name of the CODE segment
- --codesize x Accept larger code by factor x
- --config name Use linker config file
- --cpu type Set cpu type
- --create-dep Create a make dependency file
- --data-label name Define and export a DATA segment label
- --data-name seg Set the name of the DATA segment
- --debug Debug mode
- --debug-info Add debug info
- --feature name Set an emulation feature
- --force-import sym Force an import of symbol `sym'
- --forget-inc-paths Forget include search paths (compiler)
- --help Help (this text)
- --include-dir dir Set a compiler include directory path
- --ld-args options Pass options to the linker
- --lib file Link this library
- --lib-path path Specify a library search path
- --list-targets List all available targets
- --listing Create an assembler listing
- --list-bytes n Number of bytes per assembler listing line
- --mapfile name Create a map file
- --memory-model model Set the memory model
- --module Link as a module
- --module-id id Specify a module id for the linker
- --o65-model model Override the o65 model
- --obj file Link this object file
- --obj-path path Specify an object file search path
- --register-space b Set space available for register variables
- --register-vars Enable register variables
- --rodata-name seg Set the name of the RODATA segment
- --signed-chars Default characters are signed
- --standard std Language standard (c89, c99, cc65)
- --start-addr addr Set the default start address
- --static-locals Make local variables static
- --target sys Set the target system
- --version Print the version number
- --verbose Verbose mode
- --zeropage-label name Define and export a ZEROPAGE segment label
- --zeropage-name seg Set the name of the ZEROPAGE segment
+ --add-source Include source as comment
+ --asm-args options Pass options to the assembler
+ --asm-define sym[=v] Define an assembler symbol
+ --asm-include-dir dir Set an assembler include directory
+ --bss-label name Define and export a BSS segment label
+ --bss-name seg Set the name of the BSS segment
+ --cfg-path path Specify a config file search path
+ --check-stack Generate stack overflow checks
+ --code-label name Define and export a CODE segment label
+ --code-name seg Set the name of the CODE segment
+ --codesize x Accept larger code by factor x
+ --config name Use linker config file
+ --cpu type Set cpu type
+ --create-dep name Create a make dependency file
+ --create-full-dep name Create a full make dependency file
+ --data-label name Define and export a DATA segment label
+ --data-name seg Set the name of the DATA segment
+ --debug Debug mode
+ --debug-info Add debug info
+ --feature name Set an emulation feature
+ --force-import sym Force an import of symbol `sym'
+ --forget-inc-paths Forget include search paths (compiler)
+ --help Help (this text)
+ --include-dir dir Set a compiler include directory path
+ --ld-args options Pass options to the linker
+ --lib file Link this library
+ --lib-path path Specify a library search path
+ --list-targets List all available targets
+ --listing Create an assembler listing
+ --list-bytes n Number of bytes per assembler listing line
+ --mapfile name Create a map file
+ --memory-model model Set the memory model
+ --module Link as a module
+ --module-id id Specify a module id for the linker
+ --o65-model model Override the o65 model
+ --obj file Link this object file
+ --obj-path path Specify an object file search path
+ --register-space b Set space available for register variables
+ --register-vars Enable register variables
+ --rodata-name seg Set the name of the RODATA segment
+ --signed-chars Default characters are signed
+ --standard std Language standard (c89, c99, cc65)
+ --start-addr addr Set the default start address
+ --static-locals Make local variables static
+ --target sys Set the target system
+ --version Print the version number
+ --verbose Verbose mode
+ --zeropage-label name Define and export a ZEROPAGE segment label
+ --zeropage-name seg Set the name of the ZEROPAGE segment
---------------------------------------------------------------------------
</verb></tscreen>
/* */
/* */
/* */
-/* (C) 1999-2009, Ullrich von Bassewitz */
+/* (C) 1999-2010, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
*/
static const char* FirstInput = 0;
+/* The names of the files for dependency generation */
+static const char* DepName = 0;
+static const char* FullDepName = 0;
+
/* Remember if we should link a module */
static int Module = 0;
-static void Assemble (const char* File)
-/* Assemble the given file */
+static void AssembleFile (const char* File, unsigned ArgCount)
+/* Common routine to assemble a file. Will be called by Assemble() and
+ * AssembleIntermediate(). Adds options common for both routines and
+ * assembles the file. Will remove excess arguments after assembly.
+ */
{
- /* Remember the current assembler argument count */
- unsigned ArgCount = CA65.ArgCount;
-
/* Set the target system */
CmdSetTarget (&CA65, Target);
* output name.
*/
if (DontLink && OutputName) {
- CmdSetOutput (&CA65, OutputName);
+ CmdSetOutput (&CA65, OutputName);
} else {
- /* The object file name will be the name of the source file
- * with .s replaced by ".o". Add this file to the list of
- * linker files.
- */
- char* ObjName = MakeFilename (File, ".o");
- CmdAddFile (&LD65, ObjName);
- xfree (ObjName);
+ /* The object file name will be the name of the source file
+ * with .s replaced by ".o". Add this file to the list of
+ * linker files.
+ */
+ char* ObjName = MakeFilename (File, ".o");
+ CmdAddFile (&LD65, ObjName);
+ xfree (ObjName);
}
/* Add the file as argument for the assembler */
+static void AssembleIntermediate (const char* File)
+/* Assemble an intermediate file. The -dep options won't be added and
+ * the file is removed after assembly.
+ */
+{
+ /* Use common routine */
+ AssembleFile (File, CA65.ArgCount);
+
+ /* Remove the generated file */
+ if (remove (File) < 0) {
+ Warning ("Cannot remove temporary file `%s': %s",
+ File, strerror (errno));
+ }
+}
+
+
+
+static void Assemble (const char* File)
+/* Assemble the given file */
+{
+ /* Remember the current assembler argument count */
+ unsigned ArgCount = CA65.ArgCount;
+
+ /* We aren't assembling an intermediate file, but one requested by the
+ * user. So add a few options here if they were given on the command
+ * line.
+ */
+ if (DepName && *DepName) {
+ CmdAddArg2 (&CA65, "--create-dep", DepName);
+ }
+ if (FullDepName && *FullDepName) {
+ CmdAddArg2 (&CA65, "--create-full-dep", FullDepName);
+ }
+
+ /* Use the common routine */
+ AssembleFile (File, ArgCount);
+}
+
+
+
static void Compile (const char* File)
/* Compile the given file */
{
/* Set the target system */
CmdSetTarget (&CC65, Target);
- /* If we won't link, this is the final step. In this case, set the
+ /* If we won't assemble, this is the final step. In this case, set the
* output name.
*/
if (DontAssemble && OutputName) {
CmdSetOutput (&CC65, OutputName);
} else {
- /* The assembler file name will be the name of the source file
- * with .c replaced by ".s".
- */
- AsmName = MakeFilename (File, ".s");
+ /* The assembler file name will be the name of the source file
+ * with .c replaced by ".s".
+ */
+ AsmName = MakeFilename (File, ".s");
}
/* Add the file as argument for the compiler */
* remove it
*/
if (!DontAssemble) {
- Assemble (AsmName);
- if (remove (AsmName) < 0) {
- Warning ("Cannot remove temporary file `%s': %s",
- AsmName, strerror (errno));
- }
- xfree (AsmName);
+ AssembleIntermediate (AsmName);
}
+
+ /* Free the assembler file name which was allocated from the heap */
+ xfree (AsmName);
}
* remove it
*/
if (!DontAssemble) {
- Assemble (AsmName);
- if (remove (AsmName) < 0) {
- Warning ("Cannot remove temporary file `%s': %s",
- AsmName, strerror (errno));
- }
+ AssembleIntermediate (AsmName);
}
/* Free the assembler file name which was allocated from the heap */
/* Remember the current converter argument count */
unsigned ArgCount = CO65.ArgCount;
- /* If we won't link, this is the final step. In this case, set the
+ /* If we won't assemble, this is the final step. In this case, set the
* output name.
*/
if (DontAssemble && OutputName) {
* remove it
*/
if (!DontAssemble) {
- Assemble (AsmName);
- if (remove (AsmName) < 0) {
- Warning ("Cannot remove temporary file `%s': %s",
- AsmName, strerror (errno));
- }
+ AssembleIntermediate (AsmName);
}
/* Free the assembler file name which was allocated from the heap */
{
printf ("Usage: %s [options] file [...]\n"
"Short options:\n"
- " -c\t\t\tCompile and assemble but don't link\n"
- " -d\t\t\tDebug mode\n"
- " -g\t\t\tAdd debug info\n"
- " -h\t\t\tHelp (this text)\n"
- " -l\t\t\tCreate an assembler listing\n"
- " -m name\t\tCreate a map file\n"
- " -mm model\t\tSet the memory model\n"
- " -o name\t\tName the output file\n"
- " -r\t\t\tEnable register variables\n"
- " -t sys\t\tSet the target system\n"
- " -u sym\t\tForce an import of symbol `sym'\n"
- " -v\t\t\tVerbose mode\n"
- " -vm\t\t\tVerbose map file\n"
- " -C name\t\tUse linker config file\n"
- " -Cl\t\t\tMake local variables static\n"
- " -D sym[=defn]\t\tDefine a preprocessor symbol\n"
- " -I dir\t\tSet a compiler include directory path\n"
- " -L path\t\tSpecify a library search path\n"
- " -Ln name\t\tCreate a VICE label file\n"
- " -O\t\t\tOptimize code\n"
- " -Oi\t\t\tOptimize code, inline functions\n"
- " -Or\t\t\tOptimize code, honour the register keyword\n"
- " -Os\t\t\tOptimize code, inline known C funtions\n"
- " -S\t\t\tCompile but don't assemble and link\n"
- " -T\t\t\tInclude source as comment\n"
- " -V\t\t\tPrint the version number\n"
- " -W\t\t\tSuppress warnings\n"
- " -Wa options\t\tPass options to the assembler\n"
- " -Wl options\t\tPass options to the linker\n"
+ " -c\t\t\t\tCompile and assemble but don't link\n"
+ " -d\t\t\t\tDebug mode\n"
+ " -g\t\t\t\tAdd debug info\n"
+ " -h\t\t\t\tHelp (this text)\n"
+ " -l\t\t\t\tCreate an assembler listing\n"
+ " -m name\t\t\tCreate a map file\n"
+ " -mm model\t\t\tSet the memory model\n"
+ " -o name\t\t\tName the output file\n"
+ " -r\t\t\t\tEnable register variables\n"
+ " -t sys\t\t\tSet the target system\n"
+ " -u sym\t\t\tForce an import of symbol `sym'\n"
+ " -v\t\t\t\tVerbose mode\n"
+ " -vm\t\t\t\tVerbose map file\n"
+ " -C name\t\t\tUse linker config file\n"
+ " -Cl\t\t\t\tMake local variables static\n"
+ " -D sym[=defn]\t\t\tDefine a preprocessor symbol\n"
+ " -I dir\t\t\tSet a compiler include directory path\n"
+ " -L path\t\t\tSpecify a library search path\n"
+ " -Ln name\t\t\tCreate a VICE label file\n"
+ " -O\t\t\t\tOptimize code\n"
+ " -Oi\t\t\t\tOptimize code, inline functions\n"
+ " -Or\t\t\t\tOptimize code, honour the register keyword\n"
+ " -Os\t\t\t\tOptimize code, inline known C funtions\n"
+ " -S\t\t\t\tCompile but don't assemble and link\n"
+ " -T\t\t\t\tInclude source as comment\n"
+ " -V\t\t\t\tPrint the version number\n"
+ " -W\t\t\t\tSuppress warnings\n"
+ " -Wa options\t\t\tPass options to the assembler\n"
+ " -Wl options\t\t\tPass options to the linker\n"
"\n"
"Long options:\n"
- " --add-source\t\tInclude source as comment\n"
- " --asm-args options\tPass options to the assembler\n"
- " --asm-define sym[=v]\tDefine an assembler symbol\n"
- " --asm-include-dir dir\tSet an assembler include directory\n"
- " --bss-label name\tDefine and export a BSS segment label\n"
- " --bss-name seg\tSet the name of the BSS segment\n"
- " --cfg-path path\tSpecify a config file search path\n"
- " --check-stack\t\tGenerate stack overflow checks\n"
- " --code-label name\tDefine and export a CODE segment label\n"
- " --code-name seg\tSet the name of the CODE segment\n"
- " --codesize x\t\tAccept larger code by factor x\n"
- " --config name\t\tUse linker config file\n"
- " --cpu type\t\tSet cpu type\n"
- " --create-dep\t\tCreate a make dependency file\n"
- " --data-label name\tDefine and export a DATA segment label\n"
- " --data-name seg\tSet the name of the DATA segment\n"
- " --debug\t\tDebug mode\n"
- " --debug-info\t\tAdd debug info\n"
- " --feature name\tSet an emulation feature\n"
- " --force-import sym\tForce an import of symbol `sym'\n"
- " --forget-inc-paths\tForget include search paths (compiler)\n"
- " --help\t\tHelp (this text)\n"
- " --include-dir dir\tSet a compiler include directory path\n"
- " --ld-args options\tPass options to the linker\n"
- " --lib file\t\tLink this library\n"
- " --lib-path path\tSpecify a library search path\n"
- " --list-targets\tList all available targets\n"
- " --listing\t\tCreate an assembler listing\n"
- " --list-bytes n\tNumber of bytes per assembler listing line\n"
- " --mapfile name\tCreate a map file\n"
- " --memory-model model\tSet the memory model\n"
- " --module\t\tLink as a module\n"
- " --module-id id\tSpecify a module id for the linker\n"
- " --o65-model model\tOverride the o65 model\n"
- " --obj file\t\tLink this object file\n"
- " --obj-path path\tSpecify an object file search path\n"
- " --register-space b\tSet space available for register variables\n"
- " --register-vars\tEnable register variables\n"
- " --rodata-name seg\tSet the name of the RODATA segment\n"
- " --signed-chars\tDefault characters are signed\n"
- " --standard std\tLanguage standard (c89, c99, cc65)\n"
- " --start-addr addr\tSet the default start address\n"
- " --static-locals\tMake local variables static\n"
- " --target sys\t\tSet the target system\n"
- " --version\t\tPrint the version number\n"
- " --verbose\t\tVerbose mode\n"
- " --zeropage-label name\tDefine and export a ZEROPAGE segment label\n"
- " --zeropage-name seg\tSet the name of the ZEROPAGE segment\n",
+ " --add-source\t\t\tInclude source as comment\n"
+ " --asm-args options\t\tPass options to the assembler\n"
+ " --asm-define sym[=v]\t\tDefine an assembler symbol\n"
+ " --asm-include-dir dir\t\tSet an assembler include directory\n"
+ " --bss-label name\t\tDefine and export a BSS segment label\n"
+ " --bss-name seg\t\tSet the name of the BSS segment\n"
+ " --cfg-path path\t\tSpecify a config file search path\n"
+ " --check-stack\t\t\tGenerate stack overflow checks\n"
+ " --code-label name\t\tDefine and export a CODE segment label\n"
+ " --code-name seg\t\tSet the name of the CODE segment\n"
+ " --codesize x\t\t\tAccept larger code by factor x\n"
+ " --config name\t\t\tUse linker config file\n"
+ " --cpu type\t\t\tSet cpu type\n"
+ " --create-dep name\t\tCreate a make dependency file\n"
+ " --create-full-dep name\tCreate a full make dependency file\n"
+ " --data-label name\t\tDefine and export a DATA segment label\n"
+ " --data-name seg\t\tSet the name of the DATA segment\n"
+ " --debug\t\t\tDebug mode\n"
+ " --debug-info\t\t\tAdd debug info\n"
+ " --feature name\t\tSet an emulation feature\n"
+ " --force-import sym\t\tForce an import of symbol `sym'\n"
+ " --forget-inc-paths\t\tForget include search paths (compiler)\n"
+ " --help\t\t\tHelp (this text)\n"
+ " --include-dir dir\t\tSet a compiler include directory path\n"
+ " --ld-args options\t\tPass options to the linker\n"
+ " --lib file\t\t\tLink this library\n"
+ " --lib-path path\t\tSpecify a library search path\n"
+ " --list-targets\t\tList all available targets\n"
+ " --listing\t\t\tCreate an assembler listing\n"
+ " --list-bytes n\t\tNumber of bytes per assembler listing line\n"
+ " --mapfile name\t\tCreate a map file\n"
+ " --memory-model model\t\tSet the memory model\n"
+ " --module\t\t\tLink as a module\n"
+ " --module-id id\t\tSpecify a module id for the linker\n"
+ " --o65-model model\t\tOverride the o65 model\n"
+ " --obj file\t\t\tLink this object file\n"
+ " --obj-path path\t\tSpecify an object file search path\n"
+ " --register-space b\t\tSet space available for register variables\n"
+ " --register-vars\t\tEnable register variables\n"
+ " --rodata-name seg\t\tSet the name of the RODATA segment\n"
+ " --signed-chars\t\tDefault characters are signed\n"
+ " --standard std\t\tLanguage standard (c89, c99, cc65)\n"
+ " --start-addr addr\t\tSet the default start address\n"
+ " --static-locals\t\tMake local variables static\n"
+ " --target sys\t\t\tSet the target system\n"
+ " --version\t\t\tPrint the version number\n"
+ " --verbose\t\t\tVerbose mode\n"
+ " --zeropage-label name\t\tDefine and export a ZEROPAGE segment label\n"
+ " --zeropage-name seg\t\tSet the name of the ZEROPAGE segment\n",
ProgName);
}
-static void OptCreateDep (const char* Opt attribute ((unused)),
- const char* Arg attribute ((unused)))
+static void OptCreateDep (const char* Opt attribute ((unused)), const char* Arg)
/* Handle the --create-dep option */
{
- CmdAddArg (&CC65, "--create-dep");
+ /* Add the file name to the compiler */
+ CmdAddArg2 (&CC65, "--create-dep", Arg);
+
+ /* Remember the file name for the assembler */
+ DepName = Arg;
+}
+
+
+
+static void OptCreateFullDep (const char* Opt attribute ((unused)), const char* Arg)
+/* Handle the --create-full-dep option */
+{
+ /* Add the file name to the compiler */
+ CmdAddArg2 (&CC65, "--create-full-dep", Arg);
+
+ /* Remember the file name for the assembler */
+ FullDepName = Arg;
}
{ "--codesize", 1, OptCodeSize },
{ "--config", 1, OptConfig },
{ "--cpu", 1, OptCPU },
- { "--create-dep", 0, OptCreateDep },
+ { "--create-dep", 1, OptCreateDep },
+ { "--create-full-dep", 1, OptCreateFullDep },
{ "--data-label", 1, OptDataLabel },
{ "--data-name", 1, OptDataName },
{ "--debug", 0, OptDebug },