X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=5c03a511bad0b10cf99bfbc751bd013cb196f3a1;hb=c0c61a4b6f890c14b4b2c3e4f1d87626138e7ec3;hp=a67f2bc21d44d761a25a02502b97e6521a7594ae;hpb=e6f797f8ccde60604461df6cbb869546fbfbbc2d;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index a67f2bc2..5c03a511 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -79,8 +79,8 @@ int ds390_jammed = 0; #endif // Globally accessible scratch buffer for file names. -char scratchFileName[FILENAME_MAX]; -char buffer[FILENAME_MAX]; +char scratchFileName[PATH_MAX]; +char buffer[PATH_MAX]; // In MSC VC6 default search path for exe's to path for this @@ -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,6 +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, "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" }, @@ -188,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 }, @@ -203,7 +206,14 @@ optionsTable[] = { { 0, "--verbose", &options.verbose, "Trace calls to the preprocessor, assembler, and linker" }, { 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, "--profile", &options.profile, "On supported ports, generate extra profiling information" }, + { 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"}, + { 0, "--protect-sp-update", &options.protect_sp_update,"DS390 - will disable interrupts during ESP:SP updates"}, + { 0, "--parms-in-bank1", &options.parms_in_bank1,"MCS51/DS390 - use Bank1 for parameter passing"} }; /** Table of all unsupported options and help text to display when one @@ -273,6 +283,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])) @@ -507,8 +523,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); @@ -890,6 +913,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)) { @@ -933,23 +962,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': @@ -1130,7 +1161,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) */ @@ -1163,7 +1194,9 @@ linkEdit (char **envp) if (port->linker.cmd) { - buildCmdLine (buffer, port->linker.cmd, srcFileName, NULL, NULL, NULL); + char buffer2[PATH_MAX]; + buildCmdLine (buffer2, port->linker.cmd, srcFileName, NULL, NULL, NULL); + buildCmdLine2 (buffer, buffer2); } else { @@ -1191,23 +1224,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); } } @@ -1233,6 +1265,10 @@ preProcess (char **envp) if (options.stack10bit) addToList (preArgv, "-DSDCC_STACK_TENBIT"); + /* set the macro for no overlay */ + if (options.noOverlay) + addToList (preArgv, "-DSDCC_NOOVERLAY"); + /* set the macro for large model */ switch (options.model) { @@ -1444,10 +1480,11 @@ initValues (void) { populateMainValues (_baseValues); setMainValue ("port", port->target); - setMainValue ("fullsrcfilename", fullSrcFileName); - setMainValue ("srcfilename", srcFileName); setMainValue ("objext", port->linker.rel_ext); setMainValue ("asmext", port->assembler.file_ext); + + setMainValue ("fullsrcfilename", fullSrcFileName ? fullSrcFileName : "fullsrcfilename"); + setMainValue ("srcfilename", srcFileName ? srcFileName : "srcfilename"); } /* @@ -1500,20 +1537,21 @@ main (int argc, char **argv, char **envp) exit (0); } + initValues (); + _discoverPaths (argv[0]); + if (srcFileName) { - initValues (); - _discoverPaths (argv[0]); - - preProcess (envp); initMem (); port->finaliseOptions (); + preProcess (envp); initSymt (); initiCode (); initCSupport (); + initBuiltIns(); initPeepHole (); if (options.verbose)