X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=12909d3b01abdb824a3eb09c0f60bd690b8c5223;hb=bb226788dab3832b0ec0cda70874ce3fce4eebc6;hp=aa1e5e4636367e78bca44a73ba8d9da4a3db50e6;hpb=f238f5dbbb3b1953f058349fcdadfa62db14ecce;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index aa1e5e46..12909d3b 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -186,8 +186,8 @@ optionsTable[] = { { 0, OPTION_SMALL_MODEL, NULL, "internal data space is used (default)" }, { 0, "--stack-auto", &options.stackAuto, "Stack automatic variables" }, { 0, "--xstack", &options.useXstack, "Use external stack" }, - { 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 float support functions" }, + { 0, "--int-long-reent", &options.intlong_rent, "Use reentrant calls on the int and long support functions" }, + { 0, "--float-reent", &options.float_rent, "Use reentrant calls on the float support functions" }, { 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, OPTION_CALLEE_SAVES, &options.calleeSavesSet, " Cause the called function to save registers insted of the caller", CLAT_SET }, @@ -283,7 +283,7 @@ static const char *_baseValues[] = { NULL }; -static const char *_preCmd = "{cpp} -nostdinc -Wall -std=c99 {cppextraopts} \"{fullsrcfilename}\" \"{cppoutfilename}\""; +static const char *_preCmd = "{cpp} -nostdinc -Wall {cppstd}{cppextraopts} \"{fullsrcfilename}\" \"{cppoutfilename}\""; PORT *port; @@ -426,8 +426,8 @@ printVersionInfo (FILE *stream) #ifdef SDCC_SUB_VERSION_STR "/" SDCC_SUB_VERSION_STR #endif - " #%s (" __DATE__ ") (%s)\n", - getBuildNumber(), getBuildEnvironment() ); + " #%s (%s) (%s)\n", + getBuildNumber(), getBuildDate(), getBuildEnvironment() ); } static void @@ -1309,6 +1309,15 @@ parseCmdLine (int argc, char **argv) werror (E_NEED_OPT_O_IN_C1); exit (EXIT_FAILURE); } + else + { + char *p; + + moduleName = Safe_strdup(dstFileName); + for (p = moduleName; *p; ++p) + if (!isalnum ((unsigned char)*p)) + *p = '_'; + } } /* if no dstFileName given with -o, we've to find one: */ if (!dstFileName) @@ -1481,11 +1490,11 @@ linkEdit (char **envp) /* if code size specified */ if (options.code_size) fprintf (lnkfile, "-w 0x%04x\n", options.code_size); - - if (options.debug) - fprintf (lnkfile, "-z\n"); } + if (options.debug) + fprintf (lnkfile, "-z\n"); + #define WRITE_SEG_LOC(N, L) \ if (N) \ { \ @@ -2005,6 +2014,14 @@ preProcess (char **envp) break; } + /* set macro corresponding to compiler option */ + if (options.intlong_rent) + addSet(&preArgvSet, Safe_strdup("-DSDCC_INT_LONG_REENT")); + + /* set macro corresponding to compiler option */ + if (options.float_rent) + addSet(&preArgvSet, Safe_strdup("-DSDCC_FLOAT_REENT")); + /* add SDCC version number */ { char buf[20]; @@ -2013,6 +2030,13 @@ preProcess (char **envp) addSet(&preArgvSet, Safe_strdup(buf)); } + /* add SDCC revision number */ + { + char buf[25]; + SNPRINTF(buf, sizeof(buf), "-DSDCC_REVISION=%s", getBuildNumber()); + addSet(&preArgvSet, Safe_strdup(buf)); + } + /* add port (processor information to processor */ addSet(&preArgvSet, Safe_strdup("-DSDCC_{port}")); addSet(&preArgvSet, Safe_strdup("-D__{port}")); @@ -2025,7 +2049,7 @@ preProcess (char **envp) /* standard include path */ if (!options.nostdinc) { - inclList = appendStrSet(includeDirsSet, "-I\"", "\""); + inclList = appendStrSet(includeDirsSet, "-isystem \"", "\""); mergeSets(&preArgvSet, inclList); } @@ -2069,7 +2093,7 @@ preProcess (char **envp) /* Set bin paths */ static void -setBinPaths(const char *argv0) +setBinPaths (const char *argv0) { const char *p; char buf[PATH_MAX]; @@ -2085,22 +2109,22 @@ setBinPaths(const char *argv0) /* do it in reverse mode, so that addSetHead() can be used instead of slower addSet() */ - if ((p = getBinPath(argv0)) != NULL) - addSetHead(&binPathSet, (void *)p); + if ((p = getBinPath (argv0)) != NULL) + addSetHead (&binPathSet, (void *)p); - if ((p = getenv(SDCC_DIR_NAME)) != NULL) { - SNPRINTF(buf, sizeof buf, "%s" PREFIX2BIN_DIR, p); - addSetHead(&binPathSet, Safe_strdup(buf)); + if ((p = getenv (SDCC_DIR_NAME)) != NULL) { + SNPRINTF (buf, sizeof buf, "%s" PREFIX2BIN_DIR, p); + addSetHead (&binPathSet, Safe_strdup (buf)); } } /* Set system include path */ static void -setIncludePath(void) +setIncludePath (void) { char *p; - char *p2=NULL; - set *tempSet=NULL; + char *p2 = NULL; + set *tempSet = NULL; /* * Search logic: @@ -2118,28 +2142,28 @@ setIncludePath(void) 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); + 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) + if ((p = getenv (SDCC_INCLUDE_NAME)) != NULL) { - strcpy(p2, p); - strcat(p2, DIR_SEPARATOR_STRING); - strcat(p2, port->target); - addSetHead(&includeDirsSet, p2); + 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); + } } - } } /* Set system lib path */ static void -setLibPath(void) +setLibPath (void) { char *p; @@ -2155,15 +2179,15 @@ setLibPath(void) if (options.nostdlib) return; - libDirsSet = appendStrSet(dataDirsSet, NULL, LIB_DIR_SUFFIX); + libDirsSet = appendStrSet (dataDirsSet, NULL, LIB_DIR_SUFFIX); - if ((p = getenv(SDCC_LIB_NAME)) != NULL) - addSetHead(&libDirsSet, p); + if ((p = getenv (SDCC_LIB_NAME)) != NULL) + addSetHead (&libDirsSet, p); } /* Set data path */ static void -setDataPaths(const char *argv0) +setDataPaths (const char *argv0) { const char *p; char buf[PATH_MAX]; @@ -2176,28 +2200,28 @@ setDataPaths(const char *argv0) * 3. - DATADIR (only on *nix) */ - if ((p = getenv(SDCC_DIR_NAME)) != NULL) { - SNPRINTF(buf, sizeof buf, "%s" PREFIX2DATA_DIR, p); - addSet(&dataDirsSet, Safe_strdup(buf)); + if ((p = getenv (SDCC_DIR_NAME)) != NULL) { + SNPRINTF (buf, sizeof buf, "%s" PREFIX2DATA_DIR, p); + addSet (&dataDirsSet, Safe_strdup (buf)); } - if ((p = getBinPath(argv0)) != NULL) { - SNPRINTF(buf, sizeof buf, "%s" BIN2DATA_DIR, p); - free((void *)p); - addSet(&dataDirsSet, Safe_strdup(buf)); + if ((p = getBinPath (argv0)) != NULL) { + SNPRINTF (buf, sizeof buf, "%s" BIN2DATA_DIR, p); + Safe_free ((void *)p); + addSet (&dataDirsSet, Safe_strdup(buf)); } #ifdef _WIN32 - if (peekSet(dataDirsSet) == NULL) { + if (peekSet (dataDirsSet) == NULL) { /* this should never happen... */ - wassertl(0, "Can't get binary path"); + wassertl (0, "Can't get binary path"); } #else - addSet(&dataDirsSet, Safe_strdup(DATADIR)); + addSet (&dataDirsSet, Safe_strdup (DATADIR)); #endif - setIncludePath(); - setLibPath(); + setIncludePath (); + setLibPath (); } static void @@ -2230,6 +2254,20 @@ initValues (void) setMainValue ("linkdstfilename", "{stdlinkdstfilename}"); } + /* + * Make sure the preprocessor is called with the "-std" option + * corresponding to the --std used to start sdcc + */ + if (options.std_c99) + { + if (!options.std_sdcc) + setMainValue ("cppstd", "-std=c99 "); + } + else + { + if (!options.std_sdcc) + setMainValue ("cppstd", "-std=c89 "); + } } static void doPrintSearchDirs(void) @@ -2295,7 +2333,7 @@ main (int argc, char **argv, char **envp) /* install signal handler; it's only purpose is to call exit() to remove temp files */ - if (!getenv("SDCC_LEAVE_SIGNALS")) + if (!getenv ("SDCC_LEAVE_SIGNALS")) { signal (SIGABRT, sig_handler); signal (SIGTERM, sig_handler); @@ -2312,8 +2350,8 @@ main (int argc, char **argv, char **envp) _findPort (argc, argv); #ifdef JAMIN_DS390 - if (strcmp(port->target, "mcs51") == 0) { - printf("DS390 jammed in A\n"); + if (strcmp (port->target, "mcs51") == 0) { + printf ("DS390 jammed in A\n"); _setPort ("ds390"); ds390_jammed = 1; } @@ -2340,8 +2378,8 @@ main (int argc, char **argv, char **envp) initValues (); - setBinPaths(argv[0]); - setDataPaths(argv[0]); + setBinPaths (argv[0]); + setDataPaths (argv[0]); if (port->initPaths) port->initPaths(); @@ -2385,12 +2423,12 @@ main (int argc, char **argv, char **envp) yyparse (); - if (pclose(yyin)) - fatalError = 1; + if (!options.c1mode) + if (pclose(yyin)) + fatalError = 1; - if (fatalError) { + if (fatalError) exit (EXIT_FAILURE); - } if (port->general.do_glue != NULL) (*port->general.do_glue) (); @@ -2402,9 +2440,8 @@ main (int argc, char **argv, char **envp) glue (); } - if (fatalError) { + if (fatalError) exit (EXIT_FAILURE); - } if (!options.c1mode && !noAssemble) { @@ -2416,13 +2453,13 @@ main (int argc, char **argv, char **envp) closeDumpFiles(); if (options.debug && debugFile) - debugFile->closeFile(); + debugFile->closeFile (); if (!options.cc_only && !fatalError && !noAssemble && !options.c1mode && - (fullSrcFileName || peekSet(relFilesSet) != NULL)) + (fullSrcFileName || peekSet (relFilesSet) != NULL)) { if (options.verbose) printf ("sdcc: Calling linker...\n");