#define OPTION_STACK_8BIT "--stack-8bit"
#define OPTION_OUT_FMT_IHX "--out-fmt-ihx"
+#define OPTION_OUT_FMT_S19 "--out-fmt-s19"
#define OPTION_LARGE_MODEL "--model-large"
#define OPTION_MEDIUM_MODEL "--model-medium"
#define OPTION_SMALL_MODEL "--model-small"
#define OPTION_NO_PEEP_COMMENTS "--no-peep-comments"
#define OPTION_OPT_CODE_SPEED "--opt-code-speed"
#define OPTION_OPT_CODE_SIZE "--opt-code-size"
+#define OPTION_STD_C89 "--std-c89"
+#define OPTION_STD_C99 "--std-c99"
+#define OPTION_STD_SDCC89 "--std-sdcc89"
+#define OPTION_STD_SDCC99 "--std-sdcc99"
static const OPTION
optionsTable[] = {
{ 0, OPTION_DISABLE_WARNING, NULL, "<nnnn> Disable specific warning" },
{ 0, "--debug", &options.debug, "Enable debugging symbol output" },
{ 0, "--cyclomatic", &options.cyclomatic, "Display complexity of compiled functions" },
-
+ { 0, OPTION_STD_C89, NULL, "Use C89 standard only" },
+ { 0, OPTION_STD_SDCC89, NULL, "Use C89 standard with SDCC extensions (default)" },
+ { 0, OPTION_STD_C99, NULL, "Use C99 standard only (incomplete)" },
+ { 0, OPTION_STD_SDCC99, NULL, "Use C99 standard with SDCC extensions (incomplete)" },
+
{ 0, NULL, NULL, "Code generation options"},
{ 'm', NULL, NULL, "Set the port to use e.g. -mz80." },
{ 'p', NULL, NULL, "Select port specific processor e.g. -mpic14 -p16f84" },
{ 'L', NULL, NULL, "Add the next field to the library search path" },
{ 0, OPTION_LIB_PATH, NULL, "<path> use this path to search for libraries" },
{ 0, OPTION_OUT_FMT_IHX, NULL, "Output in Intel hex format" },
- { 0, "--out-fmt-s19", &options.out_fmt, "Output in S19 hex format" },
+ { 0, OPTION_OUT_FMT_S19, NULL, "Output in S19 hex format" },
{ 0, OPTION_XRAM_LOC, NULL, "<nnnn> External Ram start location" },
{ 0, OPTION_XRAM_SIZE, NULL, "<nnnn> External Ram size" },
{ 0, OPTION_IRAM_SIZE, NULL, "<nnnn> Internal Ram size" },
options.nostdinc = 0;
options.verbose = 0;
options.shortis8bits = 0;
+ options.std_sdcc = 1; /* enable SDCC language extensions */
+ options.std_c99 = 0; /* default to C89 until more C99 support */
options.stack10bit=0;
continue;
}
+ if (strcmp (argv[i], OPTION_OUT_FMT_S19) == 0)
+ {
+ options.out_fmt = 1;
+ continue;
+ }
+
if (strcmp (argv[i], OPTION_LARGE_MODEL) == 0)
{
_setModel (MODEL_LARGE, argv[i]);
continue;
}
+ if (strcmp (argv[i], OPTION_STD_C89) == 0)
+ {
+ options.std_c99 = 0;
+ options.std_sdcc = 0;
+ continue;
+ }
+
+ if (strcmp (argv[i], OPTION_STD_C99) == 0)
+ {
+ options.std_c99 = 1;
+ options.std_sdcc = 0;
+ continue;
+ }
+
+ if (strcmp (argv[i], OPTION_STD_SDCC89) == 0)
+ {
+ options.std_c99 = 0;
+ options.std_sdcc = 1;
+ continue;
+ }
+
+ if (strcmp (argv[i], OPTION_STD_SDCC99) == 0)
+ {
+ options.std_c99 = 1;
+ options.std_sdcc = 1;
+ continue;
+ }
+
if (!port->parseOption (&argc, argv, &i))
{
werror (W_UNKNOWN_OPTION, argv[i]);
options.float_rent++;
}
+ /* mcs51 has an assembly coded float library that's always reentrant */
+ if (TARGET_IS_MCS51)
+ {
+ options.float_rent++;
+ }
+
/* set up external stack location if not explicitly specified */
if (!options.xstack_loc)
options.xstack_loc = options.xdata_loc;
WRITE_SEG_LOC (BIT_NAME, 0);
/* stack start */
- if ( (options.stack_loc) && (options.stack_loc<0x100) )
+ if ( (options.stack_loc) && (options.stack_loc<0x100) &&
+ !TARGET_IS_HC08)
{
WRITE_SEG_LOC ("SSEG", options.stack_loc);
}
set *tempSet=NULL;
tempSet = appendStrSet(libDirsSet, NULL, DIR_SEPARATOR_STRING);
- tempSet = appendStrSet(libDirsSet, NULL, c);
+ tempSet = appendStrSet(tempSet, NULL, c);
mergeSets(&tempSet, libPathsSet);
for (s = setFirstItem(tempSet); s != NULL; s = setNextItem(tempSet))
setIncludePath(void)
{
char *p;
+ char *p2=NULL;
+ set *tempSet=NULL;
/*
* Search logic:
*
- * 1. - $SDCC_INCLUDE
- * 2. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX
- * 3. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX
- * 4. - DATADIR/INCLUDE_DIR_SUFFIX (only on *nix)
+ * 1. - $SDCC_INCLUDE/target
+ * 2. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX/target
+ * 3. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX/target
+ * 4. - DATADIR/INCLUDE_DIR_SUFFIX/target (only on *nix)
+ * 5. - $SDCC_INCLUDE
+ * 6. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX
+ * 7. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX
+ * 8. - DATADIR/INCLUDE_DIR_SUFFIX (only on *nix)
*/
if (options.nostdinc)
return;
- includeDirsSet = appendStrSet(dataDirsSet, NULL, INCLUDE_DIR_SUFFIX);
+ tempSet = appendStrSet(dataDirsSet, NULL, INCLUDE_DIR_SUFFIX);
+ includeDirsSet = appendStrSet(tempSet, NULL, DIR_SEPARATOR_STRING);
+ includeDirsSet = appendStrSet(includeDirsSet, NULL, port->target);
+ mergeSets(&includeDirsSet, tempSet);
if ((p = getenv(SDCC_INCLUDE_NAME)) != NULL)
+ {
addSetHead(&includeDirsSet, p);
+ p2=Safe_alloc(strlen(p)+strlen(DIR_SEPARATOR_STRING)+strlen(port->target)+1);
+ if(p2!=NULL)
+ {
+ strcpy(p2, p);
+ strcat(p2, DIR_SEPARATOR_STRING);
+ strcat(p2, port->target);
+ addSetHead(&includeDirsSet, p2);
+ }
+ }
#if 0
if (options.printSearchDirs) {