asloptions.c revision 281075
1250757Sjkim/****************************************************************************** 2250757Sjkim * 3250757Sjkim * Module Name: asloptions - compiler command line processing 4250757Sjkim * 5250757Sjkim *****************************************************************************/ 6250757Sjkim 7250757Sjkim/* 8281075Sdim * Copyright (C) 2000 - 2015, 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] && 121281075Sdim !Gbl_DisasmFlag) 122250757Sjkim { 123250757Sjkim printf ("Missing input filename\n"); 124250757Sjkim BadCommandLine = TRUE; 125250757Sjkim } 126250757Sjkim 127250757Sjkim if (Gbl_DoSignon) 128250757Sjkim { 129250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 130250757Sjkim if (Gbl_IgnoreErrors) 131250757Sjkim { 132250757Sjkim printf ("Ignoring all errors, forcing AML file generation\n\n"); 133250757Sjkim } 134250757Sjkim } 135250757Sjkim 136250757Sjkim if (BadCommandLine) 137250757Sjkim { 138254745Sjkim printf ("Use -h option for help information\n"); 139250757Sjkim exit (1); 140250757Sjkim } 141250757Sjkim 142250757Sjkim return (AcpiGbl_Optind); 143250757Sjkim} 144250757Sjkim 145250757Sjkim 146250757Sjkim/******************************************************************************* 147250757Sjkim * 148250757Sjkim * FUNCTION: AslDoOptions 149250757Sjkim * 150250757Sjkim * PARAMETERS: argc/argv - Standard argc/argv 151250757Sjkim * IsResponseFile - TRUE if executing a response file. 152250757Sjkim * 153250757Sjkim * RETURN: Status 154250757Sjkim * 155250757Sjkim * DESCRIPTION: Command line option processing 156250757Sjkim * 157250757Sjkim ******************************************************************************/ 158250757Sjkim 159250757Sjkimstatic int 160250757SjkimAslDoOptions ( 161250757Sjkim int argc, 162250757Sjkim char **argv, 163250757Sjkim BOOLEAN IsResponseFile) 164250757Sjkim{ 165250757Sjkim ACPI_STATUS Status; 166250757Sjkim UINT32 j; 167250757Sjkim 168250757Sjkim 169250757Sjkim /* Get the command line options */ 170250757Sjkim 171281075Sdim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j) 172250757Sjkim { 173250757Sjkim case '@': /* Begin a response file */ 174250757Sjkim 175250757Sjkim if (IsResponseFile) 176250757Sjkim { 177250757Sjkim printf ("Nested command files are not supported\n"); 178250757Sjkim return (-1); 179250757Sjkim } 180250757Sjkim 181250757Sjkim if (AslDoResponseFile (AcpiGbl_Optarg)) 182250757Sjkim { 183250757Sjkim return (-1); 184250757Sjkim } 185250757Sjkim break; 186250757Sjkim 187281075Sdim case 'b': /* Debug options */ 188250757Sjkim 189250757Sjkim switch (AcpiGbl_Optarg[0]) 190250757Sjkim { 191250757Sjkim case 'f': 192250757Sjkim 193250757Sjkim AslCompilerdebug = 1; /* same as yydebug */ 194250757Sjkim DtParserdebug = 1; 195250757Sjkim PrParserdebug = 1; 196281075Sdim Gbl_DebugFlag = TRUE; 197250757Sjkim break; 198250757Sjkim 199281075Sdim case 'p': /* Prune ASL parse tree */ 200281075Sdim 201281075Sdim /* Get the required argument */ 202281075Sdim 203281075Sdim if (AcpiGetoptArgument (argc, argv)) 204281075Sdim { 205281075Sdim return (-1); 206281075Sdim } 207281075Sdim 208281075Sdim Gbl_PruneParseTree = TRUE; 209281075Sdim Gbl_PruneDepth = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 210281075Sdim break; 211281075Sdim 212281075Sdim case 's': 213281075Sdim 214281075Sdim Gbl_DebugFlag = TRUE; 215281075Sdim break; 216281075Sdim 217250757Sjkim case 't': 218250757Sjkim 219281075Sdim /* Get the required argument */ 220281075Sdim 221281075Sdim if (AcpiGetoptArgument (argc, argv)) 222281075Sdim { 223281075Sdim return (-1); 224281075Sdim } 225281075Sdim 226281075Sdim Gbl_PruneType = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 227250757Sjkim break; 228250757Sjkim 229250757Sjkim default: 230250757Sjkim 231250757Sjkim printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 232250757Sjkim return (-1); 233250757Sjkim } 234250757Sjkim 235250757Sjkim break; 236250757Sjkim 237250757Sjkim case 'c': 238250757Sjkim 239250757Sjkim switch (AcpiGbl_Optarg[0]) 240250757Sjkim { 241250757Sjkim case 'r': 242250757Sjkim 243250757Sjkim Gbl_NoResourceChecking = TRUE; 244250757Sjkim break; 245250757Sjkim 246250757Sjkim default: 247250757Sjkim 248250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 249250757Sjkim return (-1); 250250757Sjkim } 251250757Sjkim break; 252250757Sjkim 253250757Sjkim case 'd': /* Disassembler */ 254250757Sjkim 255250757Sjkim switch (AcpiGbl_Optarg[0]) 256250757Sjkim { 257250757Sjkim case '^': 258250757Sjkim 259250757Sjkim Gbl_DoCompile = FALSE; 260250757Sjkim break; 261250757Sjkim 262250757Sjkim case 'a': 263250757Sjkim 264250757Sjkim Gbl_DoCompile = FALSE; 265250757Sjkim Gbl_DisassembleAll = TRUE; 266250757Sjkim break; 267250757Sjkim 268250757Sjkim case 'b': /* Do not convert buffers to resource descriptors */ 269250757Sjkim 270250757Sjkim AcpiGbl_NoResourceDisassembly = TRUE; 271250757Sjkim break; 272250757Sjkim 273250757Sjkim case 'c': 274250757Sjkim 275250757Sjkim break; 276250757Sjkim 277281075Sdim case 'l': /* Use legacy ASL code (not ASL+) for disassembly */ 278281075Sdim 279281075Sdim Gbl_DoCompile = FALSE; 280281075Sdim AcpiGbl_CstyleDisassembly = FALSE; 281281075Sdim break; 282281075Sdim 283250757Sjkim default: 284250757Sjkim 285250757Sjkim printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 286250757Sjkim return (-1); 287250757Sjkim } 288250757Sjkim 289250757Sjkim Gbl_DisasmFlag = TRUE; 290250757Sjkim break; 291250757Sjkim 292250757Sjkim case 'D': /* Define a symbol */ 293250757Sjkim 294250757Sjkim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 295250757Sjkim break; 296250757Sjkim 297250757Sjkim case 'e': /* External files for disassembler */ 298250757Sjkim 299281075Sdim /* Get entire list of external files */ 300281075Sdim 301281075Sdim AcpiGbl_Optind--; 302281075Sdim argv[AcpiGbl_Optind] = AcpiGbl_Optarg; 303281075Sdim 304281075Sdim while (argv[AcpiGbl_Optind] && 305281075Sdim (argv[AcpiGbl_Optind][0] != '-')) 306250757Sjkim { 307281075Sdim Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]); 308281075Sdim if (ACPI_FAILURE (Status)) 309281075Sdim { 310281075Sdim printf ("Could not add %s to external list\n", argv[AcpiGbl_Optind]); 311281075Sdim return (-1); 312281075Sdim } 313281075Sdim 314281075Sdim AcpiGbl_Optind++; 315250757Sjkim } 316250757Sjkim break; 317250757Sjkim 318254745Sjkim case 'f': 319250757Sjkim 320254745Sjkim switch (AcpiGbl_Optarg[0]) 321254745Sjkim { 322254745Sjkim case '^': /* Ignore errors and force creation of aml file */ 323254745Sjkim 324254745Sjkim Gbl_IgnoreErrors = TRUE; 325254745Sjkim break; 326254745Sjkim 327254745Sjkim case 'e': /* Disassembler: Get external declaration file */ 328254745Sjkim 329254745Sjkim if (AcpiGetoptArgument (argc, argv)) 330254745Sjkim { 331254745Sjkim return (-1); 332254745Sjkim } 333254745Sjkim 334254745Sjkim Gbl_ExternalRefFilename = AcpiGbl_Optarg; 335254745Sjkim break; 336254745Sjkim 337254745Sjkim default: 338254745Sjkim 339254745Sjkim printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); 340254745Sjkim return (-1); 341254745Sjkim } 342250757Sjkim break; 343250757Sjkim 344250757Sjkim case 'G': 345250757Sjkim 346250757Sjkim Gbl_CompileGeneric = TRUE; 347250757Sjkim break; 348250757Sjkim 349250757Sjkim case 'g': /* Get all ACPI tables */ 350250757Sjkim 351281075Sdim printf ("-g option is deprecated, use acpidump utility instead\n"); 352281075Sdim exit (1); 353250757Sjkim 354250757Sjkim case 'h': 355250757Sjkim 356250757Sjkim switch (AcpiGbl_Optarg[0]) 357250757Sjkim { 358250757Sjkim case '^': 359250757Sjkim 360250757Sjkim Usage (); 361250757Sjkim exit (0); 362250757Sjkim 363250757Sjkim case 'c': 364250757Sjkim 365250757Sjkim UtDisplayConstantOpcodes (); 366250757Sjkim exit (0); 367250757Sjkim 368250757Sjkim case 'f': 369250757Sjkim 370250757Sjkim AslFilenameHelp (); 371250757Sjkim exit (0); 372250757Sjkim 373250757Sjkim case 'r': 374250757Sjkim 375250757Sjkim /* reserved names */ 376250757Sjkim 377250757Sjkim ApDisplayReservedNames (); 378250757Sjkim exit (0); 379250757Sjkim 380250757Sjkim case 't': 381250757Sjkim 382250757Sjkim UtDisplaySupportedTables (); 383250757Sjkim exit (0); 384250757Sjkim 385250757Sjkim default: 386250757Sjkim 387250757Sjkim printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 388250757Sjkim return (-1); 389250757Sjkim } 390250757Sjkim 391250757Sjkim case 'I': /* Add an include file search directory */ 392250757Sjkim 393250757Sjkim FlAddIncludeDirectory (AcpiGbl_Optarg); 394250757Sjkim break; 395250757Sjkim 396250757Sjkim case 'i': /* Output AML as an include file */ 397250757Sjkim 398250757Sjkim switch (AcpiGbl_Optarg[0]) 399250757Sjkim { 400250757Sjkim case 'a': 401250757Sjkim 402250757Sjkim /* Produce assembly code include file */ 403250757Sjkim 404250757Sjkim Gbl_AsmIncludeOutputFlag = TRUE; 405250757Sjkim break; 406250757Sjkim 407250757Sjkim case 'c': 408250757Sjkim 409250757Sjkim /* Produce C include file */ 410250757Sjkim 411250757Sjkim Gbl_C_IncludeOutputFlag = TRUE; 412250757Sjkim break; 413250757Sjkim 414250757Sjkim case 'n': 415250757Sjkim 416250757Sjkim /* Compiler/Disassembler: Ignore the NOOP operator */ 417250757Sjkim 418250757Sjkim AcpiGbl_IgnoreNoopOperator = TRUE; 419250757Sjkim break; 420250757Sjkim 421250757Sjkim default: 422250757Sjkim 423250757Sjkim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 424250757Sjkim return (-1); 425250757Sjkim } 426250757Sjkim break; 427250757Sjkim 428250757Sjkim case 'l': /* Listing files */ 429250757Sjkim 430250757Sjkim switch (AcpiGbl_Optarg[0]) 431250757Sjkim { 432250757Sjkim case '^': 433250757Sjkim 434250757Sjkim /* Produce listing file (Mixed source/aml) */ 435250757Sjkim 436250757Sjkim Gbl_ListingFlag = TRUE; 437250757Sjkim break; 438250757Sjkim 439250757Sjkim case 'i': 440250757Sjkim 441250757Sjkim /* Produce preprocessor output file */ 442250757Sjkim 443250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 444250757Sjkim break; 445250757Sjkim 446281075Sdim case 'm': 447281075Sdim 448281075Sdim /* Produce hardware map summary file */ 449281075Sdim 450281075Sdim Gbl_MapfileFlag = TRUE; 451281075Sdim break; 452281075Sdim 453250757Sjkim case 'n': 454250757Sjkim 455250757Sjkim /* Produce namespace file */ 456250757Sjkim 457250757Sjkim Gbl_NsOutputFlag = TRUE; 458250757Sjkim break; 459250757Sjkim 460250757Sjkim case 's': 461250757Sjkim 462250757Sjkim /* Produce combined source file */ 463250757Sjkim 464250757Sjkim Gbl_SourceOutputFlag = TRUE; 465250757Sjkim break; 466250757Sjkim 467250757Sjkim default: 468250757Sjkim 469250757Sjkim printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 470250757Sjkim return (-1); 471250757Sjkim } 472250757Sjkim break; 473250757Sjkim 474250757Sjkim case 'm': /* Set line buffer size */ 475250757Sjkim 476250757Sjkim Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 477250757Sjkim if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 478250757Sjkim { 479250757Sjkim Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 480250757Sjkim } 481250757Sjkim printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 482250757Sjkim break; 483250757Sjkim 484250757Sjkim case 'n': /* Parse only */ 485250757Sjkim 486250757Sjkim Gbl_ParseOnlyFlag = TRUE; 487250757Sjkim break; 488250757Sjkim 489250757Sjkim case 'o': /* Control compiler AML optimizations */ 490250757Sjkim 491250757Sjkim switch (AcpiGbl_Optarg[0]) 492250757Sjkim { 493250757Sjkim case 'a': 494250757Sjkim 495250757Sjkim /* Disable all optimizations */ 496250757Sjkim 497250757Sjkim Gbl_FoldConstants = FALSE; 498250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 499250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 500250757Sjkim break; 501250757Sjkim 502250757Sjkim case 'f': 503250757Sjkim 504250757Sjkim /* Disable folding on "normal" expressions */ 505250757Sjkim 506250757Sjkim Gbl_FoldConstants = FALSE; 507250757Sjkim break; 508250757Sjkim 509250757Sjkim case 'i': 510250757Sjkim 511250757Sjkim /* Disable integer optimization to constants */ 512250757Sjkim 513250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 514250757Sjkim break; 515250757Sjkim 516250757Sjkim case 'n': 517250757Sjkim 518250757Sjkim /* Disable named reference optimization */ 519250757Sjkim 520250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 521250757Sjkim break; 522250757Sjkim 523250757Sjkim case 't': 524250757Sjkim 525250757Sjkim /* Display compile time(s) */ 526250757Sjkim 527250757Sjkim Gbl_CompileTimesFlag = TRUE; 528250757Sjkim break; 529250757Sjkim 530250757Sjkim default: 531250757Sjkim 532250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 533250757Sjkim return (-1); 534250757Sjkim } 535250757Sjkim break; 536250757Sjkim 537250757Sjkim case 'P': /* Preprocessor options */ 538250757Sjkim 539250757Sjkim switch (AcpiGbl_Optarg[0]) 540250757Sjkim { 541250757Sjkim case '^': /* Proprocess only, emit (.i) file */ 542250757Sjkim 543250757Sjkim Gbl_PreprocessOnly = TRUE; 544250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 545250757Sjkim break; 546250757Sjkim 547250757Sjkim case 'n': /* Disable preprocessor */ 548250757Sjkim 549250757Sjkim Gbl_PreprocessFlag = FALSE; 550250757Sjkim break; 551250757Sjkim 552250757Sjkim default: 553250757Sjkim 554250757Sjkim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 555250757Sjkim return (-1); 556250757Sjkim } 557250757Sjkim break; 558250757Sjkim 559250757Sjkim case 'p': /* Override default AML output filename */ 560250757Sjkim 561250757Sjkim Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 562281075Sdim UtConvertBackslashes (Gbl_OutputFilenamePrefix); 563250757Sjkim Gbl_UseDefaultAmlFilename = FALSE; 564250757Sjkim break; 565250757Sjkim 566250757Sjkim case 'r': /* Override revision found in table header */ 567250757Sjkim 568250757Sjkim Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 569250757Sjkim break; 570250757Sjkim 571250757Sjkim case 's': /* Create AML in a source code file */ 572250757Sjkim 573250757Sjkim switch (AcpiGbl_Optarg[0]) 574250757Sjkim { 575250757Sjkim case 'a': 576250757Sjkim 577250757Sjkim /* Produce assembly code output file */ 578250757Sjkim 579250757Sjkim Gbl_AsmOutputFlag = TRUE; 580250757Sjkim break; 581250757Sjkim 582250757Sjkim case 'c': 583250757Sjkim 584250757Sjkim /* Produce C hex output file */ 585250757Sjkim 586250757Sjkim Gbl_C_OutputFlag = TRUE; 587250757Sjkim break; 588250757Sjkim 589250757Sjkim case 'o': 590250757Sjkim 591250757Sjkim /* Produce AML offset table in C */ 592250757Sjkim 593250757Sjkim Gbl_C_OffsetTableFlag = TRUE; 594250757Sjkim break; 595250757Sjkim 596250757Sjkim default: 597250757Sjkim 598250757Sjkim printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 599250757Sjkim return (-1); 600250757Sjkim } 601250757Sjkim break; 602250757Sjkim 603250757Sjkim case 't': /* Produce hex table output file */ 604250757Sjkim 605250757Sjkim switch (AcpiGbl_Optarg[0]) 606250757Sjkim { 607250757Sjkim case 'a': 608250757Sjkim 609250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 610250757Sjkim break; 611250757Sjkim 612250757Sjkim case 'c': 613250757Sjkim 614250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_C; 615250757Sjkim break; 616250757Sjkim 617250757Sjkim case 's': 618250757Sjkim 619250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 620250757Sjkim break; 621250757Sjkim 622250757Sjkim default: 623250757Sjkim 624250757Sjkim printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 625250757Sjkim return (-1); 626250757Sjkim } 627250757Sjkim break; 628250757Sjkim 629250757Sjkim case 'T': /* Create a ACPI table template file */ 630250757Sjkim 631250757Sjkim Gbl_DoTemplates = TRUE; 632250757Sjkim Gbl_TemplateSignature = AcpiGbl_Optarg; 633250757Sjkim break; 634250757Sjkim 635250757Sjkim case 'v': /* Version and verbosity settings */ 636250757Sjkim 637250757Sjkim switch (AcpiGbl_Optarg[0]) 638250757Sjkim { 639250757Sjkim case '^': 640250757Sjkim 641250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 642250757Sjkim exit (0); 643250757Sjkim 644250757Sjkim case 'a': 645250757Sjkim 646281075Sdim /* Disable all error/warning/remark messages */ 647250757Sjkim 648250757Sjkim Gbl_NoErrors = TRUE; 649250757Sjkim break; 650250757Sjkim 651281075Sdim case 'e': 652281075Sdim 653281075Sdim /* Disable all warning/remark messages (errors only) */ 654281075Sdim 655281075Sdim Gbl_DisplayRemarks = FALSE; 656281075Sdim Gbl_DisplayWarnings = FALSE; 657281075Sdim break; 658281075Sdim 659250757Sjkim case 'i': 660250757Sjkim /* 661250757Sjkim * Support for integrated development environment(s). 662250757Sjkim * 663250757Sjkim * 1) No compiler signon 664250757Sjkim * 2) Send stderr messages to stdout 665250757Sjkim * 3) Less verbose error messages (single line only for each) 666250757Sjkim * 4) Error/warning messages are formatted appropriately to 667250757Sjkim * be recognized by MS Visual Studio 668250757Sjkim */ 669250757Sjkim Gbl_VerboseErrors = FALSE; 670250757Sjkim Gbl_DoSignon = FALSE; 671250757Sjkim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 672250757Sjkim break; 673250757Sjkim 674250757Sjkim case 'o': 675250757Sjkim 676250757Sjkim Gbl_DisplayOptimizations = TRUE; 677250757Sjkim break; 678250757Sjkim 679250757Sjkim case 'r': 680250757Sjkim 681250757Sjkim Gbl_DisplayRemarks = FALSE; 682250757Sjkim break; 683250757Sjkim 684250757Sjkim case 's': 685250757Sjkim 686250757Sjkim Gbl_DoSignon = FALSE; 687250757Sjkim break; 688250757Sjkim 689250757Sjkim case 't': 690250757Sjkim 691250757Sjkim Gbl_VerboseTemplates = TRUE; 692250757Sjkim break; 693250757Sjkim 694250757Sjkim case 'w': 695250757Sjkim 696250757Sjkim /* Get the required argument */ 697250757Sjkim 698250757Sjkim if (AcpiGetoptArgument (argc, argv)) 699250757Sjkim { 700250757Sjkim return (-1); 701250757Sjkim } 702250757Sjkim 703250757Sjkim Status = AslDisableException (AcpiGbl_Optarg); 704250757Sjkim if (ACPI_FAILURE (Status)) 705250757Sjkim { 706250757Sjkim return (-1); 707250757Sjkim } 708250757Sjkim break; 709250757Sjkim 710250757Sjkim default: 711250757Sjkim 712250757Sjkim printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 713250757Sjkim return (-1); 714250757Sjkim } 715250757Sjkim break; 716250757Sjkim 717250757Sjkim case 'w': /* Set warning levels */ 718250757Sjkim 719250757Sjkim switch (AcpiGbl_Optarg[0]) 720250757Sjkim { 721250757Sjkim case '1': 722250757Sjkim 723250757Sjkim Gbl_WarningLevel = ASL_WARNING; 724250757Sjkim break; 725250757Sjkim 726250757Sjkim case '2': 727250757Sjkim 728250757Sjkim Gbl_WarningLevel = ASL_WARNING2; 729250757Sjkim break; 730250757Sjkim 731250757Sjkim case '3': 732250757Sjkim 733250757Sjkim Gbl_WarningLevel = ASL_WARNING3; 734250757Sjkim break; 735250757Sjkim 736250757Sjkim case 'e': 737250757Sjkim 738250757Sjkim Gbl_WarningsAsErrors = TRUE; 739250757Sjkim break; 740250757Sjkim 741250757Sjkim default: 742250757Sjkim 743250757Sjkim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 744250757Sjkim return (-1); 745250757Sjkim } 746250757Sjkim break; 747250757Sjkim 748250757Sjkim case 'x': /* Set debug print output level */ 749250757Sjkim 750250757Sjkim AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 751250757Sjkim break; 752250757Sjkim 753250757Sjkim case 'z': 754250757Sjkim 755250757Sjkim Gbl_UseOriginalCompilerId = TRUE; 756250757Sjkim break; 757250757Sjkim 758250757Sjkim default: 759250757Sjkim 760250757Sjkim return (-1); 761250757Sjkim } 762250757Sjkim 763250757Sjkim return (0); 764250757Sjkim} 765250757Sjkim 766250757Sjkim 767250757Sjkim/******************************************************************************* 768250757Sjkim * 769250757Sjkim * FUNCTION: AslMergeOptionTokens 770250757Sjkim * 771250757Sjkim * PARAMETERS: InBuffer - Input containing an option string 772250757Sjkim * OutBuffer - Merged output buffer 773250757Sjkim * 774250757Sjkim * RETURN: None 775250757Sjkim * 776250757Sjkim * DESCRIPTION: Remove all whitespace from an option string. 777250757Sjkim * 778250757Sjkim ******************************************************************************/ 779250757Sjkim 780250757Sjkimstatic void 781250757SjkimAslMergeOptionTokens ( 782250757Sjkim char *InBuffer, 783250757Sjkim char *OutBuffer) 784250757Sjkim{ 785250757Sjkim char *Token; 786250757Sjkim 787250757Sjkim 788250757Sjkim *OutBuffer = 0; 789250757Sjkim 790250757Sjkim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 791250757Sjkim while (Token) 792250757Sjkim { 793250757Sjkim strcat (OutBuffer, Token); 794250757Sjkim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 795250757Sjkim } 796250757Sjkim} 797250757Sjkim 798250757Sjkim 799250757Sjkim/******************************************************************************* 800250757Sjkim * 801250757Sjkim * FUNCTION: AslDoResponseFile 802250757Sjkim * 803250757Sjkim * PARAMETERS: Filename - Name of the response file 804250757Sjkim * 805250757Sjkim * RETURN: Status 806250757Sjkim * 807250757Sjkim * DESCRIPTION: Open a response file and process all options within. 808250757Sjkim * 809250757Sjkim ******************************************************************************/ 810250757Sjkim 811250757Sjkimstatic int 812250757SjkimAslDoResponseFile ( 813250757Sjkim char *Filename) 814250757Sjkim{ 815250757Sjkim char *argv = StringBuffer2; 816250757Sjkim FILE *ResponseFile; 817250757Sjkim int OptStatus = 0; 818250757Sjkim int Opterr; 819250757Sjkim int Optind; 820250757Sjkim 821250757Sjkim 822250757Sjkim ResponseFile = fopen (Filename, "r"); 823250757Sjkim if (!ResponseFile) 824250757Sjkim { 825250757Sjkim printf ("Could not open command file %s, %s\n", 826250757Sjkim Filename, strerror (errno)); 827250757Sjkim return (-1); 828250757Sjkim } 829250757Sjkim 830250757Sjkim /* Must save the current GetOpt globals */ 831250757Sjkim 832250757Sjkim Opterr = AcpiGbl_Opterr; 833250757Sjkim Optind = AcpiGbl_Optind; 834250757Sjkim 835250757Sjkim /* 836250757Sjkim * Process all lines in the response file. There must be one complete 837250757Sjkim * option per line 838250757Sjkim */ 839250757Sjkim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 840250757Sjkim { 841250757Sjkim /* Compress all tokens, allowing us to use a single argv entry */ 842250757Sjkim 843250757Sjkim AslMergeOptionTokens (StringBuffer, StringBuffer2); 844250757Sjkim 845250757Sjkim /* Process the option */ 846250757Sjkim 847250757Sjkim AcpiGbl_Opterr = 0; 848250757Sjkim AcpiGbl_Optind = 0; 849250757Sjkim 850250757Sjkim OptStatus = AslDoOptions (1, &argv, TRUE); 851250757Sjkim if (OptStatus) 852250757Sjkim { 853250757Sjkim printf ("Invalid option in command file %s: %s\n", 854250757Sjkim Filename, StringBuffer); 855250757Sjkim break; 856250757Sjkim } 857250757Sjkim } 858250757Sjkim 859250757Sjkim /* Restore the GetOpt globals */ 860250757Sjkim 861250757Sjkim AcpiGbl_Opterr = Opterr; 862250757Sjkim AcpiGbl_Optind = Optind; 863250757Sjkim 864250757Sjkim fclose (ResponseFile); 865250757Sjkim return (OptStatus); 866250757Sjkim} 867