diff --git a/doc/cl65.sgml b/doc/cl65.sgml index b65f7f69b..0f107c370 100644 --- a/doc/cl65.sgml +++ b/doc/cl65.sgml @@ -72,6 +72,7 @@ Long options: --bin-include-dir dir Set an assembker binary include directory --bss-label name Define and export a BSS segment label --bss-name seg Set the name of the BSS segment + --cc-args options Pass options to the compiler --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 @@ -172,6 +173,16 @@ There are a few remaining options that control the behaviour of cl65: if cl65 supports an option by itself, do not pass this option to the assembler by means of the -Wc options, --cc-args options + + Pass options directly to the compiler. This may be used to pass options + that aren't directly supported by cl65. Several options may be separated by + commas, the commas are replaced by spaces when passing them to the + compiler. Beware: Passing arguments directly to the compiler may interfere + with some of the defaults, because cl65 doesn't parse the options passed. So + if cl65 supports an option by itself, do not pass this option to the + compiler by means of the -Wl options, --ld-args options Pass options directly to the linker. This may be used to pass options that @@ -182,7 +193,7 @@ There are a few remaining options that control the behaviour of cl65: supports an option by itself, do not pass this option to the linker by means of the + diff --git a/src/cl65/main.c b/src/cl65/main.c index d10e03a30..d20f1a2be 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -697,6 +697,7 @@ static void Usage (void) " -V\t\t\t\tPrint the version number\n" " -W name[,...]\t\t\tSuppress compiler warnings\n" " -Wa options\t\t\tPass options to the assembler\n" + " -Wc options\t\t\tPass options to the compiler\n" " -Wl options\t\t\tPass options to the linker\n" "\n" "Long options:\n" @@ -707,6 +708,7 @@ static void Usage (void) " --bin-include-dir dir\t\tSet an assembler binary 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" + " --cc-args options\t\tPass options to the compiler\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" @@ -813,6 +815,14 @@ static void OptBssName (const char* Opt attribute ((unused)), const char* Arg) +static void OptCCArgs (const char* Opt attribute ((unused)), const char* Arg) +/* Pass arguments to the compiler */ +{ + CmdAddArgList (&CC65, Arg); +} + + + static void OptCfgPath (const char* Opt attribute ((unused)), const char* Arg) /* Config file search path (linker) */ { @@ -1229,6 +1239,7 @@ int main (int argc, char* argv []) { "--bin-include-dir", 1, OptBinIncludeDir }, { "--bss-label", 1, OptBssLabel }, { "--bss-name", 1, OptBssName }, + { "--cc-args", 1, OptCCArgs }, { "--cfg-path", 1, OptCfgPath }, { "--check-stack", 0, OptCheckStack }, { "--code-label", 1, OptCodeLabel }, @@ -1360,6 +1371,9 @@ int main (int argc, char* argv []) if (Arg[2] == 'a' && Arg[3] == '\0') { /* -Wa: Pass options to assembler */ OptAsmArgs (Arg, GetArg (&I, 3)); + } else if (Arg[2] == 'c' && Arg[3] == '\0') { + /* -Wc: Pass options to compiler */ + OptCCArgs (Arg, GetArg (&I, 3)); } else if (Arg[2] == 'l' && Arg[3] == '\0') { /* -Wl: Pass options to linker */ OptLdArgs (Arg, GetArg (&I, 3));