153289f6aSNate Lawson 253289f6aSNate Lawson /****************************************************************************** 353289f6aSNate Lawson * 453289f6aSNate Lawson * Module Name: aslmain - compiler main and utilities 553289f6aSNate Lawson * 653289f6aSNate Lawson *****************************************************************************/ 753289f6aSNate Lawson 8d244b227SJung-uk Kim /* 9d244b227SJung-uk Kim * Copyright (C) 2000 - 2011, 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 66fba7fc7eSJung-uk Kim HelpMessage ( 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" 99a88e22b7SJung-uk Kim #define ASL_SUPPORTED_OPTIONS "@:2b:c:d^e:fgh^i^I:l^no:p:r:s:t:T: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 119d6dd1baeSJung-uk Kim printf ("Global:\n"); 120d6dd1baeSJung-uk Kim printf (" -@<file> Specify command file\n"); 121d6dd1baeSJung-uk Kim printf (" -I<dir> Specify additional include directory\n"); 122d6dd1baeSJung-uk Kim 123d6dd1baeSJung-uk Kim printf ("\nGeneral Output:\n"); 124a9f12690SJung-uk Kim printf (" -p<prefix> Specify path/filename prefix for all output files\n"); 125a9f12690SJung-uk Kim printf (" -va Disable all errors and warnings (summary only)\n"); 12653289f6aSNate Lawson printf (" -vi Less verbose errors and warnings for use with IDEs\n"); 12753289f6aSNate Lawson printf (" -vo Enable optimization comments\n"); 12853289f6aSNate Lawson printf (" -vr Disable remarks\n"); 12953289f6aSNate Lawson printf (" -vs Disable signon\n"); 1301a39cfb0SJung-uk Kim printf (" -w<1|2|3> Set warning reporting level\n"); 13153289f6aSNate Lawson 132c8466860SMark Santcroos printf ("\nAML Output Files:\n"); 13353289f6aSNate Lawson printf (" -s<a|c> Create AML in assembler or C source file (*.asm or *.c)\n"); 13453289f6aSNate Lawson printf (" -i<a|c> Create assembler or C include file (*.inc or *.h)\n"); 1353f5e024cSJung-uk Kim printf (" -t<a|c|s> Create AML in assembler, C, or ASL hex table (*.hex)\n"); 13653289f6aSNate Lawson 137c8466860SMark Santcroos printf ("\nAML Code Generation:\n"); 13853289f6aSNate Lawson printf (" -oa Disable all optimizations (compatibility mode)\n"); 13953289f6aSNate Lawson printf (" -of Disable constant folding\n"); 14053289f6aSNate Lawson printf (" -oi Disable integer optimization to Zero/One/Ones\n"); 14153289f6aSNate Lawson printf (" -on Disable named reference string optimization\n"); 1423f5e024cSJung-uk Kim printf (" -cr Disable Resource Descriptor error checking\n"); 143c8466860SMark Santcroos printf (" -r<Revision> Override table header Revision (1-255)\n"); 14453289f6aSNate Lawson 14542fecd12SJung-uk Kim printf ("\nASL Listing Files:\n"); 14653289f6aSNate Lawson printf (" -l Create mixed listing file (ASL source and AML) (*.lst)\n"); 14753289f6aSNate Lawson printf (" -ln Create namespace file (*.nsp)\n"); 14853289f6aSNate Lawson printf (" -ls Create combined source file (expanded includes) (*.src)\n"); 14953289f6aSNate Lawson 150a88e22b7SJung-uk Kim printf ("\nACPI Data Tables:\n"); 151*d052a1ccSJung-uk Kim printf (" -T <Sig>|ALL|* Create table template file(s) for <Sig>\n"); 152a88e22b7SJung-uk Kim printf (" -vt Create verbose templates (full disassembly)\n"); 153a88e22b7SJung-uk Kim 15453289f6aSNate Lawson printf ("\nAML Disassembler:\n"); 1551a39cfb0SJung-uk Kim printf (" -d [file] Disassemble or decode binary ACPI table to file (*.dsl)\n"); 156709fac06SJung-uk Kim printf (" -da [f1,f2] Disassemble multiple tables from single namespace\n"); 15753289f6aSNate Lawson printf (" -dc [file] Disassemble AML and immediately compile it\n"); 15853289f6aSNate Lawson printf (" (Obtain DSDT from current system if no input file)\n"); 159a9f12690SJung-uk Kim printf (" -e [f1,f2] Include ACPI table(s) for external symbol resolution\n"); 160fba7fc7eSJung-uk Kim printf (" -2 Emit ACPI 2.0 compatible ASL code\n"); 16153289f6aSNate Lawson printf (" -g Get ACPI tables and write to files (*.dat)\n"); 16253289f6aSNate Lawson 16353289f6aSNate Lawson printf ("\nHelp:\n"); 16453289f6aSNate Lawson printf (" -h Additional help and compiler debug options\n"); 16553289f6aSNate Lawson printf (" -hc Display operators allowed in constant expressions\n"); 16653289f6aSNate Lawson printf (" -hr Display ACPI reserved method names\n"); 167a88e22b7SJung-uk Kim printf (" -ht Display currently supported ACPI table names\n"); 16853289f6aSNate Lawson } 16953289f6aSNate Lawson 17053289f6aSNate Lawson 17153289f6aSNate Lawson /******************************************************************************* 17253289f6aSNate Lawson * 173fba7fc7eSJung-uk Kim * FUNCTION: HelpMessage 17453289f6aSNate Lawson * 17553289f6aSNate Lawson * PARAMETERS: None 17653289f6aSNate Lawson * 17753289f6aSNate Lawson * RETURN: None 17853289f6aSNate Lawson * 17953289f6aSNate Lawson * DESCRIPTION: Display help message 18053289f6aSNate Lawson * 18153289f6aSNate Lawson ******************************************************************************/ 18253289f6aSNate Lawson 183fba7fc7eSJung-uk Kim static void 18453289f6aSNate Lawson HelpMessage ( 18553289f6aSNate Lawson void) 18653289f6aSNate Lawson { 18753289f6aSNate Lawson 18853289f6aSNate Lawson printf ("AML output filename generation:\n"); 18953289f6aSNate Lawson printf (" Output filenames are generated by appending an extension to a common\n"); 19053289f6aSNate Lawson printf (" filename prefix. The filename prefix is obtained via one of the\n"); 19153289f6aSNate Lawson printf (" following methods (in priority order):\n"); 19253289f6aSNate Lawson printf (" 1) The -p option specifies the prefix\n"); 19353289f6aSNate Lawson printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); 19453289f6aSNate Lawson printf (" 3) The prefix of the input filename\n"); 19553289f6aSNate Lawson printf ("\n"); 19653289f6aSNate Lawson 19753289f6aSNate Lawson Options (); 19853289f6aSNate Lawson 1991a39cfb0SJung-uk Kim printf ("\nCompiler/Disassembler Debug Options:\n"); 20053289f6aSNate Lawson printf (" -b<p|t|b> Create compiler debug/trace file (*.txt)\n"); 20153289f6aSNate Lawson printf (" Types: Parse/Tree/Both\n"); 20253289f6aSNate Lawson printf (" -f Ignore errors, force creation of AML output file(s)\n"); 2033f5e024cSJung-uk Kim printf (" -n Parse only, no output generation\n"); 20453289f6aSNate Lawson printf (" -ot Display compile times\n"); 20553289f6aSNate Lawson printf (" -x<level> Set debug level for trace output\n"); 206a88e22b7SJung-uk Kim printf (" -z Do not insert new compiler ID for DataTables\n"); 20753289f6aSNate Lawson } 20853289f6aSNate Lawson 20953289f6aSNate Lawson 21053289f6aSNate Lawson /******************************************************************************* 21153289f6aSNate Lawson * 21253289f6aSNate Lawson * FUNCTION: Usage 21353289f6aSNate Lawson * 21453289f6aSNate Lawson * PARAMETERS: None 21553289f6aSNate Lawson * 21653289f6aSNate Lawson * RETURN: None 21753289f6aSNate Lawson * 21853289f6aSNate Lawson * DESCRIPTION: Display usage and option message 21953289f6aSNate Lawson * 22053289f6aSNate Lawson ******************************************************************************/ 22153289f6aSNate Lawson 222fba7fc7eSJung-uk Kim static void 22353289f6aSNate Lawson Usage ( 22453289f6aSNate Lawson void) 22553289f6aSNate Lawson { 22653289f6aSNate Lawson 2273c1812acSJung-uk Kim printf ("%s\n", ASL_COMPLIANCE); 2283c1812acSJung-uk Kim printf ("Usage: %s [Options] [Files]\n\n", ASL_INVOCATION_NAME); 22953289f6aSNate Lawson Options (); 23053289f6aSNate Lawson } 23153289f6aSNate Lawson 23253289f6aSNate Lawson 23353289f6aSNate Lawson /******************************************************************************* 23453289f6aSNate Lawson * 23553289f6aSNate Lawson * FUNCTION: AslInitialize 23653289f6aSNate Lawson * 23753289f6aSNate Lawson * PARAMETERS: None 23853289f6aSNate Lawson * 23953289f6aSNate Lawson * RETURN: None 24053289f6aSNate Lawson * 24153289f6aSNate Lawson * DESCRIPTION: Initialize compiler globals 24253289f6aSNate Lawson * 24353289f6aSNate Lawson ******************************************************************************/ 24453289f6aSNate Lawson 245fba7fc7eSJung-uk Kim static void 246fba7fc7eSJung-uk Kim AslInitialize ( 247fba7fc7eSJung-uk Kim void) 24853289f6aSNate Lawson { 24953289f6aSNate Lawson UINT32 i; 25053289f6aSNate Lawson 25153289f6aSNate Lawson 25253289f6aSNate Lawson #ifdef _DEBUG 25353289f6aSNate Lawson _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0)); 25453289f6aSNate Lawson #endif 25553289f6aSNate Lawson 25653289f6aSNate Lawson AcpiDbgLevel = 0; 25753289f6aSNate Lawson 25853289f6aSNate Lawson for (i = 0; i < ASL_NUM_FILES; i++) 25953289f6aSNate Lawson { 26053289f6aSNate Lawson Gbl_Files[i].Handle = NULL; 26153289f6aSNate Lawson Gbl_Files[i].Filename = NULL; 26253289f6aSNate Lawson } 26353289f6aSNate Lawson 26453289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Handle = stdout; 26553289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; 26653289f6aSNate Lawson 26753289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Handle = stderr; 26853289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; 26953289f6aSNate Lawson } 27053289f6aSNate Lawson 27153289f6aSNate Lawson 27253289f6aSNate Lawson /******************************************************************************* 27353289f6aSNate Lawson * 274d6dd1baeSJung-uk Kim * FUNCTION: AslMergeOptionTokens 27553289f6aSNate Lawson * 276d6dd1baeSJung-uk Kim * PARAMETERS: InBuffer - Input containing an option string 277d6dd1baeSJung-uk Kim * OutBuffer - Merged output buffer 27853289f6aSNate Lawson * 27953289f6aSNate Lawson * RETURN: None 28053289f6aSNate Lawson * 281d6dd1baeSJung-uk Kim * DESCRIPTION: Remove all whitespace from an option string. 282d6dd1baeSJung-uk Kim * 283d6dd1baeSJung-uk Kim ******************************************************************************/ 284d6dd1baeSJung-uk Kim 285d6dd1baeSJung-uk Kim static void 286d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 287d6dd1baeSJung-uk Kim char *InBuffer, 288d6dd1baeSJung-uk Kim char *OutBuffer) 289d6dd1baeSJung-uk Kim { 290d6dd1baeSJung-uk Kim char *Token; 291d6dd1baeSJung-uk Kim 292d6dd1baeSJung-uk Kim 293d6dd1baeSJung-uk Kim *OutBuffer = 0; 294d6dd1baeSJung-uk Kim 295d6dd1baeSJung-uk Kim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 296d6dd1baeSJung-uk Kim while (Token) 297d6dd1baeSJung-uk Kim { 298d6dd1baeSJung-uk Kim strcat (OutBuffer, Token); 299d6dd1baeSJung-uk Kim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 300d6dd1baeSJung-uk Kim } 301d6dd1baeSJung-uk Kim } 302d6dd1baeSJung-uk Kim 303d6dd1baeSJung-uk Kim 304d6dd1baeSJung-uk Kim /******************************************************************************* 305d6dd1baeSJung-uk Kim * 306d6dd1baeSJung-uk Kim * FUNCTION: AslDoResponseFile 307d6dd1baeSJung-uk Kim * 308d6dd1baeSJung-uk Kim * PARAMETERS: Filename - Name of the response file 309d6dd1baeSJung-uk Kim * 310d6dd1baeSJung-uk Kim * RETURN: Status 311d6dd1baeSJung-uk Kim * 312d6dd1baeSJung-uk Kim * DESCRIPTION: Open a response file and process all options within. 31353289f6aSNate Lawson * 31453289f6aSNate Lawson ******************************************************************************/ 31553289f6aSNate Lawson 316a9f12690SJung-uk Kim static int 317d6dd1baeSJung-uk Kim AslDoResponseFile ( 318d6dd1baeSJung-uk Kim char *Filename) 31953289f6aSNate Lawson { 320d6dd1baeSJung-uk Kim char *argv = StringBuffer2; 321d6dd1baeSJung-uk Kim FILE *ResponseFile; 322d6dd1baeSJung-uk Kim int OptStatus = 0; 323d6dd1baeSJung-uk Kim int Opterr; 324d6dd1baeSJung-uk Kim int Optind; 325d6dd1baeSJung-uk Kim 326d6dd1baeSJung-uk Kim 327d6dd1baeSJung-uk Kim ResponseFile = fopen (Filename, "r"); 328d6dd1baeSJung-uk Kim if (!ResponseFile) 329d6dd1baeSJung-uk Kim { 330d6dd1baeSJung-uk Kim printf ("Could not open command file %s, %s\n", 331d6dd1baeSJung-uk Kim Filename, strerror (errno)); 332d6dd1baeSJung-uk Kim return -1; 333d6dd1baeSJung-uk Kim } 334d6dd1baeSJung-uk Kim 335d6dd1baeSJung-uk Kim /* Must save the current GetOpt globals */ 336d6dd1baeSJung-uk Kim 337d6dd1baeSJung-uk Kim Opterr = AcpiGbl_Opterr; 338d6dd1baeSJung-uk Kim Optind = AcpiGbl_Optind; 339d6dd1baeSJung-uk Kim 340d6dd1baeSJung-uk Kim /* 341d6dd1baeSJung-uk Kim * Process all lines in the response file. There must be one complete 342d6dd1baeSJung-uk Kim * option per line 343d6dd1baeSJung-uk Kim */ 344d6dd1baeSJung-uk Kim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 345d6dd1baeSJung-uk Kim { 346d6dd1baeSJung-uk Kim /* Compress all tokens, allowing us to use a single argv entry */ 347d6dd1baeSJung-uk Kim 348d6dd1baeSJung-uk Kim AslMergeOptionTokens (StringBuffer, StringBuffer2); 349d6dd1baeSJung-uk Kim 350d6dd1baeSJung-uk Kim /* Process the option */ 351d6dd1baeSJung-uk Kim 352d6dd1baeSJung-uk Kim AcpiGbl_Opterr = 0; 353d6dd1baeSJung-uk Kim AcpiGbl_Optind = 0; 354d6dd1baeSJung-uk Kim 355d6dd1baeSJung-uk Kim OptStatus = AslDoOptions (1, &argv, TRUE); 356d6dd1baeSJung-uk Kim if (OptStatus) 357d6dd1baeSJung-uk Kim { 358d6dd1baeSJung-uk Kim printf ("Invalid option in command file %s: %s\n", 359d6dd1baeSJung-uk Kim Filename, StringBuffer); 360d6dd1baeSJung-uk Kim break; 361d6dd1baeSJung-uk Kim } 362d6dd1baeSJung-uk Kim } 363d6dd1baeSJung-uk Kim 364d6dd1baeSJung-uk Kim /* Restore the GetOpt globals */ 365d6dd1baeSJung-uk Kim 366d6dd1baeSJung-uk Kim AcpiGbl_Opterr = Opterr; 367d6dd1baeSJung-uk Kim AcpiGbl_Optind = Optind; 368d6dd1baeSJung-uk Kim 369d6dd1baeSJung-uk Kim fclose (ResponseFile); 370d6dd1baeSJung-uk Kim return (OptStatus); 371d6dd1baeSJung-uk Kim } 372d6dd1baeSJung-uk Kim 373d6dd1baeSJung-uk Kim 374d6dd1baeSJung-uk Kim /******************************************************************************* 375d6dd1baeSJung-uk Kim * 376d6dd1baeSJung-uk Kim * FUNCTION: AslDoOptions 377d6dd1baeSJung-uk Kim * 378d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv - Standard argc/argv 379d6dd1baeSJung-uk Kim * IsResponseFile - TRUE if executing a response file. 380d6dd1baeSJung-uk Kim * 381d6dd1baeSJung-uk Kim * RETURN: Status 382d6dd1baeSJung-uk Kim * 383d6dd1baeSJung-uk Kim * DESCRIPTION: Command line option processing 384d6dd1baeSJung-uk Kim * 385d6dd1baeSJung-uk Kim ******************************************************************************/ 386d6dd1baeSJung-uk Kim 387d6dd1baeSJung-uk Kim static int 388d6dd1baeSJung-uk Kim AslDoOptions ( 389d6dd1baeSJung-uk Kim int argc, 390d6dd1baeSJung-uk Kim char **argv, 391d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile) 392d6dd1baeSJung-uk Kim { 393a9f12690SJung-uk Kim int j; 39442fecd12SJung-uk Kim ACPI_STATUS Status; 39553289f6aSNate Lawson 39653289f6aSNate Lawson 39753289f6aSNate Lawson /* Get the command line options */ 39853289f6aSNate Lawson 399d6dd1baeSJung-uk Kim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 40053289f6aSNate Lawson { 401d6dd1baeSJung-uk Kim case '@': /* Begin a response file */ 402d6dd1baeSJung-uk Kim 403d6dd1baeSJung-uk Kim if (IsResponseFile) 404d6dd1baeSJung-uk Kim { 405d6dd1baeSJung-uk Kim printf ("Nested command files are not supported\n"); 406d6dd1baeSJung-uk Kim return -1; 407d6dd1baeSJung-uk Kim } 408d6dd1baeSJung-uk Kim 409d6dd1baeSJung-uk Kim if (AslDoResponseFile (AcpiGbl_Optarg)) 410d6dd1baeSJung-uk Kim { 411d6dd1baeSJung-uk Kim return -1; 412d6dd1baeSJung-uk Kim } 413d6dd1baeSJung-uk Kim break; 414d6dd1baeSJung-uk Kim 415d6dd1baeSJung-uk Kim 416fba7fc7eSJung-uk Kim case '2': 417d6dd1baeSJung-uk Kim 418fba7fc7eSJung-uk Kim Gbl_Acpi2 = TRUE; 419fba7fc7eSJung-uk Kim break; 420fba7fc7eSJung-uk Kim 421fba7fc7eSJung-uk Kim 42253289f6aSNate Lawson case 'b': 42353289f6aSNate Lawson 42453289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 42553289f6aSNate Lawson { 42653289f6aSNate Lawson case 'b': 42753289f6aSNate Lawson AslCompilerdebug = 1; /* same as yydebug */ 428*d052a1ccSJung-uk Kim DtParserdebug = 1; 42953289f6aSNate Lawson break; 43053289f6aSNate Lawson 43153289f6aSNate Lawson case 'p': 43253289f6aSNate Lawson AslCompilerdebug = 1; /* same as yydebug */ 433*d052a1ccSJung-uk Kim DtParserdebug = 1; 43453289f6aSNate Lawson break; 43553289f6aSNate Lawson 43653289f6aSNate Lawson case 't': 43753289f6aSNate Lawson break; 43853289f6aSNate Lawson 43953289f6aSNate Lawson default: 44053289f6aSNate Lawson printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 441d6dd1baeSJung-uk Kim return (-1); 44253289f6aSNate Lawson } 44353289f6aSNate Lawson 44453289f6aSNate Lawson /* Produce debug output file */ 44553289f6aSNate Lawson 44653289f6aSNate Lawson Gbl_DebugFlag = TRUE; 44753289f6aSNate Lawson break; 44853289f6aSNate Lawson 44953289f6aSNate Lawson 45053289f6aSNate Lawson case 'c': 4513f5e024cSJung-uk Kim switch (AcpiGbl_Optarg[0]) 4523f5e024cSJung-uk Kim { 4533f5e024cSJung-uk Kim case 'r': 4543f5e024cSJung-uk Kim Gbl_NoResourceChecking = TRUE; 4553f5e024cSJung-uk Kim break; 45653289f6aSNate Lawson 4573f5e024cSJung-uk Kim default: 4583f5e024cSJung-uk Kim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 4593f5e024cSJung-uk Kim return (-1); 4603f5e024cSJung-uk Kim } 46153289f6aSNate Lawson break; 46253289f6aSNate Lawson 46353289f6aSNate Lawson 46453289f6aSNate Lawson case 'd': 46553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 46653289f6aSNate Lawson { 46753289f6aSNate Lawson case '^': 468a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 46953289f6aSNate Lawson break; 47053289f6aSNate Lawson 471709fac06SJung-uk Kim case 'a': 472709fac06SJung-uk Kim Gbl_DoCompile = FALSE; 473709fac06SJung-uk Kim Gbl_DisassembleAll = TRUE; 474709fac06SJung-uk Kim break; 475709fac06SJung-uk Kim 47653289f6aSNate Lawson case 'c': 47753289f6aSNate Lawson break; 47853289f6aSNate Lawson 47953289f6aSNate Lawson default: 48053289f6aSNate Lawson printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 481d6dd1baeSJung-uk Kim return (-1); 48253289f6aSNate Lawson } 48353289f6aSNate Lawson 48453289f6aSNate Lawson Gbl_DisasmFlag = TRUE; 48553289f6aSNate Lawson break; 48653289f6aSNate Lawson 48753289f6aSNate Lawson 48853289f6aSNate Lawson case 'e': 48942fecd12SJung-uk Kim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 49042fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 49142fecd12SJung-uk Kim { 49242fecd12SJung-uk Kim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 49342fecd12SJung-uk Kim return (-1); 49442fecd12SJung-uk Kim } 49553289f6aSNate Lawson break; 49653289f6aSNate Lawson 49753289f6aSNate Lawson 49853289f6aSNate Lawson case 'f': 49953289f6aSNate Lawson 50053289f6aSNate Lawson /* Ignore errors and force creation of aml file */ 50153289f6aSNate Lawson 50253289f6aSNate Lawson Gbl_IgnoreErrors = TRUE; 50353289f6aSNate Lawson break; 50453289f6aSNate Lawson 50553289f6aSNate Lawson 50653289f6aSNate Lawson case 'g': 50753289f6aSNate Lawson 50853289f6aSNate Lawson /* Get all ACPI tables */ 50953289f6aSNate Lawson 51053289f6aSNate Lawson Gbl_GetAllTables = TRUE; 511a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 51253289f6aSNate Lawson break; 51353289f6aSNate Lawson 51453289f6aSNate Lawson 51553289f6aSNate Lawson case 'h': 51653289f6aSNate Lawson 51753289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 51853289f6aSNate Lawson { 51953289f6aSNate Lawson case '^': 52053289f6aSNate Lawson HelpMessage (); 52153289f6aSNate Lawson exit (0); 52253289f6aSNate Lawson 52353289f6aSNate Lawson case 'c': 52453289f6aSNate Lawson UtDisplayConstantOpcodes (); 52553289f6aSNate Lawson exit (0); 52653289f6aSNate Lawson 52753289f6aSNate Lawson case 'r': 52853289f6aSNate Lawson /* reserved names */ 52953289f6aSNate Lawson 530ca3cf4faSJung-uk Kim ApDisplayReservedNames (); 53153289f6aSNate Lawson exit (0); 53253289f6aSNate Lawson 533a88e22b7SJung-uk Kim case 't': 534a88e22b7SJung-uk Kim UtDisplaySupportedTables (); 535a88e22b7SJung-uk Kim exit (0); 536a88e22b7SJung-uk Kim 53753289f6aSNate Lawson default: 53853289f6aSNate Lawson printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 539d6dd1baeSJung-uk Kim return (-1); 54053289f6aSNate Lawson } 54153289f6aSNate Lawson 54253289f6aSNate Lawson 543d6dd1baeSJung-uk Kim case 'I': /* Add an include file search directory */ 544d6dd1baeSJung-uk Kim 545d6dd1baeSJung-uk Kim FlAddIncludeDirectory (AcpiGbl_Optarg); 546d6dd1baeSJung-uk Kim break; 547d6dd1baeSJung-uk Kim 548d6dd1baeSJung-uk Kim 54953289f6aSNate Lawson case 'i': 55053289f6aSNate Lawson 55153289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 55253289f6aSNate Lawson { 55353289f6aSNate Lawson case 'a': 55453289f6aSNate Lawson 55553289f6aSNate Lawson /* Produce assembly code include file */ 55653289f6aSNate Lawson 55753289f6aSNate Lawson Gbl_AsmIncludeOutputFlag = TRUE; 55853289f6aSNate Lawson break; 55953289f6aSNate Lawson 56053289f6aSNate Lawson case 'c': 56153289f6aSNate Lawson 56253289f6aSNate Lawson /* Produce C include file */ 56353289f6aSNate Lawson 56453289f6aSNate Lawson Gbl_C_IncludeOutputFlag = TRUE; 56553289f6aSNate Lawson break; 56653289f6aSNate Lawson 56753289f6aSNate Lawson default: 56853289f6aSNate Lawson printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 569d6dd1baeSJung-uk Kim return (-1); 57053289f6aSNate Lawson } 57153289f6aSNate Lawson break; 57253289f6aSNate Lawson 57353289f6aSNate Lawson 57453289f6aSNate Lawson case 'l': 57553289f6aSNate Lawson 57653289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 57753289f6aSNate Lawson { 57853289f6aSNate Lawson case '^': 57953289f6aSNate Lawson /* Produce listing file (Mixed source/aml) */ 58053289f6aSNate Lawson 58153289f6aSNate Lawson Gbl_ListingFlag = TRUE; 58253289f6aSNate Lawson break; 58353289f6aSNate Lawson 58453289f6aSNate Lawson case 'n': 58553289f6aSNate Lawson /* Produce namespace file */ 58653289f6aSNate Lawson 58753289f6aSNate Lawson Gbl_NsOutputFlag = TRUE; 58853289f6aSNate Lawson break; 58953289f6aSNate Lawson 59053289f6aSNate Lawson case 's': 59153289f6aSNate Lawson /* Produce combined source file */ 59253289f6aSNate Lawson 59353289f6aSNate Lawson Gbl_SourceOutputFlag = TRUE; 59453289f6aSNate Lawson break; 59553289f6aSNate Lawson 59653289f6aSNate Lawson default: 59753289f6aSNate Lawson printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 598d6dd1baeSJung-uk Kim return (-1); 59953289f6aSNate Lawson } 60053289f6aSNate Lawson break; 60153289f6aSNate Lawson 60253289f6aSNate Lawson 60353289f6aSNate Lawson case 'o': 60453289f6aSNate Lawson 60553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 60653289f6aSNate Lawson { 60753289f6aSNate Lawson case 'a': 60853289f6aSNate Lawson 60953289f6aSNate Lawson /* Disable all optimizations */ 61053289f6aSNate Lawson 61153289f6aSNate Lawson Gbl_FoldConstants = FALSE; 61253289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 61353289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 61453289f6aSNate Lawson break; 61553289f6aSNate Lawson 61653289f6aSNate Lawson case 'f': 61753289f6aSNate Lawson 61853289f6aSNate Lawson /* Disable folding on "normal" expressions */ 61953289f6aSNate Lawson 62053289f6aSNate Lawson Gbl_FoldConstants = FALSE; 62153289f6aSNate Lawson break; 62253289f6aSNate Lawson 62353289f6aSNate Lawson case 'i': 62453289f6aSNate Lawson 62553289f6aSNate Lawson /* Disable integer optimization to constants */ 62653289f6aSNate Lawson 62753289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 62853289f6aSNate Lawson break; 62953289f6aSNate Lawson 63053289f6aSNate Lawson case 'n': 63153289f6aSNate Lawson 63253289f6aSNate Lawson /* Disable named reference optimization */ 63353289f6aSNate Lawson 63453289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 63553289f6aSNate Lawson break; 63653289f6aSNate Lawson 63753289f6aSNate Lawson case 't': 63853289f6aSNate Lawson 63953289f6aSNate Lawson /* Display compile time(s) */ 64053289f6aSNate Lawson 64153289f6aSNate Lawson Gbl_CompileTimesFlag = TRUE; 64253289f6aSNate Lawson break; 64353289f6aSNate Lawson 64453289f6aSNate Lawson default: 64553289f6aSNate Lawson printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 646d6dd1baeSJung-uk Kim return (-1); 64753289f6aSNate Lawson } 64853289f6aSNate Lawson break; 64953289f6aSNate Lawson 65053289f6aSNate Lawson 6513f5e024cSJung-uk Kim case 'n': 6523f5e024cSJung-uk Kim 6533f5e024cSJung-uk Kim /* Parse only */ 6543f5e024cSJung-uk Kim 6553f5e024cSJung-uk Kim Gbl_ParseOnlyFlag = TRUE; 6563f5e024cSJung-uk Kim break; 6573f5e024cSJung-uk Kim 6583f5e024cSJung-uk Kim 65953289f6aSNate Lawson case 'p': 66053289f6aSNate Lawson 66153289f6aSNate Lawson /* Override default AML output filename */ 66253289f6aSNate Lawson 66353289f6aSNate Lawson Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 66453289f6aSNate Lawson Gbl_UseDefaultAmlFilename = FALSE; 66553289f6aSNate Lawson break; 66653289f6aSNate Lawson 66753289f6aSNate Lawson 66853289f6aSNate Lawson case 'r': 669c8466860SMark Santcroos Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 67053289f6aSNate Lawson break; 67153289f6aSNate Lawson 67253289f6aSNate Lawson 67353289f6aSNate Lawson case 's': 67453289f6aSNate Lawson 67553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 67653289f6aSNate Lawson { 67753289f6aSNate Lawson case 'a': 67853289f6aSNate Lawson 67953289f6aSNate Lawson /* Produce assembly code output file */ 68053289f6aSNate Lawson 68153289f6aSNate Lawson Gbl_AsmOutputFlag = TRUE; 68253289f6aSNate Lawson break; 68353289f6aSNate Lawson 68453289f6aSNate Lawson case 'c': 68553289f6aSNate Lawson 68653289f6aSNate Lawson /* Produce C hex output file */ 68753289f6aSNate Lawson 68853289f6aSNate Lawson Gbl_C_OutputFlag = TRUE; 68953289f6aSNate Lawson break; 69053289f6aSNate Lawson 69153289f6aSNate Lawson default: 69253289f6aSNate Lawson printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 693d6dd1baeSJung-uk Kim return (-1); 69453289f6aSNate Lawson } 69553289f6aSNate Lawson break; 69653289f6aSNate Lawson 69753289f6aSNate Lawson 69853289f6aSNate Lawson case 't': 69953289f6aSNate Lawson 70053289f6aSNate Lawson /* Produce hex table output file */ 70153289f6aSNate Lawson 70253289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 70353289f6aSNate Lawson { 70453289f6aSNate Lawson case 'a': 70553289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 70653289f6aSNate Lawson break; 70753289f6aSNate Lawson 70853289f6aSNate Lawson case 'c': 70953289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_C; 71053289f6aSNate Lawson break; 71153289f6aSNate Lawson 7123f5e024cSJung-uk Kim case 's': 7133f5e024cSJung-uk Kim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 7143f5e024cSJung-uk Kim break; 7153f5e024cSJung-uk Kim 71653289f6aSNate Lawson default: 71753289f6aSNate Lawson printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 718d6dd1baeSJung-uk Kim return (-1); 71953289f6aSNate Lawson } 72053289f6aSNate Lawson break; 72153289f6aSNate Lawson 72253289f6aSNate Lawson 723a88e22b7SJung-uk Kim case 'T': 724a88e22b7SJung-uk Kim Gbl_DoTemplates = TRUE; 725a88e22b7SJung-uk Kim Gbl_TemplateSignature = AcpiGbl_Optarg; 726a88e22b7SJung-uk Kim break; 727a88e22b7SJung-uk Kim 728a88e22b7SJung-uk Kim 72953289f6aSNate Lawson case 'v': 73053289f6aSNate Lawson 73153289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 73253289f6aSNate Lawson { 733a9f12690SJung-uk Kim case 'a': 734a9f12690SJung-uk Kim /* Disable All error/warning messages */ 735a9f12690SJung-uk Kim 736a9f12690SJung-uk Kim Gbl_NoErrors = TRUE; 737a9f12690SJung-uk Kim break; 738a9f12690SJung-uk Kim 73953289f6aSNate Lawson case 'i': 74053289f6aSNate Lawson /* Less verbose error messages */ 74153289f6aSNate Lawson 74253289f6aSNate Lawson Gbl_VerboseErrors = FALSE; 74353289f6aSNate Lawson break; 74453289f6aSNate Lawson 74553289f6aSNate Lawson case 'o': 74653289f6aSNate Lawson Gbl_DisplayOptimizations = TRUE; 74753289f6aSNate Lawson break; 74853289f6aSNate Lawson 74953289f6aSNate Lawson case 'r': 75053289f6aSNate Lawson Gbl_DisplayRemarks = FALSE; 75153289f6aSNate Lawson break; 75253289f6aSNate Lawson 75353289f6aSNate Lawson case 's': 754a9f12690SJung-uk Kim Gbl_DoSignon = FALSE; 75553289f6aSNate Lawson break; 75653289f6aSNate Lawson 757a88e22b7SJung-uk Kim case 't': 758a88e22b7SJung-uk Kim Gbl_VerboseTemplates = TRUE; 759a88e22b7SJung-uk Kim break; 760a88e22b7SJung-uk Kim 76153289f6aSNate Lawson default: 76253289f6aSNate Lawson printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 763d6dd1baeSJung-uk Kim return (-1); 76453289f6aSNate Lawson } 76553289f6aSNate Lawson break; 76653289f6aSNate Lawson 76753289f6aSNate Lawson 7681a39cfb0SJung-uk Kim case 'w': /* Set warning levels */ 7691a39cfb0SJung-uk Kim 7701a39cfb0SJung-uk Kim switch (AcpiGbl_Optarg[0]) 7711a39cfb0SJung-uk Kim { 7721a39cfb0SJung-uk Kim case '1': 7731a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING; 7741a39cfb0SJung-uk Kim break; 7751a39cfb0SJung-uk Kim 7761a39cfb0SJung-uk Kim case '2': 7771a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING2; 7781a39cfb0SJung-uk Kim break; 7791a39cfb0SJung-uk Kim 7801a39cfb0SJung-uk Kim case '3': 7811a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING3; 7821a39cfb0SJung-uk Kim break; 7831a39cfb0SJung-uk Kim 7841a39cfb0SJung-uk Kim default: 7851a39cfb0SJung-uk Kim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 786d6dd1baeSJung-uk Kim return (-1); 7871a39cfb0SJung-uk Kim } 7881a39cfb0SJung-uk Kim break; 7891a39cfb0SJung-uk Kim 7901a39cfb0SJung-uk Kim 79153289f6aSNate Lawson case 'x': 79253289f6aSNate Lawson 79353289f6aSNate Lawson AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 79453289f6aSNate Lawson break; 79553289f6aSNate Lawson 79653289f6aSNate Lawson 797a88e22b7SJung-uk Kim case 'z': 798a88e22b7SJung-uk Kim 799a88e22b7SJung-uk Kim Gbl_UseOriginalCompilerId = TRUE; 800a88e22b7SJung-uk Kim break; 801a88e22b7SJung-uk Kim 802a88e22b7SJung-uk Kim 80353289f6aSNate Lawson default: 80453289f6aSNate Lawson 805d6dd1baeSJung-uk Kim return (-1); 80653289f6aSNate Lawson } 80753289f6aSNate Lawson 808d6dd1baeSJung-uk Kim return (0); 809d6dd1baeSJung-uk Kim } 810d6dd1baeSJung-uk Kim 811d6dd1baeSJung-uk Kim 812d6dd1baeSJung-uk Kim /******************************************************************************* 813d6dd1baeSJung-uk Kim * 814d6dd1baeSJung-uk Kim * FUNCTION: AslCommandLine 815d6dd1baeSJung-uk Kim * 816d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv 817d6dd1baeSJung-uk Kim * 818d6dd1baeSJung-uk Kim * RETURN: Last argv index 819d6dd1baeSJung-uk Kim * 820d6dd1baeSJung-uk Kim * DESCRIPTION: Command line processing 821d6dd1baeSJung-uk Kim * 822d6dd1baeSJung-uk Kim ******************************************************************************/ 823d6dd1baeSJung-uk Kim 824d6dd1baeSJung-uk Kim static int 825d6dd1baeSJung-uk Kim AslCommandLine ( 826d6dd1baeSJung-uk Kim int argc, 827d6dd1baeSJung-uk Kim char **argv) 828d6dd1baeSJung-uk Kim { 829d6dd1baeSJung-uk Kim int BadCommandLine = 0; 83042fecd12SJung-uk Kim ACPI_STATUS Status; 831d6dd1baeSJung-uk Kim 832d6dd1baeSJung-uk Kim 833d6dd1baeSJung-uk Kim /* Minimum command line contains at least the command and an input file */ 834d6dd1baeSJung-uk Kim 835d6dd1baeSJung-uk Kim if (argc < 2) 836d6dd1baeSJung-uk Kim { 8373c1812acSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 838d6dd1baeSJung-uk Kim Usage (); 839d6dd1baeSJung-uk Kim exit (1); 840d6dd1baeSJung-uk Kim } 841d6dd1baeSJung-uk Kim 842d6dd1baeSJung-uk Kim /* Process all command line options */ 843d6dd1baeSJung-uk Kim 844d6dd1baeSJung-uk Kim BadCommandLine = AslDoOptions (argc, argv, FALSE); 845d6dd1baeSJung-uk Kim 846a88e22b7SJung-uk Kim if (Gbl_DoTemplates) 847a88e22b7SJung-uk Kim { 84842fecd12SJung-uk Kim Status = DtCreateTemplates (Gbl_TemplateSignature); 84942fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 85042fecd12SJung-uk Kim { 85142fecd12SJung-uk Kim exit (-1); 85242fecd12SJung-uk Kim } 853a88e22b7SJung-uk Kim exit (1); 854a88e22b7SJung-uk Kim } 855a88e22b7SJung-uk Kim 85653289f6aSNate Lawson /* Next parameter must be the input filename */ 85753289f6aSNate Lawson 858a9f12690SJung-uk Kim if (!argv[AcpiGbl_Optind] && 859fba7fc7eSJung-uk Kim !Gbl_DisasmFlag && 860fba7fc7eSJung-uk Kim !Gbl_GetAllTables) 86153289f6aSNate Lawson { 86253289f6aSNate Lawson printf ("Missing input filename\n"); 86353289f6aSNate Lawson BadCommandLine = TRUE; 86453289f6aSNate Lawson } 86553289f6aSNate Lawson 866a9f12690SJung-uk Kim if (Gbl_DoSignon) 86753289f6aSNate Lawson { 8683c1812acSJung-uk Kim printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 86953289f6aSNate Lawson } 87053289f6aSNate Lawson 87153289f6aSNate Lawson /* Abort if anything went wrong on the command line */ 87253289f6aSNate Lawson 87353289f6aSNate Lawson if (BadCommandLine) 87453289f6aSNate Lawson { 87553289f6aSNate Lawson printf ("\n"); 87653289f6aSNate Lawson Usage (); 87753289f6aSNate Lawson exit (1); 87853289f6aSNate Lawson } 87953289f6aSNate Lawson 880a9f12690SJung-uk Kim return (AcpiGbl_Optind); 88153289f6aSNate Lawson } 88253289f6aSNate Lawson 88353289f6aSNate Lawson 88453289f6aSNate Lawson /******************************************************************************* 88553289f6aSNate Lawson * 88653289f6aSNate Lawson * FUNCTION: main 88753289f6aSNate Lawson * 88853289f6aSNate Lawson * PARAMETERS: Standard argc/argv 88953289f6aSNate Lawson * 89053289f6aSNate Lawson * RETURN: Program termination code 89153289f6aSNate Lawson * 89253289f6aSNate Lawson * DESCRIPTION: C main routine for the Asl Compiler. Handle command line 893a9f12690SJung-uk Kim * options and begin the compile for each file on the command line 89453289f6aSNate Lawson * 89553289f6aSNate Lawson ******************************************************************************/ 89653289f6aSNate Lawson 89753289f6aSNate Lawson int ACPI_SYSTEM_XFACE 89853289f6aSNate Lawson main ( 89953289f6aSNate Lawson int argc, 90053289f6aSNate Lawson char **argv) 90153289f6aSNate Lawson { 90253289f6aSNate Lawson ACPI_STATUS Status; 903709fac06SJung-uk Kim int Index1; 904709fac06SJung-uk Kim int Index2; 90553289f6aSNate Lawson 90653289f6aSNate Lawson 907709fac06SJung-uk Kim AcpiGbl_ExternalFileList = NULL; 908709fac06SJung-uk Kim 909fba7fc7eSJung-uk Kim #ifdef _DEBUG 910fba7fc7eSJung-uk Kim _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | 911fba7fc7eSJung-uk Kim _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 912fba7fc7eSJung-uk Kim #endif 913fba7fc7eSJung-uk Kim 91453289f6aSNate Lawson /* Init and command line */ 91553289f6aSNate Lawson 91653289f6aSNate Lawson AslInitialize (); 917709fac06SJung-uk Kim Index1 = Index2 = AslCommandLine (argc, argv); 91853289f6aSNate Lawson 919a9f12690SJung-uk Kim /* Options that have no additional parameters or pathnames */ 920a9f12690SJung-uk Kim 921a9f12690SJung-uk Kim if (Gbl_GetAllTables) 922a9f12690SJung-uk Kim { 923a9f12690SJung-uk Kim Status = AslDoOneFile (NULL); 924fba7fc7eSJung-uk Kim if (ACPI_FAILURE (Status)) 925fba7fc7eSJung-uk Kim { 926a9f12690SJung-uk Kim return (-1); 927a9f12690SJung-uk Kim } 928a9f12690SJung-uk Kim return (0); 929fba7fc7eSJung-uk Kim } 93053289f6aSNate Lawson 931709fac06SJung-uk Kim if (Gbl_DisassembleAll) 93253289f6aSNate Lawson { 933709fac06SJung-uk Kim while (argv[Index1]) 934709fac06SJung-uk Kim { 935709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index1], AcpiDmAddToExternalFileList); 93653289f6aSNate Lawson if (ACPI_FAILURE (Status)) 93753289f6aSNate Lawson { 938a9f12690SJung-uk Kim return (-1); 93953289f6aSNate Lawson } 94053289f6aSNate Lawson 941709fac06SJung-uk Kim Index1++; 942709fac06SJung-uk Kim } 943709fac06SJung-uk Kim } 944709fac06SJung-uk Kim 945709fac06SJung-uk Kim /* Process each pathname/filename in the list, with possible wildcards */ 946709fac06SJung-uk Kim 947709fac06SJung-uk Kim while (argv[Index2]) 948709fac06SJung-uk Kim { 949709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index2], AslDoOneFile); 950709fac06SJung-uk Kim if (ACPI_FAILURE (Status)) 951709fac06SJung-uk Kim { 952709fac06SJung-uk Kim return (-1); 953709fac06SJung-uk Kim } 954709fac06SJung-uk Kim 955709fac06SJung-uk Kim Index2++; 956709fac06SJung-uk Kim } 957709fac06SJung-uk Kim 958709fac06SJung-uk Kim if (AcpiGbl_ExternalFileList) 959709fac06SJung-uk Kim { 960709fac06SJung-uk Kim AcpiDmClearExternalFileList(); 96153289f6aSNate Lawson } 96253289f6aSNate Lawson 96353289f6aSNate Lawson return (0); 96453289f6aSNate Lawson } 96553289f6aSNate Lawson 96653289f6aSNate Lawson 967