asloptions.c revision 306536
1250757Sjkim/****************************************************************************** 2250757Sjkim * 3250757Sjkim * Module Name: asloptions - compiler command line processing 4250757Sjkim * 5250757Sjkim *****************************************************************************/ 6250757Sjkim 7250757Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, 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" 71306536Sjkim#define ASL_SUPPORTED_OPTIONS "@:a: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 { 110306536Sjkim Status = DtCreateTemplates (argv); 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 187306536Sjkim case 'a': /* Debug options */ 188306536Sjkim 189306536Sjkim switch (AcpiGbl_Optarg[0]) 190306536Sjkim { 191306536Sjkim case 'r': 192306536Sjkim 193306536Sjkim Gbl_EnableReferenceTypechecking = TRUE; 194306536Sjkim break; 195306536Sjkim 196306536Sjkim default: 197306536Sjkim 198306536Sjkim printf ("Unknown option: -a%s\n", AcpiGbl_Optarg); 199306536Sjkim return (-1); 200306536Sjkim } 201306536Sjkim 202306536Sjkim break; 203306536Sjkim 204306536Sjkim 205281075Sdim case 'b': /* Debug options */ 206250757Sjkim 207250757Sjkim switch (AcpiGbl_Optarg[0]) 208250757Sjkim { 209250757Sjkim case 'f': 210250757Sjkim 211250757Sjkim AslCompilerdebug = 1; /* same as yydebug */ 212250757Sjkim DtParserdebug = 1; 213250757Sjkim PrParserdebug = 1; 214281075Sdim Gbl_DebugFlag = TRUE; 215306536Sjkim Gbl_KeepPreprocessorTempFile = TRUE; 216250757Sjkim break; 217250757Sjkim 218281075Sdim case 'p': /* Prune ASL parse tree */ 219281075Sdim 220281075Sdim /* Get the required argument */ 221281075Sdim 222281075Sdim if (AcpiGetoptArgument (argc, argv)) 223281075Sdim { 224281075Sdim return (-1); 225281075Sdim } 226281075Sdim 227281075Sdim Gbl_PruneParseTree = TRUE; 228281075Sdim Gbl_PruneDepth = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 229281075Sdim break; 230281075Sdim 231281075Sdim case 's': 232281075Sdim 233281075Sdim Gbl_DebugFlag = TRUE; 234281075Sdim break; 235281075Sdim 236250757Sjkim case 't': 237250757Sjkim 238281075Sdim /* Get the required argument */ 239281075Sdim 240281075Sdim if (AcpiGetoptArgument (argc, argv)) 241281075Sdim { 242281075Sdim return (-1); 243281075Sdim } 244281075Sdim 245281075Sdim Gbl_PruneType = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 246250757Sjkim break; 247250757Sjkim 248250757Sjkim default: 249250757Sjkim 250250757Sjkim printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 251250757Sjkim return (-1); 252250757Sjkim } 253250757Sjkim 254250757Sjkim break; 255250757Sjkim 256250757Sjkim case 'c': 257250757Sjkim 258250757Sjkim switch (AcpiGbl_Optarg[0]) 259250757Sjkim { 260250757Sjkim case 'r': 261250757Sjkim 262250757Sjkim Gbl_NoResourceChecking = TRUE; 263250757Sjkim break; 264250757Sjkim 265250757Sjkim default: 266250757Sjkim 267250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 268250757Sjkim return (-1); 269250757Sjkim } 270250757Sjkim break; 271250757Sjkim 272250757Sjkim case 'd': /* Disassembler */ 273250757Sjkim 274250757Sjkim switch (AcpiGbl_Optarg[0]) 275250757Sjkim { 276250757Sjkim case '^': 277250757Sjkim 278250757Sjkim Gbl_DoCompile = FALSE; 279250757Sjkim break; 280250757Sjkim 281250757Sjkim case 'a': 282250757Sjkim 283250757Sjkim Gbl_DoCompile = FALSE; 284250757Sjkim Gbl_DisassembleAll = TRUE; 285250757Sjkim break; 286250757Sjkim 287250757Sjkim case 'b': /* Do not convert buffers to resource descriptors */ 288250757Sjkim 289250757Sjkim AcpiGbl_NoResourceDisassembly = TRUE; 290250757Sjkim break; 291250757Sjkim 292250757Sjkim case 'c': 293250757Sjkim 294250757Sjkim break; 295250757Sjkim 296281687Sjkim case 'f': 297281687Sjkim 298281687Sjkim AcpiGbl_ForceAmlDisassembly = TRUE; 299281687Sjkim break; 300281687Sjkim 301281075Sdim case 'l': /* Use legacy ASL code (not ASL+) for disassembly */ 302281075Sdim 303281075Sdim Gbl_DoCompile = FALSE; 304281075Sdim AcpiGbl_CstyleDisassembly = FALSE; 305281075Sdim break; 306281075Sdim 307250757Sjkim default: 308250757Sjkim 309250757Sjkim printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 310250757Sjkim return (-1); 311250757Sjkim } 312250757Sjkim 313250757Sjkim Gbl_DisasmFlag = TRUE; 314250757Sjkim break; 315250757Sjkim 316250757Sjkim case 'D': /* Define a symbol */ 317250757Sjkim 318250757Sjkim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 319250757Sjkim break; 320250757Sjkim 321250757Sjkim case 'e': /* External files for disassembler */ 322250757Sjkim 323281075Sdim /* Get entire list of external files */ 324281075Sdim 325281075Sdim AcpiGbl_Optind--; 326281075Sdim argv[AcpiGbl_Optind] = AcpiGbl_Optarg; 327281075Sdim 328281075Sdim while (argv[AcpiGbl_Optind] && 329281075Sdim (argv[AcpiGbl_Optind][0] != '-')) 330250757Sjkim { 331281075Sdim Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]); 332281075Sdim if (ACPI_FAILURE (Status)) 333281075Sdim { 334306536Sjkim printf ("Could not add %s to external list\n", 335306536Sjkim argv[AcpiGbl_Optind]); 336281075Sdim return (-1); 337281075Sdim } 338281075Sdim 339281075Sdim AcpiGbl_Optind++; 340250757Sjkim } 341250757Sjkim break; 342250757Sjkim 343254745Sjkim case 'f': 344250757Sjkim 345254745Sjkim switch (AcpiGbl_Optarg[0]) 346254745Sjkim { 347254745Sjkim case '^': /* Ignore errors and force creation of aml file */ 348254745Sjkim 349254745Sjkim Gbl_IgnoreErrors = TRUE; 350254745Sjkim break; 351254745Sjkim 352254745Sjkim case 'e': /* Disassembler: Get external declaration file */ 353254745Sjkim 354254745Sjkim if (AcpiGetoptArgument (argc, argv)) 355254745Sjkim { 356254745Sjkim return (-1); 357254745Sjkim } 358254745Sjkim 359254745Sjkim Gbl_ExternalRefFilename = AcpiGbl_Optarg; 360254745Sjkim break; 361254745Sjkim 362254745Sjkim default: 363254745Sjkim 364254745Sjkim printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); 365254745Sjkim return (-1); 366254745Sjkim } 367250757Sjkim break; 368250757Sjkim 369250757Sjkim case 'G': 370250757Sjkim 371250757Sjkim Gbl_CompileGeneric = TRUE; 372250757Sjkim break; 373250757Sjkim 374250757Sjkim case 'g': /* Get all ACPI tables */ 375250757Sjkim 376281075Sdim printf ("-g option is deprecated, use acpidump utility instead\n"); 377281075Sdim exit (1); 378250757Sjkim 379250757Sjkim case 'h': 380250757Sjkim 381250757Sjkim switch (AcpiGbl_Optarg[0]) 382250757Sjkim { 383250757Sjkim case '^': 384250757Sjkim 385250757Sjkim Usage (); 386250757Sjkim exit (0); 387250757Sjkim 388250757Sjkim case 'c': 389250757Sjkim 390250757Sjkim UtDisplayConstantOpcodes (); 391250757Sjkim exit (0); 392250757Sjkim 393250757Sjkim case 'f': 394250757Sjkim 395250757Sjkim AslFilenameHelp (); 396250757Sjkim exit (0); 397250757Sjkim 398250757Sjkim case 'r': 399250757Sjkim 400250757Sjkim /* reserved names */ 401250757Sjkim 402250757Sjkim ApDisplayReservedNames (); 403250757Sjkim exit (0); 404250757Sjkim 405250757Sjkim case 't': 406250757Sjkim 407250757Sjkim UtDisplaySupportedTables (); 408250757Sjkim exit (0); 409250757Sjkim 410250757Sjkim default: 411250757Sjkim 412250757Sjkim printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 413250757Sjkim return (-1); 414250757Sjkim } 415250757Sjkim 416250757Sjkim case 'I': /* Add an include file search directory */ 417250757Sjkim 418250757Sjkim FlAddIncludeDirectory (AcpiGbl_Optarg); 419250757Sjkim break; 420250757Sjkim 421250757Sjkim case 'i': /* Output AML as an include file */ 422250757Sjkim 423250757Sjkim switch (AcpiGbl_Optarg[0]) 424250757Sjkim { 425250757Sjkim case 'a': 426250757Sjkim 427250757Sjkim /* Produce assembly code include file */ 428250757Sjkim 429250757Sjkim Gbl_AsmIncludeOutputFlag = TRUE; 430250757Sjkim break; 431250757Sjkim 432250757Sjkim case 'c': 433250757Sjkim 434250757Sjkim /* Produce C include file */ 435250757Sjkim 436250757Sjkim Gbl_C_IncludeOutputFlag = TRUE; 437250757Sjkim break; 438250757Sjkim 439250757Sjkim case 'n': 440250757Sjkim 441250757Sjkim /* Compiler/Disassembler: Ignore the NOOP operator */ 442250757Sjkim 443250757Sjkim AcpiGbl_IgnoreNoopOperator = TRUE; 444250757Sjkim break; 445250757Sjkim 446250757Sjkim default: 447250757Sjkim 448250757Sjkim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 449250757Sjkim return (-1); 450250757Sjkim } 451250757Sjkim break; 452250757Sjkim 453250757Sjkim case 'l': /* Listing files */ 454250757Sjkim 455250757Sjkim switch (AcpiGbl_Optarg[0]) 456250757Sjkim { 457250757Sjkim case '^': 458250757Sjkim 459250757Sjkim /* Produce listing file (Mixed source/aml) */ 460250757Sjkim 461250757Sjkim Gbl_ListingFlag = TRUE; 462306536Sjkim AcpiGbl_DmOpt_Listing = TRUE; 463250757Sjkim break; 464250757Sjkim 465250757Sjkim case 'i': 466250757Sjkim 467250757Sjkim /* Produce preprocessor output file */ 468250757Sjkim 469250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 470250757Sjkim break; 471250757Sjkim 472281075Sdim case 'm': 473281075Sdim 474281075Sdim /* Produce hardware map summary file */ 475281075Sdim 476281075Sdim Gbl_MapfileFlag = TRUE; 477281075Sdim break; 478281075Sdim 479250757Sjkim case 'n': 480250757Sjkim 481250757Sjkim /* Produce namespace file */ 482250757Sjkim 483250757Sjkim Gbl_NsOutputFlag = TRUE; 484250757Sjkim break; 485250757Sjkim 486250757Sjkim case 's': 487250757Sjkim 488250757Sjkim /* Produce combined source file */ 489250757Sjkim 490250757Sjkim Gbl_SourceOutputFlag = TRUE; 491250757Sjkim break; 492250757Sjkim 493306536Sjkim case 'x': 494306536Sjkim 495306536Sjkim /* Produce cross-reference file */ 496306536Sjkim 497306536Sjkim Gbl_CrossReferenceOutput = TRUE; 498306536Sjkim break; 499306536Sjkim 500250757Sjkim default: 501250757Sjkim 502250757Sjkim printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 503250757Sjkim return (-1); 504250757Sjkim } 505250757Sjkim break; 506250757Sjkim 507250757Sjkim case 'm': /* Set line buffer size */ 508250757Sjkim 509250757Sjkim Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 510250757Sjkim if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 511250757Sjkim { 512250757Sjkim Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 513250757Sjkim } 514250757Sjkim printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 515250757Sjkim break; 516250757Sjkim 517250757Sjkim case 'n': /* Parse only */ 518250757Sjkim 519250757Sjkim Gbl_ParseOnlyFlag = TRUE; 520250757Sjkim break; 521250757Sjkim 522250757Sjkim case 'o': /* Control compiler AML optimizations */ 523250757Sjkim 524250757Sjkim switch (AcpiGbl_Optarg[0]) 525250757Sjkim { 526250757Sjkim case 'a': 527250757Sjkim 528250757Sjkim /* Disable all optimizations */ 529250757Sjkim 530250757Sjkim Gbl_FoldConstants = FALSE; 531250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 532250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 533250757Sjkim break; 534250757Sjkim 535306536Sjkim case 'c': 536306536Sjkim 537306536Sjkim /* Display compile time(s) */ 538306536Sjkim 539306536Sjkim Gbl_CompileTimesFlag = TRUE; 540306536Sjkim break; 541306536Sjkim 542306536Sjkim case 'e': 543306536Sjkim 544306536Sjkim /* iASL: Disable External opcode generation */ 545306536Sjkim 546306536Sjkim Gbl_DoExternals = FALSE; 547306536Sjkim 548306536Sjkim /* Disassembler: Emit embedded external operators */ 549306536Sjkim 550306536Sjkim AcpiGbl_DmEmitExternalOpcodes = TRUE; 551306536Sjkim break; 552306536Sjkim 553250757Sjkim case 'f': 554250757Sjkim 555250757Sjkim /* Disable folding on "normal" expressions */ 556250757Sjkim 557250757Sjkim Gbl_FoldConstants = FALSE; 558250757Sjkim break; 559250757Sjkim 560250757Sjkim case 'i': 561250757Sjkim 562250757Sjkim /* Disable integer optimization to constants */ 563250757Sjkim 564250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 565250757Sjkim break; 566250757Sjkim 567250757Sjkim case 'n': 568250757Sjkim 569250757Sjkim /* Disable named reference optimization */ 570250757Sjkim 571250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 572250757Sjkim break; 573250757Sjkim 574250757Sjkim case 't': 575250757Sjkim 576306536Sjkim /* Disable heavy typechecking */ 577250757Sjkim 578306536Sjkim Gbl_DoTypechecking = FALSE; 579250757Sjkim break; 580250757Sjkim 581250757Sjkim default: 582250757Sjkim 583250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 584250757Sjkim return (-1); 585250757Sjkim } 586250757Sjkim break; 587250757Sjkim 588250757Sjkim case 'P': /* Preprocessor options */ 589250757Sjkim 590250757Sjkim switch (AcpiGbl_Optarg[0]) 591250757Sjkim { 592250757Sjkim case '^': /* Proprocess only, emit (.i) file */ 593250757Sjkim 594250757Sjkim Gbl_PreprocessOnly = TRUE; 595250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 596250757Sjkim break; 597250757Sjkim 598250757Sjkim case 'n': /* Disable preprocessor */ 599250757Sjkim 600250757Sjkim Gbl_PreprocessFlag = FALSE; 601250757Sjkim break; 602250757Sjkim 603250757Sjkim default: 604250757Sjkim 605250757Sjkim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 606250757Sjkim return (-1); 607250757Sjkim } 608250757Sjkim break; 609250757Sjkim 610250757Sjkim case 'p': /* Override default AML output filename */ 611250757Sjkim 612250757Sjkim Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 613281075Sdim UtConvertBackslashes (Gbl_OutputFilenamePrefix); 614250757Sjkim Gbl_UseDefaultAmlFilename = FALSE; 615250757Sjkim break; 616250757Sjkim 617250757Sjkim case 'r': /* Override revision found in table header */ 618250757Sjkim 619250757Sjkim Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 620250757Sjkim break; 621250757Sjkim 622250757Sjkim case 's': /* Create AML in a source code file */ 623250757Sjkim 624250757Sjkim switch (AcpiGbl_Optarg[0]) 625250757Sjkim { 626250757Sjkim case 'a': 627250757Sjkim 628250757Sjkim /* Produce assembly code output file */ 629250757Sjkim 630250757Sjkim Gbl_AsmOutputFlag = TRUE; 631250757Sjkim break; 632250757Sjkim 633250757Sjkim case 'c': 634250757Sjkim 635250757Sjkim /* Produce C hex output file */ 636250757Sjkim 637250757Sjkim Gbl_C_OutputFlag = TRUE; 638250757Sjkim break; 639250757Sjkim 640250757Sjkim case 'o': 641250757Sjkim 642250757Sjkim /* Produce AML offset table in C */ 643250757Sjkim 644250757Sjkim Gbl_C_OffsetTableFlag = TRUE; 645250757Sjkim break; 646250757Sjkim 647250757Sjkim default: 648250757Sjkim 649250757Sjkim printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 650250757Sjkim return (-1); 651250757Sjkim } 652250757Sjkim break; 653250757Sjkim 654250757Sjkim case 't': /* Produce hex table output file */ 655250757Sjkim 656250757Sjkim switch (AcpiGbl_Optarg[0]) 657250757Sjkim { 658250757Sjkim case 'a': 659250757Sjkim 660250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 661250757Sjkim break; 662250757Sjkim 663250757Sjkim case 'c': 664250757Sjkim 665250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_C; 666250757Sjkim break; 667250757Sjkim 668250757Sjkim case 's': 669250757Sjkim 670250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 671250757Sjkim break; 672250757Sjkim 673250757Sjkim default: 674250757Sjkim 675250757Sjkim printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 676250757Sjkim return (-1); 677250757Sjkim } 678250757Sjkim break; 679250757Sjkim 680250757Sjkim case 'T': /* Create a ACPI table template file */ 681250757Sjkim 682250757Sjkim Gbl_DoTemplates = TRUE; 683250757Sjkim break; 684250757Sjkim 685250757Sjkim case 'v': /* Version and verbosity settings */ 686250757Sjkim 687250757Sjkim switch (AcpiGbl_Optarg[0]) 688250757Sjkim { 689250757Sjkim case '^': 690250757Sjkim 691250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 692250757Sjkim exit (0); 693250757Sjkim 694250757Sjkim case 'a': 695250757Sjkim 696281075Sdim /* Disable all error/warning/remark messages */ 697250757Sjkim 698250757Sjkim Gbl_NoErrors = TRUE; 699250757Sjkim break; 700250757Sjkim 701281075Sdim case 'e': 702281075Sdim 703281075Sdim /* Disable all warning/remark messages (errors only) */ 704281075Sdim 705281075Sdim Gbl_DisplayRemarks = FALSE; 706281075Sdim Gbl_DisplayWarnings = FALSE; 707281075Sdim break; 708281075Sdim 709250757Sjkim case 'i': 710250757Sjkim /* 711250757Sjkim * Support for integrated development environment(s). 712250757Sjkim * 713250757Sjkim * 1) No compiler signon 714250757Sjkim * 2) Send stderr messages to stdout 715250757Sjkim * 3) Less verbose error messages (single line only for each) 716250757Sjkim * 4) Error/warning messages are formatted appropriately to 717250757Sjkim * be recognized by MS Visual Studio 718250757Sjkim */ 719250757Sjkim Gbl_VerboseErrors = FALSE; 720250757Sjkim Gbl_DoSignon = FALSE; 721250757Sjkim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 722250757Sjkim break; 723250757Sjkim 724250757Sjkim case 'o': 725250757Sjkim 726250757Sjkim Gbl_DisplayOptimizations = TRUE; 727250757Sjkim break; 728250757Sjkim 729250757Sjkim case 'r': 730250757Sjkim 731250757Sjkim Gbl_DisplayRemarks = FALSE; 732250757Sjkim break; 733250757Sjkim 734250757Sjkim case 's': 735250757Sjkim 736250757Sjkim Gbl_DoSignon = FALSE; 737250757Sjkim break; 738250757Sjkim 739250757Sjkim case 't': 740250757Sjkim 741250757Sjkim Gbl_VerboseTemplates = TRUE; 742250757Sjkim break; 743250757Sjkim 744250757Sjkim case 'w': 745250757Sjkim 746250757Sjkim /* Get the required argument */ 747250757Sjkim 748250757Sjkim if (AcpiGetoptArgument (argc, argv)) 749250757Sjkim { 750250757Sjkim return (-1); 751250757Sjkim } 752250757Sjkim 753250757Sjkim Status = AslDisableException (AcpiGbl_Optarg); 754250757Sjkim if (ACPI_FAILURE (Status)) 755250757Sjkim { 756250757Sjkim return (-1); 757250757Sjkim } 758250757Sjkim break; 759250757Sjkim 760250757Sjkim default: 761250757Sjkim 762250757Sjkim printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 763250757Sjkim return (-1); 764250757Sjkim } 765250757Sjkim break; 766250757Sjkim 767250757Sjkim case 'w': /* Set warning levels */ 768250757Sjkim 769250757Sjkim switch (AcpiGbl_Optarg[0]) 770250757Sjkim { 771250757Sjkim case '1': 772250757Sjkim 773250757Sjkim Gbl_WarningLevel = ASL_WARNING; 774250757Sjkim break; 775250757Sjkim 776250757Sjkim case '2': 777250757Sjkim 778250757Sjkim Gbl_WarningLevel = ASL_WARNING2; 779250757Sjkim break; 780250757Sjkim 781250757Sjkim case '3': 782250757Sjkim 783250757Sjkim Gbl_WarningLevel = ASL_WARNING3; 784250757Sjkim break; 785250757Sjkim 786250757Sjkim case 'e': 787250757Sjkim 788250757Sjkim Gbl_WarningsAsErrors = TRUE; 789250757Sjkim break; 790250757Sjkim 791250757Sjkim default: 792250757Sjkim 793250757Sjkim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 794250757Sjkim return (-1); 795250757Sjkim } 796250757Sjkim break; 797250757Sjkim 798250757Sjkim case 'x': /* Set debug print output level */ 799250757Sjkim 800250757Sjkim AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 801250757Sjkim break; 802250757Sjkim 803250757Sjkim case 'z': 804250757Sjkim 805250757Sjkim Gbl_UseOriginalCompilerId = TRUE; 806250757Sjkim break; 807250757Sjkim 808250757Sjkim default: 809250757Sjkim 810250757Sjkim return (-1); 811250757Sjkim } 812250757Sjkim 813250757Sjkim return (0); 814250757Sjkim} 815250757Sjkim 816250757Sjkim 817250757Sjkim/******************************************************************************* 818250757Sjkim * 819250757Sjkim * FUNCTION: AslMergeOptionTokens 820250757Sjkim * 821250757Sjkim * PARAMETERS: InBuffer - Input containing an option string 822250757Sjkim * OutBuffer - Merged output buffer 823250757Sjkim * 824250757Sjkim * RETURN: None 825250757Sjkim * 826250757Sjkim * DESCRIPTION: Remove all whitespace from an option string. 827250757Sjkim * 828250757Sjkim ******************************************************************************/ 829250757Sjkim 830250757Sjkimstatic void 831250757SjkimAslMergeOptionTokens ( 832250757Sjkim char *InBuffer, 833250757Sjkim char *OutBuffer) 834250757Sjkim{ 835250757Sjkim char *Token; 836250757Sjkim 837250757Sjkim 838250757Sjkim *OutBuffer = 0; 839250757Sjkim 840250757Sjkim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 841250757Sjkim while (Token) 842250757Sjkim { 843250757Sjkim strcat (OutBuffer, Token); 844250757Sjkim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 845250757Sjkim } 846250757Sjkim} 847250757Sjkim 848250757Sjkim 849250757Sjkim/******************************************************************************* 850250757Sjkim * 851250757Sjkim * FUNCTION: AslDoResponseFile 852250757Sjkim * 853250757Sjkim * PARAMETERS: Filename - Name of the response file 854250757Sjkim * 855250757Sjkim * RETURN: Status 856250757Sjkim * 857250757Sjkim * DESCRIPTION: Open a response file and process all options within. 858250757Sjkim * 859250757Sjkim ******************************************************************************/ 860250757Sjkim 861250757Sjkimstatic int 862250757SjkimAslDoResponseFile ( 863250757Sjkim char *Filename) 864250757Sjkim{ 865250757Sjkim char *argv = StringBuffer2; 866250757Sjkim FILE *ResponseFile; 867250757Sjkim int OptStatus = 0; 868250757Sjkim int Opterr; 869250757Sjkim int Optind; 870250757Sjkim 871250757Sjkim 872250757Sjkim ResponseFile = fopen (Filename, "r"); 873250757Sjkim if (!ResponseFile) 874250757Sjkim { 875250757Sjkim printf ("Could not open command file %s, %s\n", 876250757Sjkim Filename, strerror (errno)); 877250757Sjkim return (-1); 878250757Sjkim } 879250757Sjkim 880250757Sjkim /* Must save the current GetOpt globals */ 881250757Sjkim 882250757Sjkim Opterr = AcpiGbl_Opterr; 883250757Sjkim Optind = AcpiGbl_Optind; 884250757Sjkim 885250757Sjkim /* 886250757Sjkim * Process all lines in the response file. There must be one complete 887250757Sjkim * option per line 888250757Sjkim */ 889250757Sjkim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 890250757Sjkim { 891250757Sjkim /* Compress all tokens, allowing us to use a single argv entry */ 892250757Sjkim 893250757Sjkim AslMergeOptionTokens (StringBuffer, StringBuffer2); 894250757Sjkim 895250757Sjkim /* Process the option */ 896250757Sjkim 897250757Sjkim AcpiGbl_Opterr = 0; 898250757Sjkim AcpiGbl_Optind = 0; 899250757Sjkim 900250757Sjkim OptStatus = AslDoOptions (1, &argv, TRUE); 901250757Sjkim if (OptStatus) 902250757Sjkim { 903250757Sjkim printf ("Invalid option in command file %s: %s\n", 904250757Sjkim Filename, StringBuffer); 905250757Sjkim break; 906250757Sjkim } 907250757Sjkim } 908250757Sjkim 909250757Sjkim /* Restore the GetOpt globals */ 910250757Sjkim 911250757Sjkim AcpiGbl_Opterr = Opterr; 912250757Sjkim AcpiGbl_Optind = Optind; 913250757Sjkim 914250757Sjkim fclose (ResponseFile); 915250757Sjkim return (OptStatus); 916250757Sjkim} 917