xref: /freebsd/sys/contrib/dev/acpica/compiler/aslmain.c (revision 3f0275a0331d5d477f9d8dc5accbba3533ac4cbf)
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"
99*3f0275a0SJung-uk Kim #define ASL_SUPPORTED_OPTIONS   "@:2b:c:d^e:fgh^i^I:l^mno: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 
119*3f0275a0SJung-uk Kim     printf ("\nGlobal:\n");
120*3f0275a0SJung-uk Kim     ACPI_OPTION ("-@ <file>",       "Specify command file");
121*3f0275a0SJung-uk Kim     ACPI_OPTION ("-I <dir>",        "Specify additional include directory");
122d6dd1baeSJung-uk Kim 
123d6dd1baeSJung-uk Kim     printf ("\nGeneral Output:\n");
124*3f0275a0SJung-uk Kim     ACPI_OPTION ("-p <prefix>",     "Specify path/filename prefix for all output files");
125*3f0275a0SJung-uk Kim     ACPI_OPTION ("-va",             "Disable all errors and warnings (summary only)");
126*3f0275a0SJung-uk Kim     ACPI_OPTION ("-vi",             "Less verbose errors and warnings for use with IDEs");
127*3f0275a0SJung-uk Kim     ACPI_OPTION ("-vo",             "Enable optimization comments");
128*3f0275a0SJung-uk Kim     ACPI_OPTION ("-vr",             "Disable remarks");
129*3f0275a0SJung-uk Kim     ACPI_OPTION ("-vs",             "Disable signon");
130*3f0275a0SJung-uk Kim     ACPI_OPTION ("-w <1|2|3>",      "Set warning reporting level");
13153289f6aSNate Lawson 
132c8466860SMark Santcroos     printf ("\nAML Output Files:\n");
133*3f0275a0SJung-uk Kim     ACPI_OPTION ("-s <a|c>",        "Create AML in assembler or C source file (*.asm or *.c)");
134*3f0275a0SJung-uk Kim     ACPI_OPTION ("-i <a|c>",        "Create assembler or C include file (*.inc or *.h)");
135*3f0275a0SJung-uk Kim     ACPI_OPTION ("-t <a|c|s>",      "Create AML in assembler, C, or ASL hex table (*.hex)");
13653289f6aSNate Lawson 
137c8466860SMark Santcroos     printf ("\nAML Code Generation:\n");
138*3f0275a0SJung-uk Kim     ACPI_OPTION ("-oa",             "Disable all optimizations (compatibility mode)");
139*3f0275a0SJung-uk Kim     ACPI_OPTION ("-of",             "Disable constant folding");
140*3f0275a0SJung-uk Kim     ACPI_OPTION ("-oi",             "Disable integer optimization to Zero/One/Ones");
141*3f0275a0SJung-uk Kim     ACPI_OPTION ("-on",             "Disable named reference string optimization");
142*3f0275a0SJung-uk Kim     ACPI_OPTION ("-cr",             "Disable Resource Descriptor error checking");
143*3f0275a0SJung-uk Kim     ACPI_OPTION ("-r <revision>",   "Override table header Revision (1-255)");
14453289f6aSNate Lawson 
14542fecd12SJung-uk Kim     printf ("\nASL Listing Files:\n");
146*3f0275a0SJung-uk Kim     ACPI_OPTION ("-l",              "Create mixed listing file (ASL source and AML) (*.lst)");
147*3f0275a0SJung-uk Kim     ACPI_OPTION ("-ln",             "Create namespace file (*.nsp)");
148*3f0275a0SJung-uk Kim     ACPI_OPTION ("-ls",             "Create combined source file (expanded includes) (*.src)");
14953289f6aSNate Lawson 
150a88e22b7SJung-uk Kim     printf ("\nACPI Data Tables:\n");
151*3f0275a0SJung-uk Kim     ACPI_OPTION ("-G",              "Compile custom table containing generic operators");
152*3f0275a0SJung-uk Kim     ACPI_OPTION ("-T <sig>|ALL|*",  "Create table template file(s) for <Sig>");
153*3f0275a0SJung-uk Kim     ACPI_OPTION ("-vt",             "Create verbose templates (full disassembly)");
154a88e22b7SJung-uk Kim 
15553289f6aSNate Lawson     printf ("\nAML Disassembler:\n");
156*3f0275a0SJung-uk Kim     ACPI_OPTION ("-d  [file]",      "Disassemble or decode binary ACPI table to file (*.dsl)");
157*3f0275a0SJung-uk Kim     ACPI_OPTION ("-da [f1,f2]",     "Disassemble multiple tables from single namespace");
158*3f0275a0SJung-uk Kim     ACPI_OPTION ("-dc [file]",      "Disassemble AML and immediately compile it");
159*3f0275a0SJung-uk Kim     ACPI_OPTION ("",                "(Obtain DSDT from current system if no input file)");
160*3f0275a0SJung-uk Kim     ACPI_OPTION ("-e  [f1,f2]",     "Include ACPI table(s) for external symbol resolution");
161*3f0275a0SJung-uk Kim     ACPI_OPTION ("-m",              "Do not translate Buffers to Resource Templates");
162*3f0275a0SJung-uk Kim     ACPI_OPTION ("-2",              "Emit ACPI 2.0 compatible ASL code");
163*3f0275a0SJung-uk Kim     ACPI_OPTION ("-g",              "Get ACPI tables and write to files (*.dat)");
16453289f6aSNate Lawson 
16553289f6aSNate Lawson     printf ("\nHelp:\n");
166*3f0275a0SJung-uk Kim     ACPI_OPTION ("-h",              "Additional help and compiler debug options");
167*3f0275a0SJung-uk Kim     ACPI_OPTION ("-hc",             "Display operators allowed in constant expressions");
168*3f0275a0SJung-uk Kim     ACPI_OPTION ("-hr",             "Display ACPI reserved method names");
169*3f0275a0SJung-uk Kim     ACPI_OPTION ("-ht",             "Display currently supported ACPI table names");
17053289f6aSNate Lawson }
17153289f6aSNate Lawson 
17253289f6aSNate Lawson 
17353289f6aSNate Lawson /*******************************************************************************
17453289f6aSNate Lawson  *
175fba7fc7eSJung-uk Kim  * FUNCTION:    HelpMessage
17653289f6aSNate Lawson  *
17753289f6aSNate Lawson  * PARAMETERS:  None
17853289f6aSNate Lawson  *
17953289f6aSNate Lawson  * RETURN:      None
18053289f6aSNate Lawson  *
18153289f6aSNate Lawson  * DESCRIPTION: Display help message
18253289f6aSNate Lawson  *
18353289f6aSNate Lawson  ******************************************************************************/
18453289f6aSNate Lawson 
185fba7fc7eSJung-uk Kim static void
18653289f6aSNate Lawson HelpMessage (
18753289f6aSNate Lawson     void)
18853289f6aSNate Lawson {
18953289f6aSNate Lawson 
190*3f0275a0SJung-uk Kim     printf ("\nAML output filename generation:\n");
19153289f6aSNate Lawson     printf ("  Output filenames are generated by appending an extension to a common\n");
19253289f6aSNate Lawson     printf ("  filename prefix.  The filename prefix is obtained via one of the\n");
19353289f6aSNate Lawson     printf ("  following methods (in priority order):\n");
19453289f6aSNate Lawson     printf ("    1) The -p option specifies the prefix\n");
19553289f6aSNate Lawson     printf ("    2) The prefix of the AMLFileName in the ASL Definition Block\n");
19653289f6aSNate Lawson     printf ("    3) The prefix of the input filename\n");
19753289f6aSNate Lawson     printf ("\n");
19853289f6aSNate Lawson 
19953289f6aSNate Lawson     Options ();
20053289f6aSNate Lawson 
2011a39cfb0SJung-uk Kim     printf ("\nCompiler/Disassembler Debug Options:\n");
202*3f0275a0SJung-uk Kim     ACPI_OPTION ("-b<p|t|b>",       "Create compiler debug/trace file (*.txt)");
203*3f0275a0SJung-uk Kim     ACPI_OPTION ("",                "Types: Parse/Tree/Both");
204*3f0275a0SJung-uk Kim     ACPI_OPTION ("-f",              "Ignore errors, force creation of AML output file(s)");
205*3f0275a0SJung-uk Kim     ACPI_OPTION ("-n",              "Parse only, no output generation");
206*3f0275a0SJung-uk Kim     ACPI_OPTION ("-ot",             "Display compile times");
207*3f0275a0SJung-uk Kim     ACPI_OPTION ("-x<level>",       "Set debug level for trace output");
208*3f0275a0SJung-uk Kim     ACPI_OPTION ("-z",              "Do not insert new compiler ID for DataTables");
20953289f6aSNate Lawson }
21053289f6aSNate Lawson 
21153289f6aSNate Lawson 
21253289f6aSNate Lawson /*******************************************************************************
21353289f6aSNate Lawson  *
21453289f6aSNate Lawson  * FUNCTION:    Usage
21553289f6aSNate Lawson  *
21653289f6aSNate Lawson  * PARAMETERS:  None
21753289f6aSNate Lawson  *
21853289f6aSNate Lawson  * RETURN:      None
21953289f6aSNate Lawson  *
22053289f6aSNate Lawson  * DESCRIPTION: Display usage and option message
22153289f6aSNate Lawson  *
22253289f6aSNate Lawson  ******************************************************************************/
22353289f6aSNate Lawson 
224fba7fc7eSJung-uk Kim static void
22553289f6aSNate Lawson Usage (
22653289f6aSNate Lawson     void)
22753289f6aSNate Lawson {
22853289f6aSNate Lawson 
229*3f0275a0SJung-uk Kim     printf ("%s\n\n", ASL_COMPLIANCE);
230*3f0275a0SJung-uk Kim     ACPI_USAGE_HEADER ("iasl [Options] [Files]");
23153289f6aSNate Lawson     Options ();
23253289f6aSNate Lawson }
23353289f6aSNate Lawson 
23453289f6aSNate Lawson 
23553289f6aSNate Lawson /*******************************************************************************
23653289f6aSNate Lawson  *
23753289f6aSNate Lawson  * FUNCTION:    AslInitialize
23853289f6aSNate Lawson  *
23953289f6aSNate Lawson  * PARAMETERS:  None
24053289f6aSNate Lawson  *
24153289f6aSNate Lawson  * RETURN:      None
24253289f6aSNate Lawson  *
24353289f6aSNate Lawson  * DESCRIPTION: Initialize compiler globals
24453289f6aSNate Lawson  *
24553289f6aSNate Lawson  ******************************************************************************/
24653289f6aSNate Lawson 
247fba7fc7eSJung-uk Kim static void
248fba7fc7eSJung-uk Kim AslInitialize (
249fba7fc7eSJung-uk Kim     void)
25053289f6aSNate Lawson {
25153289f6aSNate Lawson     UINT32                  i;
25253289f6aSNate Lawson 
25353289f6aSNate Lawson 
25453289f6aSNate Lawson #ifdef _DEBUG
25553289f6aSNate Lawson     _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0));
25653289f6aSNate Lawson #endif
25753289f6aSNate Lawson 
25853289f6aSNate Lawson     AcpiDbgLevel = 0;
25953289f6aSNate Lawson 
26053289f6aSNate Lawson     for (i = 0; i < ASL_NUM_FILES; i++)
26153289f6aSNate Lawson     {
26253289f6aSNate Lawson         Gbl_Files[i].Handle = NULL;
26353289f6aSNate Lawson         Gbl_Files[i].Filename = NULL;
26453289f6aSNate Lawson     }
26553289f6aSNate Lawson 
26653289f6aSNate Lawson     Gbl_Files[ASL_FILE_STDOUT].Handle   = stdout;
26753289f6aSNate Lawson     Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT";
26853289f6aSNate Lawson 
26953289f6aSNate Lawson     Gbl_Files[ASL_FILE_STDERR].Handle   = stderr;
27053289f6aSNate Lawson     Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR";
27153289f6aSNate Lawson }
27253289f6aSNate Lawson 
27353289f6aSNate Lawson 
27453289f6aSNate Lawson /*******************************************************************************
27553289f6aSNate Lawson  *
276d6dd1baeSJung-uk Kim  * FUNCTION:    AslMergeOptionTokens
27753289f6aSNate Lawson  *
278d6dd1baeSJung-uk Kim  * PARAMETERS:  InBuffer            - Input containing an option string
279d6dd1baeSJung-uk Kim  *              OutBuffer           - Merged output buffer
28053289f6aSNate Lawson  *
28153289f6aSNate Lawson  * RETURN:      None
28253289f6aSNate Lawson  *
283d6dd1baeSJung-uk Kim  * DESCRIPTION: Remove all whitespace from an option string.
284d6dd1baeSJung-uk Kim  *
285d6dd1baeSJung-uk Kim  ******************************************************************************/
286d6dd1baeSJung-uk Kim 
287d6dd1baeSJung-uk Kim static void
288d6dd1baeSJung-uk Kim AslMergeOptionTokens (
289d6dd1baeSJung-uk Kim     char                    *InBuffer,
290d6dd1baeSJung-uk Kim     char                    *OutBuffer)
291d6dd1baeSJung-uk Kim {
292d6dd1baeSJung-uk Kim     char                    *Token;
293d6dd1baeSJung-uk Kim 
294d6dd1baeSJung-uk Kim 
295d6dd1baeSJung-uk Kim     *OutBuffer = 0;
296d6dd1baeSJung-uk Kim 
297d6dd1baeSJung-uk Kim     Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
298d6dd1baeSJung-uk Kim     while (Token)
299d6dd1baeSJung-uk Kim     {
300d6dd1baeSJung-uk Kim         strcat (OutBuffer, Token);
301d6dd1baeSJung-uk Kim         Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
302d6dd1baeSJung-uk Kim     }
303d6dd1baeSJung-uk Kim }
304d6dd1baeSJung-uk Kim 
305d6dd1baeSJung-uk Kim 
306d6dd1baeSJung-uk Kim /*******************************************************************************
307d6dd1baeSJung-uk Kim  *
308d6dd1baeSJung-uk Kim  * FUNCTION:    AslDoResponseFile
309d6dd1baeSJung-uk Kim  *
310d6dd1baeSJung-uk Kim  * PARAMETERS:  Filename        - Name of the response file
311d6dd1baeSJung-uk Kim  *
312d6dd1baeSJung-uk Kim  * RETURN:      Status
313d6dd1baeSJung-uk Kim  *
314d6dd1baeSJung-uk Kim  * DESCRIPTION: Open a response file and process all options within.
31553289f6aSNate Lawson  *
31653289f6aSNate Lawson  ******************************************************************************/
31753289f6aSNate Lawson 
318a9f12690SJung-uk Kim static int
319d6dd1baeSJung-uk Kim AslDoResponseFile (
320d6dd1baeSJung-uk Kim     char                    *Filename)
32153289f6aSNate Lawson {
322d6dd1baeSJung-uk Kim     char                    *argv = StringBuffer2;
323d6dd1baeSJung-uk Kim     FILE                    *ResponseFile;
324d6dd1baeSJung-uk Kim     int                     OptStatus = 0;
325d6dd1baeSJung-uk Kim     int                     Opterr;
326d6dd1baeSJung-uk Kim     int                     Optind;
327d6dd1baeSJung-uk Kim 
328d6dd1baeSJung-uk Kim 
329d6dd1baeSJung-uk Kim     ResponseFile = fopen (Filename, "r");
330d6dd1baeSJung-uk Kim     if (!ResponseFile)
331d6dd1baeSJung-uk Kim     {
332d6dd1baeSJung-uk Kim         printf ("Could not open command file %s, %s\n",
333d6dd1baeSJung-uk Kim             Filename, strerror (errno));
334d6dd1baeSJung-uk Kim         return -1;
335d6dd1baeSJung-uk Kim     }
336d6dd1baeSJung-uk Kim 
337d6dd1baeSJung-uk Kim     /* Must save the current GetOpt globals */
338d6dd1baeSJung-uk Kim 
339d6dd1baeSJung-uk Kim     Opterr = AcpiGbl_Opterr;
340d6dd1baeSJung-uk Kim     Optind = AcpiGbl_Optind;
341d6dd1baeSJung-uk Kim 
342d6dd1baeSJung-uk Kim     /*
343d6dd1baeSJung-uk Kim      * Process all lines in the response file. There must be one complete
344d6dd1baeSJung-uk Kim      * option per line
345d6dd1baeSJung-uk Kim      */
346d6dd1baeSJung-uk Kim     while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile))
347d6dd1baeSJung-uk Kim     {
348d6dd1baeSJung-uk Kim         /* Compress all tokens, allowing us to use a single argv entry */
349d6dd1baeSJung-uk Kim 
350d6dd1baeSJung-uk Kim         AslMergeOptionTokens (StringBuffer, StringBuffer2);
351d6dd1baeSJung-uk Kim 
352d6dd1baeSJung-uk Kim         /* Process the option */
353d6dd1baeSJung-uk Kim 
354d6dd1baeSJung-uk Kim         AcpiGbl_Opterr = 0;
355d6dd1baeSJung-uk Kim         AcpiGbl_Optind = 0;
356d6dd1baeSJung-uk Kim 
357d6dd1baeSJung-uk Kim         OptStatus = AslDoOptions (1, &argv, TRUE);
358d6dd1baeSJung-uk Kim         if (OptStatus)
359d6dd1baeSJung-uk Kim         {
360d6dd1baeSJung-uk Kim             printf ("Invalid option in command file %s: %s\n",
361d6dd1baeSJung-uk Kim                 Filename, StringBuffer);
362d6dd1baeSJung-uk Kim             break;
363d6dd1baeSJung-uk Kim         }
364d6dd1baeSJung-uk Kim     }
365d6dd1baeSJung-uk Kim 
366d6dd1baeSJung-uk Kim     /* Restore the GetOpt globals */
367d6dd1baeSJung-uk Kim 
368d6dd1baeSJung-uk Kim     AcpiGbl_Opterr = Opterr;
369d6dd1baeSJung-uk Kim     AcpiGbl_Optind = Optind;
370d6dd1baeSJung-uk Kim 
371d6dd1baeSJung-uk Kim     fclose (ResponseFile);
372d6dd1baeSJung-uk Kim     return (OptStatus);
373d6dd1baeSJung-uk Kim }
374d6dd1baeSJung-uk Kim 
375d6dd1baeSJung-uk Kim 
376d6dd1baeSJung-uk Kim /*******************************************************************************
377d6dd1baeSJung-uk Kim  *
378d6dd1baeSJung-uk Kim  * FUNCTION:    AslDoOptions
379d6dd1baeSJung-uk Kim  *
380d6dd1baeSJung-uk Kim  * PARAMETERS:  argc/argv           - Standard argc/argv
381d6dd1baeSJung-uk Kim  *              IsResponseFile      - TRUE if executing a response file.
382d6dd1baeSJung-uk Kim  *
383d6dd1baeSJung-uk Kim  * RETURN:      Status
384d6dd1baeSJung-uk Kim  *
385d6dd1baeSJung-uk Kim  * DESCRIPTION: Command line option processing
386d6dd1baeSJung-uk Kim  *
387d6dd1baeSJung-uk Kim  ******************************************************************************/
388d6dd1baeSJung-uk Kim 
389d6dd1baeSJung-uk Kim static int
390d6dd1baeSJung-uk Kim AslDoOptions (
391d6dd1baeSJung-uk Kim     int                     argc,
392d6dd1baeSJung-uk Kim     char                    **argv,
393d6dd1baeSJung-uk Kim     BOOLEAN                 IsResponseFile)
394d6dd1baeSJung-uk Kim {
395a9f12690SJung-uk Kim     int                     j;
39642fecd12SJung-uk Kim     ACPI_STATUS             Status;
39753289f6aSNate Lawson 
39853289f6aSNate Lawson 
39953289f6aSNate Lawson     /* Get the command line options */
40053289f6aSNate Lawson 
401d6dd1baeSJung-uk Kim     while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
40253289f6aSNate Lawson     {
403d6dd1baeSJung-uk Kim     case '@':   /* Begin a response file */
404d6dd1baeSJung-uk Kim 
405d6dd1baeSJung-uk Kim         if (IsResponseFile)
406d6dd1baeSJung-uk Kim         {
407d6dd1baeSJung-uk Kim             printf ("Nested command files are not supported\n");
408d6dd1baeSJung-uk Kim             return -1;
409d6dd1baeSJung-uk Kim         }
410d6dd1baeSJung-uk Kim 
411d6dd1baeSJung-uk Kim         if (AslDoResponseFile (AcpiGbl_Optarg))
412d6dd1baeSJung-uk Kim         {
413d6dd1baeSJung-uk Kim             return -1;
414d6dd1baeSJung-uk Kim         }
415d6dd1baeSJung-uk Kim         break;
416d6dd1baeSJung-uk Kim 
417d6dd1baeSJung-uk Kim 
418fba7fc7eSJung-uk Kim     case '2':
419d6dd1baeSJung-uk Kim 
420fba7fc7eSJung-uk Kim         Gbl_Acpi2 = TRUE;
421fba7fc7eSJung-uk Kim         break;
422fba7fc7eSJung-uk Kim 
423fba7fc7eSJung-uk Kim 
42453289f6aSNate Lawson     case 'b':
42553289f6aSNate Lawson 
42653289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
42753289f6aSNate Lawson         {
42853289f6aSNate Lawson         case 'b':
42953289f6aSNate Lawson             AslCompilerdebug = 1; /* same as yydebug */
430d052a1ccSJung-uk Kim             DtParserdebug = 1;
43153289f6aSNate Lawson             break;
43253289f6aSNate Lawson 
43353289f6aSNate Lawson         case 'p':
43453289f6aSNate Lawson             AslCompilerdebug = 1; /* same as yydebug */
435d052a1ccSJung-uk Kim             DtParserdebug = 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 
46653289f6aSNate Lawson     case 'd':
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 
49053289f6aSNate Lawson     case 'e':
49142fecd12SJung-uk Kim         Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg);
49242fecd12SJung-uk Kim         if (ACPI_FAILURE (Status))
49342fecd12SJung-uk Kim         {
49442fecd12SJung-uk Kim             printf ("Could not add %s to external list\n", AcpiGbl_Optarg);
49542fecd12SJung-uk Kim             return (-1);
49642fecd12SJung-uk Kim         }
49753289f6aSNate Lawson         break;
49853289f6aSNate Lawson 
49953289f6aSNate Lawson 
50053289f6aSNate Lawson     case 'f':
50153289f6aSNate Lawson 
50253289f6aSNate Lawson         /* Ignore errors and force creation of aml file */
50353289f6aSNate Lawson 
50453289f6aSNate Lawson         Gbl_IgnoreErrors = TRUE;
50553289f6aSNate Lawson         break;
50653289f6aSNate Lawson 
50753289f6aSNate Lawson 
50853289f6aSNate Lawson     case 'g':
50953289f6aSNate Lawson 
51053289f6aSNate Lawson         /* Get all ACPI tables */
51153289f6aSNate Lawson 
51253289f6aSNate Lawson         Gbl_GetAllTables = TRUE;
513a9f12690SJung-uk Kim         Gbl_DoCompile = FALSE;
51453289f6aSNate Lawson         break;
51553289f6aSNate Lawson 
51653289f6aSNate Lawson 
51753289f6aSNate Lawson     case 'h':
51853289f6aSNate Lawson 
51953289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
52053289f6aSNate Lawson         {
52153289f6aSNate Lawson         case '^':
52253289f6aSNate Lawson             HelpMessage ();
52353289f6aSNate Lawson             exit (0);
52453289f6aSNate Lawson 
52553289f6aSNate Lawson         case 'c':
52653289f6aSNate Lawson             UtDisplayConstantOpcodes ();
52753289f6aSNate Lawson             exit (0);
52853289f6aSNate Lawson 
52953289f6aSNate Lawson         case 'r':
53053289f6aSNate Lawson             /* reserved names */
53153289f6aSNate Lawson 
532ca3cf4faSJung-uk Kim             ApDisplayReservedNames ();
53353289f6aSNate Lawson             exit (0);
53453289f6aSNate Lawson 
535a88e22b7SJung-uk Kim         case 't':
536a88e22b7SJung-uk Kim             UtDisplaySupportedTables ();
537a88e22b7SJung-uk Kim             exit (0);
538a88e22b7SJung-uk Kim 
53953289f6aSNate Lawson         default:
54053289f6aSNate Lawson             printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
541d6dd1baeSJung-uk Kim             return (-1);
54253289f6aSNate Lawson         }
54353289f6aSNate Lawson 
54453289f6aSNate Lawson 
545d6dd1baeSJung-uk Kim     case 'I': /* Add an include file search directory */
546d6dd1baeSJung-uk Kim 
547d6dd1baeSJung-uk Kim         FlAddIncludeDirectory (AcpiGbl_Optarg);
548d6dd1baeSJung-uk Kim         break;
549d6dd1baeSJung-uk Kim 
550d6dd1baeSJung-uk Kim 
55153289f6aSNate Lawson     case 'i':
55253289f6aSNate Lawson 
55353289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
55453289f6aSNate Lawson         {
55553289f6aSNate Lawson         case 'a':
55653289f6aSNate Lawson 
55753289f6aSNate Lawson             /* Produce assembly code include file */
55853289f6aSNate Lawson 
55953289f6aSNate Lawson             Gbl_AsmIncludeOutputFlag = TRUE;
56053289f6aSNate Lawson             break;
56153289f6aSNate Lawson 
56253289f6aSNate Lawson         case 'c':
56353289f6aSNate Lawson 
56453289f6aSNate Lawson             /* Produce C include file */
56553289f6aSNate Lawson 
56653289f6aSNate Lawson             Gbl_C_IncludeOutputFlag = TRUE;
56753289f6aSNate Lawson             break;
56853289f6aSNate Lawson 
56953289f6aSNate Lawson         default:
57053289f6aSNate Lawson             printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
571d6dd1baeSJung-uk Kim             return (-1);
57253289f6aSNate Lawson         }
57353289f6aSNate Lawson         break;
57453289f6aSNate Lawson 
57553289f6aSNate Lawson 
57653289f6aSNate Lawson     case 'l':
57753289f6aSNate Lawson 
57853289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
57953289f6aSNate Lawson         {
58053289f6aSNate Lawson         case '^':
58153289f6aSNate Lawson             /* Produce listing file (Mixed source/aml) */
58253289f6aSNate Lawson 
58353289f6aSNate Lawson             Gbl_ListingFlag = TRUE;
58453289f6aSNate Lawson             break;
58553289f6aSNate Lawson 
58653289f6aSNate Lawson         case 'n':
58753289f6aSNate Lawson             /* Produce namespace file */
58853289f6aSNate Lawson 
58953289f6aSNate Lawson             Gbl_NsOutputFlag = TRUE;
59053289f6aSNate Lawson             break;
59153289f6aSNate Lawson 
59253289f6aSNate Lawson         case 's':
59353289f6aSNate Lawson             /* Produce combined source file */
59453289f6aSNate Lawson 
59553289f6aSNate Lawson             Gbl_SourceOutputFlag = TRUE;
59653289f6aSNate Lawson             break;
59753289f6aSNate Lawson 
59853289f6aSNate Lawson         default:
59953289f6aSNate Lawson             printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
600d6dd1baeSJung-uk Kim             return (-1);
60153289f6aSNate Lawson         }
60253289f6aSNate Lawson         break;
60353289f6aSNate Lawson 
60453289f6aSNate Lawson 
605*3f0275a0SJung-uk Kim     case 'm':
606*3f0275a0SJung-uk Kim 
607*3f0275a0SJung-uk Kim         AcpiGbl_NoResourceDisassembly = TRUE;
608*3f0275a0SJung-uk Kim         break;
609*3f0275a0SJung-uk Kim 
610*3f0275a0SJung-uk Kim 
611*3f0275a0SJung-uk Kim     case 'n':
612*3f0275a0SJung-uk Kim 
613*3f0275a0SJung-uk Kim         /* Parse only */
614*3f0275a0SJung-uk Kim 
615*3f0275a0SJung-uk Kim         Gbl_ParseOnlyFlag = TRUE;
616*3f0275a0SJung-uk Kim         break;
617*3f0275a0SJung-uk Kim 
618*3f0275a0SJung-uk Kim 
61953289f6aSNate Lawson     case 'o':
62053289f6aSNate Lawson 
62153289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
62253289f6aSNate Lawson         {
62353289f6aSNate Lawson         case 'a':
62453289f6aSNate Lawson 
62553289f6aSNate Lawson             /* Disable all optimizations */
62653289f6aSNate Lawson 
62753289f6aSNate Lawson             Gbl_FoldConstants = FALSE;
62853289f6aSNate Lawson             Gbl_IntegerOptimizationFlag = FALSE;
62953289f6aSNate Lawson             Gbl_ReferenceOptimizationFlag = FALSE;
63053289f6aSNate Lawson             break;
63153289f6aSNate Lawson 
63253289f6aSNate Lawson         case 'f':
63353289f6aSNate Lawson 
63453289f6aSNate Lawson             /* Disable folding on "normal" expressions */
63553289f6aSNate Lawson 
63653289f6aSNate Lawson             Gbl_FoldConstants = FALSE;
63753289f6aSNate Lawson             break;
63853289f6aSNate Lawson 
63953289f6aSNate Lawson         case 'i':
64053289f6aSNate Lawson 
64153289f6aSNate Lawson             /* Disable integer optimization to constants */
64253289f6aSNate Lawson 
64353289f6aSNate Lawson             Gbl_IntegerOptimizationFlag = FALSE;
64453289f6aSNate Lawson             break;
64553289f6aSNate Lawson 
64653289f6aSNate Lawson         case 'n':
64753289f6aSNate Lawson 
64853289f6aSNate Lawson             /* Disable named reference optimization */
64953289f6aSNate Lawson 
65053289f6aSNate Lawson             Gbl_ReferenceOptimizationFlag = FALSE;
65153289f6aSNate Lawson             break;
65253289f6aSNate Lawson 
65353289f6aSNate Lawson         case 't':
65453289f6aSNate Lawson 
65553289f6aSNate Lawson             /* Display compile time(s) */
65653289f6aSNate Lawson 
65753289f6aSNate Lawson             Gbl_CompileTimesFlag = TRUE;
65853289f6aSNate Lawson             break;
65953289f6aSNate Lawson 
66053289f6aSNate Lawson         default:
66153289f6aSNate Lawson             printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
662d6dd1baeSJung-uk Kim             return (-1);
66353289f6aSNate Lawson         }
66453289f6aSNate Lawson         break;
66553289f6aSNate Lawson 
66653289f6aSNate Lawson 
66753289f6aSNate Lawson     case 'p':
66853289f6aSNate Lawson 
66953289f6aSNate Lawson         /* Override default AML output filename */
67053289f6aSNate Lawson 
67153289f6aSNate Lawson         Gbl_OutputFilenamePrefix = AcpiGbl_Optarg;
67253289f6aSNate Lawson         Gbl_UseDefaultAmlFilename = FALSE;
67353289f6aSNate Lawson         break;
67453289f6aSNate Lawson 
67553289f6aSNate Lawson 
67653289f6aSNate Lawson     case 'r':
677c8466860SMark Santcroos         Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
67853289f6aSNate Lawson         break;
67953289f6aSNate Lawson 
68053289f6aSNate Lawson 
68153289f6aSNate Lawson     case 's':
68253289f6aSNate Lawson 
68353289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
68453289f6aSNate Lawson         {
68553289f6aSNate Lawson         case 'a':
68653289f6aSNate Lawson 
68753289f6aSNate Lawson             /* Produce assembly code output file */
68853289f6aSNate Lawson 
68953289f6aSNate Lawson             Gbl_AsmOutputFlag = TRUE;
69053289f6aSNate Lawson             break;
69153289f6aSNate Lawson 
69253289f6aSNate Lawson         case 'c':
69353289f6aSNate Lawson 
69453289f6aSNate Lawson             /* Produce C hex output file */
69553289f6aSNate Lawson 
69653289f6aSNate Lawson             Gbl_C_OutputFlag = TRUE;
69753289f6aSNate Lawson             break;
69853289f6aSNate Lawson 
69953289f6aSNate Lawson         default:
70053289f6aSNate Lawson             printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
701d6dd1baeSJung-uk Kim             return (-1);
70253289f6aSNate Lawson         }
70353289f6aSNate Lawson         break;
70453289f6aSNate Lawson 
70553289f6aSNate Lawson 
70653289f6aSNate Lawson     case 't':
70753289f6aSNate Lawson 
70853289f6aSNate Lawson         /* Produce hex table output file */
70953289f6aSNate Lawson 
71053289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
71153289f6aSNate Lawson         {
71253289f6aSNate Lawson         case 'a':
71353289f6aSNate Lawson             Gbl_HexOutputFlag = HEX_OUTPUT_ASM;
71453289f6aSNate Lawson             break;
71553289f6aSNate Lawson 
71653289f6aSNate Lawson         case 'c':
71753289f6aSNate Lawson             Gbl_HexOutputFlag = HEX_OUTPUT_C;
71853289f6aSNate Lawson             break;
71953289f6aSNate Lawson 
7203f5e024cSJung-uk Kim         case 's':
7213f5e024cSJung-uk Kim             Gbl_HexOutputFlag = HEX_OUTPUT_ASL;
7223f5e024cSJung-uk Kim             break;
7233f5e024cSJung-uk Kim 
72453289f6aSNate Lawson         default:
72553289f6aSNate Lawson             printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
726d6dd1baeSJung-uk Kim             return (-1);
72753289f6aSNate Lawson         }
72853289f6aSNate Lawson         break;
72953289f6aSNate Lawson 
73053289f6aSNate Lawson 
731*3f0275a0SJung-uk Kim     case 'G':
732*3f0275a0SJung-uk Kim         Gbl_CompileGeneric = TRUE;
733*3f0275a0SJung-uk Kim         break;
734*3f0275a0SJung-uk Kim 
735*3f0275a0SJung-uk Kim 
736a88e22b7SJung-uk Kim     case 'T':
737a88e22b7SJung-uk Kim         Gbl_DoTemplates = TRUE;
738a88e22b7SJung-uk Kim         Gbl_TemplateSignature = AcpiGbl_Optarg;
739a88e22b7SJung-uk Kim         break;
740a88e22b7SJung-uk Kim 
741a88e22b7SJung-uk Kim 
74253289f6aSNate Lawson     case 'v':
74353289f6aSNate Lawson 
74453289f6aSNate Lawson         switch (AcpiGbl_Optarg[0])
74553289f6aSNate Lawson         {
746a9f12690SJung-uk Kim         case 'a':
747a9f12690SJung-uk Kim             /* Disable All error/warning messages */
748a9f12690SJung-uk Kim 
749a9f12690SJung-uk Kim             Gbl_NoErrors = TRUE;
750a9f12690SJung-uk Kim             break;
751a9f12690SJung-uk Kim 
75253289f6aSNate Lawson         case 'i':
75353289f6aSNate Lawson             /* Less verbose error messages */
75453289f6aSNate Lawson 
75553289f6aSNate Lawson             Gbl_VerboseErrors = FALSE;
75653289f6aSNate Lawson             break;
75753289f6aSNate Lawson 
75853289f6aSNate Lawson         case 'o':
75953289f6aSNate Lawson             Gbl_DisplayOptimizations = TRUE;
76053289f6aSNate Lawson             break;
76153289f6aSNate Lawson 
76253289f6aSNate Lawson         case 'r':
76353289f6aSNate Lawson             Gbl_DisplayRemarks = FALSE;
76453289f6aSNate Lawson             break;
76553289f6aSNate Lawson 
76653289f6aSNate Lawson         case 's':
767a9f12690SJung-uk Kim             Gbl_DoSignon = FALSE;
76853289f6aSNate Lawson             break;
76953289f6aSNate Lawson 
770a88e22b7SJung-uk Kim         case 't':
771a88e22b7SJung-uk Kim             Gbl_VerboseTemplates = TRUE;
772a88e22b7SJung-uk Kim             break;
773a88e22b7SJung-uk Kim 
77453289f6aSNate Lawson         default:
77553289f6aSNate Lawson             printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
776d6dd1baeSJung-uk Kim             return (-1);
77753289f6aSNate Lawson         }
77853289f6aSNate Lawson         break;
77953289f6aSNate Lawson 
78053289f6aSNate Lawson 
7811a39cfb0SJung-uk Kim     case 'w': /* Set warning levels */
7821a39cfb0SJung-uk Kim 
7831a39cfb0SJung-uk Kim         switch (AcpiGbl_Optarg[0])
7841a39cfb0SJung-uk Kim         {
7851a39cfb0SJung-uk Kim         case '1':
7861a39cfb0SJung-uk Kim             Gbl_WarningLevel = ASL_WARNING;
7871a39cfb0SJung-uk Kim             break;
7881a39cfb0SJung-uk Kim 
7891a39cfb0SJung-uk Kim         case '2':
7901a39cfb0SJung-uk Kim             Gbl_WarningLevel = ASL_WARNING2;
7911a39cfb0SJung-uk Kim             break;
7921a39cfb0SJung-uk Kim 
7931a39cfb0SJung-uk Kim         case '3':
7941a39cfb0SJung-uk Kim             Gbl_WarningLevel = ASL_WARNING3;
7951a39cfb0SJung-uk Kim             break;
7961a39cfb0SJung-uk Kim 
7971a39cfb0SJung-uk Kim         default:
7981a39cfb0SJung-uk Kim             printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
799d6dd1baeSJung-uk Kim             return (-1);
8001a39cfb0SJung-uk Kim         }
8011a39cfb0SJung-uk Kim         break;
8021a39cfb0SJung-uk Kim 
8031a39cfb0SJung-uk Kim 
80453289f6aSNate Lawson     case 'x':
80553289f6aSNate Lawson 
80653289f6aSNate Lawson         AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
80753289f6aSNate Lawson         break;
80853289f6aSNate Lawson 
80953289f6aSNate Lawson 
810a88e22b7SJung-uk Kim     case 'z':
811a88e22b7SJung-uk Kim 
812a88e22b7SJung-uk Kim         Gbl_UseOriginalCompilerId = TRUE;
813a88e22b7SJung-uk Kim         break;
814a88e22b7SJung-uk Kim 
815a88e22b7SJung-uk Kim 
81653289f6aSNate Lawson     default:
81753289f6aSNate Lawson 
818d6dd1baeSJung-uk Kim         return (-1);
81953289f6aSNate Lawson     }
82053289f6aSNate Lawson 
821d6dd1baeSJung-uk Kim     return (0);
822d6dd1baeSJung-uk Kim }
823d6dd1baeSJung-uk Kim 
824d6dd1baeSJung-uk Kim 
825d6dd1baeSJung-uk Kim /*******************************************************************************
826d6dd1baeSJung-uk Kim  *
827d6dd1baeSJung-uk Kim  * FUNCTION:    AslCommandLine
828d6dd1baeSJung-uk Kim  *
829d6dd1baeSJung-uk Kim  * PARAMETERS:  argc/argv
830d6dd1baeSJung-uk Kim  *
831d6dd1baeSJung-uk Kim  * RETURN:      Last argv index
832d6dd1baeSJung-uk Kim  *
833d6dd1baeSJung-uk Kim  * DESCRIPTION: Command line processing
834d6dd1baeSJung-uk Kim  *
835d6dd1baeSJung-uk Kim  ******************************************************************************/
836d6dd1baeSJung-uk Kim 
837d6dd1baeSJung-uk Kim static int
838d6dd1baeSJung-uk Kim AslCommandLine (
839d6dd1baeSJung-uk Kim     int                     argc,
840d6dd1baeSJung-uk Kim     char                    **argv)
841d6dd1baeSJung-uk Kim {
842d6dd1baeSJung-uk Kim     int                     BadCommandLine = 0;
84342fecd12SJung-uk Kim     ACPI_STATUS             Status;
844d6dd1baeSJung-uk Kim 
845d6dd1baeSJung-uk Kim 
846d6dd1baeSJung-uk Kim     /* Minimum command line contains at least the command and an input file */
847d6dd1baeSJung-uk Kim 
848d6dd1baeSJung-uk Kim     if (argc < 2)
849d6dd1baeSJung-uk Kim     {
8503c1812acSJung-uk Kim         printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
851d6dd1baeSJung-uk Kim         Usage ();
852d6dd1baeSJung-uk Kim         exit (1);
853d6dd1baeSJung-uk Kim     }
854d6dd1baeSJung-uk Kim 
855d6dd1baeSJung-uk Kim     /* Process all command line options */
856d6dd1baeSJung-uk Kim 
857d6dd1baeSJung-uk Kim     BadCommandLine = AslDoOptions (argc, argv, FALSE);
858d6dd1baeSJung-uk Kim 
859a88e22b7SJung-uk Kim     if (Gbl_DoTemplates)
860a88e22b7SJung-uk Kim     {
86142fecd12SJung-uk Kim         Status = DtCreateTemplates (Gbl_TemplateSignature);
86242fecd12SJung-uk Kim         if (ACPI_FAILURE (Status))
86342fecd12SJung-uk Kim         {
86442fecd12SJung-uk Kim             exit (-1);
86542fecd12SJung-uk Kim         }
866a88e22b7SJung-uk Kim         exit (1);
867a88e22b7SJung-uk Kim     }
868a88e22b7SJung-uk Kim 
86953289f6aSNate Lawson     /* Next parameter must be the input filename */
87053289f6aSNate Lawson 
871a9f12690SJung-uk Kim     if (!argv[AcpiGbl_Optind] &&
872fba7fc7eSJung-uk Kim         !Gbl_DisasmFlag &&
873fba7fc7eSJung-uk Kim         !Gbl_GetAllTables)
87453289f6aSNate Lawson     {
87553289f6aSNate Lawson         printf ("Missing input filename\n");
87653289f6aSNate Lawson         BadCommandLine = TRUE;
87753289f6aSNate Lawson     }
87853289f6aSNate Lawson 
879a9f12690SJung-uk Kim     if (Gbl_DoSignon)
88053289f6aSNate Lawson     {
8813c1812acSJung-uk Kim         printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
88253289f6aSNate Lawson     }
88353289f6aSNate Lawson 
88453289f6aSNate Lawson     /* Abort if anything went wrong on the command line */
88553289f6aSNate Lawson 
88653289f6aSNate Lawson     if (BadCommandLine)
88753289f6aSNate Lawson     {
88853289f6aSNate Lawson         printf ("\n");
88953289f6aSNate Lawson         Usage ();
89053289f6aSNate Lawson         exit (1);
89153289f6aSNate Lawson     }
89253289f6aSNate Lawson 
893a9f12690SJung-uk Kim     return (AcpiGbl_Optind);
89453289f6aSNate Lawson }
89553289f6aSNate Lawson 
89653289f6aSNate Lawson 
89753289f6aSNate Lawson /*******************************************************************************
89853289f6aSNate Lawson  *
89953289f6aSNate Lawson  * FUNCTION:    main
90053289f6aSNate Lawson  *
90153289f6aSNate Lawson  * PARAMETERS:  Standard argc/argv
90253289f6aSNate Lawson  *
90353289f6aSNate Lawson  * RETURN:      Program termination code
90453289f6aSNate Lawson  *
90553289f6aSNate Lawson  * DESCRIPTION: C main routine for the Asl Compiler. Handle command line
906a9f12690SJung-uk Kim  *              options and begin the compile for each file on the command line
90753289f6aSNate Lawson  *
90853289f6aSNate Lawson  ******************************************************************************/
90953289f6aSNate Lawson 
91053289f6aSNate Lawson int ACPI_SYSTEM_XFACE
91153289f6aSNate Lawson main (
91253289f6aSNate Lawson     int                     argc,
91353289f6aSNate Lawson     char                    **argv)
91453289f6aSNate Lawson {
91553289f6aSNate Lawson     ACPI_STATUS             Status;
916709fac06SJung-uk Kim     int                     Index1;
917709fac06SJung-uk Kim     int                     Index2;
91853289f6aSNate Lawson 
91953289f6aSNate Lawson 
920709fac06SJung-uk Kim     AcpiGbl_ExternalFileList = NULL;
921709fac06SJung-uk Kim 
922fba7fc7eSJung-uk Kim #ifdef _DEBUG
923fba7fc7eSJung-uk Kim     _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF |
924fba7fc7eSJung-uk Kim                     _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
925fba7fc7eSJung-uk Kim #endif
926fba7fc7eSJung-uk Kim 
92753289f6aSNate Lawson     /* Init and command line */
92853289f6aSNate Lawson 
92953289f6aSNate Lawson     AslInitialize ();
930709fac06SJung-uk Kim     Index1 = Index2 = AslCommandLine (argc, argv);
93153289f6aSNate Lawson 
932a9f12690SJung-uk Kim     /* Options that have no additional parameters or pathnames */
933a9f12690SJung-uk Kim 
934a9f12690SJung-uk Kim     if (Gbl_GetAllTables)
935a9f12690SJung-uk Kim     {
936a9f12690SJung-uk Kim         Status = AslDoOneFile (NULL);
937fba7fc7eSJung-uk Kim         if (ACPI_FAILURE (Status))
938fba7fc7eSJung-uk Kim         {
939a9f12690SJung-uk Kim             return (-1);
940a9f12690SJung-uk Kim         }
941a9f12690SJung-uk Kim         return (0);
942fba7fc7eSJung-uk Kim     }
94353289f6aSNate Lawson 
944709fac06SJung-uk Kim     if (Gbl_DisassembleAll)
94553289f6aSNate Lawson     {
946709fac06SJung-uk Kim         while (argv[Index1])
947709fac06SJung-uk Kim         {
948709fac06SJung-uk Kim             Status = AslDoOnePathname (argv[Index1], AcpiDmAddToExternalFileList);
94953289f6aSNate Lawson             if (ACPI_FAILURE (Status))
95053289f6aSNate Lawson             {
951a9f12690SJung-uk Kim                 return (-1);
95253289f6aSNate Lawson             }
95353289f6aSNate Lawson 
954709fac06SJung-uk Kim             Index1++;
955709fac06SJung-uk Kim         }
956709fac06SJung-uk Kim     }
957709fac06SJung-uk Kim 
958709fac06SJung-uk Kim     /* Process each pathname/filename in the list, with possible wildcards */
959709fac06SJung-uk Kim 
960709fac06SJung-uk Kim     while (argv[Index2])
961709fac06SJung-uk Kim     {
962709fac06SJung-uk Kim         Status = AslDoOnePathname (argv[Index2], AslDoOneFile);
963709fac06SJung-uk Kim         if (ACPI_FAILURE (Status))
964709fac06SJung-uk Kim         {
965709fac06SJung-uk Kim             return (-1);
966709fac06SJung-uk Kim         }
967709fac06SJung-uk Kim 
968709fac06SJung-uk Kim         Index2++;
969709fac06SJung-uk Kim     }
970709fac06SJung-uk Kim 
971709fac06SJung-uk Kim     if (AcpiGbl_ExternalFileList)
972709fac06SJung-uk Kim     {
973709fac06SJung-uk Kim         AcpiDmClearExternalFileList();
97453289f6aSNate Lawson     }
97553289f6aSNate Lawson 
97653289f6aSNate Lawson     return (0);
97753289f6aSNate Lawson }
97853289f6aSNate Lawson 
97953289f6aSNate Lawson 
980