Browse Source

Add --outputbin-main-only option to the standalone ld-tigcc.

git-svn-id: file:///var/svn/tigccpp/trunk/tigcc/ld-tigcc@672 9552661e-59e3-4036-b4f2-dbe53926924f
kevinkofler 18 years ago
parent
commit
869e877ae4
3 changed files with 13 additions and 6 deletions
  1. 7 5
      export/export.c
  2. 1 0
      export/export.h
  3. 5 1
      main_opt.inc

+ 7 - 5
export/export.c

@@ -278,6 +278,8 @@ char DataFolder[MAX_NAME_LEN+1] = "", DataName[MAX_NAME_LEN+1] = "data";
 
 // Specifies whether to output only the binary image of the program.
 BOOLEAN OutputBin = FALSE;
+// Specifies whether to output only the binary image of the main file.
+BOOLEAN OutputBinMainOnly = FALSE;
 
 // Maximum length of a file extension.
 #define MAX_FILE_EXT_LEN 3
@@ -285,7 +287,7 @@ BOOLEAN OutputBin = FALSE;
 BOOLEAN GetOutputFile (INT_EXP_FILE *File, SIZE FileSize, unsigned int DestCalc, unsigned int FileRole, unsigned int FileFormat, unsigned int FileType, const char *Extension, BOOLEAN Executable ATTRIBUTE_UNUSED, I4 *EffectiveSize)
 {
 	// Keep some of the parameters for finalization.
-	File->OutputBin  = OutputBin;
+	File->OutputBin  = OutputBin || (OutputBinMainOnly && FileRole == FR_MAIN);
 	File->FileFormat = FileFormat;
 	File->FileType   = FileType;
 	File->Extension  = Extension;
@@ -390,7 +392,7 @@ BOOLEAN GetOutputFile (INT_EXP_FILE *File, SIZE FileSize, unsigned int DestCalc,
 					CurOutputFileName [FileNameSize++] = '.';
 					
 					// Insert the extension. Reverse in binary mode.
-					if (OutputBin)
+					if (File->OutputBin)
 					{
 						strcpy (CurOutputFileName + FileNameSize, FileExtType);
 						FileNameSize += strlen (FileExtType);
@@ -416,7 +418,7 @@ BOOLEAN GetOutputFile (INT_EXP_FILE *File, SIZE FileSize, unsigned int DestCalc,
 					}
 					
 					// Write the host file header, if desired.
-					if (!OutputBin)
+					if (!File->OutputBin)
 					{
 						TIOS_HOST_FILE_HEADER Header;
 						
@@ -488,7 +490,7 @@ BOOLEAN GetOutputFile (INT_EXP_FILE *File, SIZE FileSize, unsigned int DestCalc,
 #ifdef TIOS_UPGRADE_FILE_SUPPORT
 		case FF_TIOS_UPGRADE:
 			*EffectiveSize = FileSize + sizeof (TIOS_UPGRADE_CALC_FOOTER);
-			if (OutputBin)
+			if (File->OutputBin)
 			{
 				const char *FileExtCalc;
 				
@@ -628,7 +630,7 @@ void FinalizeOutputFile (INT_EXP_FILE *File)
 				}
 				
 				// Write the host file footer, if desired.
-				if (!OutputBin)
+				if (!File->OutputBin)
 				{
 					TIOS_HOST_FILE_FOOTER Footer;
 					

+ 1 - 0
export/export.h

@@ -38,6 +38,7 @@ extern char ProgramFolder[MAX_NAME_LEN+1], ProgramName[MAX_NAME_LEN+1];
 extern char DataFolder[MAX_NAME_LEN+1], DataName[MAX_NAME_LEN+1];
 #endif /* DATA_VAR_SUPPORT */
 extern BOOLEAN OutputBin;
+extern BOOLEAN OutputBinMainOnly;
 BOOLEAN GetOutputFile (INT_EXP_FILE *File, SIZE FileSize, unsigned int DestCalc, unsigned int FileRole, unsigned int FileFormat, unsigned int FileType, const char *Extension, BOOLEAN Executable, I4 *EffectiveSize);
 void FinalizeOutputFile (INT_EXP_FILE *File);
 #endif /* !TARGET_EMBEDDED */

+ 5 - 1
main_opt.inc

@@ -2,7 +2,7 @@
 
    Copyright (C) 2002-2004 Sebastian Reichelt
    Copyright (C) 2004 Billy Charvet
-   Copyright (C) 2004 Kevin Kofler
+   Copyright (C) 2004-2006 Kevin Kofler
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -86,6 +86,8 @@
 					        "     --merge-constants    Merge constants and strings to avoid duplication\n"
 					        "     --omit-bss-init      Do not initialize BSS data to zero\n"
 					        "     --outputbin          Create program image without PC header\n"
+					        "     --outputbin-main-only\n"
+					        "                          Create main file w/o PC header (but data file with)\n"
 					        "  -o --output <file>      Write output to <file>.???\n"
 					        "  -n --varname <[folder\\]name>\n"
 					        "                          Name output variable <folder\\name>\n"
@@ -176,6 +178,8 @@
 					OmitBSSInitialization = TRUE;
 				else if (ArgMatches ("outputbin"))
 					OutputBin = TRUE;
+				else if (ArgMatches ("outputbin-main-only"))
+					OutputBinMainOnly = TRUE;
 				else if ((ArgMatches ("output")) || (ArgMatches ("o")))
 				{
 					if ((++CurArg) < ArgCount)