X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=f4c21bf1b66312eeceab11718d8c49d3b235b99f;hb=ae803653f2cdd9191b31e8f47853abbc454bdcce;hp=083ecb12557eee763c4e732e733b0800c4af6514;hpb=b40923cae3697a11c95777bdcc09777430a1e02b;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 083ecb12..f4c21bf1 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -135,7 +135,7 @@ char buffer[PATH_MAX * 2]; #define OPTION_PACK_IRAM "--pack-iram" #define OPTION_NO_PACK_IRAM "--no-pack-iram" #define OPTION_NO_PEEP_COMMENTS "--no-peep-comments" -#define OPTION_NO_GEN_COMMENTS "--no-gen-comments" +#define OPTION_VERBOSE_ASM "--fverbose-asm" #define OPTION_OPT_CODE_SPEED "--opt-code-speed" #define OPTION_OPT_CODE_SIZE "--opt-code-size" #define OPTION_STD_C89 "--std-c89" @@ -220,7 +220,7 @@ optionsTable[] = { { 0, OPTION_NO_XINIT_OPT, &options.noXinitOpt, "don't memcpy initialized xram from code"}, { 0, OPTION_NO_CCODE_IN_ASM, &options.noCcodeInAsm, "don't include c-code as comments in the asm file"}, { 0, OPTION_NO_PEEP_COMMENTS, &options.noPeepComments, "don't include peephole optimizer comments"}, - { 0, OPTION_NO_GEN_COMMENTS, &options.noGenComments, "don't include code generator comments"}, + { 0, OPTION_VERBOSE_ASM, &options.verboseAsm, "include code generator comments"}, #if !OPT_DISABLE_Z80 || !OPT_DISABLE_GBZ80 { 0, "--no-std-crt0", &options.no_std_crt0, "For the z80/gbz80 do not link default crt0.o"}, #endif @@ -585,8 +585,8 @@ setDefaultOptions (void) options.shortis8bits = 0; options.std_sdcc = 1; /* enable SDCC language extensions */ options.std_c99 = 0; /* default to C89 until more C99 support */ - options.code_seg = CODE_NAME; /* default to CSEG for generated code */ - options.const_seg = CONST_NAME; /* default to CONST for generated code */ + options.code_seg = CODE_NAME ? Safe_strdup(CODE_NAME) : NULL; /* default to CSEG for generated code */ + options.const_seg = CONST_NAME ? Safe_strdup(CONST_NAME) : NULL; /* default to CONST for generated code */ options.stack10bit=0; @@ -888,6 +888,12 @@ parseCmdLine (int argc, char **argv) if (i >= argc) break; + /* check port specific options before general ones */ + if (port->parseOption (&argc, argv, &i) == TRUE) + { + continue; + } + if (tryHandleUnsupportedOpt(argv, &i) == TRUE) { continue; @@ -1157,6 +1163,7 @@ parseCmdLine (int argc, char **argv) dbuf_init (&segname, 16); dbuf_printf (&segname, "%-8s(CODE)", getStringArg (OPTION_CODE_SEG, argv, &i, argc)); + if (options.code_seg) Safe_free(options.code_seg); options.code_seg = dbuf_detach (&segname); continue; } @@ -1167,19 +1174,13 @@ parseCmdLine (int argc, char **argv) dbuf_init (&segname, 16); dbuf_printf (&segname, "%-8s(CODE)", getStringArg (OPTION_CONST_SEG, argv, &i, argc)); + if (options.const_seg) Safe_free(options.const_seg); options.const_seg = dbuf_detach (&segname); continue; } - if (!port->parseOption (&argc, argv, &i)) - { - werror (W_UNKNOWN_OPTION, argv[i]); - continue; - } - else - { - continue; - } + werror (W_UNKNOWN_OPTION, argv[i]); + continue; } /* if preceded by '-' then option */ @@ -1342,23 +1343,19 @@ parseCmdLine (int argc, char **argv) break; default: - if (!port->parseOption (&argc, argv, &i)) - werror (W_UNKNOWN_OPTION, argv[i]); + werror (W_UNKNOWN_OPTION, argv[i]); } continue; } - if (!port->parseOption (&argc, argv, &i)) + /* no option must be a filename */ + if (options.c1mode) { - /* no option must be a filename */ - if (options.c1mode) - { - werror (W_NO_FILE_ARG_IN_C1, argv[i]); - } - else - { - processFile (argv[i]); - } + werror (W_NO_FILE_ARG_IN_C1, argv[i]); + } + else + { + processFile (argv[i]); } } @@ -1405,7 +1402,7 @@ parseCmdLine (int argc, char **argv) { struct dbuf_s path; - if (*dstPath != '\0') + if (*dstPath != '\0') { dbuf_init(&path, 128); dbuf_makePath (&path, dstPath, moduleNameBase); @@ -1422,6 +1419,14 @@ parseCmdLine (int argc, char **argv) dbuf_init(&file, 128); + /* get rid of the "."-extension */ + dbuf_splitFile (s, &file, NULL); + + dbuf_c_str (&file); + s = dbuf_detach (&file); + + dbuf_init (&file, 128); + dbuf_splitPath (s, NULL, &file); if (*dstPath != '\0') @@ -1475,6 +1480,17 @@ parseCmdLine (int argc, char **argv) return 0; } +/*-----------------------------------------------------------------*/ +/* finalizeOptions - finalize (post-process( options */ +/*-----------------------------------------------------------------*/ +static void +finalizeOptions (void) +{ + /* no peephole comments if not verbose asm */ + if (!options.verboseAsm) + options.noPeepComments = 1; +} + /*-----------------------------------------------------------------*/ /* linkEdit : - calls the linkage editor with options */ /*-----------------------------------------------------------------*/ @@ -1490,7 +1506,7 @@ linkEdit (char **envp) linkerScriptFileName[0] = 0; c = NULL; - if(port->linker.needLinkerScript) + if (port->linker.needLinkerScript) { char out_fmt; @@ -1510,7 +1526,7 @@ linkEdit (char **envp) } /* first we need to create the .lnk file */ - SNPRINTF (linkerScriptFileName, sizeof(scratchFileName), + SNPRINTF (linkerScriptFileName, sizeof(linkerScriptFileName), "%s.lnk", dstFileName); if (!(lnkfile = fopen (linkerScriptFileName, "w"))) { @@ -2027,7 +2043,7 @@ preProcess (char **envp) /* if using dollar signs in identifiers */ if (options.dollars_in_ident) - addSet(&preArgvSet, Safe_strdup("--fdollars-in-identifiers")); + addSet(&preArgvSet, Safe_strdup("-fdollars-in-identifiers")); /* if using external stack define the macro */ if (options.useXstack) @@ -2085,8 +2101,8 @@ preProcess (char **envp) if (port && port->processor && TARGET_IS_PIC) { char proc[512]; - SNPRINTF(&proc[0], 512, "-DSDCC_PROCESSOR=\"%s\"", port->processor); - addSet(&preArgvSet, Safe_strdup(proc)); + SNPRINTF(&proc[0], 512, "-DSDCC_PROCESSOR=\"%s\"", port->processor); + addSet(&preArgvSet, Safe_strdup(proc)); } /* standard include path */ @@ -2428,8 +2444,13 @@ main (int argc, char **argv, char **envp) And the z80 port needs port->finaliseOptions(), even if we're only linking. */ initMem (); + + /* finalize target specific options */ port->finaliseOptions (); + /* finalize common options */ + finalizeOptions (); + if (fullSrcFileName || options.c1mode) { preProcess (envp);