X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=3dfa2fc71aa0fa0bf7abf653720d790ea8abdac5;hb=ffe6ebba1bdc1483a7dfb6008c71cc18c3006c5f;hp=63d3937bff1735c4efc9391d4e4db1a165d51939;hpb=b75e8929c91c765ecea2b27742958c142d645308;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 63d3937b..3dfa2fc7 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -113,6 +113,7 @@ char DefaultExePath[128]; #define OPTION_LESS_PEDANTIC "--lesspedantic" #define OPTION_NO_GCSE "--nogcse" #define OPTION_SHORT_IS_8BITS "--short-is-8bits" +#define OPTION_TINI_LIBID "--tini-libid" /** Table of all options supported by all ports. This table provides: @@ -146,7 +147,7 @@ optionsTable[] = { { 'M', NULL, NULL, "Preprocessor option" }, { 'V', NULL, &verboseExec, "Execute verbosely. Show sub commands as they are run" }, { 'S', NULL, &noAssemble, "Compile only; do not assemble or link" }, - { 'W', NULL, NULL, "Pass through options to the assembler (a) or linker (l)" }, + { 'W', NULL, NULL, "Pass through options to the pre-processor (p), assembler (a) or linker (l)" }, { 'L', NULL, NULL, "Add the next field to the library search path" }, { 'l', NULL, NULL, "Include the given library in the link" }, { 0, OPTION_LARGE_MODEL, NULL, "external data space is used" }, @@ -171,7 +172,7 @@ optionsTable[] = { { 0, "--dumpliverange", &options.dump_range, NULL }, { 0, "--dumpregpack", &options.dump_pack, NULL }, { 0, "--dumpregassign", &options.dump_rassgn, NULL }, - { 0, "--dumptree", &options.dump_tree, NULL }, + { 0, "--dumptree", &options.dump_tree, "dump front-end AST before generating iCode" }, { 0, OPTION_DUMP_ALL, NULL, "Dump the internal structure at all stages" }, { 0, OPTION_XRAM_LOC, NULL, " External Ram start location" }, { 0, OPTION_IRAM_SIZE, NULL, " Internal Ram size" }, @@ -189,6 +190,7 @@ optionsTable[] = { { 0, "--cyclomatic", &options.cyclomatic, NULL }, { 0, "--nooverlay", &options.noOverlay, NULL }, { 0, "--main-return", &options.mainreturn, "Issue a return after main()" }, + { 0, "--xram-movc", &options.xram_movc, "Use movc instead of movx to read xram (xdata)" }, { 0, "--no-peep", &options.nopeep, "Disable the peephole assembly file optimisation" }, { 0, "--no-reg-params", &options.noRegParams, "On some ports, disable passing some parameters in registers" }, { 0, "--peep-asm", &options.asmpeep, NULL }, @@ -205,7 +207,11 @@ optionsTable[] = { { 0, OPTION_LESS_PEDANTIC, NULL, "Disable some of the more pedantic warnings" }, { 0, OPTION_SHORT_IS_8BITS, NULL, "Make short 8bits (for old times sake)" }, { 0, "--profile", &options.profile, "On supported ports, generate extra profiling information" }, - { 0, "--fommit-frame-pointer", &options.ommitFramePtr, "Leave out the frame pointer." } + { 0, "--fommit-frame-pointer", &options.ommitFramePtr, "Leave out the frame pointer." }, + { 0, "--all-callee-saves", &options.all_callee_saves, "callee will always save registers used" }, + { 0, "--use-accelerator", &options.useAccelerator,"generate code for DS390 Arithmetic Accelerator"}, + { 0, "--stack-probe", &options.stack_probe,"insert call to function __stack_probe at each function prologue"}, + { 0, "--tini-libid", NULL," LibraryID used in -mTININative"} }; /** Table of all unsupported options and help text to display when one @@ -275,6 +281,12 @@ static PORT *_ports[] = #if !OPT_DISABLE_TLCS900H &tlcs900h_port, #endif +#if !OPT_DISABLE_TININative + &tininative_port, +#endif +#if !OPT_DISABLE_XA51 + &xa51_port, +#endif }; #define NUM_PORTS (sizeof(_ports)/sizeof(_ports[0])) @@ -509,8 +521,15 @@ processFile (char *s) /* copy the file name into the buffer */ strcpy (buffer, s); - /* get rid of the "." */ - strtok (buffer, "."); + /* get rid of the "."-extension */ + + /* is there a dot at all? */ + if (strchr (buffer, '.') && + /* is the dot in the filename, not in the path? */ + (strrchr (buffer, '/' ) < strrchr (buffer, '.') || + strrchr (buffer, '\\') < strrchr (buffer, '.'))) + *strrchr (buffer, '.') = '\0'; + srcFileName = Safe_alloc ( strlen (buffer) + 1); strcpy (srcFileName, buffer); @@ -892,6 +911,12 @@ parseCmdLine (int argc, char **argv) options.shortis8bits=1; continue; } + + if (strcmp (argv[i], OPTION_TINI_LIBID) == 0) + { + options.tini_libid = getIntArg(OPTION_TINI_LIBID, argv, &i, argc); + continue; + } if (!port->parseOption (&argc, argv, &i)) { @@ -935,23 +960,25 @@ parseCmdLine (int argc, char **argv) break; case 'W': + /* pre-processer options */ + if (argv[i][2] == 'p') + { + parseWithComma ((char **)preArgv, getStringArg("-Wp", argv, &i, argc)); + } /* linker options */ - if (argv[i][2] == 'l') - { - parseWithComma(linkOptions, getStringArg("-Wl", argv, &i, argc)); - } - else + else if (argv[i][2] == 'l') { - /* assembler options */ - if (argv[i][2] == 'a') - { - parseWithComma ((char **) asmOptions, getStringArg("-Wa", argv, &i, argc)); - } - else - { - werror (W_UNKNOWN_OPTION, argv[i]); - } + parseWithComma(linkOptions, getStringArg("-Wl", argv, &i, argc)); } + /* assembler options */ + else if (argv[i][2] == 'a') + { + parseWithComma ((char **) asmOptions, getStringArg("-Wa", argv, &i, argc)); + } + else + { + werror (W_UNKNOWN_OPTION, argv[i]); + } break; case 'v': @@ -1132,7 +1159,7 @@ linkEdit (char **envp) break; } } - fprintf (lnkfile, "-k %s/%s\n", SDCC_LIB_DIR /*STD_LIB_PATH */ , c); + mfprintf (lnkfile, getRuntimeVariables(), "-k {libdir}{sep}%s\n", c); /* standard library files */ /* if (strcmp (port->target, "ds390") == 0) */ @@ -1195,23 +1222,22 @@ linkEdit (char **envp) static void assemble (char **envp) { - if (port->assembler.cmd) - { - buildCmdLine (buffer, port->assembler.cmd, srcFileName, NULL, - options.debug ? port->assembler.debug_opts : port->assembler.plain_opts, - asmOptions); - } - else - { - buildCmdLine2 (buffer, port->assembler.mcmd); + if (port->assembler.do_assemble) { + port->assembler.do_assemble(asmOptions); + return ; + } else if (port->assembler.cmd) { + buildCmdLine (buffer, port->assembler.cmd, srcFileName, NULL, + options.debug ? port->assembler.debug_opts : port->assembler.plain_opts, + asmOptions); + } else { + buildCmdLine2 (buffer, port->assembler.mcmd); } - if (my_system (buffer)) - { - /* either system() or the assembler itself has reported an error - perror ("Cannot exec assembler"); - */ - exit (1); + if (my_system (buffer)) { + /* either system() or the assembler itself has reported an error + perror ("Cannot exec assembler"); + */ + exit (1); } } @@ -1523,6 +1549,7 @@ main (int argc, char **argv, char **envp) initSymt (); initiCode (); initCSupport (); + initBuiltIns(); initPeepHole (); if (options.verbose)