asloptions.c revision 250838
1250757Sjkim/****************************************************************************** 2250757Sjkim * 3250757Sjkim * Module Name: asloptions - compiler command line processing 4250757Sjkim * 5250757Sjkim *****************************************************************************/ 6250757Sjkim 7250757Sjkim/* 8250757Sjkim * Copyright (C) 2000 - 2013, Intel Corp. 9250757Sjkim * All rights reserved. 10250757Sjkim * 11250757Sjkim * Redistribution and use in source and binary forms, with or without 12250757Sjkim * modification, are permitted provided that the following conditions 13250757Sjkim * are met: 14250757Sjkim * 1. Redistributions of source code must retain the above copyright 15250757Sjkim * notice, this list of conditions, and the following disclaimer, 16250757Sjkim * without modification. 17250757Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18250757Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19250757Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20250757Sjkim * including a substantially similar Disclaimer requirement for further 21250757Sjkim * binary redistribution. 22250757Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23250757Sjkim * of any contributors may be used to endorse or promote products derived 24250757Sjkim * from this software without specific prior written permission. 25250757Sjkim * 26250757Sjkim * Alternatively, this software may be distributed under the terms of the 27250757Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28250757Sjkim * Software Foundation. 29250757Sjkim * 30250757Sjkim * NO WARRANTY 31250757Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32250757Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33250757Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34250757Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35250757Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36250757Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37250757Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38250757Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39250757Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40250757Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41250757Sjkim * POSSIBILITY OF SUCH DAMAGES. 42250757Sjkim */ 43250757Sjkim 44250838Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h> 45250838Sjkim#include <contrib/dev/acpica/include/acapps.h> 46250838Sjkim#include <contrib/dev/acpica/include/acdisasm.h> 47250757Sjkim 48250757Sjkim#define _COMPONENT ACPI_COMPILER 49250757Sjkim ACPI_MODULE_NAME ("asloption") 50250757Sjkim 51250757Sjkim 52250757Sjkim/* Local prototypes */ 53250757Sjkim 54250757Sjkimstatic int 55250757SjkimAslDoOptions ( 56250757Sjkim int argc, 57250757Sjkim char **argv, 58250757Sjkim BOOLEAN IsResponseFile); 59250757Sjkim 60250757Sjkimstatic void 61250757SjkimAslMergeOptionTokens ( 62250757Sjkim char *InBuffer, 63250757Sjkim char *OutBuffer); 64250757Sjkim 65250757Sjkimstatic int 66250757SjkimAslDoResponseFile ( 67250757Sjkim char *Filename); 68250757Sjkim 69250757Sjkim 70250757Sjkim#define ASL_TOKEN_SEPARATORS " \t\n" 71250757Sjkim#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T:G^v^w|x:z" 72250757Sjkim 73250757Sjkim 74250757Sjkim/******************************************************************************* 75250757Sjkim * 76250757Sjkim * FUNCTION: AslCommandLine 77250757Sjkim * 78250757Sjkim * PARAMETERS: argc/argv 79250757Sjkim * 80250757Sjkim * RETURN: Last argv index 81250757Sjkim * 82250757Sjkim * DESCRIPTION: Command line processing 83250757Sjkim * 84250757Sjkim ******************************************************************************/ 85250757Sjkim 86250757Sjkimint 87250757SjkimAslCommandLine ( 88250757Sjkim int argc, 89250757Sjkim char **argv) 90250757Sjkim{ 91250757Sjkim int BadCommandLine = 0; 92250757Sjkim ACPI_STATUS Status; 93250757Sjkim 94250757Sjkim 95250757Sjkim /* Minimum command line contains at least the command and an input file */ 96250757Sjkim 97250757Sjkim if (argc < 2) 98250757Sjkim { 99250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 100250757Sjkim Usage (); 101250757Sjkim exit (1); 102250757Sjkim } 103250757Sjkim 104250757Sjkim /* Process all command line options */ 105250757Sjkim 106250757Sjkim BadCommandLine = AslDoOptions (argc, argv, FALSE); 107250757Sjkim 108250757Sjkim if (Gbl_DoTemplates) 109250757Sjkim { 110250757Sjkim Status = DtCreateTemplates (Gbl_TemplateSignature); 111250757Sjkim if (ACPI_FAILURE (Status)) 112250757Sjkim { 113250757Sjkim exit (-1); 114250757Sjkim } 115250757Sjkim exit (1); 116250757Sjkim } 117250757Sjkim 118250757Sjkim /* Next parameter must be the input filename */ 119250757Sjkim 120250757Sjkim if (!argv[AcpiGbl_Optind] && 121250757Sjkim !Gbl_DisasmFlag && 122250757Sjkim !Gbl_GetAllTables) 123250757Sjkim { 124250757Sjkim printf ("Missing input filename\n"); 125250757Sjkim BadCommandLine = TRUE; 126250757Sjkim } 127250757Sjkim 128250757Sjkim if (Gbl_DoSignon) 129250757Sjkim { 130250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 131250757Sjkim if (Gbl_IgnoreErrors) 132250757Sjkim { 133250757Sjkim printf ("Ignoring all errors, forcing AML file generation\n\n"); 134250757Sjkim } 135250757Sjkim } 136250757Sjkim 137250757Sjkim if (BadCommandLine) 138250757Sjkim { 139250757Sjkim printf ("\n"); 140250757Sjkim Usage (); 141250757Sjkim exit (1); 142250757Sjkim } 143250757Sjkim 144250757Sjkim return (AcpiGbl_Optind); 145250757Sjkim} 146250757Sjkim 147250757Sjkim 148250757Sjkim/******************************************************************************* 149250757Sjkim * 150250757Sjkim * FUNCTION: AslDoOptions 151250757Sjkim * 152250757Sjkim * PARAMETERS: argc/argv - Standard argc/argv 153250757Sjkim * IsResponseFile - TRUE if executing a response file. 154250757Sjkim * 155250757Sjkim * RETURN: Status 156250757Sjkim * 157250757Sjkim * DESCRIPTION: Command line option processing 158250757Sjkim * 159250757Sjkim ******************************************************************************/ 160250757Sjkim 161250757Sjkimstatic int 162250757SjkimAslDoOptions ( 163250757Sjkim int argc, 164250757Sjkim char **argv, 165250757Sjkim BOOLEAN IsResponseFile) 166250757Sjkim{ 167250757Sjkim ACPI_STATUS Status; 168250757Sjkim UINT32 j; 169250757Sjkim 170250757Sjkim 171250757Sjkim /* Get the command line options */ 172250757Sjkim 173250757Sjkim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 174250757Sjkim { 175250757Sjkim case '@': /* Begin a response file */ 176250757Sjkim 177250757Sjkim if (IsResponseFile) 178250757Sjkim { 179250757Sjkim printf ("Nested command files are not supported\n"); 180250757Sjkim return (-1); 181250757Sjkim } 182250757Sjkim 183250757Sjkim if (AslDoResponseFile (AcpiGbl_Optarg)) 184250757Sjkim { 185250757Sjkim return (-1); 186250757Sjkim } 187250757Sjkim break; 188250757Sjkim 189250757Sjkim case 'b': /* Debug output options */ 190250757Sjkim 191250757Sjkim switch (AcpiGbl_Optarg[0]) 192250757Sjkim { 193250757Sjkim case 'f': 194250757Sjkim 195250757Sjkim AslCompilerdebug = 1; /* same as yydebug */ 196250757Sjkim DtParserdebug = 1; 197250757Sjkim PrParserdebug = 1; 198250757Sjkim break; 199250757Sjkim 200250757Sjkim case 't': 201250757Sjkim 202250757Sjkim break; 203250757Sjkim 204250757Sjkim default: 205250757Sjkim 206250757Sjkim printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 207250757Sjkim return (-1); 208250757Sjkim } 209250757Sjkim 210250757Sjkim /* Produce debug output file */ 211250757Sjkim 212250757Sjkim Gbl_DebugFlag = TRUE; 213250757Sjkim break; 214250757Sjkim 215250757Sjkim case 'c': 216250757Sjkim 217250757Sjkim switch (AcpiGbl_Optarg[0]) 218250757Sjkim { 219250757Sjkim case 'r': 220250757Sjkim 221250757Sjkim Gbl_NoResourceChecking = TRUE; 222250757Sjkim break; 223250757Sjkim 224250757Sjkim default: 225250757Sjkim 226250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 227250757Sjkim return (-1); 228250757Sjkim } 229250757Sjkim break; 230250757Sjkim 231250757Sjkim case 'd': /* Disassembler */ 232250757Sjkim 233250757Sjkim switch (AcpiGbl_Optarg[0]) 234250757Sjkim { 235250757Sjkim case '^': 236250757Sjkim 237250757Sjkim Gbl_DoCompile = FALSE; 238250757Sjkim break; 239250757Sjkim 240250757Sjkim case 'a': 241250757Sjkim 242250757Sjkim Gbl_DoCompile = FALSE; 243250757Sjkim Gbl_DisassembleAll = TRUE; 244250757Sjkim break; 245250757Sjkim 246250757Sjkim case 'b': /* Do not convert buffers to resource descriptors */ 247250757Sjkim 248250757Sjkim AcpiGbl_NoResourceDisassembly = TRUE; 249250757Sjkim break; 250250757Sjkim 251250757Sjkim case 'c': 252250757Sjkim 253250757Sjkim break; 254250757Sjkim 255250757Sjkim default: 256250757Sjkim 257250757Sjkim printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 258250757Sjkim return (-1); 259250757Sjkim } 260250757Sjkim 261250757Sjkim Gbl_DisasmFlag = TRUE; 262250757Sjkim break; 263250757Sjkim 264250757Sjkim case 'D': /* Define a symbol */ 265250757Sjkim 266250757Sjkim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 267250757Sjkim break; 268250757Sjkim 269250757Sjkim case 'e': /* External files for disassembler */ 270250757Sjkim 271250757Sjkim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 272250757Sjkim if (ACPI_FAILURE (Status)) 273250757Sjkim { 274250757Sjkim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 275250757Sjkim return (-1); 276250757Sjkim } 277250757Sjkim break; 278250757Sjkim 279250757Sjkim case 'f': /* Ignore errors and force creation of aml file */ 280250757Sjkim 281250757Sjkim Gbl_IgnoreErrors = TRUE; 282250757Sjkim break; 283250757Sjkim 284250757Sjkim case 'G': 285250757Sjkim 286250757Sjkim Gbl_CompileGeneric = TRUE; 287250757Sjkim break; 288250757Sjkim 289250757Sjkim case 'g': /* Get all ACPI tables */ 290250757Sjkim 291250757Sjkim Gbl_GetAllTables = TRUE; 292250757Sjkim Gbl_DoCompile = FALSE; 293250757Sjkim break; 294250757Sjkim 295250757Sjkim case 'h': 296250757Sjkim 297250757Sjkim switch (AcpiGbl_Optarg[0]) 298250757Sjkim { 299250757Sjkim case '^': 300250757Sjkim 301250757Sjkim Usage (); 302250757Sjkim exit (0); 303250757Sjkim 304250757Sjkim case 'c': 305250757Sjkim 306250757Sjkim UtDisplayConstantOpcodes (); 307250757Sjkim exit (0); 308250757Sjkim 309250757Sjkim case 'f': 310250757Sjkim 311250757Sjkim AslFilenameHelp (); 312250757Sjkim exit (0); 313250757Sjkim 314250757Sjkim case 'r': 315250757Sjkim 316250757Sjkim /* reserved names */ 317250757Sjkim 318250757Sjkim ApDisplayReservedNames (); 319250757Sjkim exit (0); 320250757Sjkim 321250757Sjkim case 't': 322250757Sjkim 323250757Sjkim UtDisplaySupportedTables (); 324250757Sjkim exit (0); 325250757Sjkim 326250757Sjkim default: 327250757Sjkim 328250757Sjkim printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 329250757Sjkim return (-1); 330250757Sjkim } 331250757Sjkim 332250757Sjkim case 'I': /* Add an include file search directory */ 333250757Sjkim 334250757Sjkim FlAddIncludeDirectory (AcpiGbl_Optarg); 335250757Sjkim break; 336250757Sjkim 337250757Sjkim case 'i': /* Output AML as an include file */ 338250757Sjkim 339250757Sjkim switch (AcpiGbl_Optarg[0]) 340250757Sjkim { 341250757Sjkim case 'a': 342250757Sjkim 343250757Sjkim /* Produce assembly code include file */ 344250757Sjkim 345250757Sjkim Gbl_AsmIncludeOutputFlag = TRUE; 346250757Sjkim break; 347250757Sjkim 348250757Sjkim case 'c': 349250757Sjkim 350250757Sjkim /* Produce C include file */ 351250757Sjkim 352250757Sjkim Gbl_C_IncludeOutputFlag = TRUE; 353250757Sjkim break; 354250757Sjkim 355250757Sjkim case 'n': 356250757Sjkim 357250757Sjkim /* Compiler/Disassembler: Ignore the NOOP operator */ 358250757Sjkim 359250757Sjkim AcpiGbl_IgnoreNoopOperator = TRUE; 360250757Sjkim break; 361250757Sjkim 362250757Sjkim default: 363250757Sjkim 364250757Sjkim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 365250757Sjkim return (-1); 366250757Sjkim } 367250757Sjkim break; 368250757Sjkim 369250757Sjkim case 'l': /* Listing files */ 370250757Sjkim 371250757Sjkim switch (AcpiGbl_Optarg[0]) 372250757Sjkim { 373250757Sjkim case '^': 374250757Sjkim 375250757Sjkim /* Produce listing file (Mixed source/aml) */ 376250757Sjkim 377250757Sjkim Gbl_ListingFlag = TRUE; 378250757Sjkim break; 379250757Sjkim 380250757Sjkim case 'i': 381250757Sjkim 382250757Sjkim /* Produce preprocessor output file */ 383250757Sjkim 384250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 385250757Sjkim break; 386250757Sjkim 387250757Sjkim case 'n': 388250757Sjkim 389250757Sjkim /* Produce namespace file */ 390250757Sjkim 391250757Sjkim Gbl_NsOutputFlag = TRUE; 392250757Sjkim break; 393250757Sjkim 394250757Sjkim case 's': 395250757Sjkim 396250757Sjkim /* Produce combined source file */ 397250757Sjkim 398250757Sjkim Gbl_SourceOutputFlag = TRUE; 399250757Sjkim break; 400250757Sjkim 401250757Sjkim default: 402250757Sjkim 403250757Sjkim printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 404250757Sjkim return (-1); 405250757Sjkim } 406250757Sjkim break; 407250757Sjkim 408250757Sjkim case 'm': /* Set line buffer size */ 409250757Sjkim 410250757Sjkim Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 411250757Sjkim if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 412250757Sjkim { 413250757Sjkim Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 414250757Sjkim } 415250757Sjkim printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 416250757Sjkim break; 417250757Sjkim 418250757Sjkim case 'n': /* Parse only */ 419250757Sjkim 420250757Sjkim Gbl_ParseOnlyFlag = TRUE; 421250757Sjkim break; 422250757Sjkim 423250757Sjkim case 'o': /* Control compiler AML optimizations */ 424250757Sjkim 425250757Sjkim switch (AcpiGbl_Optarg[0]) 426250757Sjkim { 427250757Sjkim case 'a': 428250757Sjkim 429250757Sjkim /* Disable all optimizations */ 430250757Sjkim 431250757Sjkim Gbl_FoldConstants = FALSE; 432250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 433250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 434250757Sjkim break; 435250757Sjkim 436250757Sjkim case 'f': 437250757Sjkim 438250757Sjkim /* Disable folding on "normal" expressions */ 439250757Sjkim 440250757Sjkim Gbl_FoldConstants = FALSE; 441250757Sjkim break; 442250757Sjkim 443250757Sjkim case 'i': 444250757Sjkim 445250757Sjkim /* Disable integer optimization to constants */ 446250757Sjkim 447250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 448250757Sjkim break; 449250757Sjkim 450250757Sjkim case 'n': 451250757Sjkim 452250757Sjkim /* Disable named reference optimization */ 453250757Sjkim 454250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 455250757Sjkim break; 456250757Sjkim 457250757Sjkim case 't': 458250757Sjkim 459250757Sjkim /* Display compile time(s) */ 460250757Sjkim 461250757Sjkim Gbl_CompileTimesFlag = TRUE; 462250757Sjkim break; 463250757Sjkim 464250757Sjkim default: 465250757Sjkim 466250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 467250757Sjkim return (-1); 468250757Sjkim } 469250757Sjkim break; 470250757Sjkim 471250757Sjkim case 'P': /* Preprocessor options */ 472250757Sjkim 473250757Sjkim switch (AcpiGbl_Optarg[0]) 474250757Sjkim { 475250757Sjkim case '^': /* Proprocess only, emit (.i) file */ 476250757Sjkim 477250757Sjkim Gbl_PreprocessOnly = TRUE; 478250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 479250757Sjkim break; 480250757Sjkim 481250757Sjkim case 'n': /* Disable preprocessor */ 482250757Sjkim 483250757Sjkim Gbl_PreprocessFlag = FALSE; 484250757Sjkim break; 485250757Sjkim 486250757Sjkim default: 487250757Sjkim 488250757Sjkim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 489250757Sjkim return (-1); 490250757Sjkim } 491250757Sjkim break; 492250757Sjkim 493250757Sjkim case 'p': /* Override default AML output filename */ 494250757Sjkim 495250757Sjkim Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 496250757Sjkim Gbl_UseDefaultAmlFilename = FALSE; 497250757Sjkim break; 498250757Sjkim 499250757Sjkim case 'r': /* Override revision found in table header */ 500250757Sjkim 501250757Sjkim Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 502250757Sjkim break; 503250757Sjkim 504250757Sjkim case 's': /* Create AML in a source code file */ 505250757Sjkim 506250757Sjkim switch (AcpiGbl_Optarg[0]) 507250757Sjkim { 508250757Sjkim case 'a': 509250757Sjkim 510250757Sjkim /* Produce assembly code output file */ 511250757Sjkim 512250757Sjkim Gbl_AsmOutputFlag = TRUE; 513250757Sjkim break; 514250757Sjkim 515250757Sjkim case 'c': 516250757Sjkim 517250757Sjkim /* Produce C hex output file */ 518250757Sjkim 519250757Sjkim Gbl_C_OutputFlag = TRUE; 520250757Sjkim break; 521250757Sjkim 522250757Sjkim case 'o': 523250757Sjkim 524250757Sjkim /* Produce AML offset table in C */ 525250757Sjkim 526250757Sjkim Gbl_C_OffsetTableFlag = TRUE; 527250757Sjkim break; 528250757Sjkim 529250757Sjkim default: 530250757Sjkim 531250757Sjkim printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 532250757Sjkim return (-1); 533250757Sjkim } 534250757Sjkim break; 535250757Sjkim 536250757Sjkim case 't': /* Produce hex table output file */ 537250757Sjkim 538250757Sjkim switch (AcpiGbl_Optarg[0]) 539250757Sjkim { 540250757Sjkim case 'a': 541250757Sjkim 542250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 543250757Sjkim break; 544250757Sjkim 545250757Sjkim case 'c': 546250757Sjkim 547250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_C; 548250757Sjkim break; 549250757Sjkim 550250757Sjkim case 's': 551250757Sjkim 552250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 553250757Sjkim break; 554250757Sjkim 555250757Sjkim default: 556250757Sjkim 557250757Sjkim printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 558250757Sjkim return (-1); 559250757Sjkim } 560250757Sjkim break; 561250757Sjkim 562250757Sjkim case 'T': /* Create a ACPI table template file */ 563250757Sjkim 564250757Sjkim Gbl_DoTemplates = TRUE; 565250757Sjkim Gbl_TemplateSignature = AcpiGbl_Optarg; 566250757Sjkim break; 567250757Sjkim 568250757Sjkim case 'v': /* Version and verbosity settings */ 569250757Sjkim 570250757Sjkim switch (AcpiGbl_Optarg[0]) 571250757Sjkim { 572250757Sjkim case '^': 573250757Sjkim 574250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 575250757Sjkim exit (0); 576250757Sjkim 577250757Sjkim case 'a': 578250757Sjkim 579250757Sjkim /* Disable All error/warning messages */ 580250757Sjkim 581250757Sjkim Gbl_NoErrors = TRUE; 582250757Sjkim break; 583250757Sjkim 584250757Sjkim case 'i': 585250757Sjkim /* 586250757Sjkim * Support for integrated development environment(s). 587250757Sjkim * 588250757Sjkim * 1) No compiler signon 589250757Sjkim * 2) Send stderr messages to stdout 590250757Sjkim * 3) Less verbose error messages (single line only for each) 591250757Sjkim * 4) Error/warning messages are formatted appropriately to 592250757Sjkim * be recognized by MS Visual Studio 593250757Sjkim */ 594250757Sjkim Gbl_VerboseErrors = FALSE; 595250757Sjkim Gbl_DoSignon = FALSE; 596250757Sjkim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 597250757Sjkim break; 598250757Sjkim 599250757Sjkim case 'o': 600250757Sjkim 601250757Sjkim Gbl_DisplayOptimizations = TRUE; 602250757Sjkim break; 603250757Sjkim 604250757Sjkim case 'r': 605250757Sjkim 606250757Sjkim Gbl_DisplayRemarks = FALSE; 607250757Sjkim break; 608250757Sjkim 609250757Sjkim case 's': 610250757Sjkim 611250757Sjkim Gbl_DoSignon = FALSE; 612250757Sjkim break; 613250757Sjkim 614250757Sjkim case 't': 615250757Sjkim 616250757Sjkim Gbl_VerboseTemplates = TRUE; 617250757Sjkim break; 618250757Sjkim 619250757Sjkim case 'w': 620250757Sjkim 621250757Sjkim /* Get the required argument */ 622250757Sjkim 623250757Sjkim if (AcpiGetoptArgument (argc, argv)) 624250757Sjkim { 625250757Sjkim return (-1); 626250757Sjkim } 627250757Sjkim 628250757Sjkim Status = AslDisableException (AcpiGbl_Optarg); 629250757Sjkim if (ACPI_FAILURE (Status)) 630250757Sjkim { 631250757Sjkim return (-1); 632250757Sjkim } 633250757Sjkim break; 634250757Sjkim 635250757Sjkim default: 636250757Sjkim 637250757Sjkim printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 638250757Sjkim return (-1); 639250757Sjkim } 640250757Sjkim break; 641250757Sjkim 642250757Sjkim case 'w': /* Set warning levels */ 643250757Sjkim 644250757Sjkim switch (AcpiGbl_Optarg[0]) 645250757Sjkim { 646250757Sjkim case '1': 647250757Sjkim 648250757Sjkim Gbl_WarningLevel = ASL_WARNING; 649250757Sjkim break; 650250757Sjkim 651250757Sjkim case '2': 652250757Sjkim 653250757Sjkim Gbl_WarningLevel = ASL_WARNING2; 654250757Sjkim break; 655250757Sjkim 656250757Sjkim case '3': 657250757Sjkim 658250757Sjkim Gbl_WarningLevel = ASL_WARNING3; 659250757Sjkim break; 660250757Sjkim 661250757Sjkim case 'e': 662250757Sjkim 663250757Sjkim Gbl_WarningsAsErrors = TRUE; 664250757Sjkim break; 665250757Sjkim 666250757Sjkim default: 667250757Sjkim 668250757Sjkim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 669250757Sjkim return (-1); 670250757Sjkim } 671250757Sjkim break; 672250757Sjkim 673250757Sjkim case 'x': /* Set debug print output level */ 674250757Sjkim 675250757Sjkim AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 676250757Sjkim break; 677250757Sjkim 678250757Sjkim case 'z': 679250757Sjkim 680250757Sjkim Gbl_UseOriginalCompilerId = TRUE; 681250757Sjkim break; 682250757Sjkim 683250757Sjkim default: 684250757Sjkim 685250757Sjkim return (-1); 686250757Sjkim } 687250757Sjkim 688250757Sjkim return (0); 689250757Sjkim} 690250757Sjkim 691250757Sjkim 692250757Sjkim/******************************************************************************* 693250757Sjkim * 694250757Sjkim * FUNCTION: AslMergeOptionTokens 695250757Sjkim * 696250757Sjkim * PARAMETERS: InBuffer - Input containing an option string 697250757Sjkim * OutBuffer - Merged output buffer 698250757Sjkim * 699250757Sjkim * RETURN: None 700250757Sjkim * 701250757Sjkim * DESCRIPTION: Remove all whitespace from an option string. 702250757Sjkim * 703250757Sjkim ******************************************************************************/ 704250757Sjkim 705250757Sjkimstatic void 706250757SjkimAslMergeOptionTokens ( 707250757Sjkim char *InBuffer, 708250757Sjkim char *OutBuffer) 709250757Sjkim{ 710250757Sjkim char *Token; 711250757Sjkim 712250757Sjkim 713250757Sjkim *OutBuffer = 0; 714250757Sjkim 715250757Sjkim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 716250757Sjkim while (Token) 717250757Sjkim { 718250757Sjkim strcat (OutBuffer, Token); 719250757Sjkim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 720250757Sjkim } 721250757Sjkim} 722250757Sjkim 723250757Sjkim 724250757Sjkim/******************************************************************************* 725250757Sjkim * 726250757Sjkim * FUNCTION: AslDoResponseFile 727250757Sjkim * 728250757Sjkim * PARAMETERS: Filename - Name of the response file 729250757Sjkim * 730250757Sjkim * RETURN: Status 731250757Sjkim * 732250757Sjkim * DESCRIPTION: Open a response file and process all options within. 733250757Sjkim * 734250757Sjkim ******************************************************************************/ 735250757Sjkim 736250757Sjkimstatic int 737250757SjkimAslDoResponseFile ( 738250757Sjkim char *Filename) 739250757Sjkim{ 740250757Sjkim char *argv = StringBuffer2; 741250757Sjkim FILE *ResponseFile; 742250757Sjkim int OptStatus = 0; 743250757Sjkim int Opterr; 744250757Sjkim int Optind; 745250757Sjkim 746250757Sjkim 747250757Sjkim ResponseFile = fopen (Filename, "r"); 748250757Sjkim if (!ResponseFile) 749250757Sjkim { 750250757Sjkim printf ("Could not open command file %s, %s\n", 751250757Sjkim Filename, strerror (errno)); 752250757Sjkim return (-1); 753250757Sjkim } 754250757Sjkim 755250757Sjkim /* Must save the current GetOpt globals */ 756250757Sjkim 757250757Sjkim Opterr = AcpiGbl_Opterr; 758250757Sjkim Optind = AcpiGbl_Optind; 759250757Sjkim 760250757Sjkim /* 761250757Sjkim * Process all lines in the response file. There must be one complete 762250757Sjkim * option per line 763250757Sjkim */ 764250757Sjkim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 765250757Sjkim { 766250757Sjkim /* Compress all tokens, allowing us to use a single argv entry */ 767250757Sjkim 768250757Sjkim AslMergeOptionTokens (StringBuffer, StringBuffer2); 769250757Sjkim 770250757Sjkim /* Process the option */ 771250757Sjkim 772250757Sjkim AcpiGbl_Opterr = 0; 773250757Sjkim AcpiGbl_Optind = 0; 774250757Sjkim 775250757Sjkim OptStatus = AslDoOptions (1, &argv, TRUE); 776250757Sjkim if (OptStatus) 777250757Sjkim { 778250757Sjkim printf ("Invalid option in command file %s: %s\n", 779250757Sjkim Filename, StringBuffer); 780250757Sjkim break; 781250757Sjkim } 782250757Sjkim } 783250757Sjkim 784250757Sjkim /* Restore the GetOpt globals */ 785250757Sjkim 786250757Sjkim AcpiGbl_Opterr = Opterr; 787250757Sjkim AcpiGbl_Optind = Optind; 788250757Sjkim 789250757Sjkim fclose (ResponseFile); 790250757Sjkim return (OptStatus); 791250757Sjkim} 792