153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 353289f6aSNate Lawson * Module Name: aslmain - compiler main and utilities 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 7d244b227SJung-uk Kim /* 8*efcc2a30SJung-uk Kim * Copyright (C) 2000 - 2013, Intel Corp. 953289f6aSNate Lawson * All rights reserved. 1053289f6aSNate Lawson * 11d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 13d244b227SJung-uk Kim * are met: 14d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16d244b227SJung-uk Kim * without modification. 17d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21d244b227SJung-uk Kim * binary redistribution. 22d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24d244b227SJung-uk Kim * from this software without specific prior written permission. 2553289f6aSNate Lawson * 26d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28d244b227SJung-uk Kim * Software Foundation. 2953289f6aSNate Lawson * 30d244b227SJung-uk Kim * NO WARRANTY 31d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42d244b227SJung-uk Kim */ 4353289f6aSNate Lawson 4453289f6aSNate Lawson 4553289f6aSNate Lawson #define _DECLARE_GLOBALS 4653289f6aSNate Lawson 47ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 48ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 49709fac06SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h> 50042ff955SJung-uk Kim #include <signal.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 73042ff955SJung-uk Kim static void ACPI_SYSTEM_XFACE 74042ff955SJung-uk Kim AslSignalHandler ( 75042ff955SJung-uk Kim int Sig); 76042ff955SJung-uk Kim 77fba7fc7eSJung-uk Kim static void 78fba7fc7eSJung-uk Kim AslInitialize ( 79fba7fc7eSJung-uk Kim void); 80fba7fc7eSJung-uk Kim 81a9f12690SJung-uk Kim static int 82fba7fc7eSJung-uk Kim AslCommandLine ( 83fba7fc7eSJung-uk Kim int argc, 84fba7fc7eSJung-uk Kim char **argv); 85fba7fc7eSJung-uk Kim 86d6dd1baeSJung-uk Kim static int 87d6dd1baeSJung-uk Kim AslDoOptions ( 88d6dd1baeSJung-uk Kim int argc, 89d6dd1baeSJung-uk Kim char **argv, 90d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile); 91d6dd1baeSJung-uk Kim 92d6dd1baeSJung-uk Kim static void 93d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 94d6dd1baeSJung-uk Kim char *InBuffer, 95d6dd1baeSJung-uk Kim char *OutBuffer); 96d6dd1baeSJung-uk Kim 97d6dd1baeSJung-uk Kim static int 98d6dd1baeSJung-uk Kim AslDoResponseFile ( 99d6dd1baeSJung-uk Kim char *Filename); 100d6dd1baeSJung-uk Kim 101d6dd1baeSJung-uk Kim 102d6dd1baeSJung-uk Kim #define ASL_TOKEN_SEPARATORS " \t\n" 103ed17e06eSJung-uk Kim #define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T:G^v^w|x:z" 104d6dd1baeSJung-uk Kim 10553289f6aSNate Lawson 10653289f6aSNate Lawson /******************************************************************************* 10753289f6aSNate Lawson * 10853289f6aSNate Lawson * FUNCTION: Options 10953289f6aSNate Lawson * 11053289f6aSNate Lawson * PARAMETERS: None 11153289f6aSNate Lawson * 11253289f6aSNate Lawson * RETURN: None 11353289f6aSNate Lawson * 11453289f6aSNate Lawson * DESCRIPTION: Display option help message 11553289f6aSNate Lawson * 11653289f6aSNate Lawson ******************************************************************************/ 11753289f6aSNate Lawson 118fba7fc7eSJung-uk Kim static void 11953289f6aSNate Lawson Options ( 12053289f6aSNate Lawson void) 12153289f6aSNate Lawson { 12253289f6aSNate Lawson 1233f0275a0SJung-uk Kim printf ("\nGlobal:\n"); 1243f0275a0SJung-uk Kim ACPI_OPTION ("-@ <file>", "Specify command file"); 1253f0275a0SJung-uk Kim ACPI_OPTION ("-I <dir>", "Specify additional include directory"); 1268ef1a331SJung-uk Kim ACPI_OPTION ("-T <sig>|ALL|*", "Create table template file for ACPI <Sig>"); 127e8241eabSJung-uk Kim ACPI_OPTION ("-v", "Display compiler version"); 128d6dd1baeSJung-uk Kim 1294c52cad2SJung-uk Kim printf ("\nPreprocessor:\n"); 1304c52cad2SJung-uk Kim ACPI_OPTION ("-D <symbol>", "Define symbol for preprocessor use"); 1314c52cad2SJung-uk Kim ACPI_OPTION ("-li", "Create preprocessed output file (*.i)"); 1324c52cad2SJung-uk Kim ACPI_OPTION ("-P", "Preprocess only and create preprocessor output file (*.i)"); 133eef1b955SJung-uk Kim ACPI_OPTION ("-Pn", "Disable preprocessor"); 1344c52cad2SJung-uk Kim 135d6dd1baeSJung-uk Kim printf ("\nGeneral Output:\n"); 1363f0275a0SJung-uk Kim ACPI_OPTION ("-p <prefix>", "Specify path/filename prefix for all output files"); 1373f0275a0SJung-uk Kim ACPI_OPTION ("-va", "Disable all errors and warnings (summary only)"); 1383f0275a0SJung-uk Kim ACPI_OPTION ("-vi", "Less verbose errors and warnings for use with IDEs"); 1393f0275a0SJung-uk Kim ACPI_OPTION ("-vo", "Enable optimization comments"); 1403f0275a0SJung-uk Kim ACPI_OPTION ("-vr", "Disable remarks"); 1413f0275a0SJung-uk Kim ACPI_OPTION ("-vs", "Disable signon"); 1424c52cad2SJung-uk Kim ACPI_OPTION ("-w1 -w2 -w3", "Set warning reporting level"); 143eef1b955SJung-uk Kim ACPI_OPTION ("-we", "Report warnings as errors"); 14453289f6aSNate Lawson 1458ef1a331SJung-uk Kim printf ("\nAML and Data Output Files:\n"); 1468ef1a331SJung-uk Kim ACPI_OPTION ("-sa -sc", "Create assembler or C source file (*.asm or *.c)"); 1474c52cad2SJung-uk Kim ACPI_OPTION ("-ia -ic", "Create assembler or C include file (*.inc or *.h)"); 1488ef1a331SJung-uk Kim ACPI_OPTION ("-ta -tc -ts", "Create assembler, C, or ASL hex table (*.hex)"); 14953289f6aSNate Lawson 150c8466860SMark Santcroos printf ("\nAML Code Generation:\n"); 1513f0275a0SJung-uk Kim ACPI_OPTION ("-oa", "Disable all optimizations (compatibility mode)"); 1523f0275a0SJung-uk Kim ACPI_OPTION ("-of", "Disable constant folding"); 1533f0275a0SJung-uk Kim ACPI_OPTION ("-oi", "Disable integer optimization to Zero/One/Ones"); 1543f0275a0SJung-uk Kim ACPI_OPTION ("-on", "Disable named reference string optimization"); 1553f0275a0SJung-uk Kim ACPI_OPTION ("-cr", "Disable Resource Descriptor error checking"); 156*efcc2a30SJung-uk Kim ACPI_OPTION ("-in", "Ignore NoOp operators"); 1573f0275a0SJung-uk Kim ACPI_OPTION ("-r <revision>", "Override table header Revision (1-255)"); 15853289f6aSNate Lawson 15942fecd12SJung-uk Kim printf ("\nASL Listing Files:\n"); 1603f0275a0SJung-uk Kim ACPI_OPTION ("-l", "Create mixed listing file (ASL source and AML) (*.lst)"); 1613f0275a0SJung-uk Kim ACPI_OPTION ("-ln", "Create namespace file (*.nsp)"); 1623f0275a0SJung-uk Kim ACPI_OPTION ("-ls", "Create combined source file (expanded includes) (*.src)"); 16353289f6aSNate Lawson 164a88e22b7SJung-uk Kim printf ("\nACPI Data Tables:\n"); 1653f0275a0SJung-uk Kim ACPI_OPTION ("-G", "Compile custom table containing generic operators"); 1663f0275a0SJung-uk Kim ACPI_OPTION ("-vt", "Create verbose templates (full disassembly)"); 167a88e22b7SJung-uk Kim 16853289f6aSNate Lawson printf ("\nAML Disassembler:\n"); 1693f0275a0SJung-uk Kim ACPI_OPTION ("-d [file]", "Disassemble or decode binary ACPI table to file (*.dsl)"); 1703f0275a0SJung-uk Kim ACPI_OPTION ("-da [f1,f2]", "Disassemble multiple tables from single namespace"); 171042ff955SJung-uk Kim ACPI_OPTION ("-db", "Do not translate Buffers to Resource Templates"); 1723f0275a0SJung-uk Kim ACPI_OPTION ("-dc [file]", "Disassemble AML and immediately compile it"); 1733f0275a0SJung-uk Kim ACPI_OPTION ("", "(Obtain DSDT from current system if no input file)"); 1743f0275a0SJung-uk Kim ACPI_OPTION ("-e [f1,f2]", "Include ACPI table(s) for external symbol resolution"); 1753f0275a0SJung-uk Kim ACPI_OPTION ("-g", "Get ACPI tables and write to files (*.dat)"); 176*efcc2a30SJung-uk Kim ACPI_OPTION ("-in", "Ignore NoOp opcodes"); 1778ef1a331SJung-uk Kim ACPI_OPTION ("-vt", "Dump binary table data in hex format within output file"); 17853289f6aSNate Lawson 17953289f6aSNate Lawson printf ("\nHelp:\n"); 180f38b0f21SJung-uk Kim ACPI_OPTION ("-h", "This message"); 1813f0275a0SJung-uk Kim ACPI_OPTION ("-hc", "Display operators allowed in constant expressions"); 182f38b0f21SJung-uk Kim ACPI_OPTION ("-hf", "Display help for output filename generation"); 1833f0275a0SJung-uk Kim ACPI_OPTION ("-hr", "Display ACPI reserved method names"); 1843f0275a0SJung-uk Kim ACPI_OPTION ("-ht", "Display currently supported ACPI table names"); 185f38b0f21SJung-uk Kim 186f38b0f21SJung-uk Kim printf ("\nDebug Options:\n"); 187f38b0f21SJung-uk Kim ACPI_OPTION ("-bf -bt", "Create debug file (full or parse tree only) (*.txt)"); 188f38b0f21SJung-uk Kim ACPI_OPTION ("-f", "Ignore errors, force creation of AML output file(s)"); 189f38b0f21SJung-uk Kim ACPI_OPTION ("-n", "Parse only, no output generation"); 190f38b0f21SJung-uk Kim ACPI_OPTION ("-ot", "Display compile times and statistics"); 191f38b0f21SJung-uk Kim ACPI_OPTION ("-x <level>", "Set debug level for trace output"); 192f38b0f21SJung-uk Kim ACPI_OPTION ("-z", "Do not insert new compiler ID for DataTables"); 19353289f6aSNate Lawson } 19453289f6aSNate Lawson 19553289f6aSNate Lawson 19653289f6aSNate Lawson /******************************************************************************* 19753289f6aSNate Lawson * 198f38b0f21SJung-uk Kim * FUNCTION: FilenameHelp 19953289f6aSNate Lawson * 20053289f6aSNate Lawson * PARAMETERS: None 20153289f6aSNate Lawson * 20253289f6aSNate Lawson * RETURN: None 20353289f6aSNate Lawson * 204f38b0f21SJung-uk Kim * DESCRIPTION: Display help message for output filename generation 20553289f6aSNate Lawson * 20653289f6aSNate Lawson ******************************************************************************/ 20753289f6aSNate Lawson 208fba7fc7eSJung-uk Kim static void 209f38b0f21SJung-uk Kim FilenameHelp ( 21053289f6aSNate Lawson void) 21153289f6aSNate Lawson { 21253289f6aSNate Lawson 2133f0275a0SJung-uk Kim printf ("\nAML output filename generation:\n"); 21453289f6aSNate Lawson printf (" Output filenames are generated by appending an extension to a common\n"); 21553289f6aSNate Lawson printf (" filename prefix. The filename prefix is obtained via one of the\n"); 21653289f6aSNate Lawson printf (" following methods (in priority order):\n"); 21753289f6aSNate Lawson printf (" 1) The -p option specifies the prefix\n"); 21853289f6aSNate Lawson printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); 21953289f6aSNate Lawson printf (" 3) The prefix of the input filename\n"); 22053289f6aSNate Lawson printf ("\n"); 22153289f6aSNate Lawson } 22253289f6aSNate Lawson 22353289f6aSNate Lawson 22453289f6aSNate Lawson /******************************************************************************* 22553289f6aSNate Lawson * 22653289f6aSNate Lawson * FUNCTION: Usage 22753289f6aSNate Lawson * 22853289f6aSNate Lawson * PARAMETERS: None 22953289f6aSNate Lawson * 23053289f6aSNate Lawson * RETURN: None 23153289f6aSNate Lawson * 23253289f6aSNate Lawson * DESCRIPTION: Display usage and option message 23353289f6aSNate Lawson * 23453289f6aSNate Lawson ******************************************************************************/ 23553289f6aSNate Lawson 236fba7fc7eSJung-uk Kim static void 23753289f6aSNate Lawson Usage ( 23853289f6aSNate Lawson void) 23953289f6aSNate Lawson { 24053289f6aSNate Lawson 2413f0275a0SJung-uk Kim printf ("%s\n\n", ASL_COMPLIANCE); 2423f0275a0SJung-uk Kim ACPI_USAGE_HEADER ("iasl [Options] [Files]"); 24353289f6aSNate Lawson Options (); 24453289f6aSNate Lawson } 24553289f6aSNate Lawson 24653289f6aSNate Lawson 247042ff955SJung-uk Kim /****************************************************************************** 248042ff955SJung-uk Kim * 249042ff955SJung-uk Kim * FUNCTION: AslSignalHandler 250042ff955SJung-uk Kim * 251042ff955SJung-uk Kim * PARAMETERS: Sig - Signal that invoked this handler 252042ff955SJung-uk Kim * 253042ff955SJung-uk Kim * RETURN: None 254042ff955SJung-uk Kim * 255042ff955SJung-uk Kim * DESCRIPTION: Control-C handler. Delete any intermediate files and any 256042ff955SJung-uk Kim * output files that may be left in an indeterminate state. 257042ff955SJung-uk Kim * 258042ff955SJung-uk Kim *****************************************************************************/ 259042ff955SJung-uk Kim 260042ff955SJung-uk Kim static void ACPI_SYSTEM_XFACE 261042ff955SJung-uk Kim AslSignalHandler ( 262042ff955SJung-uk Kim int Sig) 263042ff955SJung-uk Kim { 264042ff955SJung-uk Kim UINT32 i; 265042ff955SJung-uk Kim 266042ff955SJung-uk Kim 267042ff955SJung-uk Kim signal (Sig, SIG_IGN); 268042ff955SJung-uk Kim printf ("Aborting\n\n"); 269042ff955SJung-uk Kim 270042ff955SJung-uk Kim /* Close all open files */ 271042ff955SJung-uk Kim 272042ff955SJung-uk Kim Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; /* the .i file is same as source file */ 273042ff955SJung-uk Kim 274042ff955SJung-uk Kim for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++) 275042ff955SJung-uk Kim { 276042ff955SJung-uk Kim FlCloseFile (i); 277042ff955SJung-uk Kim } 278042ff955SJung-uk Kim 279042ff955SJung-uk Kim /* Delete any output files */ 280042ff955SJung-uk Kim 281042ff955SJung-uk Kim for (i = ASL_FILE_AML_OUTPUT; i < ASL_MAX_FILE_TYPE; i++) 282042ff955SJung-uk Kim { 283042ff955SJung-uk Kim FlDeleteFile (i); 284042ff955SJung-uk Kim } 285042ff955SJung-uk Kim 286042ff955SJung-uk Kim exit (0); 287042ff955SJung-uk Kim } 288042ff955SJung-uk Kim 289042ff955SJung-uk Kim 29053289f6aSNate Lawson /******************************************************************************* 29153289f6aSNate Lawson * 29253289f6aSNate Lawson * FUNCTION: AslInitialize 29353289f6aSNate Lawson * 29453289f6aSNate Lawson * PARAMETERS: None 29553289f6aSNate Lawson * 29653289f6aSNate Lawson * RETURN: None 29753289f6aSNate Lawson * 29853289f6aSNate Lawson * DESCRIPTION: Initialize compiler globals 29953289f6aSNate Lawson * 30053289f6aSNate Lawson ******************************************************************************/ 30153289f6aSNate Lawson 302fba7fc7eSJung-uk Kim static void 303fba7fc7eSJung-uk Kim AslInitialize ( 304fba7fc7eSJung-uk Kim void) 30553289f6aSNate Lawson { 30653289f6aSNate Lawson UINT32 i; 30753289f6aSNate Lawson 30853289f6aSNate Lawson 30953289f6aSNate Lawson #ifdef _DEBUG 31053289f6aSNate Lawson _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0)); 31153289f6aSNate Lawson #endif 31253289f6aSNate Lawson 31353289f6aSNate Lawson 31453289f6aSNate Lawson for (i = 0; i < ASL_NUM_FILES; i++) 31553289f6aSNate Lawson { 31653289f6aSNate Lawson Gbl_Files[i].Handle = NULL; 31753289f6aSNate Lawson Gbl_Files[i].Filename = NULL; 31853289f6aSNate Lawson } 31953289f6aSNate Lawson 32053289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Handle = stdout; 32153289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; 32253289f6aSNate Lawson 32353289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Handle = stderr; 32453289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; 325042ff955SJung-uk Kim 326042ff955SJung-uk Kim /* Allocate the line buffer(s) */ 327042ff955SJung-uk Kim 328042ff955SJung-uk Kim Gbl_LineBufferSize /= 2; 329042ff955SJung-uk Kim UtExpandLineBuffers (); 33053289f6aSNate Lawson } 33153289f6aSNate Lawson 33253289f6aSNate Lawson 33353289f6aSNate Lawson /******************************************************************************* 33453289f6aSNate Lawson * 335d6dd1baeSJung-uk Kim * FUNCTION: AslMergeOptionTokens 33653289f6aSNate Lawson * 337d6dd1baeSJung-uk Kim * PARAMETERS: InBuffer - Input containing an option string 338d6dd1baeSJung-uk Kim * OutBuffer - Merged output buffer 33953289f6aSNate Lawson * 34053289f6aSNate Lawson * RETURN: None 34153289f6aSNate Lawson * 342d6dd1baeSJung-uk Kim * DESCRIPTION: Remove all whitespace from an option string. 343d6dd1baeSJung-uk Kim * 344d6dd1baeSJung-uk Kim ******************************************************************************/ 345d6dd1baeSJung-uk Kim 346d6dd1baeSJung-uk Kim static void 347d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 348d6dd1baeSJung-uk Kim char *InBuffer, 349d6dd1baeSJung-uk Kim char *OutBuffer) 350d6dd1baeSJung-uk Kim { 351d6dd1baeSJung-uk Kim char *Token; 352d6dd1baeSJung-uk Kim 353d6dd1baeSJung-uk Kim 354d6dd1baeSJung-uk Kim *OutBuffer = 0; 355d6dd1baeSJung-uk Kim 356d6dd1baeSJung-uk Kim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 357d6dd1baeSJung-uk Kim while (Token) 358d6dd1baeSJung-uk Kim { 359d6dd1baeSJung-uk Kim strcat (OutBuffer, Token); 360d6dd1baeSJung-uk Kim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 361d6dd1baeSJung-uk Kim } 362d6dd1baeSJung-uk Kim } 363d6dd1baeSJung-uk Kim 364d6dd1baeSJung-uk Kim 365d6dd1baeSJung-uk Kim /******************************************************************************* 366d6dd1baeSJung-uk Kim * 367d6dd1baeSJung-uk Kim * FUNCTION: AslDoResponseFile 368d6dd1baeSJung-uk Kim * 369d6dd1baeSJung-uk Kim * PARAMETERS: Filename - Name of the response file 370d6dd1baeSJung-uk Kim * 371d6dd1baeSJung-uk Kim * RETURN: Status 372d6dd1baeSJung-uk Kim * 373d6dd1baeSJung-uk Kim * DESCRIPTION: Open a response file and process all options within. 37453289f6aSNate Lawson * 37553289f6aSNate Lawson ******************************************************************************/ 37653289f6aSNate Lawson 377a9f12690SJung-uk Kim static int 378d6dd1baeSJung-uk Kim AslDoResponseFile ( 379d6dd1baeSJung-uk Kim char *Filename) 38053289f6aSNate Lawson { 381d6dd1baeSJung-uk Kim char *argv = StringBuffer2; 382d6dd1baeSJung-uk Kim FILE *ResponseFile; 383d6dd1baeSJung-uk Kim int OptStatus = 0; 384d6dd1baeSJung-uk Kim int Opterr; 385d6dd1baeSJung-uk Kim int Optind; 386d6dd1baeSJung-uk Kim 387d6dd1baeSJung-uk Kim 388d6dd1baeSJung-uk Kim ResponseFile = fopen (Filename, "r"); 389d6dd1baeSJung-uk Kim if (!ResponseFile) 390d6dd1baeSJung-uk Kim { 391d6dd1baeSJung-uk Kim printf ("Could not open command file %s, %s\n", 392d6dd1baeSJung-uk Kim Filename, strerror (errno)); 3938ef1a331SJung-uk Kim return (-1); 394d6dd1baeSJung-uk Kim } 395d6dd1baeSJung-uk Kim 396d6dd1baeSJung-uk Kim /* Must save the current GetOpt globals */ 397d6dd1baeSJung-uk Kim 398d6dd1baeSJung-uk Kim Opterr = AcpiGbl_Opterr; 399d6dd1baeSJung-uk Kim Optind = AcpiGbl_Optind; 400d6dd1baeSJung-uk Kim 401d6dd1baeSJung-uk Kim /* 402d6dd1baeSJung-uk Kim * Process all lines in the response file. There must be one complete 403d6dd1baeSJung-uk Kim * option per line 404d6dd1baeSJung-uk Kim */ 405d6dd1baeSJung-uk Kim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 406d6dd1baeSJung-uk Kim { 407d6dd1baeSJung-uk Kim /* Compress all tokens, allowing us to use a single argv entry */ 408d6dd1baeSJung-uk Kim 409d6dd1baeSJung-uk Kim AslMergeOptionTokens (StringBuffer, StringBuffer2); 410d6dd1baeSJung-uk Kim 411d6dd1baeSJung-uk Kim /* Process the option */ 412d6dd1baeSJung-uk Kim 413d6dd1baeSJung-uk Kim AcpiGbl_Opterr = 0; 414d6dd1baeSJung-uk Kim AcpiGbl_Optind = 0; 415d6dd1baeSJung-uk Kim 416d6dd1baeSJung-uk Kim OptStatus = AslDoOptions (1, &argv, TRUE); 417d6dd1baeSJung-uk Kim if (OptStatus) 418d6dd1baeSJung-uk Kim { 419d6dd1baeSJung-uk Kim printf ("Invalid option in command file %s: %s\n", 420d6dd1baeSJung-uk Kim Filename, StringBuffer); 421d6dd1baeSJung-uk Kim break; 422d6dd1baeSJung-uk Kim } 423d6dd1baeSJung-uk Kim } 424d6dd1baeSJung-uk Kim 425d6dd1baeSJung-uk Kim /* Restore the GetOpt globals */ 426d6dd1baeSJung-uk Kim 427d6dd1baeSJung-uk Kim AcpiGbl_Opterr = Opterr; 428d6dd1baeSJung-uk Kim AcpiGbl_Optind = Optind; 429d6dd1baeSJung-uk Kim 430d6dd1baeSJung-uk Kim fclose (ResponseFile); 431d6dd1baeSJung-uk Kim return (OptStatus); 432d6dd1baeSJung-uk Kim } 433d6dd1baeSJung-uk Kim 434d6dd1baeSJung-uk Kim 435d6dd1baeSJung-uk Kim /******************************************************************************* 436d6dd1baeSJung-uk Kim * 437d6dd1baeSJung-uk Kim * FUNCTION: AslDoOptions 438d6dd1baeSJung-uk Kim * 439d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv - Standard argc/argv 440d6dd1baeSJung-uk Kim * IsResponseFile - TRUE if executing a response file. 441d6dd1baeSJung-uk Kim * 442d6dd1baeSJung-uk Kim * RETURN: Status 443d6dd1baeSJung-uk Kim * 444d6dd1baeSJung-uk Kim * DESCRIPTION: Command line option processing 445d6dd1baeSJung-uk Kim * 446d6dd1baeSJung-uk Kim ******************************************************************************/ 447d6dd1baeSJung-uk Kim 448d6dd1baeSJung-uk Kim static int 449d6dd1baeSJung-uk Kim AslDoOptions ( 450d6dd1baeSJung-uk Kim int argc, 451d6dd1baeSJung-uk Kim char **argv, 452d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile) 453d6dd1baeSJung-uk Kim { 454a9f12690SJung-uk Kim int j; 45542fecd12SJung-uk Kim ACPI_STATUS Status; 45653289f6aSNate Lawson 45753289f6aSNate Lawson 45853289f6aSNate Lawson /* Get the command line options */ 45953289f6aSNate Lawson 460d6dd1baeSJung-uk Kim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 46153289f6aSNate Lawson { 462d6dd1baeSJung-uk Kim case '@': /* Begin a response file */ 463d6dd1baeSJung-uk Kim 464d6dd1baeSJung-uk Kim if (IsResponseFile) 465d6dd1baeSJung-uk Kim { 466d6dd1baeSJung-uk Kim printf ("Nested command files are not supported\n"); 4674c52cad2SJung-uk Kim return (-1); 468d6dd1baeSJung-uk Kim } 469d6dd1baeSJung-uk Kim 470d6dd1baeSJung-uk Kim if (AslDoResponseFile (AcpiGbl_Optarg)) 471d6dd1baeSJung-uk Kim { 4724c52cad2SJung-uk Kim return (-1); 473d6dd1baeSJung-uk Kim } 474d6dd1baeSJung-uk Kim break; 475d6dd1baeSJung-uk Kim 476d6dd1baeSJung-uk Kim 4774c52cad2SJung-uk Kim case 'b': /* Debug output options */ 47853289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 47953289f6aSNate Lawson { 480f38b0f21SJung-uk Kim case 'f': 48153289f6aSNate Lawson AslCompilerdebug = 1; /* same as yydebug */ 482d052a1ccSJung-uk Kim DtParserdebug = 1; 4834c52cad2SJung-uk Kim PrParserdebug = 1; 48453289f6aSNate Lawson break; 48553289f6aSNate Lawson 48653289f6aSNate Lawson case 't': 48753289f6aSNate Lawson break; 48853289f6aSNate Lawson 48953289f6aSNate Lawson default: 49053289f6aSNate Lawson printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 491d6dd1baeSJung-uk Kim return (-1); 49253289f6aSNate Lawson } 49353289f6aSNate Lawson 49453289f6aSNate Lawson /* Produce debug output file */ 49553289f6aSNate Lawson 49653289f6aSNate Lawson Gbl_DebugFlag = TRUE; 49753289f6aSNate Lawson break; 49853289f6aSNate Lawson 49953289f6aSNate Lawson 50053289f6aSNate Lawson case 'c': 5013f5e024cSJung-uk Kim switch (AcpiGbl_Optarg[0]) 5023f5e024cSJung-uk Kim { 5033f5e024cSJung-uk Kim case 'r': 5043f5e024cSJung-uk Kim Gbl_NoResourceChecking = TRUE; 5053f5e024cSJung-uk Kim break; 50653289f6aSNate Lawson 5073f5e024cSJung-uk Kim default: 5083f5e024cSJung-uk Kim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 5093f5e024cSJung-uk Kim return (-1); 5103f5e024cSJung-uk Kim } 51153289f6aSNate Lawson break; 51253289f6aSNate Lawson 51353289f6aSNate Lawson 5144c52cad2SJung-uk Kim case 'd': /* Disassembler */ 51553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 51653289f6aSNate Lawson { 51753289f6aSNate Lawson case '^': 518a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 51953289f6aSNate Lawson break; 52053289f6aSNate Lawson 521709fac06SJung-uk Kim case 'a': 522709fac06SJung-uk Kim Gbl_DoCompile = FALSE; 523709fac06SJung-uk Kim Gbl_DisassembleAll = TRUE; 524709fac06SJung-uk Kim break; 525709fac06SJung-uk Kim 526042ff955SJung-uk Kim case 'b': /* Do not convert buffers to resource descriptors */ 527042ff955SJung-uk Kim AcpiGbl_NoResourceDisassembly = TRUE; 528042ff955SJung-uk Kim break; 529042ff955SJung-uk Kim 53053289f6aSNate Lawson case 'c': 53153289f6aSNate Lawson break; 53253289f6aSNate Lawson 53353289f6aSNate Lawson default: 53453289f6aSNate Lawson printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 535d6dd1baeSJung-uk Kim return (-1); 53653289f6aSNate Lawson } 53753289f6aSNate Lawson 53853289f6aSNate Lawson Gbl_DisasmFlag = TRUE; 53953289f6aSNate Lawson break; 54053289f6aSNate Lawson 54153289f6aSNate Lawson 5424c52cad2SJung-uk Kim case 'D': /* Define a symbol */ 5434c52cad2SJung-uk Kim PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 5444c52cad2SJung-uk Kim break; 5454c52cad2SJung-uk Kim 5464c52cad2SJung-uk Kim 5474c52cad2SJung-uk Kim case 'e': /* External files for disassembler */ 54842fecd12SJung-uk Kim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 54942fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 55042fecd12SJung-uk Kim { 55142fecd12SJung-uk Kim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 55242fecd12SJung-uk Kim return (-1); 55342fecd12SJung-uk Kim } 55453289f6aSNate Lawson break; 55553289f6aSNate Lawson 55653289f6aSNate Lawson 5574c52cad2SJung-uk Kim case 'f': /* Ignore errors and force creation of aml file */ 55853289f6aSNate Lawson Gbl_IgnoreErrors = TRUE; 55953289f6aSNate Lawson break; 56053289f6aSNate Lawson 56153289f6aSNate Lawson 5624c52cad2SJung-uk Kim case 'G': 5634c52cad2SJung-uk Kim Gbl_CompileGeneric = TRUE; 5644c52cad2SJung-uk Kim break; 56553289f6aSNate Lawson 5664c52cad2SJung-uk Kim 5674c52cad2SJung-uk Kim case 'g': /* Get all ACPI tables */ 56853289f6aSNate Lawson 56953289f6aSNate Lawson Gbl_GetAllTables = TRUE; 570a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 57153289f6aSNate Lawson break; 57253289f6aSNate Lawson 57353289f6aSNate Lawson 57453289f6aSNate Lawson case 'h': 57553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 57653289f6aSNate Lawson { 57753289f6aSNate Lawson case '^': 578f38b0f21SJung-uk Kim Usage (); 57953289f6aSNate Lawson exit (0); 58053289f6aSNate Lawson 58153289f6aSNate Lawson case 'c': 58253289f6aSNate Lawson UtDisplayConstantOpcodes (); 58353289f6aSNate Lawson exit (0); 58453289f6aSNate Lawson 585f38b0f21SJung-uk Kim case 'f': 586f38b0f21SJung-uk Kim FilenameHelp (); 587f38b0f21SJung-uk Kim exit (0); 588f38b0f21SJung-uk Kim 58953289f6aSNate Lawson case 'r': 59053289f6aSNate Lawson /* reserved names */ 59153289f6aSNate Lawson 592ca3cf4faSJung-uk Kim ApDisplayReservedNames (); 59353289f6aSNate Lawson exit (0); 59453289f6aSNate Lawson 595a88e22b7SJung-uk Kim case 't': 596a88e22b7SJung-uk Kim UtDisplaySupportedTables (); 597a88e22b7SJung-uk Kim exit (0); 598a88e22b7SJung-uk Kim 59953289f6aSNate Lawson default: 60053289f6aSNate Lawson printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 601d6dd1baeSJung-uk Kim return (-1); 60253289f6aSNate Lawson } 60353289f6aSNate Lawson 60453289f6aSNate Lawson 605d6dd1baeSJung-uk Kim case 'I': /* Add an include file search directory */ 606d6dd1baeSJung-uk Kim FlAddIncludeDirectory (AcpiGbl_Optarg); 607d6dd1baeSJung-uk Kim break; 608d6dd1baeSJung-uk Kim 609d6dd1baeSJung-uk Kim 6104c52cad2SJung-uk Kim case 'i': /* Output AML as an include file */ 61153289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 61253289f6aSNate Lawson { 61353289f6aSNate Lawson case 'a': 61453289f6aSNate Lawson 61553289f6aSNate Lawson /* Produce assembly code include file */ 61653289f6aSNate Lawson 61753289f6aSNate Lawson Gbl_AsmIncludeOutputFlag = TRUE; 61853289f6aSNate Lawson break; 61953289f6aSNate Lawson 62053289f6aSNate Lawson case 'c': 62153289f6aSNate Lawson 62253289f6aSNate Lawson /* Produce C include file */ 62353289f6aSNate Lawson 62453289f6aSNate Lawson Gbl_C_IncludeOutputFlag = TRUE; 62553289f6aSNate Lawson break; 62653289f6aSNate Lawson 627*efcc2a30SJung-uk Kim case 'n': 628*efcc2a30SJung-uk Kim 629*efcc2a30SJung-uk Kim /* Compiler/Disassembler: Ignore the NOOP operator */ 630*efcc2a30SJung-uk Kim 631*efcc2a30SJung-uk Kim AcpiGbl_IgnoreNoopOperator = TRUE; 632*efcc2a30SJung-uk Kim break; 633*efcc2a30SJung-uk Kim 63453289f6aSNate Lawson default: 6354c52cad2SJung-uk Kim printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 636d6dd1baeSJung-uk Kim return (-1); 63753289f6aSNate Lawson } 63853289f6aSNate Lawson break; 63953289f6aSNate Lawson 64053289f6aSNate Lawson 6414c52cad2SJung-uk Kim case 'l': /* Listing files */ 64253289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 64353289f6aSNate Lawson { 64453289f6aSNate Lawson case '^': 64553289f6aSNate Lawson /* Produce listing file (Mixed source/aml) */ 64653289f6aSNate Lawson 64753289f6aSNate Lawson Gbl_ListingFlag = TRUE; 64853289f6aSNate Lawson break; 64953289f6aSNate Lawson 6504c52cad2SJung-uk Kim case 'i': 6514c52cad2SJung-uk Kim /* Produce preprocessor output file */ 6524c52cad2SJung-uk Kim 6534c52cad2SJung-uk Kim Gbl_PreprocessorOutputFlag = TRUE; 6544c52cad2SJung-uk Kim break; 6554c52cad2SJung-uk Kim 65653289f6aSNate Lawson case 'n': 65753289f6aSNate Lawson /* Produce namespace file */ 65853289f6aSNate Lawson 65953289f6aSNate Lawson Gbl_NsOutputFlag = TRUE; 66053289f6aSNate Lawson break; 66153289f6aSNate Lawson 66253289f6aSNate Lawson case 's': 66353289f6aSNate Lawson /* Produce combined source file */ 66453289f6aSNate Lawson 66553289f6aSNate Lawson Gbl_SourceOutputFlag = TRUE; 66653289f6aSNate Lawson break; 66753289f6aSNate Lawson 66853289f6aSNate Lawson default: 66953289f6aSNate Lawson printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 670d6dd1baeSJung-uk Kim return (-1); 67153289f6aSNate Lawson } 67253289f6aSNate Lawson break; 67353289f6aSNate Lawson 67453289f6aSNate Lawson 675042ff955SJung-uk Kim case 'm': /* Set line buffer size */ 676042ff955SJung-uk Kim Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 677042ff955SJung-uk Kim if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 678042ff955SJung-uk Kim { 679042ff955SJung-uk Kim Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 680042ff955SJung-uk Kim } 681042ff955SJung-uk Kim printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 6823f0275a0SJung-uk Kim break; 6833f0275a0SJung-uk Kim 6843f0275a0SJung-uk Kim 6854c52cad2SJung-uk Kim case 'n': /* Parse only */ 6863f0275a0SJung-uk Kim Gbl_ParseOnlyFlag = TRUE; 6873f0275a0SJung-uk Kim break; 6883f0275a0SJung-uk Kim 6893f0275a0SJung-uk Kim 6904c52cad2SJung-uk Kim case 'o': /* Control compiler AML optimizations */ 69153289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 69253289f6aSNate Lawson { 69353289f6aSNate Lawson case 'a': 69453289f6aSNate Lawson 69553289f6aSNate Lawson /* Disable all optimizations */ 69653289f6aSNate Lawson 69753289f6aSNate Lawson Gbl_FoldConstants = FALSE; 69853289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 69953289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 70053289f6aSNate Lawson break; 70153289f6aSNate Lawson 70253289f6aSNate Lawson case 'f': 70353289f6aSNate Lawson 70453289f6aSNate Lawson /* Disable folding on "normal" expressions */ 70553289f6aSNate Lawson 70653289f6aSNate Lawson Gbl_FoldConstants = FALSE; 70753289f6aSNate Lawson break; 70853289f6aSNate Lawson 70953289f6aSNate Lawson case 'i': 71053289f6aSNate Lawson 71153289f6aSNate Lawson /* Disable integer optimization to constants */ 71253289f6aSNate Lawson 71353289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 71453289f6aSNate Lawson break; 71553289f6aSNate Lawson 71653289f6aSNate Lawson case 'n': 71753289f6aSNate Lawson 71853289f6aSNate Lawson /* Disable named reference optimization */ 71953289f6aSNate Lawson 72053289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 72153289f6aSNate Lawson break; 72253289f6aSNate Lawson 72353289f6aSNate Lawson case 't': 72453289f6aSNate Lawson 72553289f6aSNate Lawson /* Display compile time(s) */ 72653289f6aSNate Lawson 72753289f6aSNate Lawson Gbl_CompileTimesFlag = TRUE; 72853289f6aSNate Lawson break; 72953289f6aSNate Lawson 73053289f6aSNate Lawson default: 73153289f6aSNate Lawson printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 732d6dd1baeSJung-uk Kim return (-1); 73353289f6aSNate Lawson } 73453289f6aSNate Lawson break; 73553289f6aSNate Lawson 73653289f6aSNate Lawson 737eef1b955SJung-uk Kim case 'P': /* Preprocessor options */ 738eef1b955SJung-uk Kim switch (AcpiGbl_Optarg[0]) 739eef1b955SJung-uk Kim { 740eef1b955SJung-uk Kim case '^': /* Proprocess only, emit (.i) file */ 7414c52cad2SJung-uk Kim Gbl_PreprocessOnly = TRUE; 7424c52cad2SJung-uk Kim Gbl_PreprocessorOutputFlag = TRUE; 7434c52cad2SJung-uk Kim break; 74453289f6aSNate Lawson 745eef1b955SJung-uk Kim case 'n': /* Disable preprocessor */ 746eef1b955SJung-uk Kim Gbl_PreprocessFlag = FALSE; 747eef1b955SJung-uk Kim break; 748eef1b955SJung-uk Kim 749eef1b955SJung-uk Kim default: 750eef1b955SJung-uk Kim printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 751eef1b955SJung-uk Kim return (-1); 752eef1b955SJung-uk Kim } 753eef1b955SJung-uk Kim break; 754eef1b955SJung-uk Kim 75553289f6aSNate Lawson 7564c52cad2SJung-uk Kim case 'p': /* Override default AML output filename */ 75753289f6aSNate Lawson Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 75853289f6aSNate Lawson Gbl_UseDefaultAmlFilename = FALSE; 75953289f6aSNate Lawson break; 76053289f6aSNate Lawson 76153289f6aSNate Lawson 7624c52cad2SJung-uk Kim case 'r': /* Override revision found in table header */ 763c8466860SMark Santcroos Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 76453289f6aSNate Lawson break; 76553289f6aSNate Lawson 76653289f6aSNate Lawson 7674c52cad2SJung-uk Kim case 's': /* Create AML in a source code file */ 76853289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 76953289f6aSNate Lawson { 77053289f6aSNate Lawson case 'a': 77153289f6aSNate Lawson 77253289f6aSNate Lawson /* Produce assembly code output file */ 77353289f6aSNate Lawson 77453289f6aSNate Lawson Gbl_AsmOutputFlag = TRUE; 77553289f6aSNate Lawson break; 77653289f6aSNate Lawson 77753289f6aSNate Lawson case 'c': 77853289f6aSNate Lawson 77953289f6aSNate Lawson /* Produce C hex output file */ 78053289f6aSNate Lawson 78153289f6aSNate Lawson Gbl_C_OutputFlag = TRUE; 78253289f6aSNate Lawson break; 78353289f6aSNate Lawson 78453289f6aSNate Lawson default: 78553289f6aSNate Lawson printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 786d6dd1baeSJung-uk Kim return (-1); 78753289f6aSNate Lawson } 78853289f6aSNate Lawson break; 78953289f6aSNate Lawson 79053289f6aSNate Lawson 7914c52cad2SJung-uk Kim case 't': /* Produce hex table output file */ 79253289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 79353289f6aSNate Lawson { 79453289f6aSNate Lawson case 'a': 79553289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 79653289f6aSNate Lawson break; 79753289f6aSNate Lawson 79853289f6aSNate Lawson case 'c': 79953289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_C; 80053289f6aSNate Lawson break; 80153289f6aSNate Lawson 8023f5e024cSJung-uk Kim case 's': 8033f5e024cSJung-uk Kim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 8043f5e024cSJung-uk Kim break; 8053f5e024cSJung-uk Kim 80653289f6aSNate Lawson default: 80753289f6aSNate Lawson printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 808d6dd1baeSJung-uk Kim return (-1); 80953289f6aSNate Lawson } 81053289f6aSNate Lawson break; 81153289f6aSNate Lawson 81253289f6aSNate Lawson 8134c52cad2SJung-uk Kim case 'T': /* Create a ACPI table template file */ 814a88e22b7SJung-uk Kim Gbl_DoTemplates = TRUE; 815a88e22b7SJung-uk Kim Gbl_TemplateSignature = AcpiGbl_Optarg; 816a88e22b7SJung-uk Kim break; 817a88e22b7SJung-uk Kim 818a88e22b7SJung-uk Kim 819e8241eabSJung-uk Kim case 'v': /* Version and verbosity settings */ 82053289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 82153289f6aSNate Lawson { 822e8241eabSJung-uk Kim case '^': 823e8241eabSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 824e8241eabSJung-uk Kim exit (0); 825e8241eabSJung-uk Kim 826a9f12690SJung-uk Kim case 'a': 827a9f12690SJung-uk Kim /* Disable All error/warning messages */ 828a9f12690SJung-uk Kim 829a9f12690SJung-uk Kim Gbl_NoErrors = TRUE; 830a9f12690SJung-uk Kim break; 831a9f12690SJung-uk Kim 83253289f6aSNate Lawson case 'i': 833a7a3b383SJung-uk Kim /* 834a7a3b383SJung-uk Kim * Support for integrated development environment(s). 835a7a3b383SJung-uk Kim * 836a7a3b383SJung-uk Kim * 1) No compiler signon 837a7a3b383SJung-uk Kim * 2) Send stderr messages to stdout 838a7a3b383SJung-uk Kim * 3) Less verbose error messages (single line only for each) 839a7a3b383SJung-uk Kim * 4) Error/warning messages are formatted appropriately to 840a7a3b383SJung-uk Kim * be recognized by MS Visual Studio 841a7a3b383SJung-uk Kim */ 84253289f6aSNate Lawson Gbl_VerboseErrors = FALSE; 843a7a3b383SJung-uk Kim Gbl_DoSignon = FALSE; 844a7a3b383SJung-uk Kim Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 84553289f6aSNate Lawson break; 84653289f6aSNate Lawson 84753289f6aSNate Lawson case 'o': 84853289f6aSNate Lawson Gbl_DisplayOptimizations = TRUE; 84953289f6aSNate Lawson break; 85053289f6aSNate Lawson 85153289f6aSNate Lawson case 'r': 85253289f6aSNate Lawson Gbl_DisplayRemarks = FALSE; 85353289f6aSNate Lawson break; 85453289f6aSNate Lawson 85553289f6aSNate Lawson case 's': 856a9f12690SJung-uk Kim Gbl_DoSignon = FALSE; 85753289f6aSNate Lawson break; 85853289f6aSNate Lawson 859a88e22b7SJung-uk Kim case 't': 860a88e22b7SJung-uk Kim Gbl_VerboseTemplates = TRUE; 861a88e22b7SJung-uk Kim break; 862a88e22b7SJung-uk Kim 86353289f6aSNate Lawson default: 86453289f6aSNate Lawson printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 865d6dd1baeSJung-uk Kim return (-1); 86653289f6aSNate Lawson } 86753289f6aSNate Lawson break; 86853289f6aSNate Lawson 86953289f6aSNate Lawson 8701a39cfb0SJung-uk Kim case 'w': /* Set warning levels */ 8711a39cfb0SJung-uk Kim switch (AcpiGbl_Optarg[0]) 8721a39cfb0SJung-uk Kim { 8731a39cfb0SJung-uk Kim case '1': 8741a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING; 8751a39cfb0SJung-uk Kim break; 8761a39cfb0SJung-uk Kim 8771a39cfb0SJung-uk Kim case '2': 8781a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING2; 8791a39cfb0SJung-uk Kim break; 8801a39cfb0SJung-uk Kim 8811a39cfb0SJung-uk Kim case '3': 8821a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING3; 8831a39cfb0SJung-uk Kim break; 8841a39cfb0SJung-uk Kim 885eef1b955SJung-uk Kim case 'e': 886eef1b955SJung-uk Kim Gbl_WarningsAsErrors = TRUE; 887eef1b955SJung-uk Kim break; 888eef1b955SJung-uk Kim 8891a39cfb0SJung-uk Kim default: 8901a39cfb0SJung-uk Kim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 891d6dd1baeSJung-uk Kim return (-1); 8921a39cfb0SJung-uk Kim } 8931a39cfb0SJung-uk Kim break; 8941a39cfb0SJung-uk Kim 8951a39cfb0SJung-uk Kim 8964c52cad2SJung-uk Kim case 'x': /* Set debug print output level */ 89753289f6aSNate Lawson AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 89853289f6aSNate Lawson break; 89953289f6aSNate Lawson 90053289f6aSNate Lawson 901a88e22b7SJung-uk Kim case 'z': 902a88e22b7SJung-uk Kim Gbl_UseOriginalCompilerId = TRUE; 903a88e22b7SJung-uk Kim break; 904a88e22b7SJung-uk Kim 905a88e22b7SJung-uk Kim 90653289f6aSNate Lawson default: 907d6dd1baeSJung-uk Kim return (-1); 90853289f6aSNate Lawson } 90953289f6aSNate Lawson 910d6dd1baeSJung-uk Kim return (0); 911d6dd1baeSJung-uk Kim } 912d6dd1baeSJung-uk Kim 913d6dd1baeSJung-uk Kim 914d6dd1baeSJung-uk Kim /******************************************************************************* 915d6dd1baeSJung-uk Kim * 916d6dd1baeSJung-uk Kim * FUNCTION: AslCommandLine 917d6dd1baeSJung-uk Kim * 918d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv 919d6dd1baeSJung-uk Kim * 920d6dd1baeSJung-uk Kim * RETURN: Last argv index 921d6dd1baeSJung-uk Kim * 922d6dd1baeSJung-uk Kim * DESCRIPTION: Command line processing 923d6dd1baeSJung-uk Kim * 924d6dd1baeSJung-uk Kim ******************************************************************************/ 925d6dd1baeSJung-uk Kim 926d6dd1baeSJung-uk Kim static int 927d6dd1baeSJung-uk Kim AslCommandLine ( 928d6dd1baeSJung-uk Kim int argc, 929d6dd1baeSJung-uk Kim char **argv) 930d6dd1baeSJung-uk Kim { 931d6dd1baeSJung-uk Kim int BadCommandLine = 0; 93242fecd12SJung-uk Kim ACPI_STATUS Status; 933d6dd1baeSJung-uk Kim 934d6dd1baeSJung-uk Kim 935d6dd1baeSJung-uk Kim /* Minimum command line contains at least the command and an input file */ 936d6dd1baeSJung-uk Kim 937d6dd1baeSJung-uk Kim if (argc < 2) 938d6dd1baeSJung-uk Kim { 9393c1812acSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 940d6dd1baeSJung-uk Kim Usage (); 941d6dd1baeSJung-uk Kim exit (1); 942d6dd1baeSJung-uk Kim } 943d6dd1baeSJung-uk Kim 944d6dd1baeSJung-uk Kim /* Process all command line options */ 945d6dd1baeSJung-uk Kim 946d6dd1baeSJung-uk Kim BadCommandLine = AslDoOptions (argc, argv, FALSE); 947d6dd1baeSJung-uk Kim 948a88e22b7SJung-uk Kim if (Gbl_DoTemplates) 949a88e22b7SJung-uk Kim { 95042fecd12SJung-uk Kim Status = DtCreateTemplates (Gbl_TemplateSignature); 95142fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 95242fecd12SJung-uk Kim { 95342fecd12SJung-uk Kim exit (-1); 95442fecd12SJung-uk Kim } 955a88e22b7SJung-uk Kim exit (1); 956a88e22b7SJung-uk Kim } 957a88e22b7SJung-uk Kim 95853289f6aSNate Lawson /* Next parameter must be the input filename */ 95953289f6aSNate Lawson 960a9f12690SJung-uk Kim if (!argv[AcpiGbl_Optind] && 961fba7fc7eSJung-uk Kim !Gbl_DisasmFlag && 962fba7fc7eSJung-uk Kim !Gbl_GetAllTables) 96353289f6aSNate Lawson { 96453289f6aSNate Lawson printf ("Missing input filename\n"); 96553289f6aSNate Lawson BadCommandLine = TRUE; 96653289f6aSNate Lawson } 96753289f6aSNate Lawson 968a9f12690SJung-uk Kim if (Gbl_DoSignon) 96953289f6aSNate Lawson { 9703c1812acSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 971ec3fc72fSJung-uk Kim if (Gbl_IgnoreErrors) 972ec3fc72fSJung-uk Kim { 973ec3fc72fSJung-uk Kim printf ("Ignoring all errors, forcing AML file generation\n\n"); 974ec3fc72fSJung-uk Kim } 97553289f6aSNate Lawson } 97653289f6aSNate Lawson 97753289f6aSNate Lawson /* Abort if anything went wrong on the command line */ 97853289f6aSNate Lawson 97953289f6aSNate Lawson if (BadCommandLine) 98053289f6aSNate Lawson { 98153289f6aSNate Lawson printf ("\n"); 98253289f6aSNate Lawson Usage (); 98353289f6aSNate Lawson exit (1); 98453289f6aSNate Lawson } 98553289f6aSNate Lawson 986a9f12690SJung-uk Kim return (AcpiGbl_Optind); 98753289f6aSNate Lawson } 98853289f6aSNate Lawson 98953289f6aSNate Lawson 99053289f6aSNate Lawson /******************************************************************************* 99153289f6aSNate Lawson * 99253289f6aSNate Lawson * FUNCTION: main 99353289f6aSNate Lawson * 99453289f6aSNate Lawson * PARAMETERS: Standard argc/argv 99553289f6aSNate Lawson * 99653289f6aSNate Lawson * RETURN: Program termination code 99753289f6aSNate Lawson * 99853289f6aSNate Lawson * DESCRIPTION: C main routine for the Asl Compiler. Handle command line 999a9f12690SJung-uk Kim * options and begin the compile for each file on the command line 100053289f6aSNate Lawson * 100153289f6aSNate Lawson ******************************************************************************/ 100253289f6aSNate Lawson 100353289f6aSNate Lawson int ACPI_SYSTEM_XFACE 100453289f6aSNate Lawson main ( 100553289f6aSNate Lawson int argc, 100653289f6aSNate Lawson char **argv) 100753289f6aSNate Lawson { 100853289f6aSNate Lawson ACPI_STATUS Status; 1009709fac06SJung-uk Kim int Index1; 1010709fac06SJung-uk Kim int Index2; 101153289f6aSNate Lawson 101253289f6aSNate Lawson 1013042ff955SJung-uk Kim signal (SIGINT, AslSignalHandler); 1014042ff955SJung-uk Kim 1015709fac06SJung-uk Kim AcpiGbl_ExternalFileList = NULL; 1016042ff955SJung-uk Kim AcpiDbgLevel = 0; 1017709fac06SJung-uk Kim 1018fba7fc7eSJung-uk Kim #ifdef _DEBUG 1019fba7fc7eSJung-uk Kim _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | 1020fba7fc7eSJung-uk Kim _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 1021fba7fc7eSJung-uk Kim #endif 1022fba7fc7eSJung-uk Kim 102353289f6aSNate Lawson /* Init and command line */ 102453289f6aSNate Lawson 1025042ff955SJung-uk Kim Index1 = Index2 = AslCommandLine (argc, argv); 1026042ff955SJung-uk Kim 102753289f6aSNate Lawson AslInitialize (); 10284c52cad2SJung-uk Kim PrInitializePreprocessor (); 102953289f6aSNate Lawson 1030a9f12690SJung-uk Kim /* Options that have no additional parameters or pathnames */ 1031a9f12690SJung-uk Kim 1032a9f12690SJung-uk Kim if (Gbl_GetAllTables) 1033a9f12690SJung-uk Kim { 1034a9f12690SJung-uk Kim Status = AslDoOneFile (NULL); 1035fba7fc7eSJung-uk Kim if (ACPI_FAILURE (Status)) 1036fba7fc7eSJung-uk Kim { 1037a9f12690SJung-uk Kim return (-1); 1038a9f12690SJung-uk Kim } 1039a9f12690SJung-uk Kim return (0); 1040fba7fc7eSJung-uk Kim } 104153289f6aSNate Lawson 1042709fac06SJung-uk Kim if (Gbl_DisassembleAll) 104353289f6aSNate Lawson { 1044709fac06SJung-uk Kim while (argv[Index1]) 1045709fac06SJung-uk Kim { 1046709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index1], AcpiDmAddToExternalFileList); 104753289f6aSNate Lawson if (ACPI_FAILURE (Status)) 104853289f6aSNate Lawson { 1049a9f12690SJung-uk Kim return (-1); 105053289f6aSNate Lawson } 105153289f6aSNate Lawson 1052709fac06SJung-uk Kim Index1++; 1053709fac06SJung-uk Kim } 1054709fac06SJung-uk Kim } 1055709fac06SJung-uk Kim 1056709fac06SJung-uk Kim /* Process each pathname/filename in the list, with possible wildcards */ 1057709fac06SJung-uk Kim 1058709fac06SJung-uk Kim while (argv[Index2]) 1059709fac06SJung-uk Kim { 1060709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index2], AslDoOneFile); 1061709fac06SJung-uk Kim if (ACPI_FAILURE (Status)) 1062709fac06SJung-uk Kim { 1063709fac06SJung-uk Kim return (-1); 1064709fac06SJung-uk Kim } 1065709fac06SJung-uk Kim 1066709fac06SJung-uk Kim Index2++; 1067709fac06SJung-uk Kim } 1068709fac06SJung-uk Kim 1069709fac06SJung-uk Kim if (AcpiGbl_ExternalFileList) 1070709fac06SJung-uk Kim { 1071709fac06SJung-uk Kim AcpiDmClearExternalFileList(); 107253289f6aSNate Lawson } 107353289f6aSNate Lawson 107453289f6aSNate Lawson return (0); 107553289f6aSNate Lawson } 1076