VOID CVfrCompiler::OptionInitialization ( IN INT32 Argc, IN CHAR8 **Argv ) { INT32 Index; EFI_STATUS Status; Status = EFI_SUCCESS; SetUtilityName ((CHAR8*) PROGRAM_NAME); mOptions.VfrFileName[0] = '\0'; mOptions.RecordListFile[0] = '\0'; mOptions.CreateRecordListFile = FALSE; mOptions.CreateIfrPkgFile = FALSE; mOptions.PkgOutputFileName[0] = '\0'; mOptions.COutputFileName[0] = '\0'; mOptions.OutputDirectory[0] = '\0'; mOptions.PreprocessorOutputFileName[0] = '\0'; mOptions.VfrBaseFileName[0] = '\0'; mOptions.IncludePaths = NULL; mOptions.SkipCPreprocessor = TRUE; mOptions.CPreprocessorOptions = NULL; mOptions.CompatibleMode = FALSE; mOptions.HasOverrideClassGuid = FALSE; mOptions.WarningAsError = FALSE; memset (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID)); if (Argc == 1) { Usage (); SET_RUN_STATUS (STATUS_DEAD); return; } for (Index = 1; (Index < Argc) && (Argv[Index][0] == '-'); Index++) { if ((stricmp(Argv[Index], "-h") == 0) || (stricmp(Argv[Index], "--help") == 0)) { Usage (); SET_RUN_STATUS (STATUS_DEAD); return; } else if (stricmp(Argv[Index], "-l") == 0) { mOptions.CreateRecordListFile = TRUE; gCIfrRecordInfoDB.TurnOn (); } else if (stricmp(Argv[Index], "-i") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { DebugError (NULL, 0, 1001, "Missing option", "-i missing path argument"); goto Fail; } AppendIncludePath(Argv[Index]); } else if (stricmp(Argv[Index], "-o") == 0 || stricmp(Argv[Index], "--output-directory") == 0 || stricmp(Argv[Index], "-od") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { DebugError (NULL, 0, 1001, "Missing option", "-o missing output directory name"); goto Fail; } strcpy (mOptions.OutputDirectory, Argv[Index]); CHAR8 lastChar = mOptions.OutputDirectory[strlen(mOptions.OutputDirectory) - 1]; if ((lastChar != '/') && (lastChar != '\\')) { if (strchr(mOptions.OutputDirectory, '/') != NULL) { strcat (mOptions.OutputDirectory, "/"); } else { strcat (mOptions.OutputDirectory, "\\"); } } DebugMsg (NULL, 0, 9, (CHAR8 *) "Output Directory", mOptions.OutputDirectory); } else if (stricmp(Argv[Index], "-b") == 0 || stricmp(Argv[Index], "--create-ifr-package") == 0 || stricmp(Argv[Index], "-ibin") == 0) { mOptions.CreateIfrPkgFile = TRUE; } else if (stricmp(Argv[Index], "-n") == 0 || stricmp(Argv[Index], "--no-pre-processing") == 0 || stricmp(Argv[Index], "-nopp") == 0) { mOptions.SkipCPreprocessor = TRUE; } else if (stricmp(Argv[Index], "-f") == 0 || stricmp(Argv[Index], "--pre-processing-flag") == 0 || stricmp(Argv[Index], "-ppflag") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { DebugError (NULL, 0, 1001, "Missing option", "-od - missing C-preprocessor argument"); goto Fail; } AppendCPreprocessorOptions (Argv[Index]); } else if (stricmp(Argv[Index], "-c") == 0 || stricmp(Argv[Index], "--compatible-framework") == 0) { mOptions.CompatibleMode = TRUE; } else if (stricmp(Argv[Index], "-s") == 0|| stricmp(Argv[Index], "--string-db") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { DebugError (NULL, 0, 1001, "Missing option", "-s missing input string file name"); goto Fail; } gCVfrStringDB.SetStringFileName(Argv[Index]); DebugMsg (NULL, 0, 9, (CHAR8 *) "Input string file path", Argv[Index]); } else if ((stricmp (Argv[Index], "-g") == 0) || (stricmp (Argv[Index], "--guid") == 0)) { Index++; Status = StringToGuid (Argv[Index], &mOptions.OverrideClassGuid); if (EFI_ERROR (Status)) { DebugError (NULL, 0, 1000, "Invalid format:", "%s", Argv[Index]); goto Fail; } mOptions.HasOverrideClassGuid = TRUE; } else if (stricmp(Argv[Index], "-w") == 0 || stricmp(Argv[Index], "--warning-as-error") == 0) { mOptions.WarningAsError = TRUE; } else { DebugError (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]); goto Fail; } } if (Index != Argc - 1) { DebugError (NULL, 0, 1001, "Missing option", "VFR file name is not specified."); goto Fail; } else { strcpy (mOptions.VfrFileName, Argv[Index]); } if (SetBaseFileName() != 0) { goto Fail; } if (SetPkgOutputFileName () != 0) { goto Fail; } if (SetCOutputFileName() != 0) { goto Fail; } if (SetPreprocessorOutputFileName () != 0) { goto Fail; } if (SetRecordListFileName () != 0) { goto Fail; } return; Fail: SET_RUN_STATUS (STATUS_DEAD); mOptions.VfrFileName[0] = '\0'; mOptions.RecordListFile[0] = '\0'; mOptions.CreateRecordListFile = FALSE; mOptions.CreateIfrPkgFile = FALSE; mOptions.PkgOutputFileName[0] = '\0'; mOptions.COutputFileName[0] = '\0'; mOptions.OutputDirectory[0] = '\0'; mOptions.PreprocessorOutputFileName[0] = '\0'; mOptions.VfrBaseFileName[0] = '\0'; if (mOptions.IncludePaths != NULL) { delete mOptions.IncludePaths; mOptions.IncludePaths = NULL; } if (mOptions.CPreprocessorOptions != NULL) { delete mOptions.CPreprocessorOptions; mOptions.CPreprocessorOptions = NULL; } }
VOID CVfrCompiler::OptionInitialization ( IN INT32 Argc, IN INT8 **Argv ) { INT32 Index; mOptions.VfrFileName[0] = '\0'; mOptions.RecordListFile[0] = '\0'; mOptions.CreateRecordListFile = FALSE; mOptions.CreateIfrPkgFile = FALSE; mOptions.PkgOutputFileName[0] = '\0'; mOptions.COutputFileName[0] = '\0'; mOptions.OutputDirectory[0] = '\0'; mOptions.PreprocessorOutputFileName[0] = '\0'; mOptions.VfrBaseFileName[0] = '\0'; mOptions.IncludePaths = NULL; mOptions.SkipCPreprocessor = FALSE; mOptions.CPreprocessorOptions = NULL; for (Index = 1; (Index < Argc) && (Argv[Index][0] == '-'); Index++) { if ((_stricmp(Argv[Index], "-?") == 0) || (_stricmp(Argv[Index], "-h") == 0)) { Usage (); SET_RUN_STATUS (STATUS_DEAD); return; } else if (_stricmp(Argv[Index], "-l") == 0) { mOptions.CreateRecordListFile = TRUE; gCIfrRecordInfoDB.TurnOn (); } else if (_stricmp(Argv[Index], "-i") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { printf ("%s -i - missing path argument\n", UTILITY_NAME); goto Fail; } AppendIncludePath(Argv[Index]); } else if (_stricmp(Argv[Index], "-od") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { printf ("%s -od - missing output directory name\n", UTILITY_NAME); goto Fail; } strcpy (mOptions.OutputDirectory, Argv[Index]); strcat (mOptions.OutputDirectory, "\\"); } else if (_stricmp(Argv[Index], "-ibin") == 0) { mOptions.CreateIfrPkgFile = TRUE; } else if (_stricmp(Argv[Index], "-nostrings") == 0) { } else if (_stricmp(Argv[Index], "-nopp") == 0) { mOptions.SkipCPreprocessor = TRUE; } else if (_stricmp(Argv[Index], "-ppflag") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { printf ("%s -od - missing C-preprocessor argument\n", UTILITY_NAME); goto Fail; } AppendCPreprocessorOptions (Argv[Index]); } else { printf ("%s unrecognized option %s\n", UTILITY_NAME, Argv[Index]); Usage (); goto Fail; } } if (Index != Argc - 1) { printf ("%s must specify VFR file name\n", UTILITY_NAME); Usage (); goto Fail; } else { strcpy (mOptions.VfrFileName, Argv[Index]); } if (SetBaseFileName() != 0) { goto Fail; } if (SetPkgOutputFileName () != 0) { goto Fail; } if (SetCOutputFileName() != 0) { goto Fail; } if (SetPreprocessorOutputFileName () != 0) { goto Fail; } if (SetRecordListFileName () != 0) { goto Fail; } return; Fail: SET_RUN_STATUS (STATUS_FAILED); mOptions.VfrFileName[0] = '\0'; mOptions.RecordListFile[0] = '\0'; mOptions.CreateRecordListFile = FALSE; mOptions.CreateIfrPkgFile = FALSE; mOptions.PkgOutputFileName[0] = '\0'; mOptions.COutputFileName[0] = '\0'; mOptions.OutputDirectory[0] = '\0'; mOptions.PreprocessorOutputFileName[0] = '\0'; mOptions.VfrBaseFileName[0] = '\0'; if (mOptions.IncludePaths != NULL) { delete mOptions.IncludePaths; mOptions.IncludePaths = NULL; } if (mOptions.CPreprocessorOptions != NULL) { delete mOptions.CPreprocessorOptions; mOptions.CPreprocessorOptions = NULL; } }