#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"
{ '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" },
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]);
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);
}
It is very important for this file to be first on the linking proccess
so the areas are set in the correct order, expecially _GSINIT*/
if ((TARGET_IS_Z80 || TARGET_IS_GBZ80) &&
- !options.no_std_crt0 && !options.nostdlib) /*For the z80, gbz80*/
+ !options.no_std_crt0) /*For the z80, gbz80*/
{
char crt0path[PATH_MAX];
FILE * crt0fp;
- for (s = setFirstItem(libDirsSet); s != NULL; s = setNextItem(libDirsSet))
+ set *tempSet=NULL;
+
+ tempSet = appendStrSet(libDirsSet, NULL, DIR_SEPARATOR_STRING);
+ tempSet = appendStrSet(libDirsSet, NULL, c);
+ mergeSets(&tempSet, libPathsSet);
+
+ for (s = setFirstItem(tempSet); s != NULL; s = setNextItem(tempSet))
{
- sprintf (crt0path, "%s%s%s%scrt0.o",
- s, DIR_SEPARATOR_STRING, c, DIR_SEPARATOR_STRING);
+ sprintf (crt0path, "%s%scrt0.o",
+ s, DIR_SEPARATOR_STRING);
crt0fp=fopen(crt0path, "r");
if(crt0fp!=NULL)/*Found it!*/
setIncludePath(void)
{
char *p;
+ 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)
*/
- includeDirsSet = appendStrSet(dataDirsSet, NULL, INCLUDE_DIR_SUFFIX);
+ if (options.nostdinc)
+ return;
+
+ 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);
* 4. - DATADIR/LIB_DIR_SUFFIX/<model> (only on *nix)
*/
+ if (options.nostdlib)
+ return;
+
libDirsSet = appendStrSet(dataDirsSet, NULL, LIB_DIR_SUFFIX);
if ((p = getenv(SDCC_LIB_NAME)) != NULL)