#define OPTION_PACK_IRAM "--pack-iram"
#define OPTION_NO_PACK_IRAM "--no-pack-iram"
#define OPTION_NO_PEEP_COMMENTS "--no-peep-comments"
+#define OPTION_VERBOSE_ASM "--fverbose-asm"
#define OPTION_OPT_CODE_SPEED "--opt-code-speed"
#define OPTION_OPT_CODE_SIZE "--opt-code-size"
#define OPTION_STD_C89 "--std-c89"
{ 0, OPTION_NO_XINIT_OPT, &options.noXinitOpt, "don't memcpy initialized xram from code"},
{ 0, OPTION_NO_CCODE_IN_ASM, &options.noCcodeInAsm, "don't include c-code as comments in the asm file"},
{ 0, OPTION_NO_PEEP_COMMENTS, &options.noPeepComments, "don't include peephole optimizer comments"},
+ { 0, OPTION_VERBOSE_ASM, &options.verboseAsm, "include code generator comments"},
#if !OPT_DISABLE_Z80 || !OPT_DISABLE_GBZ80
{ 0, "--no-std-crt0", &options.no_std_crt0, "For the z80/gbz80 do not link default crt0.o"},
#endif
options.shortis8bits = 0;
options.std_sdcc = 1; /* enable SDCC language extensions */
options.std_c99 = 0; /* default to C89 until more C99 support */
- options.code_seg = CODE_NAME; /* default to CSEG for generated code */
- options.const_seg = CONST_NAME; /* default to CONST for generated code */
+ options.code_seg = CODE_NAME ? Safe_strdup(CODE_NAME) : NULL; /* default to CSEG for generated code */
+ options.const_seg = CONST_NAME ? Safe_strdup(CONST_NAME) : NULL; /* default to CONST for generated code */
options.stack10bit=0;
if (i >= argc)
break;
+ /* check port specific options before general ones */
+ if (port->parseOption (&argc, argv, &i) == TRUE)
+ {
+ continue;
+ }
+
if (tryHandleUnsupportedOpt(argv, &i) == TRUE)
{
continue;
dbuf_init (&segname, 16);
dbuf_printf (&segname, "%-8s(CODE)", getStringArg (OPTION_CODE_SEG, argv, &i, argc));
+ if (options.code_seg) Safe_free(options.code_seg);
options.code_seg = dbuf_detach (&segname);
continue;
}
dbuf_init (&segname, 16);
dbuf_printf (&segname, "%-8s(CODE)", getStringArg (OPTION_CONST_SEG, argv, &i, argc));
+ if (options.const_seg) Safe_free(options.const_seg);
options.const_seg = dbuf_detach (&segname);
continue;
}
- if (!port->parseOption (&argc, argv, &i))
- {
- werror (W_UNKNOWN_OPTION, argv[i]);
- continue;
- }
- else
- {
- continue;
- }
+ werror (W_UNKNOWN_OPTION, argv[i]);
+ continue;
}
/* if preceded by '-' then option */
break;
default:
- if (!port->parseOption (&argc, argv, &i))
- werror (W_UNKNOWN_OPTION, argv[i]);
+ werror (W_UNKNOWN_OPTION, argv[i]);
}
continue;
}
- if (!port->parseOption (&argc, argv, &i))
+ /* no option must be a filename */
+ if (options.c1mode)
{
- /* no option must be a filename */
- if (options.c1mode)
- {
- werror (W_NO_FILE_ARG_IN_C1, argv[i]);
- }
- else
- {
- processFile (argv[i]);
- }
+ werror (W_NO_FILE_ARG_IN_C1, argv[i]);
+ }
+ else
+ {
+ processFile (argv[i]);
}
}
{
struct dbuf_s path;
- if (*dstPath != '\0')
+ if (*dstPath != '\0')
{
dbuf_init(&path, 128);
dbuf_makePath (&path, dstPath, moduleNameBase);
dbuf_init(&file, 128);
+ /* get rid of the "."-extension */
+ dbuf_splitFile (s, &file, NULL);
+
+ dbuf_c_str (&file);
+ s = dbuf_detach (&file);
+
+ dbuf_init (&file, 128);
+
dbuf_splitPath (s, NULL, &file);
if (*dstPath != '\0')
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;
+ /* set up external stack location if not explicitly specified */
+ if (!options.xstack_loc)
+ options.xstack_loc = options.xdata_loc;
+ }
/* if debug option is set then open the cdbFile */
if (options.debug && fullSrcFileName)
return 0;
}
+/*-----------------------------------------------------------------*/
+/* finalizeOptions - finalize (post-process( options */
+/*-----------------------------------------------------------------*/
+static void
+finalizeOptions (void)
+{
+ /* no peephole comments if not verbose asm */
+ if (!options.verboseAsm)
+ options.noPeepComments = 1;
+}
+
/*-----------------------------------------------------------------*/
/* linkEdit : - calls the linkage editor with options */
/*-----------------------------------------------------------------*/
char linkerScriptFileName[PATH_MAX];
linkerScriptFileName[0] = 0;
+ c = NULL;
- if(port->linker.needLinkerScript)
+ if (port->linker.needLinkerScript)
{
char out_fmt;
}
/* first we need to create the <filename>.lnk file */
- SNPRINTF (linkerScriptFileName, sizeof(scratchFileName),
+ SNPRINTF (linkerScriptFileName, sizeof(linkerScriptFileName),
"%s.lnk", dstFileName);
if (!(lnkfile = fopen (linkerScriptFileName, "w")))
{
}
#define WRITE_SEG_LOC(N, L) \
- segName = Safe_strdup(N); \
- c = strtok(segName, " \t"); \
- fprintf (lnkfile,"-b %s = 0x%04x\n", c, L); \
- if (segName) { Safe_free(segName); }
+ if (N) \
+ { \
+ segName = Safe_strdup(N); \
+ c = strtok(segName, " \t"); \
+ fprintf (lnkfile,"-b %s = 0x%04x\n", c, L); \
+ if (segName) { Safe_free(segName); } \
+ }
if (!(TARGET_Z80_LIKE)) /*Not for the z80, gbz80*/
{
/* if using dollar signs in identifiers */
if (options.dollars_in_ident)
- addSet(&preArgvSet, Safe_strdup("--fdollars-in-identifiers"));
+ addSet(&preArgvSet, Safe_strdup("-fdollars-in-identifiers"));
/* if using external stack define the macro */
if (options.useXstack)
if (port && port->processor && TARGET_IS_PIC) {
char proc[512];
- SNPRINTF(&proc[0], 512, "-DSDCC_PROCESSOR=\"%s\"", port->processor);
- addSet(&preArgvSet, Safe_strdup(proc));
+ SNPRINTF(&proc[0], 512, "-DSDCC_PROCESSOR=\"%s\"", port->processor);
+ addSet(&preArgvSet, Safe_strdup(proc));
}
/* standard include path */
And the z80 port needs port->finaliseOptions(),
even if we're only linking. */
initMem ();
+
+ /* finalize target specific options */
port->finaliseOptions ();
+ /* finalize common options */
+ finalizeOptions ();
+
if (fullSrcFileName || options.c1mode)
{
preProcess (envp);