asloptions.c revision 250757
1226633Sdim/****************************************************************************** 2193326Sed * 3193326Sed * Module Name: asloptions - compiler command line processing 4193326Sed * 5193326Sed *****************************************************************************/ 6193326Sed 7193326Sed/* 8193326Sed * Copyright (C) 2000 - 2013, Intel Corp. 9193326Sed * All rights reserved. 10193326Sed * 11226633Sdim * Redistribution and use in source and binary forms, with or without 12193326Sed * modification, are permitted provided that the following conditions 13193326Sed * are met: 14193326Sed * 1. Redistributions of source code must retain the above copyright 15212904Sdim * notice, this list of conditions, and the following disclaimer, 16212904Sdim * without modification. 17193326Sed * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18223017Sdim * substantially similar to the "NO WARRANTY" disclaimer below 19249423Sdim * ("Disclaimer") and any redistribution must be conditioned upon 20193326Sed * including a substantially similar Disclaimer requirement for further 21212904Sdim * binary redistribution. 22193326Sed * 3. Neither the names of the above-listed copyright holders nor the names 23193326Sed * of any contributors may be used to endorse or promote products derived 24193326Sed * from this software without specific prior written permission. 25193326Sed * 26193326Sed * Alternatively, this software may be distributed under the terms of the 27193326Sed * GNU General Public License ("GPL") version 2 as published by the Free 28193326Sed * Software Foundation. 29193326Sed * 30193326Sed * NO WARRANTY 31193326Sed * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32193326Sed * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33193326Sed * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34198092Srdivacky * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35193326Sed * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36193326Sed * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37193326Sed * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38193326Sed * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39193326Sed * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40193326Sed * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41193326Sed * POSSIBILITY OF SUCH DAMAGES. 42193326Sed */ 43193326Sed 44198092Srdivacky#include "aslcompiler.h" 45234353Sdim#include "acapps.h" 46208600Srdivacky#include "acdisasm.h" 47198092Srdivacky 48234353Sdim#define _COMPONENT ACPI_COMPILER 49208600Srdivacky ACPI_MODULE_NAME ("asloption") 50208600Srdivacky 51208600Srdivacky 52208600Srdivacky/* Local prototypes */ 53193326Sed 54193326Sedstatic int 55198092SrdivackyAslDoOptions ( 56208600Srdivacky int argc, 57208600Srdivacky char **argv, 58208600Srdivacky BOOLEAN IsResponseFile); 59193326Sed 60198092Srdivackystatic void 61226633SdimAslMergeOptionTokens ( 62193326Sed char *InBuffer, 63226633Sdim char *OutBuffer); 64208600Srdivacky 65226633Sdimstatic int 66226633SdimAslDoResponseFile ( 67193326Sed char *Filename); 68193326Sed 69193326Sed 70210299Sed#define ASL_TOKEN_SEPARATORS " \t\n" 71224145Sdim#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" 72224145Sdim 73224145Sdim 74224145Sdim/******************************************************************************* 75193326Sed * 76208600Srdivacky * FUNCTION: AslCommandLine 77234353Sdim * 78208600Srdivacky * PARAMETERS: argc/argv 79218893Sdim * 80226633Sdim * RETURN: Last argv index 81234353Sdim * 82234353Sdim * DESCRIPTION: Command line processing 83208600Srdivacky * 84208600Srdivacky ******************************************************************************/ 85193326Sed 86193326Sedint 87193326SedAslCommandLine ( 88193326Sed int argc, 89193326Sed char **argv) 90193326Sed{ 91208600Srdivacky int BadCommandLine = 0; 92198092Srdivacky ACPI_STATUS Status; 93193326Sed 94193326Sed 95224145Sdim /* Minimum command line contains at least the command and an input file */ 96224145Sdim 97198092Srdivacky if (argc < 2) 98193326Sed { 99193326Sed printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 100208600Srdivacky Usage (); 101193326Sed exit (1); 102198092Srdivacky } 103208600Srdivacky 104208600Srdivacky /* Process all command line options */ 105208600Srdivacky 106208600Srdivacky BadCommandLine = AslDoOptions (argc, argv, FALSE); 107208600Srdivacky 108208600Srdivacky if (Gbl_DoTemplates) 109208600Srdivacky { 110208600Srdivacky Status = DtCreateTemplates (Gbl_TemplateSignature); 111208600Srdivacky if (ACPI_FAILURE (Status)) 112208600Srdivacky { 113208600Srdivacky exit (-1); 114208600Srdivacky } 115208600Srdivacky exit (1); 116208600Srdivacky } 117208600Srdivacky 118208600Srdivacky /* Next parameter must be the input filename */ 119208600Srdivacky 120224145Sdim if (!argv[AcpiGbl_Optind] && 121224145Sdim !Gbl_DisasmFlag && 122193326Sed !Gbl_GetAllTables) 123193326Sed { 124224145Sdim printf ("Missing input filename\n"); 125193326Sed BadCommandLine = TRUE; 126243830Sdim } 127193326Sed 128208600Srdivacky if (Gbl_DoSignon) 129208600Srdivacky { 130224145Sdim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 131224145Sdim if (Gbl_IgnoreErrors) 132224145Sdim { 133224145Sdim printf ("Ignoring all errors, forcing AML file generation\n\n"); 134224145Sdim } 135224145Sdim } 136224145Sdim 137224145Sdim if (BadCommandLine) 138234353Sdim { 139224145Sdim printf ("\n"); 140224145Sdim Usage (); 141224145Sdim exit (1); 142224145Sdim } 143224145Sdim 144224145Sdim return (AcpiGbl_Optind); 145224145Sdim} 146224145Sdim 147224145Sdim 148224145Sdim/******************************************************************************* 149224145Sdim * 150224145Sdim * FUNCTION: AslDoOptions 151224145Sdim * 152234353Sdim * PARAMETERS: argc/argv - Standard argc/argv 153234353Sdim * IsResponseFile - TRUE if executing a response file. 154224145Sdim * 155224145Sdim * RETURN: Status 156224145Sdim * 157224145Sdim * DESCRIPTION: Command line option processing 158224145Sdim * 159224145Sdim ******************************************************************************/ 160224145Sdim 161224145Sdimstatic int 162224145SdimAslDoOptions ( 163224145Sdim int argc, 164224145Sdim char **argv, 165224145Sdim BOOLEAN IsResponseFile) 166224145Sdim{ 167243830Sdim ACPI_STATUS Status; 168243830Sdim UINT32 j; 169243830Sdim 170224145Sdim 171243830Sdim /* Get the command line options */ 172243830Sdim 173243830Sdim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 174224145Sdim { 175243830Sdim case '@': /* Begin a response file */ 176243830Sdim 177224145Sdim if (IsResponseFile) 178263508Sdim { 179243830Sdim printf ("Nested command files are not supported\n"); 180263508Sdim return (-1); 181224145Sdim } 182243830Sdim 183243830Sdim if (AslDoResponseFile (AcpiGbl_Optarg)) 184243830Sdim { 185224145Sdim return (-1); 186243830Sdim } 187243830Sdim break; 188243830Sdim 189243830Sdim case 'b': /* Debug output options */ 190243830Sdim 191243830Sdim switch (AcpiGbl_Optarg[0]) 192243830Sdim { 193243830Sdim case 'f': 194243830Sdim 195243830Sdim AslCompilerdebug = 1; /* same as yydebug */ 196243830Sdim DtParserdebug = 1; 197243830Sdim PrParserdebug = 1; 198243830Sdim break; 199243830Sdim 200243830Sdim case 't': 201243830Sdim 202263508Sdim break; 203263508Sdim 204263508Sdim default: 205263508Sdim 206263508Sdim printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 207243830Sdim return (-1); 208243830Sdim } 209243830Sdim 210243830Sdim /* Produce debug output file */ 211243830Sdim 212243830Sdim Gbl_DebugFlag = TRUE; 213210299Sed break; 214243830Sdim 215243830Sdim case 'c': 216208600Srdivacky 217243830Sdim switch (AcpiGbl_Optarg[0]) 218243830Sdim { 219208600Srdivacky case 'r': 220208600Srdivacky 221208600Srdivacky Gbl_NoResourceChecking = TRUE; 222193326Sed break; 223224145Sdim 224193326Sed default: 225198092Srdivacky 226221345Sdim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 227221345Sdim return (-1); 228224145Sdim } 229221345Sdim break; 230221345Sdim 231224145Sdim case 'd': /* Disassembler */ 232193326Sed 233193326Sed switch (AcpiGbl_Optarg[0]) 234210299Sed { 235210299Sed case '^': 236210299Sed 237224145Sdim Gbl_DoCompile = FALSE; 238210299Sed break; 239210299Sed 240210299Sed case 'a': 241210299Sed 242210299Sed Gbl_DoCompile = FALSE; 243210299Sed Gbl_DisassembleAll = TRUE; 244210299Sed break; 245210299Sed 246210299Sed case 'b': /* Do not convert buffers to resource descriptors */ 247210299Sed 248210299Sed AcpiGbl_NoResourceDisassembly = TRUE; 249210299Sed break; 250193326Sed 251224145Sdim case 'c': 252224145Sdim 253224145Sdim break; 254224145Sdim 255224145Sdim default: 256224145Sdim 257224145Sdim printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 258224145Sdim return (-1); 259224145Sdim } 260224145Sdim 261224145Sdim Gbl_DisasmFlag = TRUE; 262224145Sdim break; 263224145Sdim 264224145Sdim case 'D': /* Define a symbol */ 265224145Sdim 266224145Sdim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 267224145Sdim break; 268224145Sdim 269224145Sdim case 'e': /* External files for disassembler */ 270224145Sdim 271224145Sdim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 272224145Sdim if (ACPI_FAILURE (Status)) 273224145Sdim { 274224145Sdim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 275224145Sdim return (-1); 276224145Sdim } 277234353Sdim break; 278224145Sdim 279224145Sdim case 'f': /* Ignore errors and force creation of aml file */ 280224145Sdim 281224145Sdim Gbl_IgnoreErrors = TRUE; 282224145Sdim break; 283224145Sdim 284224145Sdim case 'G': 285224145Sdim 286224145Sdim Gbl_CompileGeneric = TRUE; 287224145Sdim break; 288193326Sed 289193326Sed case 'g': /* Get all ACPI tables */ 290193326Sed 291193326Sed Gbl_GetAllTables = TRUE; 292224145Sdim Gbl_DoCompile = FALSE; 293224145Sdim break; 294224145Sdim 295224145Sdim case 'h': 296224145Sdim 297224145Sdim switch (AcpiGbl_Optarg[0]) 298224145Sdim { 299224145Sdim case '^': 300210299Sed 301210299Sed Usage (); 302193326Sed exit (0); 303208600Srdivacky 304208600Srdivacky case 'c': 305208600Srdivacky 306208600Srdivacky UtDisplayConstantOpcodes (); 307208600Srdivacky exit (0); 308208600Srdivacky 309218893Sdim case 'f': 310218893Sdim 311218893Sdim AslFilenameHelp (); 312218893Sdim exit (0); 313218893Sdim 314218893Sdim case 'r': 315218893Sdim 316218893Sdim /* reserved names */ 317218893Sdim 318218893Sdim ApDisplayReservedNames (); 319218893Sdim exit (0); 320208600Srdivacky 321208600Srdivacky case 't': 322208600Srdivacky 323208600Srdivacky UtDisplaySupportedTables (); 324210299Sed exit (0); 325210299Sed 326210299Sed default: 327210299Sed 328210299Sed printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 329210299Sed return (-1); 330210299Sed } 331210299Sed 332210299Sed case 'I': /* Add an include file search directory */ 333208600Srdivacky 334193326Sed FlAddIncludeDirectory (AcpiGbl_Optarg); 335193326Sed break; 336193326Sed 337193326Sed case 'i': /* Output AML as an include file */ 338208600Srdivacky 339208600Srdivacky switch (AcpiGbl_Optarg[0]) 340243830Sdim { 341243830Sdim case 'a': 342243830Sdim 343243830Sdim /* Produce assembly code include file */ 344243830Sdim 345243830Sdim Gbl_AsmIncludeOutputFlag = TRUE; 346243830Sdim break; 347243830Sdim 348243830Sdim case 'c': 349243830Sdim 350243830Sdim /* Produce C include file */ 351243830Sdim 352243830Sdim Gbl_C_IncludeOutputFlag = TRUE; 353243830Sdim break; 354243830Sdim 355243830Sdim case 'n': 356243830Sdim 357243830Sdim /* Compiler/Disassembler: Ignore the NOOP operator */ 358243830Sdim 359243830Sdim AcpiGbl_IgnoreNoopOperator = TRUE; 360243830Sdim break; 361243830Sdim 362243830Sdim default: 363208600Srdivacky 364208600Srdivacky printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 365193326Sed return (-1); 366198092Srdivacky } 367218893Sdim break; 368210299Sed 369210299Sed case 'l': /* Listing files */ 370210299Sed 371210299Sed switch (AcpiGbl_Optarg[0]) 372210299Sed { 373193326Sed case '^': 374193326Sed 375198092Srdivacky /* Produce listing file (Mixed source/aml) */ 376212904Sdim 377212904Sdim Gbl_ListingFlag = TRUE; 378212904Sdim break; 379212904Sdim 380212904Sdim case 'i': 381218893Sdim 382218893Sdim /* Produce preprocessor output file */ 383218893Sdim 384218893Sdim Gbl_PreprocessorOutputFlag = TRUE; 385218893Sdim break; 386218893Sdim 387212904Sdim case 'n': 388212904Sdim 389212904Sdim /* Produce namespace file */ 390212904Sdim 391212904Sdim Gbl_NsOutputFlag = TRUE; 392212904Sdim break; 393212904Sdim 394193326Sed case 's': 395193326Sed 396193326Sed /* Produce combined source file */ 397204643Srdivacky 398204643Srdivacky Gbl_SourceOutputFlag = TRUE; 399193326Sed break; 400210299Sed 401210299Sed default: 402193326Sed 403193326Sed printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 404193326Sed return (-1); 405193326Sed } 406193326Sed break; 407224145Sdim 408193326Sed case 'm': /* Set line buffer size */ 409208600Srdivacky 410208600Srdivacky Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 411208600Srdivacky if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 412193326Sed { 413193326Sed Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 414224145Sdim } 415193326Sed printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 416193326Sed break; 417207619Srdivacky 418207619Srdivacky case 'n': /* Parse only */ 419193326Sed 420193326Sed Gbl_ParseOnlyFlag = TRUE; 421208600Srdivacky break; 422193326Sed 423198092Srdivacky case 'o': /* Control compiler AML optimizations */ 424224145Sdim 425224145Sdim switch (AcpiGbl_Optarg[0]) 426193326Sed { 427198092Srdivacky case 'a': 428193326Sed 429193326Sed /* Disable all optimizations */ 430193326Sed 431193326Sed Gbl_FoldConstants = FALSE; 432208600Srdivacky Gbl_IntegerOptimizationFlag = FALSE; 433193326Sed Gbl_ReferenceOptimizationFlag = FALSE; 434224145Sdim break; 435193326Sed 436198092Srdivacky case 'f': 437193326Sed 438193326Sed /* Disable folding on "normal" expressions */ 439224145Sdim 440224145Sdim Gbl_FoldConstants = FALSE; 441193326Sed break; 442193326Sed 443193326Sed case 'i': 444193326Sed 445193326Sed /* Disable integer optimization to constants */ 446193326Sed 447198092Srdivacky Gbl_IntegerOptimizationFlag = FALSE; 448193326Sed break; 449193326Sed 450193326Sed case 'n': 451193326Sed 452208600Srdivacky /* Disable named reference optimization */ 453193326Sed 454224145Sdim Gbl_ReferenceOptimizationFlag = FALSE; 455224145Sdim break; 456193326Sed 457193326Sed case 't': 458193326Sed 459224145Sdim /* Display compile time(s) */ 460224145Sdim 461224145Sdim Gbl_CompileTimesFlag = TRUE; 462224145Sdim break; 463224145Sdim 464224145Sdim default: 465224145Sdim 466224145Sdim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 467224145Sdim return (-1); 468224145Sdim } 469224145Sdim break; 470243830Sdim 471243830Sdim case 'P': /* Preprocessor options */ 472243830Sdim 473243830Sdim switch (AcpiGbl_Optarg[0]) 474243830Sdim { 475243830Sdim case '^': /* Proprocess only, emit (.i) file */ 476243830Sdim 477224145Sdim Gbl_PreprocessOnly = TRUE; 478224145Sdim Gbl_PreprocessorOutputFlag = TRUE; 479224145Sdim break; 480224145Sdim 481224145Sdim case 'n': /* Disable preprocessor */ 482243830Sdim 483224145Sdim Gbl_PreprocessFlag = FALSE; 484224145Sdim break; 485193326Sed 486193326Sed default: 487193326Sed 488193326Sed printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 489193326Sed return (-1); 490193326Sed } 491193326Sed break; 492193326Sed 493193326Sed case 'p': /* Override default AML output filename */ 494193326Sed 495198092Srdivacky Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 496198092Srdivacky Gbl_UseDefaultAmlFilename = FALSE; 497193326Sed break; 498218893Sdim 499226633Sdim case 'r': /* Override revision found in table header */ 500234353Sdim 501234353Sdim Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 502193326Sed break; 503193326Sed 504198092Srdivacky case 's': /* Create AML in a source code file */ 505218893Sdim 506218893Sdim switch (AcpiGbl_Optarg[0]) 507218893Sdim { 508218893Sdim case 'a': 509226633Sdim 510234353Sdim /* Produce assembly code output file */ 511234353Sdim 512218893Sdim Gbl_AsmOutputFlag = TRUE; 513218893Sdim break; 514218893Sdim 515208600Srdivacky case 'c': 516208600Srdivacky 517208600Srdivacky /* Produce C hex output file */ 518208600Srdivacky 519249423Sdim Gbl_C_OutputFlag = TRUE; 520249423Sdim break; 521249423Sdim 522249423Sdim case 'o': 523249423Sdim 524249423Sdim /* Produce AML offset table in C */ 525249423Sdim 526249423Sdim Gbl_C_OffsetTableFlag = TRUE; 527234353Sdim break; 528193326Sed 529208600Srdivacky default: 530208600Srdivacky 531193326Sed printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 532208600Srdivacky return (-1); 533208600Srdivacky } 534208600Srdivacky break; 535208600Srdivacky 536208600Srdivacky case 't': /* Produce hex table output file */ 537208600Srdivacky 538208600Srdivacky switch (AcpiGbl_Optarg[0]) 539208600Srdivacky { 540208600Srdivacky case 'a': 541208600Srdivacky 542208600Srdivacky Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 543208600Srdivacky break; 544208600Srdivacky 545208600Srdivacky case 'c': 546208600Srdivacky 547208600Srdivacky Gbl_HexOutputFlag = HEX_OUTPUT_C; 548208600Srdivacky break; 549208600Srdivacky 550208600Srdivacky case 's': 551208600Srdivacky 552208600Srdivacky Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 553198092Srdivacky break; 554208600Srdivacky 555208600Srdivacky default: 556208600Srdivacky 557208600Srdivacky printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 558208600Srdivacky return (-1); 559208600Srdivacky } 560208600Srdivacky break; 561198092Srdivacky 562208600Srdivacky case 'T': /* Create a ACPI table template file */ 563208600Srdivacky 564208600Srdivacky Gbl_DoTemplates = TRUE; 565208600Srdivacky Gbl_TemplateSignature = AcpiGbl_Optarg; 566226633Sdim break; 567208600Srdivacky 568208600Srdivacky case 'v': /* Version and verbosity settings */ 569226633Sdim 570208600Srdivacky switch (AcpiGbl_Optarg[0]) 571208600Srdivacky { 572208600Srdivacky case '^': 573208600Srdivacky 574208600Srdivacky printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 575208600Srdivacky exit (0); 576208600Srdivacky 577208600Srdivacky case 'a': 578208600Srdivacky 579208600Srdivacky /* Disable All error/warning messages */ 580208600Srdivacky 581208600Srdivacky Gbl_NoErrors = TRUE; 582208600Srdivacky break; 583198092Srdivacky 584208600Srdivacky case 'i': 585208600Srdivacky /* 586208600Srdivacky * Support for integrated development environment(s). 587218893Sdim * 588226633Sdim * 1) No compiler signon 589208600Srdivacky * 2) Send stderr messages to stdout 590208600Srdivacky * 3) Less verbose error messages (single line only for each) 591218893Sdim * 4) Error/warning messages are formatted appropriately to 592218893Sdim * be recognized by MS Visual Studio 593208600Srdivacky */ 594218893Sdim Gbl_VerboseErrors = FALSE; 595218893Sdim Gbl_DoSignon = FALSE; 596208600Srdivacky Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 597208600Srdivacky break; 598208600Srdivacky 599208600Srdivacky case 'o': 600208600Srdivacky 601208600Srdivacky Gbl_DisplayOptimizations = TRUE; 602208600Srdivacky break; 603208600Srdivacky 604208600Srdivacky case 'r': 605208600Srdivacky 606208600Srdivacky Gbl_DisplayRemarks = FALSE; 607208600Srdivacky break; 608218893Sdim 609208600Srdivacky case 's': 610208600Srdivacky 611218893Sdim Gbl_DoSignon = FALSE; 612208600Srdivacky break; 613208600Srdivacky 614208600Srdivacky case 't': 615208600Srdivacky 616208600Srdivacky Gbl_VerboseTemplates = TRUE; 617208600Srdivacky break; 618208600Srdivacky 619208600Srdivacky case 'w': 620208600Srdivacky 621208600Srdivacky /* Get the required argument */ 622208600Srdivacky 623208600Srdivacky if (AcpiGetoptArgument (argc, argv)) 624208600Srdivacky { 625208600Srdivacky return (-1); 626208600Srdivacky } 627208600Srdivacky 628208600Srdivacky Status = AslDisableException (AcpiGbl_Optarg); 629193326Sed if (ACPI_FAILURE (Status)) 630193326Sed { 631208600Srdivacky return (-1); 632208600Srdivacky } 633226633Sdim break; 634208600Srdivacky 635208600Srdivacky default: 636208600Srdivacky 637208600Srdivacky printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 638208600Srdivacky return (-1); 639208600Srdivacky } 640208600Srdivacky break; 641208600Srdivacky 642208600Srdivacky case 'w': /* Set warning levels */ 643208600Srdivacky 644208600Srdivacky switch (AcpiGbl_Optarg[0]) 645208600Srdivacky { 646208600Srdivacky case '1': 647208600Srdivacky 648208600Srdivacky Gbl_WarningLevel = ASL_WARNING; 649208600Srdivacky break; 650208600Srdivacky 651208600Srdivacky case '2': 652208600Srdivacky 653208600Srdivacky Gbl_WarningLevel = ASL_WARNING2; 654208600Srdivacky break; 655208600Srdivacky 656208600Srdivacky case '3': 657208600Srdivacky 658208600Srdivacky Gbl_WarningLevel = ASL_WARNING3; 659208600Srdivacky break; 660208600Srdivacky 661208600Srdivacky case 'e': 662208600Srdivacky 663208600Srdivacky Gbl_WarningsAsErrors = TRUE; 664208600Srdivacky break; 665208600Srdivacky 666208600Srdivacky default: 667193326Sed 668193326Sed printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 669193326Sed return (-1); 670193326Sed } 671234353Sdim break; 672234353Sdim 673234353Sdim case 'x': /* Set debug print output level */ 674234353Sdim 675234353Sdim AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 676234353Sdim break; 677234353Sdim 678234353Sdim case 'z': 679234353Sdim 680234353Sdim Gbl_UseOriginalCompilerId = TRUE; 681234353Sdim break; 682249423Sdim 683234353Sdim default: 684234353Sdim 685234353Sdim return (-1); 686234353Sdim } 687234353Sdim 688234353Sdim return (0); 689234353Sdim} 690234353Sdim 691234353Sdim 692234353Sdim/******************************************************************************* 693234353Sdim * 694234353Sdim * FUNCTION: AslMergeOptionTokens 695234353Sdim * 696234353Sdim * PARAMETERS: InBuffer - Input containing an option string 697234353Sdim * OutBuffer - Merged output buffer 698234353Sdim * 699234353Sdim * RETURN: None 700234353Sdim * 701234353Sdim * DESCRIPTION: Remove all whitespace from an option string. 702234353Sdim * 703234353Sdim ******************************************************************************/ 704208600Srdivacky 705208600Srdivackystatic void 706208600SrdivackyAslMergeOptionTokens ( 707218893Sdim char *InBuffer, 708208600Srdivacky char *OutBuffer) 709208600Srdivacky{ 710208600Srdivacky char *Token; 711208600Srdivacky 712234353Sdim 713208600Srdivacky *OutBuffer = 0; 714208600Srdivacky 715208600Srdivacky Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 716234353Sdim while (Token) 717234353Sdim { 718208600Srdivacky strcat (OutBuffer, Token); 719234353Sdim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 720208600Srdivacky } 721234353Sdim} 722234353Sdim 723208600Srdivacky 724208600Srdivacky/******************************************************************************* 725234353Sdim * 726234353Sdim * FUNCTION: AslDoResponseFile 727234353Sdim * 728234353Sdim * PARAMETERS: Filename - Name of the response file 729208600Srdivacky * 730234353Sdim * RETURN: Status 731208600Srdivacky * 732234353Sdim * DESCRIPTION: Open a response file and process all options within. 733234353Sdim * 734234353Sdim ******************************************************************************/ 735234353Sdim 736234353Sdimstatic int 737234353SdimAslDoResponseFile ( 738234353Sdim char *Filename) 739226633Sdim{ 740226633Sdim char *argv = StringBuffer2; 741193326Sed FILE *ResponseFile; 742193326Sed int OptStatus = 0; 743226633Sdim int Opterr; 744234353Sdim int Optind; 745234353Sdim 746193326Sed 747193326Sed ResponseFile = fopen (Filename, "r"); 748193326Sed if (!ResponseFile) 749193326Sed { 750193326Sed printf ("Could not open command file %s, %s\n", 751198092Srdivacky Filename, strerror (errno)); 752193326Sed return (-1); 753193326Sed } 754198092Srdivacky 755208600Srdivacky /* Must save the current GetOpt globals */ 756198092Srdivacky 757208600Srdivacky Opterr = AcpiGbl_Opterr; 758208600Srdivacky Optind = AcpiGbl_Optind; 759198092Srdivacky 760208600Srdivacky /* 761234353Sdim * Process all lines in the response file. There must be one complete 762226633Sdim * option per line 763226633Sdim */ 764226633Sdim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 765234353Sdim { 766226633Sdim /* Compress all tokens, allowing us to use a single argv entry */ 767226633Sdim 768234353Sdim AslMergeOptionTokens (StringBuffer, StringBuffer2); 769234353Sdim 770226633Sdim /* Process the option */ 771226633Sdim 772226633Sdim AcpiGbl_Opterr = 0; 773193326Sed AcpiGbl_Optind = 0; 774226633Sdim 775226633Sdim OptStatus = AslDoOptions (1, &argv, TRUE); 776226633Sdim if (OptStatus) 777234353Sdim { 778226633Sdim printf ("Invalid option in command file %s: %s\n", 779193326Sed Filename, StringBuffer); 780226633Sdim break; 781226633Sdim } 782226633Sdim } 783234353Sdim 784226633Sdim /* Restore the GetOpt globals */ 785234353Sdim 786234353Sdim AcpiGbl_Opterr = Opterr; 787234353Sdim AcpiGbl_Optind = Optind; 788234353Sdim 789234353Sdim fclose (ResponseFile); 790234353Sdim return (OptStatus); 791193326Sed} 792193326Sed