{ 'C', NULL, NULL, "Preprocessor option" },
{ 'M', NULL, NULL, "Preprocessor option" },
{ 'V', NULL, &verboseExec, "Execute verbosely. Show sub commands as they are run" },
- { 'S', NULL, &noAssemble, "Assemble only" },
+ { 'S', NULL, &noAssemble, "Compile only; do not assemble or link" },
{ 'W', NULL, NULL, "Pass through options to the 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, "Far functions, far data" },
- { 0, OPTION_MEDIUM_MODEL, NULL, "Far functions, near data" },
- { 0, OPTION_SMALL_MODEL, NULL, "Small model (default)" },
- { 0, OPTION_FLAT24_MODEL, NULL, NULL },
+ { 0, OPTION_LARGE_MODEL, NULL, "external data space is used" },
+ { 0, OPTION_MEDIUM_MODEL, NULL, "not supported" },
+ { 0, OPTION_SMALL_MODEL, NULL, "internal data space is used (default)" },
+ { 0, OPTION_FLAT24_MODEL, NULL, "use the flat24 model for the ds390 (default)" },
{ 0, "--stack-auto", &options.stackAuto, "Stack automatic variables" },
- { 0, OPTION_STACK_8BIT, NULL, NULL },
- { 0, "--stack-10bit", &options.stack10bit, NULL },
+ { 0, OPTION_STACK_8BIT, NULL, "use the 8bit stack for the ds390 (not supported yet)" },
+ { 0, "--stack-10bit", &options.stack10bit, "use the 10bit stack for ds390 (default)" },
{ 0, "--xstack", &options.useXstack, "Use external stack" },
{ 0, "--generic", &options.genericPtr, "All unqualified ptrs converted to '_generic'" },
{ 0, OPTION_NO_GCSE, NULL, "Disable the GCSE optimisation" },
{ 0, OPTION_NO_LOOP_IND, NULL, NULL },
{ 0, "--nojtbound", &optimize.noJTabBoundary, "Don't generate boundary check for jump tables" },
{ 0, "--noloopreverse", &optimize.noLoopReverse, "Disable the loop reverse optimisation" },
- { 'c', "--compile-only", &options.cc_only, "Compile only, do not assemble or link" },
+ { 'c', "--compile-only", &options.cc_only, "Compile and assemble, but do not link" },
{ 0, "--dumpraw", &options.dump_raw, "Dump the internal structure after the initial parse" },
{ 0, "--dumpgcse", &options.dump_gcse, NULL },
{ 0, "--dumploop", &options.dump_loop, NULL },
{ 0, "--dumpregpack", &options.dump_pack, NULL },
{ 0, "--dumpregassign", &options.dump_rassgn, NULL },
{ 0, OPTION_DUMP_ALL, NULL, "Dump the internal structure at all stages" },
- { 0, OPTION_XRAM_LOC, NULL, NULL },
+ { 0, OPTION_XRAM_LOC, NULL, "<nnnn> External Ram start location" },
{ 0, OPTION_IRAM_SIZE, NULL, "<nnnn> Internal Ram size" },
{ 0, OPTION_XSTACK_LOC, NULL, "<nnnn> External Ram start location" },
{ 0, OPTION_CODE_LOC, NULL, "<nnnn> Code Segment Location" },
{ 0, OPTION_STACK_LOC, NULL, "<nnnn> Stack pointer initial value" },
{ 0, OPTION_DATA_LOC, NULL, "<nnnn> Direct data start location" },
{ 0, OPTION_IDATA_LOC, NULL, NULL },
- { 0, OPTION_PEEP_FILE, NULL, NULL },
- { 0, OPTION_LIB_PATH, NULL, NULL },
+ { 0, OPTION_PEEP_FILE, NULL, "<file> use this extra peep-hole file" },
+ { 0, OPTION_LIB_PATH, NULL, "<path> use this path to search for libraries" },
{ 0, "--int-long-reent", &options.intlong_rent, "Use reenterant calls on the int and long support functions" },
{ 0, "--float-reent", &options.float_rent, "Use reenterant calls on the floar support functions" },
{ 0, OPTION_OUT_FMT_IHX, NULL, NULL },
{ 0, "--peep-asm", &options.asmpeep, NULL },
{ 0, "--debug", &options.debug, "Enable debugging symbol output" },
{ 'v', OPTION_VERSION, NULL, "Display sdcc's version" },
- { 0, "--stack-after-data", &options.stackOnData, NULL },
+ { 0, "--stack-after-data", &options.stackOnData, "initialize the stackpointer with the last byte use in DSEG" },
{ 'E', "--preprocessonly", &preProcOnly, "Preprocess only, do not compile" },
{ 0, "--c1mode", &options.c1mode, "Act in c1 mode. The input is preprocessed code, the output is assembly code." },
{ 0, "--help", NULL, "Display this help" },
- { 0, OPTION_CALLEE_SAVES, NULL, "Cause the called function to save registers insted of the caller" },
+ { 0, OPTION_CALLEE_SAVES, NULL, "<func[,func,...]> Cause the called function to save registers insted of the caller" },
{ 0, "--nostdlib", &options.nostdlib, "Do not include the standard library directory in the search path" },
- { 0, "--nostdinc", &options.nostdinc, NULL },
+ { 0, "--nostdinc", &options.nostdinc, "Do not include the standard include directory in the search path" },
{ 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, OPTION_SHORT_IS_8BITS, NULL, "Make short 8bits (for old times sake)" },
+ { 0, "--profile", &options.profile, "On supported ports, generate extra profiling information" }
};
/** Table of all unsupported options and help text to display when one
#ifdef SDCC_SUB_VERSION_STR
"/" SDCC_SUB_VERSION_STR
#endif
-#ifdef __CYGWIN32__
- " (CYGWIN32)\n"
+#ifdef __CYGWIN__
+ " (CYGWIN)\n"
#else
#ifdef __DJGPP__
" (DJGPP) \n"
{
int i = 0;
- strtok (src, "\n \t");
+ strtok (src, "\r\n \t");
/* skip the initial white spaces */
while (isspace (*src))
src++;
options.nostdlib = 0;
options.nostdinc = 0;
options.verbose = 0;
- options.shortis8bits = 1;
+ options.shortis8bits = 0;
options.stack10bit=0;
}
else
{
- return argv[++(*pi)];
+ return argv[*pi];
}
}
}
return (int)floatFromVal(constVal(getStringArg(szStart, argv, pi, argc)));
}
+static void
+verifyShortOption(const char *opt)
+{
+ if (strlen(opt) != 2)
+ {
+ werror (W_EXCESS_SHORT_OPTIONS, opt);
+ }
+}
+
static bool
tryHandleUnsupportedOpt(char **argv, int *pi)
{
}
for (i = 0; i < LENGTH(optionsTable); i++)
- {
- if (optionsTable[i].shortOpt == shortOpt ||
- (longOpt && optionsTable[i].longOpt && strcmp(optionsTable[i].longOpt, longOpt) == 0))
- {
- // If it is a flag then we can handle it here
- if (optionsTable[i].pparameter != NULL)
- {
- (*optionsTable[i].pparameter)++;
- return 1;
- }
- else {
- // Not a flag. Handled manually later.
- return 0;
- }
- }
- }
+ {
+ if (optionsTable[i].shortOpt == shortOpt ||
+ (longOpt && optionsTable[i].longOpt &&
+ strcmp(optionsTable[i].longOpt, longOpt) == 0))
+ {
+
+ // If it is a flag then we can handle it here
+ if (optionsTable[i].pparameter != NULL)
+ {
+ if (optionsTable[i].shortOpt == shortOpt)
+ {
+ verifyShortOption(argv[*pi]);
+ }
+
+ (*optionsTable[i].pparameter)++;
+ return 1;
+ }
+ else {
+ // Not a flag. Handled manually later.
+ return 0;
+ }
+ }
+ }
// Didn't find in the table
return 0;
}
switch (argv[i][1])
{
case 'h':
+ verifyShortOption(argv[i]);
+
printUsage ();
exit (0);
break;
break;
case 'c':
+ verifyShortOption(argv[i]);
+
options.cc_only = 1;
break;
break;
case 'v':
+ verifyShortOption(argv[i]);
+
printVersionInfo ();
exit (0);
break;
/* standard library path */
if (!options.nostdlib)
{
+/****
if (TARGET_IS_DS390)
{
c = "ds390";
}
else
+*****/
{
switch (options.model)
{
c = "large";
break;
case MODEL_FLAT24:
- c = "flat24";
+ /* c = "flat24"; */
+ c = "ds390";
break;
default:
werror (W_UNKNOWN_MODEL, __FILE__, __LINE__);
fprintf (lnkfile, "-k %s/%s\n", SDCC_LIB_DIR /*STD_LIB_PATH */ , c);
/* standard library files */
- if (strcmp (port->target, "ds390") == 0)
+ /* if (strcmp (port->target, "ds390") == 0) */
+ if (options.model == MODEL_FLAT24)
{
fprintf (lnkfile, "-l %s\n", STD_DS390_LIB);
}
setDefaultOptions ();
parseCmdLine (argc, argv);
- initMem ();
-
- port->finaliseOptions ();
-
+ if (getenv("SDCPP"))
+ {
+ _preCmd[0] = getenv("SDCPP");
+ }
+
/* if no input then printUsage & exit */
if ((!options.c1mode && !srcFileName && !nrelFiles) ||
(options.c1mode && !srcFileName && !options.out_name))
{
preProcess (envp);
+ initMem ();
+
+ port->finaliseOptions ();
+
initSymt ();
initiCode ();
initCSupport ();
free (preOutName);
}
// EndFix
+ #if defined (__MINGW32__) || defined (__CYGWIN__) || defined (_MSC_VER)
+ rm_tmpfiles();
+ #endif
return 1;
}
if (cdbFile)
fclose (cdbFile);
+ if (preOutName && !options.c1mode)
+ {
+ unlink (preOutName);
+ free (preOutName);
+ }
+
if (!options.cc_only &&
!fatalError &&
!noAssemble &&
if (yyin && yyin != stdin)
fclose (yyin);
- if (preOutName && !options.c1mode)
- {
- unlink (preOutName);
- free (preOutName);
- }
-
return 0;
}