asloptions.c revision 254745
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" 71254745Sjkim#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:f^gh^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 { 139254745Sjkim printf ("Use -h option for help information\n"); 140250757Sjkim exit (1); 141250757Sjkim } 142250757Sjkim 143250757Sjkim return (AcpiGbl_Optind); 144250757Sjkim} 145250757Sjkim 146250757Sjkim 147250757Sjkim/******************************************************************************* 148250757Sjkim * 149250757Sjkim * FUNCTION: AslDoOptions 150250757Sjkim * 151250757Sjkim * PARAMETERS: argc/argv - Standard argc/argv 152250757Sjkim * IsResponseFile - TRUE if executing a response file. 153250757Sjkim * 154250757Sjkim * RETURN: Status 155250757Sjkim * 156250757Sjkim * DESCRIPTION: Command line option processing 157250757Sjkim * 158250757Sjkim ******************************************************************************/ 159250757Sjkim 160250757Sjkimstatic int 161250757SjkimAslDoOptions ( 162250757Sjkim int argc, 163250757Sjkim char **argv, 164250757Sjkim BOOLEAN IsResponseFile) 165250757Sjkim{ 166250757Sjkim ACPI_STATUS Status; 167250757Sjkim UINT32 j; 168250757Sjkim 169250757Sjkim 170250757Sjkim /* Get the command line options */ 171250757Sjkim 172250757Sjkim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 173250757Sjkim { 174250757Sjkim case '@': /* Begin a response file */ 175250757Sjkim 176250757Sjkim if (IsResponseFile) 177250757Sjkim { 178250757Sjkim printf ("Nested command files are not supported\n"); 179250757Sjkim return (-1); 180250757Sjkim } 181250757Sjkim 182250757Sjkim if (AslDoResponseFile (AcpiGbl_Optarg)) 183250757Sjkim { 184250757Sjkim return (-1); 185250757Sjkim } 186250757Sjkim break; 187250757Sjkim 188250757Sjkim case 'b': /* Debug output options */ 189250757Sjkim 190250757Sjkim switch (AcpiGbl_Optarg[0]) 191250757Sjkim { 192250757Sjkim case 'f': 193250757Sjkim 194250757Sjkim AslCompilerdebug = 1; /* same as yydebug */ 195250757Sjkim DtParserdebug = 1; 196250757Sjkim PrParserdebug = 1; 197250757Sjkim break; 198250757Sjkim 199250757Sjkim case 't': 200250757Sjkim 201250757Sjkim break; 202250757Sjkim 203250757Sjkim default: 204250757Sjkim 205250757Sjkim printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 206250757Sjkim return (-1); 207250757Sjkim } 208250757Sjkim 209250757Sjkim /* Produce debug output file */ 210250757Sjkim 211250757Sjkim Gbl_DebugFlag = TRUE; 212250757Sjkim break; 213250757Sjkim 214250757Sjkim case 'c': 215250757Sjkim 216250757Sjkim switch (AcpiGbl_Optarg[0]) 217250757Sjkim { 218250757Sjkim case 'r': 219250757Sjkim 220250757Sjkim Gbl_NoResourceChecking = TRUE; 221250757Sjkim break; 222250757Sjkim 223250757Sjkim default: 224250757Sjkim 225250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 226250757Sjkim return (-1); 227250757Sjkim } 228250757Sjkim break; 229250757Sjkim 230250757Sjkim case 'd': /* Disassembler */ 231250757Sjkim 232250757Sjkim switch (AcpiGbl_Optarg[0]) 233250757Sjkim { 234250757Sjkim case '^': 235250757Sjkim 236250757Sjkim Gbl_DoCompile = FALSE; 237250757Sjkim break; 238250757Sjkim 239250757Sjkim case 'a': 240250757Sjkim 241250757Sjkim Gbl_DoCompile = FALSE; 242250757Sjkim Gbl_DisassembleAll = TRUE; 243250757Sjkim break; 244250757Sjkim 245250757Sjkim case 'b': /* Do not convert buffers to resource descriptors */ 246250757Sjkim 247250757Sjkim AcpiGbl_NoResourceDisassembly = TRUE; 248250757Sjkim break; 249250757Sjkim 250250757Sjkim case 'c': 251250757Sjkim 252250757Sjkim break; 253250757Sjkim 254250757Sjkim default: 255250757Sjkim 256250757Sjkim printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 257250757Sjkim return (-1); 258250757Sjkim } 259250757Sjkim 260250757Sjkim Gbl_DisasmFlag = TRUE; 261250757Sjkim break; 262250757Sjkim 263250757Sjkim case 'D': /* Define a symbol */ 264250757Sjkim 265250757Sjkim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 266250757Sjkim break; 267250757Sjkim 268250757Sjkim case 'e': /* External files for disassembler */ 269250757Sjkim 270250757Sjkim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 271250757Sjkim if (ACPI_FAILURE (Status)) 272250757Sjkim { 273250757Sjkim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 274250757Sjkim return (-1); 275250757Sjkim } 276250757Sjkim break; 277250757Sjkim 278254745Sjkim case 'f': 279250757Sjkim 280254745Sjkim switch (AcpiGbl_Optarg[0]) 281254745Sjkim { 282254745Sjkim case '^': /* Ignore errors and force creation of aml file */ 283254745Sjkim 284254745Sjkim Gbl_IgnoreErrors = TRUE; 285254745Sjkim break; 286254745Sjkim 287254745Sjkim case 'e': /* Disassembler: Get external declaration file */ 288254745Sjkim 289254745Sjkim if (AcpiGetoptArgument (argc, argv)) 290254745Sjkim { 291254745Sjkim return (-1); 292254745Sjkim } 293254745Sjkim 294254745Sjkim Gbl_ExternalRefFilename = AcpiGbl_Optarg; 295254745Sjkim break; 296254745Sjkim 297254745Sjkim default: 298254745Sjkim 299254745Sjkim printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); 300254745Sjkim return (-1); 301254745Sjkim } 302250757Sjkim break; 303250757Sjkim 304250757Sjkim case 'G': 305250757Sjkim 306250757Sjkim Gbl_CompileGeneric = TRUE; 307250757Sjkim break; 308250757Sjkim 309250757Sjkim case 'g': /* Get all ACPI tables */ 310250757Sjkim 311250757Sjkim Gbl_GetAllTables = TRUE; 312250757Sjkim Gbl_DoCompile = FALSE; 313250757Sjkim break; 314250757Sjkim 315250757Sjkim case 'h': 316250757Sjkim 317250757Sjkim switch (AcpiGbl_Optarg[0]) 318250757Sjkim { 319250757Sjkim case '^': 320250757Sjkim 321250757Sjkim Usage (); 322250757Sjkim exit (0); 323250757Sjkim 324250757Sjkim case 'c': 325250757Sjkim 326250757Sjkim UtDisplayConstantOpcodes (); 327250757Sjkim exit (0); 328250757Sjkim 329250757Sjkim case 'f': 330250757Sjkim 331250757Sjkim AslFilenameHelp (); 332250757Sjkim exit (0); 333250757Sjkim 334250757Sjkim case 'r': 335250757Sjkim 336250757Sjkim /* reserved names */ 337250757Sjkim 338250757Sjkim ApDisplayReservedNames (); 339250757Sjkim exit (0); 340250757Sjkim 341250757Sjkim case 't': 342250757Sjkim 343250757Sjkim UtDisplaySupportedTables (); 344250757Sjkim exit (0); 345250757Sjkim 346250757Sjkim default: 347250757Sjkim 348250757Sjkim printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 349250757Sjkim return (-1); 350250757Sjkim } 351250757Sjkim 352250757Sjkim case 'I': /* Add an include file search directory */ 353250757Sjkim 354250757Sjkim FlAddIncludeDirectory (AcpiGbl_Optarg); 355250757Sjkim break; 356250757Sjkim 357250757Sjkim case 'i': /* Output AML as an include file */ 358250757Sjkim 359250757Sjkim switch (AcpiGbl_Optarg[0]) 360250757Sjkim { 361250757Sjkim case 'a': 362250757Sjkim 363250757Sjkim /* Produce assembly code include file */ 364250757Sjkim 365250757Sjkim Gbl_AsmIncludeOutputFlag = TRUE; 366250757Sjkim break; 367250757Sjkim 368250757Sjkim case 'c': 369250757Sjkim 370250757Sjkim /* Produce C include file */ 371250757Sjkim 372250757Sjkim Gbl_C_IncludeOutputFlag = TRUE; 373250757Sjkim break; 374250757Sjkim 375250757Sjkim case 'n': 376250757Sjkim 377250757Sjkim /* Compiler/Disassembler: Ignore the NOOP operator */ 378250757Sjkim 379250757Sjkim AcpiGbl_IgnoreNoopOperator = TRUE; 380250757Sjkim break; 381250757Sjkim 382250757Sjkim default: 383250757Sjkim 384250757Sjkim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 385250757Sjkim return (-1); 386250757Sjkim } 387250757Sjkim break; 388250757Sjkim 389250757Sjkim case 'l': /* Listing files */ 390250757Sjkim 391250757Sjkim switch (AcpiGbl_Optarg[0]) 392250757Sjkim { 393250757Sjkim case '^': 394250757Sjkim 395250757Sjkim /* Produce listing file (Mixed source/aml) */ 396250757Sjkim 397250757Sjkim Gbl_ListingFlag = TRUE; 398250757Sjkim break; 399250757Sjkim 400250757Sjkim case 'i': 401250757Sjkim 402250757Sjkim /* Produce preprocessor output file */ 403250757Sjkim 404250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 405250757Sjkim break; 406250757Sjkim 407250757Sjkim case 'n': 408250757Sjkim 409250757Sjkim /* Produce namespace file */ 410250757Sjkim 411250757Sjkim Gbl_NsOutputFlag = TRUE; 412250757Sjkim break; 413250757Sjkim 414250757Sjkim case 's': 415250757Sjkim 416250757Sjkim /* Produce combined source file */ 417250757Sjkim 418250757Sjkim Gbl_SourceOutputFlag = TRUE; 419250757Sjkim break; 420250757Sjkim 421250757Sjkim default: 422250757Sjkim 423250757Sjkim printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 424250757Sjkim return (-1); 425250757Sjkim } 426250757Sjkim break; 427250757Sjkim 428250757Sjkim case 'm': /* Set line buffer size */ 429250757Sjkim 430250757Sjkim Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 431250757Sjkim if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 432250757Sjkim { 433250757Sjkim Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 434250757Sjkim } 435250757Sjkim printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 436250757Sjkim break; 437250757Sjkim 438250757Sjkim case 'n': /* Parse only */ 439250757Sjkim 440250757Sjkim Gbl_ParseOnlyFlag = TRUE; 441250757Sjkim break; 442250757Sjkim 443250757Sjkim case 'o': /* Control compiler AML optimizations */ 444250757Sjkim 445250757Sjkim switch (AcpiGbl_Optarg[0]) 446250757Sjkim { 447250757Sjkim case 'a': 448250757Sjkim 449250757Sjkim /* Disable all optimizations */ 450250757Sjkim 451250757Sjkim Gbl_FoldConstants = FALSE; 452250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 453250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 454250757Sjkim break; 455250757Sjkim 456250757Sjkim case 'f': 457250757Sjkim 458250757Sjkim /* Disable folding on "normal" expressions */ 459250757Sjkim 460250757Sjkim Gbl_FoldConstants = FALSE; 461250757Sjkim break; 462250757Sjkim 463250757Sjkim case 'i': 464250757Sjkim 465250757Sjkim /* Disable integer optimization to constants */ 466250757Sjkim 467250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 468250757Sjkim break; 469250757Sjkim 470250757Sjkim case 'n': 471250757Sjkim 472250757Sjkim /* Disable named reference optimization */ 473250757Sjkim 474250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 475250757Sjkim break; 476250757Sjkim 477250757Sjkim case 't': 478250757Sjkim 479250757Sjkim /* Display compile time(s) */ 480250757Sjkim 481250757Sjkim Gbl_CompileTimesFlag = TRUE; 482250757Sjkim break; 483250757Sjkim 484250757Sjkim default: 485250757Sjkim 486250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 487250757Sjkim return (-1); 488250757Sjkim } 489250757Sjkim break; 490250757Sjkim 491250757Sjkim case 'P': /* Preprocessor options */ 492250757Sjkim 493250757Sjkim switch (AcpiGbl_Optarg[0]) 494250757Sjkim { 495250757Sjkim case '^': /* Proprocess only, emit (.i) file */ 496250757Sjkim 497250757Sjkim Gbl_PreprocessOnly = TRUE; 498250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 499250757Sjkim break; 500250757Sjkim 501250757Sjkim case 'n': /* Disable preprocessor */ 502250757Sjkim 503250757Sjkim Gbl_PreprocessFlag = FALSE; 504250757Sjkim break; 505250757Sjkim 506250757Sjkim default: 507250757Sjkim 508250757Sjkim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 509250757Sjkim return (-1); 510250757Sjkim } 511250757Sjkim break; 512250757Sjkim 513250757Sjkim case 'p': /* Override default AML output filename */ 514250757Sjkim 515250757Sjkim Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 516250757Sjkim Gbl_UseDefaultAmlFilename = FALSE; 517250757Sjkim break; 518250757Sjkim 519250757Sjkim case 'r': /* Override revision found in table header */ 520250757Sjkim 521250757Sjkim Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 522250757Sjkim break; 523250757Sjkim 524250757Sjkim case 's': /* Create AML in a source code file */ 525250757Sjkim 526250757Sjkim switch (AcpiGbl_Optarg[0]) 527250757Sjkim { 528250757Sjkim case 'a': 529250757Sjkim 530250757Sjkim /* Produce assembly code output file */ 531250757Sjkim 532250757Sjkim Gbl_AsmOutputFlag = TRUE; 533250757Sjkim break; 534250757Sjkim 535250757Sjkim case 'c': 536250757Sjkim 537250757Sjkim /* Produce C hex output file */ 538250757Sjkim 539250757Sjkim Gbl_C_OutputFlag = TRUE; 540250757Sjkim break; 541250757Sjkim 542250757Sjkim case 'o': 543250757Sjkim 544250757Sjkim /* Produce AML offset table in C */ 545250757Sjkim 546250757Sjkim Gbl_C_OffsetTableFlag = TRUE; 547250757Sjkim break; 548250757Sjkim 549250757Sjkim default: 550250757Sjkim 551250757Sjkim printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 552250757Sjkim return (-1); 553250757Sjkim } 554250757Sjkim break; 555250757Sjkim 556250757Sjkim case 't': /* Produce hex table output file */ 557250757Sjkim 558250757Sjkim switch (AcpiGbl_Optarg[0]) 559250757Sjkim { 560250757Sjkim case 'a': 561250757Sjkim 562250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 563250757Sjkim break; 564250757Sjkim 565250757Sjkim case 'c': 566250757Sjkim 567250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_C; 568250757Sjkim break; 569250757Sjkim 570250757Sjkim case 's': 571250757Sjkim 572250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 573250757Sjkim break; 574250757Sjkim 575250757Sjkim default: 576250757Sjkim 577250757Sjkim printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 578250757Sjkim return (-1); 579250757Sjkim } 580250757Sjkim break; 581250757Sjkim 582250757Sjkim case 'T': /* Create a ACPI table template file */ 583250757Sjkim 584250757Sjkim Gbl_DoTemplates = TRUE; 585250757Sjkim Gbl_TemplateSignature = AcpiGbl_Optarg; 586250757Sjkim break; 587250757Sjkim 588250757Sjkim case 'v': /* Version and verbosity settings */ 589250757Sjkim 590250757Sjkim switch (AcpiGbl_Optarg[0]) 591250757Sjkim { 592250757Sjkim case '^': 593250757Sjkim 594250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 595250757Sjkim exit (0); 596250757Sjkim 597250757Sjkim case 'a': 598250757Sjkim 599250757Sjkim /* Disable All error/warning messages */ 600250757Sjkim 601250757Sjkim Gbl_NoErrors = TRUE; 602250757Sjkim break; 603250757Sjkim 604250757Sjkim case 'i': 605250757Sjkim /* 606250757Sjkim * Support for integrated development environment(s). 607250757Sjkim * 608250757Sjkim * 1) No compiler signon 609250757Sjkim * 2) Send stderr messages to stdout 610250757Sjkim * 3) Less verbose error messages (single line only for each) 611250757Sjkim * 4) Error/warning messages are formatted appropriately to 612250757Sjkim * be recognized by MS Visual Studio 613250757Sjkim */ 614250757Sjkim Gbl_VerboseErrors = FALSE; 615250757Sjkim Gbl_DoSignon = FALSE; 616250757Sjkim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 617250757Sjkim break; 618250757Sjkim 619250757Sjkim case 'o': 620250757Sjkim 621250757Sjkim Gbl_DisplayOptimizations = TRUE; 622250757Sjkim break; 623250757Sjkim 624250757Sjkim case 'r': 625250757Sjkim 626250757Sjkim Gbl_DisplayRemarks = FALSE; 627250757Sjkim break; 628250757Sjkim 629250757Sjkim case 's': 630250757Sjkim 631250757Sjkim Gbl_DoSignon = FALSE; 632250757Sjkim break; 633250757Sjkim 634250757Sjkim case 't': 635250757Sjkim 636250757Sjkim Gbl_VerboseTemplates = TRUE; 637250757Sjkim break; 638250757Sjkim 639250757Sjkim case 'w': 640250757Sjkim 641250757Sjkim /* Get the required argument */ 642250757Sjkim 643250757Sjkim if (AcpiGetoptArgument (argc, argv)) 644250757Sjkim { 645250757Sjkim return (-1); 646250757Sjkim } 647250757Sjkim 648250757Sjkim Status = AslDisableException (AcpiGbl_Optarg); 649250757Sjkim if (ACPI_FAILURE (Status)) 650250757Sjkim { 651250757Sjkim return (-1); 652250757Sjkim } 653250757Sjkim break; 654250757Sjkim 655250757Sjkim default: 656250757Sjkim 657250757Sjkim printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 658250757Sjkim return (-1); 659250757Sjkim } 660250757Sjkim break; 661250757Sjkim 662250757Sjkim case 'w': /* Set warning levels */ 663250757Sjkim 664250757Sjkim switch (AcpiGbl_Optarg[0]) 665250757Sjkim { 666250757Sjkim case '1': 667250757Sjkim 668250757Sjkim Gbl_WarningLevel = ASL_WARNING; 669250757Sjkim break; 670250757Sjkim 671250757Sjkim case '2': 672250757Sjkim 673250757Sjkim Gbl_WarningLevel = ASL_WARNING2; 674250757Sjkim break; 675250757Sjkim 676250757Sjkim case '3': 677250757Sjkim 678250757Sjkim Gbl_WarningLevel = ASL_WARNING3; 679250757Sjkim break; 680250757Sjkim 681250757Sjkim case 'e': 682250757Sjkim 683250757Sjkim Gbl_WarningsAsErrors = TRUE; 684250757Sjkim break; 685250757Sjkim 686250757Sjkim default: 687250757Sjkim 688250757Sjkim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 689250757Sjkim return (-1); 690250757Sjkim } 691250757Sjkim break; 692250757Sjkim 693250757Sjkim case 'x': /* Set debug print output level */ 694250757Sjkim 695250757Sjkim AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 696250757Sjkim break; 697250757Sjkim 698250757Sjkim case 'z': 699250757Sjkim 700250757Sjkim Gbl_UseOriginalCompilerId = TRUE; 701250757Sjkim break; 702250757Sjkim 703250757Sjkim default: 704250757Sjkim 705250757Sjkim return (-1); 706250757Sjkim } 707250757Sjkim 708250757Sjkim return (0); 709250757Sjkim} 710250757Sjkim 711250757Sjkim 712250757Sjkim/******************************************************************************* 713250757Sjkim * 714250757Sjkim * FUNCTION: AslMergeOptionTokens 715250757Sjkim * 716250757Sjkim * PARAMETERS: InBuffer - Input containing an option string 717250757Sjkim * OutBuffer - Merged output buffer 718250757Sjkim * 719250757Sjkim * RETURN: None 720250757Sjkim * 721250757Sjkim * DESCRIPTION: Remove all whitespace from an option string. 722250757Sjkim * 723250757Sjkim ******************************************************************************/ 724250757Sjkim 725250757Sjkimstatic void 726250757SjkimAslMergeOptionTokens ( 727250757Sjkim char *InBuffer, 728250757Sjkim char *OutBuffer) 729250757Sjkim{ 730250757Sjkim char *Token; 731250757Sjkim 732250757Sjkim 733250757Sjkim *OutBuffer = 0; 734250757Sjkim 735250757Sjkim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 736250757Sjkim while (Token) 737250757Sjkim { 738250757Sjkim strcat (OutBuffer, Token); 739250757Sjkim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 740250757Sjkim } 741250757Sjkim} 742250757Sjkim 743250757Sjkim 744250757Sjkim/******************************************************************************* 745250757Sjkim * 746250757Sjkim * FUNCTION: AslDoResponseFile 747250757Sjkim * 748250757Sjkim * PARAMETERS: Filename - Name of the response file 749250757Sjkim * 750250757Sjkim * RETURN: Status 751250757Sjkim * 752250757Sjkim * DESCRIPTION: Open a response file and process all options within. 753250757Sjkim * 754250757Sjkim ******************************************************************************/ 755250757Sjkim 756250757Sjkimstatic int 757250757SjkimAslDoResponseFile ( 758250757Sjkim char *Filename) 759250757Sjkim{ 760250757Sjkim char *argv = StringBuffer2; 761250757Sjkim FILE *ResponseFile; 762250757Sjkim int OptStatus = 0; 763250757Sjkim int Opterr; 764250757Sjkim int Optind; 765250757Sjkim 766250757Sjkim 767250757Sjkim ResponseFile = fopen (Filename, "r"); 768250757Sjkim if (!ResponseFile) 769250757Sjkim { 770250757Sjkim printf ("Could not open command file %s, %s\n", 771250757Sjkim Filename, strerror (errno)); 772250757Sjkim return (-1); 773250757Sjkim } 774250757Sjkim 775250757Sjkim /* Must save the current GetOpt globals */ 776250757Sjkim 777250757Sjkim Opterr = AcpiGbl_Opterr; 778250757Sjkim Optind = AcpiGbl_Optind; 779250757Sjkim 780250757Sjkim /* 781250757Sjkim * Process all lines in the response file. There must be one complete 782250757Sjkim * option per line 783250757Sjkim */ 784250757Sjkim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 785250757Sjkim { 786250757Sjkim /* Compress all tokens, allowing us to use a single argv entry */ 787250757Sjkim 788250757Sjkim AslMergeOptionTokens (StringBuffer, StringBuffer2); 789250757Sjkim 790250757Sjkim /* Process the option */ 791250757Sjkim 792250757Sjkim AcpiGbl_Opterr = 0; 793250757Sjkim AcpiGbl_Optind = 0; 794250757Sjkim 795250757Sjkim OptStatus = AslDoOptions (1, &argv, TRUE); 796250757Sjkim if (OptStatus) 797250757Sjkim { 798250757Sjkim printf ("Invalid option in command file %s: %s\n", 799250757Sjkim Filename, StringBuffer); 800250757Sjkim break; 801250757Sjkim } 802250757Sjkim } 803250757Sjkim 804250757Sjkim /* Restore the GetOpt globals */ 805250757Sjkim 806250757Sjkim AcpiGbl_Opterr = Opterr; 807250757Sjkim AcpiGbl_Optind = Optind; 808250757Sjkim 809250757Sjkim fclose (ResponseFile); 810250757Sjkim return (OptStatus); 811250757Sjkim} 812