asloptions.c revision 281687
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 277281687Sjkim case 'f': 278281687Sjkim 279281687Sjkim AcpiGbl_ForceAmlDisassembly = TRUE; 280281687Sjkim break; 281281687Sjkim 282281075Sdim case 'l': /* Use legacy ASL code (not ASL+) for disassembly */ 283281075Sdim 284281075Sdim Gbl_DoCompile = FALSE; 285281075Sdim AcpiGbl_CstyleDisassembly = FALSE; 286281075Sdim break; 287281075Sdim 288250757Sjkim default: 289250757Sjkim 290250757Sjkim printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 291250757Sjkim return (-1); 292250757Sjkim } 293250757Sjkim 294250757Sjkim Gbl_DisasmFlag = TRUE; 295250757Sjkim break; 296250757Sjkim 297250757Sjkim case 'D': /* Define a symbol */ 298250757Sjkim 299250757Sjkim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 300250757Sjkim break; 301250757Sjkim 302250757Sjkim case 'e': /* External files for disassembler */ 303250757Sjkim 304281075Sdim /* Get entire list of external files */ 305281075Sdim 306281075Sdim AcpiGbl_Optind--; 307281075Sdim argv[AcpiGbl_Optind] = AcpiGbl_Optarg; 308281075Sdim 309281075Sdim while (argv[AcpiGbl_Optind] && 310281075Sdim (argv[AcpiGbl_Optind][0] != '-')) 311250757Sjkim { 312281075Sdim Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]); 313281075Sdim if (ACPI_FAILURE (Status)) 314281075Sdim { 315281075Sdim printf ("Could not add %s to external list\n", argv[AcpiGbl_Optind]); 316281075Sdim return (-1); 317281075Sdim } 318281075Sdim 319281075Sdim AcpiGbl_Optind++; 320250757Sjkim } 321250757Sjkim break; 322250757Sjkim 323254745Sjkim case 'f': 324250757Sjkim 325254745Sjkim switch (AcpiGbl_Optarg[0]) 326254745Sjkim { 327254745Sjkim case '^': /* Ignore errors and force creation of aml file */ 328254745Sjkim 329254745Sjkim Gbl_IgnoreErrors = TRUE; 330254745Sjkim break; 331254745Sjkim 332254745Sjkim case 'e': /* Disassembler: Get external declaration file */ 333254745Sjkim 334254745Sjkim if (AcpiGetoptArgument (argc, argv)) 335254745Sjkim { 336254745Sjkim return (-1); 337254745Sjkim } 338254745Sjkim 339254745Sjkim Gbl_ExternalRefFilename = AcpiGbl_Optarg; 340254745Sjkim break; 341254745Sjkim 342254745Sjkim default: 343254745Sjkim 344254745Sjkim printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); 345254745Sjkim return (-1); 346254745Sjkim } 347250757Sjkim break; 348250757Sjkim 349250757Sjkim case 'G': 350250757Sjkim 351250757Sjkim Gbl_CompileGeneric = TRUE; 352250757Sjkim break; 353250757Sjkim 354250757Sjkim case 'g': /* Get all ACPI tables */ 355250757Sjkim 356281075Sdim printf ("-g option is deprecated, use acpidump utility instead\n"); 357281075Sdim exit (1); 358250757Sjkim 359250757Sjkim case 'h': 360250757Sjkim 361250757Sjkim switch (AcpiGbl_Optarg[0]) 362250757Sjkim { 363250757Sjkim case '^': 364250757Sjkim 365250757Sjkim Usage (); 366250757Sjkim exit (0); 367250757Sjkim 368250757Sjkim case 'c': 369250757Sjkim 370250757Sjkim UtDisplayConstantOpcodes (); 371250757Sjkim exit (0); 372250757Sjkim 373250757Sjkim case 'f': 374250757Sjkim 375250757Sjkim AslFilenameHelp (); 376250757Sjkim exit (0); 377250757Sjkim 378250757Sjkim case 'r': 379250757Sjkim 380250757Sjkim /* reserved names */ 381250757Sjkim 382250757Sjkim ApDisplayReservedNames (); 383250757Sjkim exit (0); 384250757Sjkim 385250757Sjkim case 't': 386250757Sjkim 387250757Sjkim UtDisplaySupportedTables (); 388250757Sjkim exit (0); 389250757Sjkim 390250757Sjkim default: 391250757Sjkim 392250757Sjkim printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 393250757Sjkim return (-1); 394250757Sjkim } 395250757Sjkim 396250757Sjkim case 'I': /* Add an include file search directory */ 397250757Sjkim 398250757Sjkim FlAddIncludeDirectory (AcpiGbl_Optarg); 399250757Sjkim break; 400250757Sjkim 401250757Sjkim case 'i': /* Output AML as an include file */ 402250757Sjkim 403250757Sjkim switch (AcpiGbl_Optarg[0]) 404250757Sjkim { 405250757Sjkim case 'a': 406250757Sjkim 407250757Sjkim /* Produce assembly code include file */ 408250757Sjkim 409250757Sjkim Gbl_AsmIncludeOutputFlag = TRUE; 410250757Sjkim break; 411250757Sjkim 412250757Sjkim case 'c': 413250757Sjkim 414250757Sjkim /* Produce C include file */ 415250757Sjkim 416250757Sjkim Gbl_C_IncludeOutputFlag = TRUE; 417250757Sjkim break; 418250757Sjkim 419250757Sjkim case 'n': 420250757Sjkim 421250757Sjkim /* Compiler/Disassembler: Ignore the NOOP operator */ 422250757Sjkim 423250757Sjkim AcpiGbl_IgnoreNoopOperator = TRUE; 424250757Sjkim break; 425250757Sjkim 426250757Sjkim default: 427250757Sjkim 428250757Sjkim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 429250757Sjkim return (-1); 430250757Sjkim } 431250757Sjkim break; 432250757Sjkim 433250757Sjkim case 'l': /* Listing files */ 434250757Sjkim 435250757Sjkim switch (AcpiGbl_Optarg[0]) 436250757Sjkim { 437250757Sjkim case '^': 438250757Sjkim 439250757Sjkim /* Produce listing file (Mixed source/aml) */ 440250757Sjkim 441250757Sjkim Gbl_ListingFlag = TRUE; 442250757Sjkim break; 443250757Sjkim 444250757Sjkim case 'i': 445250757Sjkim 446250757Sjkim /* Produce preprocessor output file */ 447250757Sjkim 448250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 449250757Sjkim break; 450250757Sjkim 451281075Sdim case 'm': 452281075Sdim 453281075Sdim /* Produce hardware map summary file */ 454281075Sdim 455281075Sdim Gbl_MapfileFlag = TRUE; 456281075Sdim break; 457281075Sdim 458250757Sjkim case 'n': 459250757Sjkim 460250757Sjkim /* Produce namespace file */ 461250757Sjkim 462250757Sjkim Gbl_NsOutputFlag = TRUE; 463250757Sjkim break; 464250757Sjkim 465250757Sjkim case 's': 466250757Sjkim 467250757Sjkim /* Produce combined source file */ 468250757Sjkim 469250757Sjkim Gbl_SourceOutputFlag = TRUE; 470250757Sjkim break; 471250757Sjkim 472250757Sjkim default: 473250757Sjkim 474250757Sjkim printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 475250757Sjkim return (-1); 476250757Sjkim } 477250757Sjkim break; 478250757Sjkim 479250757Sjkim case 'm': /* Set line buffer size */ 480250757Sjkim 481250757Sjkim Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 482250757Sjkim if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 483250757Sjkim { 484250757Sjkim Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 485250757Sjkim } 486250757Sjkim printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 487250757Sjkim break; 488250757Sjkim 489250757Sjkim case 'n': /* Parse only */ 490250757Sjkim 491250757Sjkim Gbl_ParseOnlyFlag = TRUE; 492250757Sjkim break; 493250757Sjkim 494250757Sjkim case 'o': /* Control compiler AML optimizations */ 495250757Sjkim 496250757Sjkim switch (AcpiGbl_Optarg[0]) 497250757Sjkim { 498250757Sjkim case 'a': 499250757Sjkim 500250757Sjkim /* Disable all optimizations */ 501250757Sjkim 502250757Sjkim Gbl_FoldConstants = FALSE; 503250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 504250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 505250757Sjkim break; 506250757Sjkim 507250757Sjkim case 'f': 508250757Sjkim 509250757Sjkim /* Disable folding on "normal" expressions */ 510250757Sjkim 511250757Sjkim Gbl_FoldConstants = FALSE; 512250757Sjkim break; 513250757Sjkim 514250757Sjkim case 'i': 515250757Sjkim 516250757Sjkim /* Disable integer optimization to constants */ 517250757Sjkim 518250757Sjkim Gbl_IntegerOptimizationFlag = FALSE; 519250757Sjkim break; 520250757Sjkim 521250757Sjkim case 'n': 522250757Sjkim 523250757Sjkim /* Disable named reference optimization */ 524250757Sjkim 525250757Sjkim Gbl_ReferenceOptimizationFlag = FALSE; 526250757Sjkim break; 527250757Sjkim 528250757Sjkim case 't': 529250757Sjkim 530250757Sjkim /* Display compile time(s) */ 531250757Sjkim 532250757Sjkim Gbl_CompileTimesFlag = TRUE; 533250757Sjkim break; 534250757Sjkim 535250757Sjkim default: 536250757Sjkim 537250757Sjkim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 538250757Sjkim return (-1); 539250757Sjkim } 540250757Sjkim break; 541250757Sjkim 542250757Sjkim case 'P': /* Preprocessor options */ 543250757Sjkim 544250757Sjkim switch (AcpiGbl_Optarg[0]) 545250757Sjkim { 546250757Sjkim case '^': /* Proprocess only, emit (.i) file */ 547250757Sjkim 548250757Sjkim Gbl_PreprocessOnly = TRUE; 549250757Sjkim Gbl_PreprocessorOutputFlag = TRUE; 550250757Sjkim break; 551250757Sjkim 552250757Sjkim case 'n': /* Disable preprocessor */ 553250757Sjkim 554250757Sjkim Gbl_PreprocessFlag = FALSE; 555250757Sjkim break; 556250757Sjkim 557250757Sjkim default: 558250757Sjkim 559250757Sjkim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 560250757Sjkim return (-1); 561250757Sjkim } 562250757Sjkim break; 563250757Sjkim 564250757Sjkim case 'p': /* Override default AML output filename */ 565250757Sjkim 566250757Sjkim Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 567281075Sdim UtConvertBackslashes (Gbl_OutputFilenamePrefix); 568250757Sjkim Gbl_UseDefaultAmlFilename = FALSE; 569250757Sjkim break; 570250757Sjkim 571250757Sjkim case 'r': /* Override revision found in table header */ 572250757Sjkim 573250757Sjkim Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 574250757Sjkim break; 575250757Sjkim 576250757Sjkim case 's': /* Create AML in a source code file */ 577250757Sjkim 578250757Sjkim switch (AcpiGbl_Optarg[0]) 579250757Sjkim { 580250757Sjkim case 'a': 581250757Sjkim 582250757Sjkim /* Produce assembly code output file */ 583250757Sjkim 584250757Sjkim Gbl_AsmOutputFlag = TRUE; 585250757Sjkim break; 586250757Sjkim 587250757Sjkim case 'c': 588250757Sjkim 589250757Sjkim /* Produce C hex output file */ 590250757Sjkim 591250757Sjkim Gbl_C_OutputFlag = TRUE; 592250757Sjkim break; 593250757Sjkim 594250757Sjkim case 'o': 595250757Sjkim 596250757Sjkim /* Produce AML offset table in C */ 597250757Sjkim 598250757Sjkim Gbl_C_OffsetTableFlag = TRUE; 599250757Sjkim break; 600250757Sjkim 601250757Sjkim default: 602250757Sjkim 603250757Sjkim printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 604250757Sjkim return (-1); 605250757Sjkim } 606250757Sjkim break; 607250757Sjkim 608250757Sjkim case 't': /* Produce hex table output file */ 609250757Sjkim 610250757Sjkim switch (AcpiGbl_Optarg[0]) 611250757Sjkim { 612250757Sjkim case 'a': 613250757Sjkim 614250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 615250757Sjkim break; 616250757Sjkim 617250757Sjkim case 'c': 618250757Sjkim 619250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_C; 620250757Sjkim break; 621250757Sjkim 622250757Sjkim case 's': 623250757Sjkim 624250757Sjkim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 625250757Sjkim break; 626250757Sjkim 627250757Sjkim default: 628250757Sjkim 629250757Sjkim printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 630250757Sjkim return (-1); 631250757Sjkim } 632250757Sjkim break; 633250757Sjkim 634250757Sjkim case 'T': /* Create a ACPI table template file */ 635250757Sjkim 636250757Sjkim Gbl_DoTemplates = TRUE; 637250757Sjkim Gbl_TemplateSignature = AcpiGbl_Optarg; 638250757Sjkim break; 639250757Sjkim 640250757Sjkim case 'v': /* Version and verbosity settings */ 641250757Sjkim 642250757Sjkim switch (AcpiGbl_Optarg[0]) 643250757Sjkim { 644250757Sjkim case '^': 645250757Sjkim 646250757Sjkim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 647250757Sjkim exit (0); 648250757Sjkim 649250757Sjkim case 'a': 650250757Sjkim 651281075Sdim /* Disable all error/warning/remark messages */ 652250757Sjkim 653250757Sjkim Gbl_NoErrors = TRUE; 654250757Sjkim break; 655250757Sjkim 656281075Sdim case 'e': 657281075Sdim 658281075Sdim /* Disable all warning/remark messages (errors only) */ 659281075Sdim 660281075Sdim Gbl_DisplayRemarks = FALSE; 661281075Sdim Gbl_DisplayWarnings = FALSE; 662281075Sdim break; 663281075Sdim 664250757Sjkim case 'i': 665250757Sjkim /* 666250757Sjkim * Support for integrated development environment(s). 667250757Sjkim * 668250757Sjkim * 1) No compiler signon 669250757Sjkim * 2) Send stderr messages to stdout 670250757Sjkim * 3) Less verbose error messages (single line only for each) 671250757Sjkim * 4) Error/warning messages are formatted appropriately to 672250757Sjkim * be recognized by MS Visual Studio 673250757Sjkim */ 674250757Sjkim Gbl_VerboseErrors = FALSE; 675250757Sjkim Gbl_DoSignon = FALSE; 676250757Sjkim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 677250757Sjkim break; 678250757Sjkim 679250757Sjkim case 'o': 680250757Sjkim 681250757Sjkim Gbl_DisplayOptimizations = TRUE; 682250757Sjkim break; 683250757Sjkim 684250757Sjkim case 'r': 685250757Sjkim 686250757Sjkim Gbl_DisplayRemarks = FALSE; 687250757Sjkim break; 688250757Sjkim 689250757Sjkim case 's': 690250757Sjkim 691250757Sjkim Gbl_DoSignon = FALSE; 692250757Sjkim break; 693250757Sjkim 694250757Sjkim case 't': 695250757Sjkim 696250757Sjkim Gbl_VerboseTemplates = TRUE; 697250757Sjkim break; 698250757Sjkim 699250757Sjkim case 'w': 700250757Sjkim 701250757Sjkim /* Get the required argument */ 702250757Sjkim 703250757Sjkim if (AcpiGetoptArgument (argc, argv)) 704250757Sjkim { 705250757Sjkim return (-1); 706250757Sjkim } 707250757Sjkim 708250757Sjkim Status = AslDisableException (AcpiGbl_Optarg); 709250757Sjkim if (ACPI_FAILURE (Status)) 710250757Sjkim { 711250757Sjkim return (-1); 712250757Sjkim } 713250757Sjkim break; 714250757Sjkim 715250757Sjkim default: 716250757Sjkim 717250757Sjkim printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 718250757Sjkim return (-1); 719250757Sjkim } 720250757Sjkim break; 721250757Sjkim 722250757Sjkim case 'w': /* Set warning levels */ 723250757Sjkim 724250757Sjkim switch (AcpiGbl_Optarg[0]) 725250757Sjkim { 726250757Sjkim case '1': 727250757Sjkim 728250757Sjkim Gbl_WarningLevel = ASL_WARNING; 729250757Sjkim break; 730250757Sjkim 731250757Sjkim case '2': 732250757Sjkim 733250757Sjkim Gbl_WarningLevel = ASL_WARNING2; 734250757Sjkim break; 735250757Sjkim 736250757Sjkim case '3': 737250757Sjkim 738250757Sjkim Gbl_WarningLevel = ASL_WARNING3; 739250757Sjkim break; 740250757Sjkim 741250757Sjkim case 'e': 742250757Sjkim 743250757Sjkim Gbl_WarningsAsErrors = TRUE; 744250757Sjkim break; 745250757Sjkim 746250757Sjkim default: 747250757Sjkim 748250757Sjkim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 749250757Sjkim return (-1); 750250757Sjkim } 751250757Sjkim break; 752250757Sjkim 753250757Sjkim case 'x': /* Set debug print output level */ 754250757Sjkim 755250757Sjkim AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 756250757Sjkim break; 757250757Sjkim 758250757Sjkim case 'z': 759250757Sjkim 760250757Sjkim Gbl_UseOriginalCompilerId = TRUE; 761250757Sjkim break; 762250757Sjkim 763250757Sjkim default: 764250757Sjkim 765250757Sjkim return (-1); 766250757Sjkim } 767250757Sjkim 768250757Sjkim return (0); 769250757Sjkim} 770250757Sjkim 771250757Sjkim 772250757Sjkim/******************************************************************************* 773250757Sjkim * 774250757Sjkim * FUNCTION: AslMergeOptionTokens 775250757Sjkim * 776250757Sjkim * PARAMETERS: InBuffer - Input containing an option string 777250757Sjkim * OutBuffer - Merged output buffer 778250757Sjkim * 779250757Sjkim * RETURN: None 780250757Sjkim * 781250757Sjkim * DESCRIPTION: Remove all whitespace from an option string. 782250757Sjkim * 783250757Sjkim ******************************************************************************/ 784250757Sjkim 785250757Sjkimstatic void 786250757SjkimAslMergeOptionTokens ( 787250757Sjkim char *InBuffer, 788250757Sjkim char *OutBuffer) 789250757Sjkim{ 790250757Sjkim char *Token; 791250757Sjkim 792250757Sjkim 793250757Sjkim *OutBuffer = 0; 794250757Sjkim 795250757Sjkim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 796250757Sjkim while (Token) 797250757Sjkim { 798250757Sjkim strcat (OutBuffer, Token); 799250757Sjkim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 800250757Sjkim } 801250757Sjkim} 802250757Sjkim 803250757Sjkim 804250757Sjkim/******************************************************************************* 805250757Sjkim * 806250757Sjkim * FUNCTION: AslDoResponseFile 807250757Sjkim * 808250757Sjkim * PARAMETERS: Filename - Name of the response file 809250757Sjkim * 810250757Sjkim * RETURN: Status 811250757Sjkim * 812250757Sjkim * DESCRIPTION: Open a response file and process all options within. 813250757Sjkim * 814250757Sjkim ******************************************************************************/ 815250757Sjkim 816250757Sjkimstatic int 817250757SjkimAslDoResponseFile ( 818250757Sjkim char *Filename) 819250757Sjkim{ 820250757Sjkim char *argv = StringBuffer2; 821250757Sjkim FILE *ResponseFile; 822250757Sjkim int OptStatus = 0; 823250757Sjkim int Opterr; 824250757Sjkim int Optind; 825250757Sjkim 826250757Sjkim 827250757Sjkim ResponseFile = fopen (Filename, "r"); 828250757Sjkim if (!ResponseFile) 829250757Sjkim { 830250757Sjkim printf ("Could not open command file %s, %s\n", 831250757Sjkim Filename, strerror (errno)); 832250757Sjkim return (-1); 833250757Sjkim } 834250757Sjkim 835250757Sjkim /* Must save the current GetOpt globals */ 836250757Sjkim 837250757Sjkim Opterr = AcpiGbl_Opterr; 838250757Sjkim Optind = AcpiGbl_Optind; 839250757Sjkim 840250757Sjkim /* 841250757Sjkim * Process all lines in the response file. There must be one complete 842250757Sjkim * option per line 843250757Sjkim */ 844250757Sjkim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 845250757Sjkim { 846250757Sjkim /* Compress all tokens, allowing us to use a single argv entry */ 847250757Sjkim 848250757Sjkim AslMergeOptionTokens (StringBuffer, StringBuffer2); 849250757Sjkim 850250757Sjkim /* Process the option */ 851250757Sjkim 852250757Sjkim AcpiGbl_Opterr = 0; 853250757Sjkim AcpiGbl_Optind = 0; 854250757Sjkim 855250757Sjkim OptStatus = AslDoOptions (1, &argv, TRUE); 856250757Sjkim if (OptStatus) 857250757Sjkim { 858250757Sjkim printf ("Invalid option in command file %s: %s\n", 859250757Sjkim Filename, StringBuffer); 860250757Sjkim break; 861250757Sjkim } 862250757Sjkim } 863250757Sjkim 864250757Sjkim /* Restore the GetOpt globals */ 865250757Sjkim 866250757Sjkim AcpiGbl_Opterr = Opterr; 867250757Sjkim AcpiGbl_Optind = Optind; 868250757Sjkim 869250757Sjkim fclose (ResponseFile); 870250757Sjkim return (OptStatus); 871250757Sjkim} 872