xref: /freebsd/sys/contrib/dev/acpica/compiler/aslmain.c (revision e8241eabbbf83f4cef70bce69981e9215496455a)
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