153289f6aSNate Lawson 253289f6aSNate Lawson /****************************************************************************** 353289f6aSNate Lawson * 453289f6aSNate Lawson * Module Name: aslmain - compiler main and utilities 553289f6aSNate Lawson * 653289f6aSNate Lawson *****************************************************************************/ 753289f6aSNate Lawson 8d244b227SJung-uk Kim /* 9ec3fc72fSJung-uk Kim * Copyright (C) 2000 - 2012, Intel Corp. 1053289f6aSNate Lawson * All rights reserved. 1153289f6aSNate Lawson * 12d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 13d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 14d244b227SJung-uk Kim * are met: 15d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 16d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 17d244b227SJung-uk Kim * without modification. 18d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 20d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 21d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 22d244b227SJung-uk Kim * binary redistribution. 23d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 24d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 25d244b227SJung-uk Kim * from this software without specific prior written permission. 2653289f6aSNate Lawson * 27d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 28d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 29d244b227SJung-uk Kim * Software Foundation. 3053289f6aSNate Lawson * 31d244b227SJung-uk Kim * NO WARRANTY 32d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 43d244b227SJung-uk Kim */ 4453289f6aSNate Lawson 4553289f6aSNate Lawson 4653289f6aSNate Lawson #define _DECLARE_GLOBALS 4753289f6aSNate Lawson 48ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 49ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 50709fac06SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h> 5153289f6aSNate Lawson 5253289f6aSNate Lawson #ifdef _DEBUG 5353289f6aSNate Lawson #include <crtdbg.h> 5453289f6aSNate Lawson #endif 5553289f6aSNate Lawson 5653289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 5753289f6aSNate Lawson ACPI_MODULE_NAME ("aslmain") 5853289f6aSNate Lawson 59fba7fc7eSJung-uk Kim /* Local prototypes */ 60fba7fc7eSJung-uk Kim 61fba7fc7eSJung-uk Kim static void 62fba7fc7eSJung-uk Kim Options ( 63fba7fc7eSJung-uk Kim void); 64fba7fc7eSJung-uk Kim 65fba7fc7eSJung-uk Kim static void 66f38b0f21SJung-uk Kim FilenameHelp ( 67fba7fc7eSJung-uk Kim void); 68fba7fc7eSJung-uk Kim 69fba7fc7eSJung-uk Kim static void 70fba7fc7eSJung-uk Kim Usage ( 71fba7fc7eSJung-uk Kim void); 72fba7fc7eSJung-uk Kim 73fba7fc7eSJung-uk Kim static void 74fba7fc7eSJung-uk Kim AslInitialize ( 75fba7fc7eSJung-uk Kim void); 76fba7fc7eSJung-uk Kim 77a9f12690SJung-uk Kim static int 78fba7fc7eSJung-uk Kim AslCommandLine ( 79fba7fc7eSJung-uk Kim int argc, 80fba7fc7eSJung-uk Kim char **argv); 81fba7fc7eSJung-uk Kim 82d6dd1baeSJung-uk Kim static int 83d6dd1baeSJung-uk Kim AslDoOptions ( 84d6dd1baeSJung-uk Kim int argc, 85d6dd1baeSJung-uk Kim char **argv, 86d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile); 87d6dd1baeSJung-uk Kim 88d6dd1baeSJung-uk Kim static void 89d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 90d6dd1baeSJung-uk Kim char *InBuffer, 91d6dd1baeSJung-uk Kim char *OutBuffer); 92d6dd1baeSJung-uk Kim 93d6dd1baeSJung-uk Kim static int 94d6dd1baeSJung-uk Kim AslDoResponseFile ( 95d6dd1baeSJung-uk Kim char *Filename); 96d6dd1baeSJung-uk Kim 97d6dd1baeSJung-uk Kim 98d6dd1baeSJung-uk Kim #define ASL_TOKEN_SEPARATORS " \t\n" 99*e8241eabSJung-uk Kim #define ASL_SUPPORTED_OPTIONS "@:2b|c|d^D:e:fgh^i|I:l^mno|p:P^r:s|t|T:G^v^w|x:z" 100d6dd1baeSJung-uk Kim 10153289f6aSNate Lawson 10253289f6aSNate Lawson /******************************************************************************* 10353289f6aSNate Lawson * 10453289f6aSNate Lawson * FUNCTION: Options 10553289f6aSNate Lawson * 10653289f6aSNate Lawson * PARAMETERS: None 10753289f6aSNate Lawson * 10853289f6aSNate Lawson * RETURN: None 10953289f6aSNate Lawson * 11053289f6aSNate Lawson * DESCRIPTION: Display option help message 11153289f6aSNate Lawson * 11253289f6aSNate Lawson ******************************************************************************/ 11353289f6aSNate Lawson 114fba7fc7eSJung-uk Kim static void 11553289f6aSNate Lawson Options ( 11653289f6aSNate Lawson void) 11753289f6aSNate Lawson { 11853289f6aSNate Lawson 1193f0275a0SJung-uk Kim printf ("\nGlobal:\n"); 1203f0275a0SJung-uk Kim ACPI_OPTION ("-@ <file>", "Specify command file"); 1213f0275a0SJung-uk Kim ACPI_OPTION ("-I <dir>", "Specify additional include directory"); 122*e8241eabSJung-uk Kim ACPI_OPTION ("-v", "Display compiler version"); 123d6dd1baeSJung-uk Kim 1244c52cad2SJung-uk Kim printf ("\nPreprocessor:\n"); 1254c52cad2SJung-uk Kim ACPI_OPTION ("-D <symbol>", "Define symbol for preprocessor use"); 1264c52cad2SJung-uk Kim ACPI_OPTION ("-li", "Create preprocessed output file (*.i)"); 1274c52cad2SJung-uk Kim ACPI_OPTION ("-P", "Preprocess only and create preprocessor output file (*.i)"); 128eef1b955SJung-uk Kim ACPI_OPTION ("-Pn", "Disable preprocessor"); 1294c52cad2SJung-uk Kim 130d6dd1baeSJung-uk Kim printf ("\nGeneral Output:\n"); 1313f0275a0SJung-uk Kim ACPI_OPTION ("-p <prefix>", "Specify path/filename prefix for all output files"); 1323f0275a0SJung-uk Kim ACPI_OPTION ("-va", "Disable all errors and warnings (summary only)"); 1333f0275a0SJung-uk Kim ACPI_OPTION ("-vi", "Less verbose errors and warnings for use with IDEs"); 1343f0275a0SJung-uk Kim ACPI_OPTION ("-vo", "Enable optimization comments"); 1353f0275a0SJung-uk Kim ACPI_OPTION ("-vr", "Disable remarks"); 1363f0275a0SJung-uk Kim ACPI_OPTION ("-vs", "Disable signon"); 1374c52cad2SJung-uk Kim ACPI_OPTION ("-w1 -w2 -w3", "Set warning reporting level"); 138eef1b955SJung-uk Kim ACPI_OPTION ("-we", "Report warnings as errors"); 13953289f6aSNate Lawson 140c8466860SMark Santcroos printf ("\nAML Output Files:\n"); 1414c52cad2SJung-uk Kim ACPI_OPTION ("-sa -sc", "Create AML in assembler or C source file (*.asm or *.c)"); 1424c52cad2SJung-uk Kim ACPI_OPTION ("-ia -ic", "Create assembler or C include file (*.inc or *.h)"); 1434c52cad2SJung-uk Kim ACPI_OPTION ("-ta -tc -ts", "Create AML in assembler, C, or ASL hex table (*.hex)"); 14453289f6aSNate Lawson 145c8466860SMark Santcroos printf ("\nAML Code Generation:\n"); 1463f0275a0SJung-uk Kim ACPI_OPTION ("-oa", "Disable all optimizations (compatibility mode)"); 1473f0275a0SJung-uk Kim ACPI_OPTION ("-of", "Disable constant folding"); 1483f0275a0SJung-uk Kim ACPI_OPTION ("-oi", "Disable integer optimization to Zero/One/Ones"); 1493f0275a0SJung-uk Kim ACPI_OPTION ("-on", "Disable named reference string optimization"); 1503f0275a0SJung-uk Kim ACPI_OPTION ("-cr", "Disable Resource Descriptor error checking"); 1513f0275a0SJung-uk Kim ACPI_OPTION ("-r <revision>", "Override table header Revision (1-255)"); 15253289f6aSNate Lawson 15342fecd12SJung-uk Kim printf ("\nASL Listing Files:\n"); 1543f0275a0SJung-uk Kim ACPI_OPTION ("-l", "Create mixed listing file (ASL source and AML) (*.lst)"); 1553f0275a0SJung-uk Kim ACPI_OPTION ("-ln", "Create namespace file (*.nsp)"); 1563f0275a0SJung-uk Kim ACPI_OPTION ("-ls", "Create combined source file (expanded includes) (*.src)"); 15753289f6aSNate Lawson 158a88e22b7SJung-uk Kim printf ("\nACPI Data Tables:\n"); 1593f0275a0SJung-uk Kim ACPI_OPTION ("-G", "Compile custom table containing generic operators"); 1603f0275a0SJung-uk Kim ACPI_OPTION ("-T <sig>|ALL|*", "Create table template file(s) for <Sig>"); 1613f0275a0SJung-uk Kim ACPI_OPTION ("-vt", "Create verbose templates (full disassembly)"); 162a88e22b7SJung-uk Kim 16353289f6aSNate Lawson printf ("\nAML Disassembler:\n"); 1643f0275a0SJung-uk Kim ACPI_OPTION ("-d [file]", "Disassemble or decode binary ACPI table to file (*.dsl)"); 1653f0275a0SJung-uk Kim ACPI_OPTION ("-da [f1,f2]", "Disassemble multiple tables from single namespace"); 1663f0275a0SJung-uk Kim ACPI_OPTION ("-dc [file]", "Disassemble AML and immediately compile it"); 1673f0275a0SJung-uk Kim ACPI_OPTION ("", "(Obtain DSDT from current system if no input file)"); 1683f0275a0SJung-uk Kim ACPI_OPTION ("-e [f1,f2]", "Include ACPI table(s) for external symbol resolution"); 1693f0275a0SJung-uk Kim ACPI_OPTION ("-m", "Do not translate Buffers to Resource Templates"); 1703f0275a0SJung-uk Kim ACPI_OPTION ("-2", "Emit ACPI 2.0 compatible ASL code"); 1713f0275a0SJung-uk Kim ACPI_OPTION ("-g", "Get ACPI tables and write to files (*.dat)"); 17253289f6aSNate Lawson 17353289f6aSNate Lawson printf ("\nHelp:\n"); 174f38b0f21SJung-uk Kim ACPI_OPTION ("-h", "This message"); 1753f0275a0SJung-uk Kim ACPI_OPTION ("-hc", "Display operators allowed in constant expressions"); 176f38b0f21SJung-uk Kim ACPI_OPTION ("-hf", "Display help for output filename generation"); 1773f0275a0SJung-uk Kim ACPI_OPTION ("-hr", "Display ACPI reserved method names"); 1783f0275a0SJung-uk Kim ACPI_OPTION ("-ht", "Display currently supported ACPI table names"); 179f38b0f21SJung-uk Kim 180f38b0f21SJung-uk Kim printf ("\nDebug Options:\n"); 181f38b0f21SJung-uk Kim ACPI_OPTION ("-bf -bt", "Create debug file (full or parse tree only) (*.txt)"); 182f38b0f21SJung-uk Kim ACPI_OPTION ("-f", "Ignore errors, force creation of AML output file(s)"); 183f38b0f21SJung-uk Kim ACPI_OPTION ("-n", "Parse only, no output generation"); 184f38b0f21SJung-uk Kim ACPI_OPTION ("-ot", "Display compile times and statistics"); 185f38b0f21SJung-uk Kim ACPI_OPTION ("-x <level>", "Set debug level for trace output"); 186f38b0f21SJung-uk Kim ACPI_OPTION ("-z", "Do not insert new compiler ID for DataTables"); 18753289f6aSNate Lawson } 18853289f6aSNate Lawson 18953289f6aSNate Lawson 19053289f6aSNate Lawson /******************************************************************************* 19153289f6aSNate Lawson * 192f38b0f21SJung-uk Kim * FUNCTION: FilenameHelp 19353289f6aSNate Lawson * 19453289f6aSNate Lawson * PARAMETERS: None 19553289f6aSNate Lawson * 19653289f6aSNate Lawson * RETURN: None 19753289f6aSNate Lawson * 198f38b0f21SJung-uk Kim * DESCRIPTION: Display help message for output filename generation 19953289f6aSNate Lawson * 20053289f6aSNate Lawson ******************************************************************************/ 20153289f6aSNate Lawson 202fba7fc7eSJung-uk Kim static void 203f38b0f21SJung-uk Kim FilenameHelp ( 20453289f6aSNate Lawson void) 20553289f6aSNate Lawson { 20653289f6aSNate Lawson 2073f0275a0SJung-uk Kim printf ("\nAML output filename generation:\n"); 20853289f6aSNate Lawson printf (" Output filenames are generated by appending an extension to a common\n"); 20953289f6aSNate Lawson printf (" filename prefix. The filename prefix is obtained via one of the\n"); 21053289f6aSNate Lawson printf (" following methods (in priority order):\n"); 21153289f6aSNate Lawson printf (" 1) The -p option specifies the prefix\n"); 21253289f6aSNate Lawson printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); 21353289f6aSNate Lawson printf (" 3) The prefix of the input filename\n"); 21453289f6aSNate Lawson printf ("\n"); 21553289f6aSNate Lawson } 21653289f6aSNate Lawson 21753289f6aSNate Lawson 21853289f6aSNate Lawson /******************************************************************************* 21953289f6aSNate Lawson * 22053289f6aSNate Lawson * FUNCTION: Usage 22153289f6aSNate Lawson * 22253289f6aSNate Lawson * PARAMETERS: None 22353289f6aSNate Lawson * 22453289f6aSNate Lawson * RETURN: None 22553289f6aSNate Lawson * 22653289f6aSNate Lawson * DESCRIPTION: Display usage and option message 22753289f6aSNate Lawson * 22853289f6aSNate Lawson ******************************************************************************/ 22953289f6aSNate Lawson 230fba7fc7eSJung-uk Kim static void 23153289f6aSNate Lawson Usage ( 23253289f6aSNate Lawson void) 23353289f6aSNate Lawson { 23453289f6aSNate Lawson 2353f0275a0SJung-uk Kim printf ("%s\n\n", ASL_COMPLIANCE); 2363f0275a0SJung-uk Kim ACPI_USAGE_HEADER ("iasl [Options] [Files]"); 23753289f6aSNate Lawson Options (); 23853289f6aSNate Lawson } 23953289f6aSNate Lawson 24053289f6aSNate Lawson 24153289f6aSNate Lawson /******************************************************************************* 24253289f6aSNate Lawson * 24353289f6aSNate Lawson * FUNCTION: AslInitialize 24453289f6aSNate Lawson * 24553289f6aSNate Lawson * PARAMETERS: None 24653289f6aSNate Lawson * 24753289f6aSNate Lawson * RETURN: None 24853289f6aSNate Lawson * 24953289f6aSNate Lawson * DESCRIPTION: Initialize compiler globals 25053289f6aSNate Lawson * 25153289f6aSNate Lawson ******************************************************************************/ 25253289f6aSNate Lawson 253fba7fc7eSJung-uk Kim static void 254fba7fc7eSJung-uk Kim AslInitialize ( 255fba7fc7eSJung-uk Kim void) 25653289f6aSNate Lawson { 25753289f6aSNate Lawson UINT32 i; 25853289f6aSNate Lawson 25953289f6aSNate Lawson 26053289f6aSNate Lawson #ifdef _DEBUG 26153289f6aSNate Lawson _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0)); 26253289f6aSNate Lawson #endif 26353289f6aSNate Lawson 26453289f6aSNate Lawson AcpiDbgLevel = 0; 26553289f6aSNate Lawson 26653289f6aSNate Lawson for (i = 0; i < ASL_NUM_FILES; i++) 26753289f6aSNate Lawson { 26853289f6aSNate Lawson Gbl_Files[i].Handle = NULL; 26953289f6aSNate Lawson Gbl_Files[i].Filename = NULL; 27053289f6aSNate Lawson } 27153289f6aSNate Lawson 27253289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Handle = stdout; 27353289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; 27453289f6aSNate Lawson 27553289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Handle = stderr; 27653289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; 27753289f6aSNate Lawson } 27853289f6aSNate Lawson 27953289f6aSNate Lawson 28053289f6aSNate Lawson /******************************************************************************* 28153289f6aSNate Lawson * 282d6dd1baeSJung-uk Kim * FUNCTION: AslMergeOptionTokens 28353289f6aSNate Lawson * 284d6dd1baeSJung-uk Kim * PARAMETERS: InBuffer - Input containing an option string 285d6dd1baeSJung-uk Kim * OutBuffer - Merged output buffer 28653289f6aSNate Lawson * 28753289f6aSNate Lawson * RETURN: None 28853289f6aSNate Lawson * 289d6dd1baeSJung-uk Kim * DESCRIPTION: Remove all whitespace from an option string. 290d6dd1baeSJung-uk Kim * 291d6dd1baeSJung-uk Kim ******************************************************************************/ 292d6dd1baeSJung-uk Kim 293d6dd1baeSJung-uk Kim static void 294d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 295d6dd1baeSJung-uk Kim char *InBuffer, 296d6dd1baeSJung-uk Kim char *OutBuffer) 297d6dd1baeSJung-uk Kim { 298d6dd1baeSJung-uk Kim char *Token; 299d6dd1baeSJung-uk Kim 300d6dd1baeSJung-uk Kim 301d6dd1baeSJung-uk Kim *OutBuffer = 0; 302d6dd1baeSJung-uk Kim 303d6dd1baeSJung-uk Kim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 304d6dd1baeSJung-uk Kim while (Token) 305d6dd1baeSJung-uk Kim { 306d6dd1baeSJung-uk Kim strcat (OutBuffer, Token); 307d6dd1baeSJung-uk Kim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 308d6dd1baeSJung-uk Kim } 309d6dd1baeSJung-uk Kim } 310d6dd1baeSJung-uk Kim 311d6dd1baeSJung-uk Kim 312d6dd1baeSJung-uk Kim /******************************************************************************* 313d6dd1baeSJung-uk Kim * 314d6dd1baeSJung-uk Kim * FUNCTION: AslDoResponseFile 315d6dd1baeSJung-uk Kim * 316d6dd1baeSJung-uk Kim * PARAMETERS: Filename - Name of the response file 317d6dd1baeSJung-uk Kim * 318d6dd1baeSJung-uk Kim * RETURN: Status 319d6dd1baeSJung-uk Kim * 320d6dd1baeSJung-uk Kim * DESCRIPTION: Open a response file and process all options within. 32153289f6aSNate Lawson * 32253289f6aSNate Lawson ******************************************************************************/ 32353289f6aSNate Lawson 324a9f12690SJung-uk Kim static int 325d6dd1baeSJung-uk Kim AslDoResponseFile ( 326d6dd1baeSJung-uk Kim char *Filename) 32753289f6aSNate Lawson { 328d6dd1baeSJung-uk Kim char *argv = StringBuffer2; 329d6dd1baeSJung-uk Kim FILE *ResponseFile; 330d6dd1baeSJung-uk Kim int OptStatus = 0; 331d6dd1baeSJung-uk Kim int Opterr; 332d6dd1baeSJung-uk Kim int Optind; 333d6dd1baeSJung-uk Kim 334d6dd1baeSJung-uk Kim 335d6dd1baeSJung-uk Kim ResponseFile = fopen (Filename, "r"); 336d6dd1baeSJung-uk Kim if (!ResponseFile) 337d6dd1baeSJung-uk Kim { 338d6dd1baeSJung-uk Kim printf ("Could not open command file %s, %s\n", 339d6dd1baeSJung-uk Kim Filename, strerror (errno)); 340d6dd1baeSJung-uk Kim return -1; 341d6dd1baeSJung-uk Kim } 342d6dd1baeSJung-uk Kim 343d6dd1baeSJung-uk Kim /* Must save the current GetOpt globals */ 344d6dd1baeSJung-uk Kim 345d6dd1baeSJung-uk Kim Opterr = AcpiGbl_Opterr; 346d6dd1baeSJung-uk Kim Optind = AcpiGbl_Optind; 347d6dd1baeSJung-uk Kim 348d6dd1baeSJung-uk Kim /* 349d6dd1baeSJung-uk Kim * Process all lines in the response file. There must be one complete 350d6dd1baeSJung-uk Kim * option per line 351d6dd1baeSJung-uk Kim */ 352d6dd1baeSJung-uk Kim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 353d6dd1baeSJung-uk Kim { 354d6dd1baeSJung-uk Kim /* Compress all tokens, allowing us to use a single argv entry */ 355d6dd1baeSJung-uk Kim 356d6dd1baeSJung-uk Kim AslMergeOptionTokens (StringBuffer, StringBuffer2); 357d6dd1baeSJung-uk Kim 358d6dd1baeSJung-uk Kim /* Process the option */ 359d6dd1baeSJung-uk Kim 360d6dd1baeSJung-uk Kim AcpiGbl_Opterr = 0; 361d6dd1baeSJung-uk Kim AcpiGbl_Optind = 0; 362d6dd1baeSJung-uk Kim 363d6dd1baeSJung-uk Kim OptStatus = AslDoOptions (1, &argv, TRUE); 364d6dd1baeSJung-uk Kim if (OptStatus) 365d6dd1baeSJung-uk Kim { 366d6dd1baeSJung-uk Kim printf ("Invalid option in command file %s: %s\n", 367d6dd1baeSJung-uk Kim Filename, StringBuffer); 368d6dd1baeSJung-uk Kim break; 369d6dd1baeSJung-uk Kim } 370d6dd1baeSJung-uk Kim } 371d6dd1baeSJung-uk Kim 372d6dd1baeSJung-uk Kim /* Restore the GetOpt globals */ 373d6dd1baeSJung-uk Kim 374d6dd1baeSJung-uk Kim AcpiGbl_Opterr = Opterr; 375d6dd1baeSJung-uk Kim AcpiGbl_Optind = Optind; 376d6dd1baeSJung-uk Kim 377d6dd1baeSJung-uk Kim fclose (ResponseFile); 378d6dd1baeSJung-uk Kim return (OptStatus); 379d6dd1baeSJung-uk Kim } 380d6dd1baeSJung-uk Kim 381d6dd1baeSJung-uk Kim 382d6dd1baeSJung-uk Kim /******************************************************************************* 383d6dd1baeSJung-uk Kim * 384d6dd1baeSJung-uk Kim * FUNCTION: AslDoOptions 385d6dd1baeSJung-uk Kim * 386d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv - Standard argc/argv 387d6dd1baeSJung-uk Kim * IsResponseFile - TRUE if executing a response file. 388d6dd1baeSJung-uk Kim * 389d6dd1baeSJung-uk Kim * RETURN: Status 390d6dd1baeSJung-uk Kim * 391d6dd1baeSJung-uk Kim * DESCRIPTION: Command line option processing 392d6dd1baeSJung-uk Kim * 393d6dd1baeSJung-uk Kim ******************************************************************************/ 394d6dd1baeSJung-uk Kim 395d6dd1baeSJung-uk Kim static int 396d6dd1baeSJung-uk Kim AslDoOptions ( 397d6dd1baeSJung-uk Kim int argc, 398d6dd1baeSJung-uk Kim char **argv, 399d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile) 400d6dd1baeSJung-uk Kim { 401a9f12690SJung-uk Kim int j; 40242fecd12SJung-uk Kim ACPI_STATUS Status; 40353289f6aSNate Lawson 40453289f6aSNate Lawson 40553289f6aSNate Lawson /* Get the command line options */ 40653289f6aSNate Lawson 407d6dd1baeSJung-uk Kim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 40853289f6aSNate Lawson { 409d6dd1baeSJung-uk Kim case '@': /* Begin a response file */ 410d6dd1baeSJung-uk Kim 411d6dd1baeSJung-uk Kim if (IsResponseFile) 412d6dd1baeSJung-uk Kim { 413d6dd1baeSJung-uk Kim printf ("Nested command files are not supported\n"); 4144c52cad2SJung-uk Kim return (-1); 415d6dd1baeSJung-uk Kim } 416d6dd1baeSJung-uk Kim 417d6dd1baeSJung-uk Kim if (AslDoResponseFile (AcpiGbl_Optarg)) 418d6dd1baeSJung-uk Kim { 4194c52cad2SJung-uk Kim return (-1); 420d6dd1baeSJung-uk Kim } 421d6dd1baeSJung-uk Kim break; 422d6dd1baeSJung-uk Kim 423d6dd1baeSJung-uk Kim 4244c52cad2SJung-uk Kim case '2': /* ACPI 2.0 compatibility mode */ 425fba7fc7eSJung-uk Kim Gbl_Acpi2 = TRUE; 426fba7fc7eSJung-uk Kim break; 427fba7fc7eSJung-uk Kim 428fba7fc7eSJung-uk Kim 4294c52cad2SJung-uk Kim case 'b': /* Debug output options */ 43053289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 43153289f6aSNate Lawson { 432f38b0f21SJung-uk Kim case 'f': 43353289f6aSNate Lawson AslCompilerdebug = 1; /* same as yydebug */ 434d052a1ccSJung-uk Kim DtParserdebug = 1; 4354c52cad2SJung-uk Kim PrParserdebug = 1; 43653289f6aSNate Lawson break; 43753289f6aSNate Lawson 43853289f6aSNate Lawson case 't': 43953289f6aSNate Lawson break; 44053289f6aSNate Lawson 44153289f6aSNate Lawson default: 44253289f6aSNate Lawson printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 443d6dd1baeSJung-uk Kim return (-1); 44453289f6aSNate Lawson } 44553289f6aSNate Lawson 44653289f6aSNate Lawson /* Produce debug output file */ 44753289f6aSNate Lawson 44853289f6aSNate Lawson Gbl_DebugFlag = TRUE; 44953289f6aSNate Lawson break; 45053289f6aSNate Lawson 45153289f6aSNate Lawson 45253289f6aSNate Lawson case 'c': 4533f5e024cSJung-uk Kim switch (AcpiGbl_Optarg[0]) 4543f5e024cSJung-uk Kim { 4553f5e024cSJung-uk Kim case 'r': 4563f5e024cSJung-uk Kim Gbl_NoResourceChecking = TRUE; 4573f5e024cSJung-uk Kim break; 45853289f6aSNate Lawson 4593f5e024cSJung-uk Kim default: 4603f5e024cSJung-uk Kim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 4613f5e024cSJung-uk Kim return (-1); 4623f5e024cSJung-uk Kim } 46353289f6aSNate Lawson break; 46453289f6aSNate Lawson 46553289f6aSNate Lawson 4664c52cad2SJung-uk Kim case 'd': /* Disassembler */ 46753289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 46853289f6aSNate Lawson { 46953289f6aSNate Lawson case '^': 470a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 47153289f6aSNate Lawson break; 47253289f6aSNate Lawson 473709fac06SJung-uk Kim case 'a': 474709fac06SJung-uk Kim Gbl_DoCompile = FALSE; 475709fac06SJung-uk Kim Gbl_DisassembleAll = TRUE; 476709fac06SJung-uk Kim break; 477709fac06SJung-uk Kim 47853289f6aSNate Lawson case 'c': 47953289f6aSNate Lawson break; 48053289f6aSNate Lawson 48153289f6aSNate Lawson default: 48253289f6aSNate Lawson printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 483d6dd1baeSJung-uk Kim return (-1); 48453289f6aSNate Lawson } 48553289f6aSNate Lawson 48653289f6aSNate Lawson Gbl_DisasmFlag = TRUE; 48753289f6aSNate Lawson break; 48853289f6aSNate Lawson 48953289f6aSNate Lawson 4904c52cad2SJung-uk Kim case 'D': /* Define a symbol */ 4914c52cad2SJung-uk Kim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 4924c52cad2SJung-uk Kim break; 4934c52cad2SJung-uk Kim 4944c52cad2SJung-uk Kim 4954c52cad2SJung-uk Kim case 'e': /* External files for disassembler */ 49642fecd12SJung-uk Kim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 49742fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 49842fecd12SJung-uk Kim { 49942fecd12SJung-uk Kim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 50042fecd12SJung-uk Kim return (-1); 50142fecd12SJung-uk Kim } 50253289f6aSNate Lawson break; 50353289f6aSNate Lawson 50453289f6aSNate Lawson 5054c52cad2SJung-uk Kim case 'f': /* Ignore errors and force creation of aml file */ 50653289f6aSNate Lawson Gbl_IgnoreErrors = TRUE; 50753289f6aSNate Lawson break; 50853289f6aSNate Lawson 50953289f6aSNate Lawson 5104c52cad2SJung-uk Kim case 'G': 5114c52cad2SJung-uk Kim Gbl_CompileGeneric = TRUE; 5124c52cad2SJung-uk Kim break; 51353289f6aSNate Lawson 5144c52cad2SJung-uk Kim 5154c52cad2SJung-uk Kim case 'g': /* Get all ACPI tables */ 51653289f6aSNate Lawson 51753289f6aSNate Lawson Gbl_GetAllTables = TRUE; 518a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 51953289f6aSNate Lawson break; 52053289f6aSNate Lawson 52153289f6aSNate Lawson 52253289f6aSNate Lawson case 'h': 52353289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 52453289f6aSNate Lawson { 52553289f6aSNate Lawson case '^': 526f38b0f21SJung-uk Kim Usage (); 52753289f6aSNate Lawson exit (0); 52853289f6aSNate Lawson 52953289f6aSNate Lawson case 'c': 53053289f6aSNate Lawson UtDisplayConstantOpcodes (); 53153289f6aSNate Lawson exit (0); 53253289f6aSNate Lawson 533f38b0f21SJung-uk Kim case 'f': 534f38b0f21SJung-uk Kim FilenameHelp (); 535f38b0f21SJung-uk Kim exit (0); 536f38b0f21SJung-uk Kim 53753289f6aSNate Lawson case 'r': 53853289f6aSNate Lawson /* reserved names */ 53953289f6aSNate Lawson 540ca3cf4faSJung-uk Kim ApDisplayReservedNames (); 54153289f6aSNate Lawson exit (0); 54253289f6aSNate Lawson 543a88e22b7SJung-uk Kim case 't': 544a88e22b7SJung-uk Kim UtDisplaySupportedTables (); 545a88e22b7SJung-uk Kim exit (0); 546a88e22b7SJung-uk Kim 54753289f6aSNate Lawson default: 54853289f6aSNate Lawson printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 549d6dd1baeSJung-uk Kim return (-1); 55053289f6aSNate Lawson } 55153289f6aSNate Lawson 55253289f6aSNate Lawson 553d6dd1baeSJung-uk Kim case 'I': /* Add an include file search directory */ 554d6dd1baeSJung-uk Kim FlAddIncludeDirectory (AcpiGbl_Optarg); 555d6dd1baeSJung-uk Kim break; 556d6dd1baeSJung-uk Kim 557d6dd1baeSJung-uk Kim 5584c52cad2SJung-uk Kim case 'i': /* Output AML as an include file */ 55953289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 56053289f6aSNate Lawson { 56153289f6aSNate Lawson case 'a': 56253289f6aSNate Lawson 56353289f6aSNate Lawson /* Produce assembly code include file */ 56453289f6aSNate Lawson 56553289f6aSNate Lawson Gbl_AsmIncludeOutputFlag = TRUE; 56653289f6aSNate Lawson break; 56753289f6aSNate Lawson 56853289f6aSNate Lawson case 'c': 56953289f6aSNate Lawson 57053289f6aSNate Lawson /* Produce C include file */ 57153289f6aSNate Lawson 57253289f6aSNate Lawson Gbl_C_IncludeOutputFlag = TRUE; 57353289f6aSNate Lawson break; 57453289f6aSNate Lawson 57553289f6aSNate Lawson default: 5764c52cad2SJung-uk Kim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 577d6dd1baeSJung-uk Kim return (-1); 57853289f6aSNate Lawson } 57953289f6aSNate Lawson break; 58053289f6aSNate Lawson 58153289f6aSNate Lawson 5824c52cad2SJung-uk Kim case 'l': /* Listing files */ 58353289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 58453289f6aSNate Lawson { 58553289f6aSNate Lawson case '^': 58653289f6aSNate Lawson /* Produce listing file (Mixed source/aml) */ 58753289f6aSNate Lawson 58853289f6aSNate Lawson Gbl_ListingFlag = TRUE; 58953289f6aSNate Lawson break; 59053289f6aSNate Lawson 5914c52cad2SJung-uk Kim case 'i': 5924c52cad2SJung-uk Kim /* Produce preprocessor output file */ 5934c52cad2SJung-uk Kim 5944c52cad2SJung-uk Kim Gbl_PreprocessorOutputFlag = TRUE; 5954c52cad2SJung-uk Kim break; 5964c52cad2SJung-uk Kim 59753289f6aSNate Lawson case 'n': 59853289f6aSNate Lawson /* Produce namespace file */ 59953289f6aSNate Lawson 60053289f6aSNate Lawson Gbl_NsOutputFlag = TRUE; 60153289f6aSNate Lawson break; 60253289f6aSNate Lawson 60353289f6aSNate Lawson case 's': 60453289f6aSNate Lawson /* Produce combined source file */ 60553289f6aSNate Lawson 60653289f6aSNate Lawson Gbl_SourceOutputFlag = TRUE; 60753289f6aSNate Lawson break; 60853289f6aSNate Lawson 60953289f6aSNate Lawson default: 61053289f6aSNate Lawson printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 611d6dd1baeSJung-uk Kim return (-1); 61253289f6aSNate Lawson } 61353289f6aSNate Lawson break; 61453289f6aSNate Lawson 61553289f6aSNate Lawson 6164c52cad2SJung-uk Kim case 'm': /* Do not convert buffers to resource descriptors */ 6173f0275a0SJung-uk Kim AcpiGbl_NoResourceDisassembly = TRUE; 6183f0275a0SJung-uk Kim break; 6193f0275a0SJung-uk Kim 6203f0275a0SJung-uk Kim 6214c52cad2SJung-uk Kim case 'n': /* Parse only */ 6223f0275a0SJung-uk Kim Gbl_ParseOnlyFlag = TRUE; 6233f0275a0SJung-uk Kim break; 6243f0275a0SJung-uk Kim 6253f0275a0SJung-uk Kim 6264c52cad2SJung-uk Kim case 'o': /* Control compiler AML optimizations */ 62753289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 62853289f6aSNate Lawson { 62953289f6aSNate Lawson case 'a': 63053289f6aSNate Lawson 63153289f6aSNate Lawson /* Disable all optimizations */ 63253289f6aSNate Lawson 63353289f6aSNate Lawson Gbl_FoldConstants = FALSE; 63453289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 63553289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 63653289f6aSNate Lawson break; 63753289f6aSNate Lawson 63853289f6aSNate Lawson case 'f': 63953289f6aSNate Lawson 64053289f6aSNate Lawson /* Disable folding on "normal" expressions */ 64153289f6aSNate Lawson 64253289f6aSNate Lawson Gbl_FoldConstants = FALSE; 64353289f6aSNate Lawson break; 64453289f6aSNate Lawson 64553289f6aSNate Lawson case 'i': 64653289f6aSNate Lawson 64753289f6aSNate Lawson /* Disable integer optimization to constants */ 64853289f6aSNate Lawson 64953289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 65053289f6aSNate Lawson break; 65153289f6aSNate Lawson 65253289f6aSNate Lawson case 'n': 65353289f6aSNate Lawson 65453289f6aSNate Lawson /* Disable named reference optimization */ 65553289f6aSNate Lawson 65653289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 65753289f6aSNate Lawson break; 65853289f6aSNate Lawson 65953289f6aSNate Lawson case 't': 66053289f6aSNate Lawson 66153289f6aSNate Lawson /* Display compile time(s) */ 66253289f6aSNate Lawson 66353289f6aSNate Lawson Gbl_CompileTimesFlag = TRUE; 66453289f6aSNate Lawson break; 66553289f6aSNate Lawson 66653289f6aSNate Lawson default: 66753289f6aSNate Lawson printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 668d6dd1baeSJung-uk Kim return (-1); 66953289f6aSNate Lawson } 67053289f6aSNate Lawson break; 67153289f6aSNate Lawson 67253289f6aSNate Lawson 673eef1b955SJung-uk Kim case 'P': /* Preprocessor options */ 674eef1b955SJung-uk Kim switch (AcpiGbl_Optarg[0]) 675eef1b955SJung-uk Kim { 676eef1b955SJung-uk Kim case '^': /* Proprocess only, emit (.i) file */ 6774c52cad2SJung-uk Kim Gbl_PreprocessOnly = TRUE; 6784c52cad2SJung-uk Kim Gbl_PreprocessorOutputFlag = TRUE; 6794c52cad2SJung-uk Kim break; 68053289f6aSNate Lawson 681eef1b955SJung-uk Kim case 'n': /* Disable preprocessor */ 682eef1b955SJung-uk Kim Gbl_PreprocessFlag = FALSE; 683eef1b955SJung-uk Kim break; 684eef1b955SJung-uk Kim 685eef1b955SJung-uk Kim default: 686eef1b955SJung-uk Kim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 687eef1b955SJung-uk Kim return (-1); 688eef1b955SJung-uk Kim } 689eef1b955SJung-uk Kim break; 690eef1b955SJung-uk Kim 69153289f6aSNate Lawson 6924c52cad2SJung-uk Kim case 'p': /* Override default AML output filename */ 69353289f6aSNate Lawson Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 69453289f6aSNate Lawson Gbl_UseDefaultAmlFilename = FALSE; 69553289f6aSNate Lawson break; 69653289f6aSNate Lawson 69753289f6aSNate Lawson 6984c52cad2SJung-uk Kim case 'r': /* Override revision found in table header */ 699c8466860SMark Santcroos Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 70053289f6aSNate Lawson break; 70153289f6aSNate Lawson 70253289f6aSNate Lawson 7034c52cad2SJung-uk Kim case 's': /* Create AML in a source code file */ 70453289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 70553289f6aSNate Lawson { 70653289f6aSNate Lawson case 'a': 70753289f6aSNate Lawson 70853289f6aSNate Lawson /* Produce assembly code output file */ 70953289f6aSNate Lawson 71053289f6aSNate Lawson Gbl_AsmOutputFlag = TRUE; 71153289f6aSNate Lawson break; 71253289f6aSNate Lawson 71353289f6aSNate Lawson case 'c': 71453289f6aSNate Lawson 71553289f6aSNate Lawson /* Produce C hex output file */ 71653289f6aSNate Lawson 71753289f6aSNate Lawson Gbl_C_OutputFlag = TRUE; 71853289f6aSNate Lawson break; 71953289f6aSNate Lawson 72053289f6aSNate Lawson default: 72153289f6aSNate Lawson printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 722d6dd1baeSJung-uk Kim return (-1); 72353289f6aSNate Lawson } 72453289f6aSNate Lawson break; 72553289f6aSNate Lawson 72653289f6aSNate Lawson 7274c52cad2SJung-uk Kim case 't': /* Produce hex table output file */ 72853289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 72953289f6aSNate Lawson { 73053289f6aSNate Lawson case 'a': 73153289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 73253289f6aSNate Lawson break; 73353289f6aSNate Lawson 73453289f6aSNate Lawson case 'c': 73553289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_C; 73653289f6aSNate Lawson break; 73753289f6aSNate Lawson 7383f5e024cSJung-uk Kim case 's': 7393f5e024cSJung-uk Kim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 7403f5e024cSJung-uk Kim break; 7413f5e024cSJung-uk Kim 74253289f6aSNate Lawson default: 74353289f6aSNate Lawson printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 744d6dd1baeSJung-uk Kim return (-1); 74553289f6aSNate Lawson } 74653289f6aSNate Lawson break; 74753289f6aSNate Lawson 74853289f6aSNate Lawson 7494c52cad2SJung-uk Kim case 'T': /* Create a ACPI table template file */ 750a88e22b7SJung-uk Kim Gbl_DoTemplates = TRUE; 751a88e22b7SJung-uk Kim Gbl_TemplateSignature = AcpiGbl_Optarg; 752a88e22b7SJung-uk Kim break; 753a88e22b7SJung-uk Kim 754a88e22b7SJung-uk Kim 755*e8241eabSJung-uk Kim case 'v': /* Version and verbosity settings */ 75653289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 75753289f6aSNate Lawson { 758*e8241eabSJung-uk Kim case '^': 759*e8241eabSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 760*e8241eabSJung-uk Kim exit (0); 761*e8241eabSJung-uk Kim 762a9f12690SJung-uk Kim case 'a': 763a9f12690SJung-uk Kim /* Disable All error/warning messages */ 764a9f12690SJung-uk Kim 765a9f12690SJung-uk Kim Gbl_NoErrors = TRUE; 766a9f12690SJung-uk Kim break; 767a9f12690SJung-uk Kim 76853289f6aSNate Lawson case 'i': 769a7a3b383SJung-uk Kim /* 770a7a3b383SJung-uk Kim * Support for integrated development environment(s). 771a7a3b383SJung-uk Kim * 772a7a3b383SJung-uk Kim * 1) No compiler signon 773a7a3b383SJung-uk Kim * 2) Send stderr messages to stdout 774a7a3b383SJung-uk Kim * 3) Less verbose error messages (single line only for each) 775a7a3b383SJung-uk Kim * 4) Error/warning messages are formatted appropriately to 776a7a3b383SJung-uk Kim * be recognized by MS Visual Studio 777a7a3b383SJung-uk Kim */ 77853289f6aSNate Lawson Gbl_VerboseErrors = FALSE; 779a7a3b383SJung-uk Kim Gbl_DoSignon = FALSE; 780a7a3b383SJung-uk Kim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 78153289f6aSNate Lawson break; 78253289f6aSNate Lawson 78353289f6aSNate Lawson case 'o': 78453289f6aSNate Lawson Gbl_DisplayOptimizations = TRUE; 78553289f6aSNate Lawson break; 78653289f6aSNate Lawson 78753289f6aSNate Lawson case 'r': 78853289f6aSNate Lawson Gbl_DisplayRemarks = FALSE; 78953289f6aSNate Lawson break; 79053289f6aSNate Lawson 79153289f6aSNate Lawson case 's': 792a9f12690SJung-uk Kim Gbl_DoSignon = FALSE; 79353289f6aSNate Lawson break; 79453289f6aSNate Lawson 795a88e22b7SJung-uk Kim case 't': 796a88e22b7SJung-uk Kim Gbl_VerboseTemplates = TRUE; 797a88e22b7SJung-uk Kim break; 798a88e22b7SJung-uk Kim 79953289f6aSNate Lawson default: 80053289f6aSNate Lawson printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 801d6dd1baeSJung-uk Kim return (-1); 80253289f6aSNate Lawson } 80353289f6aSNate Lawson break; 80453289f6aSNate Lawson 80553289f6aSNate Lawson 8061a39cfb0SJung-uk Kim case 'w': /* Set warning levels */ 8071a39cfb0SJung-uk Kim switch (AcpiGbl_Optarg[0]) 8081a39cfb0SJung-uk Kim { 8091a39cfb0SJung-uk Kim case '1': 8101a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING; 8111a39cfb0SJung-uk Kim break; 8121a39cfb0SJung-uk Kim 8131a39cfb0SJung-uk Kim case '2': 8141a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING2; 8151a39cfb0SJung-uk Kim break; 8161a39cfb0SJung-uk Kim 8171a39cfb0SJung-uk Kim case '3': 8181a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING3; 8191a39cfb0SJung-uk Kim break; 8201a39cfb0SJung-uk Kim 821eef1b955SJung-uk Kim case 'e': 822eef1b955SJung-uk Kim Gbl_WarningsAsErrors = TRUE; 823eef1b955SJung-uk Kim break; 824eef1b955SJung-uk Kim 8251a39cfb0SJung-uk Kim default: 8261a39cfb0SJung-uk Kim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 827d6dd1baeSJung-uk Kim return (-1); 8281a39cfb0SJung-uk Kim } 8291a39cfb0SJung-uk Kim break; 8301a39cfb0SJung-uk Kim 8311a39cfb0SJung-uk Kim 8324c52cad2SJung-uk Kim case 'x': /* Set debug print output level */ 83353289f6aSNate Lawson AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 83453289f6aSNate Lawson break; 83553289f6aSNate Lawson 83653289f6aSNate Lawson 837a88e22b7SJung-uk Kim case 'z': 838a88e22b7SJung-uk Kim Gbl_UseOriginalCompilerId = TRUE; 839a88e22b7SJung-uk Kim break; 840a88e22b7SJung-uk Kim 841a88e22b7SJung-uk Kim 84253289f6aSNate Lawson default: 843d6dd1baeSJung-uk Kim return (-1); 84453289f6aSNate Lawson } 84553289f6aSNate Lawson 846d6dd1baeSJung-uk Kim return (0); 847d6dd1baeSJung-uk Kim } 848d6dd1baeSJung-uk Kim 849d6dd1baeSJung-uk Kim 850d6dd1baeSJung-uk Kim /******************************************************************************* 851d6dd1baeSJung-uk Kim * 852d6dd1baeSJung-uk Kim * FUNCTION: AslCommandLine 853d6dd1baeSJung-uk Kim * 854d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv 855d6dd1baeSJung-uk Kim * 856d6dd1baeSJung-uk Kim * RETURN: Last argv index 857d6dd1baeSJung-uk Kim * 858d6dd1baeSJung-uk Kim * DESCRIPTION: Command line processing 859d6dd1baeSJung-uk Kim * 860d6dd1baeSJung-uk Kim ******************************************************************************/ 861d6dd1baeSJung-uk Kim 862d6dd1baeSJung-uk Kim static int 863d6dd1baeSJung-uk Kim AslCommandLine ( 864d6dd1baeSJung-uk Kim int argc, 865d6dd1baeSJung-uk Kim char **argv) 866d6dd1baeSJung-uk Kim { 867d6dd1baeSJung-uk Kim int BadCommandLine = 0; 86842fecd12SJung-uk Kim ACPI_STATUS Status; 869d6dd1baeSJung-uk Kim 870d6dd1baeSJung-uk Kim 871d6dd1baeSJung-uk Kim /* Minimum command line contains at least the command and an input file */ 872d6dd1baeSJung-uk Kim 873d6dd1baeSJung-uk Kim if (argc < 2) 874d6dd1baeSJung-uk Kim { 8753c1812acSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 876d6dd1baeSJung-uk Kim Usage (); 877d6dd1baeSJung-uk Kim exit (1); 878d6dd1baeSJung-uk Kim } 879d6dd1baeSJung-uk Kim 880d6dd1baeSJung-uk Kim /* Process all command line options */ 881d6dd1baeSJung-uk Kim 882d6dd1baeSJung-uk Kim BadCommandLine = AslDoOptions (argc, argv, FALSE); 883d6dd1baeSJung-uk Kim 884a88e22b7SJung-uk Kim if (Gbl_DoTemplates) 885a88e22b7SJung-uk Kim { 88642fecd12SJung-uk Kim Status = DtCreateTemplates (Gbl_TemplateSignature); 88742fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 88842fecd12SJung-uk Kim { 88942fecd12SJung-uk Kim exit (-1); 89042fecd12SJung-uk Kim } 891a88e22b7SJung-uk Kim exit (1); 892a88e22b7SJung-uk Kim } 893a88e22b7SJung-uk Kim 89453289f6aSNate Lawson /* Next parameter must be the input filename */ 89553289f6aSNate Lawson 896a9f12690SJung-uk Kim if (!argv[AcpiGbl_Optind] && 897fba7fc7eSJung-uk Kim !Gbl_DisasmFlag && 898fba7fc7eSJung-uk Kim !Gbl_GetAllTables) 89953289f6aSNate Lawson { 90053289f6aSNate Lawson printf ("Missing input filename\n"); 90153289f6aSNate Lawson BadCommandLine = TRUE; 90253289f6aSNate Lawson } 90353289f6aSNate Lawson 904a9f12690SJung-uk Kim if (Gbl_DoSignon) 90553289f6aSNate Lawson { 9063c1812acSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 907ec3fc72fSJung-uk Kim if (Gbl_IgnoreErrors) 908ec3fc72fSJung-uk Kim { 909ec3fc72fSJung-uk Kim printf ("Ignoring all errors, forcing AML file generation\n\n"); 910ec3fc72fSJung-uk Kim } 91153289f6aSNate Lawson } 91253289f6aSNate Lawson 91353289f6aSNate Lawson /* Abort if anything went wrong on the command line */ 91453289f6aSNate Lawson 91553289f6aSNate Lawson if (BadCommandLine) 91653289f6aSNate Lawson { 91753289f6aSNate Lawson printf ("\n"); 91853289f6aSNate Lawson Usage (); 91953289f6aSNate Lawson exit (1); 92053289f6aSNate Lawson } 92153289f6aSNate Lawson 922a9f12690SJung-uk Kim return (AcpiGbl_Optind); 92353289f6aSNate Lawson } 92453289f6aSNate Lawson 92553289f6aSNate Lawson 92653289f6aSNate Lawson /******************************************************************************* 92753289f6aSNate Lawson * 92853289f6aSNate Lawson * FUNCTION: main 92953289f6aSNate Lawson * 93053289f6aSNate Lawson * PARAMETERS: Standard argc/argv 93153289f6aSNate Lawson * 93253289f6aSNate Lawson * RETURN: Program termination code 93353289f6aSNate Lawson * 93453289f6aSNate Lawson * DESCRIPTION: C main routine for the Asl Compiler. Handle command line 935a9f12690SJung-uk Kim * options and begin the compile for each file on the command line 93653289f6aSNate Lawson * 93753289f6aSNate Lawson ******************************************************************************/ 93853289f6aSNate Lawson 93953289f6aSNate Lawson int ACPI_SYSTEM_XFACE 94053289f6aSNate Lawson main ( 94153289f6aSNate Lawson int argc, 94253289f6aSNate Lawson char **argv) 94353289f6aSNate Lawson { 94453289f6aSNate Lawson ACPI_STATUS Status; 945709fac06SJung-uk Kim int Index1; 946709fac06SJung-uk Kim int Index2; 94753289f6aSNate Lawson 94853289f6aSNate Lawson 949709fac06SJung-uk Kim AcpiGbl_ExternalFileList = NULL; 950709fac06SJung-uk Kim 951fba7fc7eSJung-uk Kim #ifdef _DEBUG 952fba7fc7eSJung-uk Kim _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | 953fba7fc7eSJung-uk Kim _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 954fba7fc7eSJung-uk Kim #endif 955fba7fc7eSJung-uk Kim 95653289f6aSNate Lawson /* Init and command line */ 95753289f6aSNate Lawson 95853289f6aSNate Lawson AslInitialize (); 9594c52cad2SJung-uk Kim PrInitializePreprocessor (); 960709fac06SJung-uk Kim Index1 = Index2 = AslCommandLine (argc, argv); 96153289f6aSNate Lawson 962a9f12690SJung-uk Kim /* Options that have no additional parameters or pathnames */ 963a9f12690SJung-uk Kim 964a9f12690SJung-uk Kim if (Gbl_GetAllTables) 965a9f12690SJung-uk Kim { 966a9f12690SJung-uk Kim Status = AslDoOneFile (NULL); 967fba7fc7eSJung-uk Kim if (ACPI_FAILURE (Status)) 968fba7fc7eSJung-uk Kim { 969a9f12690SJung-uk Kim return (-1); 970a9f12690SJung-uk Kim } 971a9f12690SJung-uk Kim return (0); 972fba7fc7eSJung-uk Kim } 97353289f6aSNate Lawson 974709fac06SJung-uk Kim if (Gbl_DisassembleAll) 97553289f6aSNate Lawson { 976709fac06SJung-uk Kim while (argv[Index1]) 977709fac06SJung-uk Kim { 978709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index1], AcpiDmAddToExternalFileList); 97953289f6aSNate Lawson if (ACPI_FAILURE (Status)) 98053289f6aSNate Lawson { 981a9f12690SJung-uk Kim return (-1); 98253289f6aSNate Lawson } 98353289f6aSNate Lawson 984709fac06SJung-uk Kim Index1++; 985709fac06SJung-uk Kim } 986709fac06SJung-uk Kim } 987709fac06SJung-uk Kim 988709fac06SJung-uk Kim /* Process each pathname/filename in the list, with possible wildcards */ 989709fac06SJung-uk Kim 990709fac06SJung-uk Kim while (argv[Index2]) 991709fac06SJung-uk Kim { 992709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index2], AslDoOneFile); 993709fac06SJung-uk Kim if (ACPI_FAILURE (Status)) 994709fac06SJung-uk Kim { 995709fac06SJung-uk Kim return (-1); 996709fac06SJung-uk Kim } 997709fac06SJung-uk Kim 998709fac06SJung-uk Kim Index2++; 999709fac06SJung-uk Kim } 1000709fac06SJung-uk Kim 1001709fac06SJung-uk Kim if (AcpiGbl_ExternalFileList) 1002709fac06SJung-uk Kim { 1003709fac06SJung-uk Kim AcpiDmClearExternalFileList(); 100453289f6aSNate Lawson } 100553289f6aSNate Lawson 100653289f6aSNate Lawson return (0); 100753289f6aSNate Lawson } 100853289f6aSNate Lawson 100953289f6aSNate Lawson 1010