1#
2# iASL compiler/disassembler
3#
4
5#
6# Note: This makefile is intended to be used from within the native
7# ACPICA directory structure, from under generate/unix. It specifically
8# places all object files in a generate/unix subdirectory, not within
9# the various ACPICA source directories. This prevents collisions
10# between different compilations of the same source file with different
11# compile options, and prevents pollution of the source code.
12#
13include ../Makefile.config
14FINAL_PROG = ../$(BINDIR)/iasl
15PROG = $(OBJDIR)/iasl
16
17#
18# Search paths for source files
19#
20vpath %.c \
21    $(ASL_COMPILER)\
22    $(ACPICA_DEBUGGER)\
23    $(ACPICA_DISASSEMBLER)\
24    $(ACPICA_DISPATCHER)\
25    $(ACPICA_EXECUTER)\
26    $(ACPICA_NAMESPACE)\
27    $(ACPICA_PARSER)\
28    $(ACPICA_TABLES)\
29    $(ACPICA_UTILITIES)\
30    $(ACPICA_COMMON)\
31    $(ACPICA_OSL)
32
33HEADERS = \
34    $(wildcard $(ASL_COMPILER)/*.h)\
35    $(OBJDIR)/aslcompiler.y.h\
36    $(OBJDIR)/dtcompilerparser.y.h\
37    $(OBJDIR)/dtparser.y.h\
38    $(OBJDIR)/prparser.y.h
39
40OBJECTS = \
41          $(OBJDIR)/aslcompilerlex.o\
42          $(OBJDIR)/aslcompilerparse.o\
43          $(OBJDIR)/dtcompilerparserlex.o\
44          $(OBJDIR)/dtcompilerparserparse.o\
45          $(OBJDIR)/dtparserlex.o\
46          $(OBJDIR)/dtparserparse.o\
47          $(OBJDIR)/prparserlex.o\
48          $(OBJDIR)/prparserparse.o\
49          $(OBJDIR)/acfileio.o\
50          $(OBJDIR)/adfile.o\
51          $(OBJDIR)/adisasm.o\
52          $(OBJDIR)/adwalk.o\
53          $(OBJDIR)/ahids.o\
54          $(OBJDIR)/ahpredef.o\
55          $(OBJDIR)/ahtable.o\
56          $(OBJDIR)/ahuuids.o\
57          $(OBJDIR)/aslallocate.o\
58          $(OBJDIR)/aslanalyze.o\
59          $(OBJDIR)/aslascii.o\
60          $(OBJDIR)/aslbtypes.o\
61          $(OBJDIR)/aslcache.o\
62          $(OBJDIR)/aslcodegen.o\
63          $(OBJDIR)/aslcompile.o\
64          $(OBJDIR)/asldebug.o\
65          $(OBJDIR)/aslerror.o\
66          $(OBJDIR)/aslexternal.o\
67          $(OBJDIR)/aslfiles.o\
68          $(OBJDIR)/aslfileio.o\
69          $(OBJDIR)/aslfold.o\
70          $(OBJDIR)/aslhelp.o\
71          $(OBJDIR)/aslhex.o\
72          $(OBJDIR)/asllength.o\
73          $(OBJDIR)/asllisting.o\
74          $(OBJDIR)/asllistsup.o\
75          $(OBJDIR)/aslload.o\
76          $(OBJDIR)/asllookup.o\
77          $(OBJDIR)/aslmain.o\
78          $(OBJDIR)/aslmap.o\
79          $(OBJDIR)/aslmapenter.o\
80          $(OBJDIR)/aslmapoutput.o\
81          $(OBJDIR)/aslmaputils.o\
82          $(OBJDIR)/aslmessages.o\
83          $(OBJDIR)/aslmethod.o\
84          $(OBJDIR)/aslnamesp.o\
85          $(OBJDIR)/asloffset.o\
86          $(OBJDIR)/aslopcodes.o\
87          $(OBJDIR)/asloperands.o\
88          $(OBJDIR)/aslopt.o\
89          $(OBJDIR)/asloptions.o\
90          $(OBJDIR)/aslparseop.o\
91          $(OBJDIR)/aslpredef.o\
92          $(OBJDIR)/aslprepkg.o\
93          $(OBJDIR)/aslprintf.o\
94          $(OBJDIR)/aslprune.o\
95          $(OBJDIR)/aslresource.o\
96          $(OBJDIR)/aslrestype1.o\
97          $(OBJDIR)/aslrestype1i.o\
98          $(OBJDIR)/aslrestype2.o\
99          $(OBJDIR)/aslrestype2d.o\
100          $(OBJDIR)/aslrestype2e.o\
101          $(OBJDIR)/aslrestype2q.o\
102          $(OBJDIR)/aslrestype2s.o\
103          $(OBJDIR)/aslrestype2w.o\
104          $(OBJDIR)/aslstartup.o\
105          $(OBJDIR)/aslstubs.o\
106          $(OBJDIR)/aslpld.o\
107          $(OBJDIR)/asltransform.o\
108          $(OBJDIR)/asltree.o\
109          $(OBJDIR)/aslutils.o\
110          $(OBJDIR)/asluuid.o\
111          $(OBJDIR)/aslwalks.o\
112          $(OBJDIR)/aslxref.o\
113          $(OBJDIR)/aslxrefout.o\
114          $(OBJDIR)/cvcompiler.o\
115          $(OBJDIR)/cvdisasm.o\
116          $(OBJDIR)/cvparser.o\
117          $(OBJDIR)/cmfsize.o\
118          $(OBJDIR)/dbfileio.o\
119          $(OBJDIR)/dmbuffer.o\
120          $(OBJDIR)/dmcstyle.o\
121          $(OBJDIR)/dmdeferred.o\
122          $(OBJDIR)/dmextern.o\
123          $(OBJDIR)/dmnames.o\
124          $(OBJDIR)/dmopcode.o\
125          $(OBJDIR)/dmresrc.o\
126          $(OBJDIR)/dmresrcl.o\
127          $(OBJDIR)/dmresrcl2.o\
128          $(OBJDIR)/dmresrcs.o\
129          $(OBJDIR)/dmrestag.o\
130          $(OBJDIR)/dmswitch.o\
131          $(OBJDIR)/dmtable.o\
132          $(OBJDIR)/dmtables.o\
133          $(OBJDIR)/dmtbdump.o\
134          $(OBJDIR)/dmtbdump1.o\
135          $(OBJDIR)/dmtbdump2.o\
136          $(OBJDIR)/dmtbdump3.o\
137          $(OBJDIR)/dmtbinfo.o\
138          $(OBJDIR)/dmtbinfo1.o\
139          $(OBJDIR)/dmtbinfo2.o\
140          $(OBJDIR)/dmtbinfo3.o\
141          $(OBJDIR)/dmutils.o\
142          $(OBJDIR)/dmwalk.o\
143          $(OBJDIR)/dsargs.o\
144          $(OBJDIR)/dscontrol.o\
145          $(OBJDIR)/dsfield.o\
146          $(OBJDIR)/dsobject.o\
147          $(OBJDIR)/dsopcode.o\
148          $(OBJDIR)/dspkginit.o\
149          $(OBJDIR)/dsutils.o\
150          $(OBJDIR)/dswexec.o\
151          $(OBJDIR)/dswload.o\
152          $(OBJDIR)/dswload2.o\
153          $(OBJDIR)/dswscope.o\
154          $(OBJDIR)/dswstate.o\
155          $(OBJDIR)/dtcompile.o\
156          $(OBJDIR)/dtexpress.o\
157          $(OBJDIR)/dtfield.o\
158          $(OBJDIR)/dtio.o\
159          $(OBJDIR)/dtsubtable.o\
160          $(OBJDIR)/dttable.o\
161          $(OBJDIR)/dttable1.o\
162          $(OBJDIR)/dttable2.o\
163          $(OBJDIR)/dttemplate.o\
164          $(OBJDIR)/dtutils.o\
165          $(OBJDIR)/exconcat.o\
166          $(OBJDIR)/exconvrt.o\
167          $(OBJDIR)/excreate.o\
168          $(OBJDIR)/exdump.o\
169          $(OBJDIR)/exmisc.o\
170          $(OBJDIR)/exmutex.o\
171          $(OBJDIR)/exnames.o\
172          $(OBJDIR)/exoparg1.o\
173          $(OBJDIR)/exoparg2.o\
174          $(OBJDIR)/exoparg3.o\
175          $(OBJDIR)/exoparg6.o\
176          $(OBJDIR)/exprep.o\
177          $(OBJDIR)/exregion.o\
178          $(OBJDIR)/exresnte.o\
179          $(OBJDIR)/exresolv.o\
180          $(OBJDIR)/exresop.o\
181          $(OBJDIR)/exstore.o\
182          $(OBJDIR)/exstoren.o\
183          $(OBJDIR)/exstorob.o\
184          $(OBJDIR)/exsystem.o\
185          $(OBJDIR)/exutils.o\
186          $(OBJDIR)/getopt.o\
187          $(OBJDIR)/nsaccess.o\
188          $(OBJDIR)/nsalloc.o\
189          $(OBJDIR)/nsdump.o\
190          $(OBJDIR)/nsnames.o\
191          $(OBJDIR)/nsobject.o\
192          $(OBJDIR)/nsparse.o\
193          $(OBJDIR)/nssearch.o\
194          $(OBJDIR)/nsutils.o\
195          $(OBJDIR)/nswalk.o\
196          $(OBJDIR)/nsxfobj.o\
197          $(OBJDIR)/osunixxf.o\
198          $(OBJDIR)/prexpress.o\
199          $(OBJDIR)/prmacros.o\
200          $(OBJDIR)/prscan.o\
201          $(OBJDIR)/prutils.o\
202          $(OBJDIR)/psargs.o\
203          $(OBJDIR)/psloop.o\
204          $(OBJDIR)/psobject.o\
205          $(OBJDIR)/psopcode.o\
206          $(OBJDIR)/psopinfo.o\
207          $(OBJDIR)/psparse.o\
208          $(OBJDIR)/psscope.o\
209          $(OBJDIR)/pstree.o\
210          $(OBJDIR)/psutils.o\
211          $(OBJDIR)/pswalk.o\
212          $(OBJDIR)/tbdata.o\
213          $(OBJDIR)/tbfadt.o\
214          $(OBJDIR)/tbinstal.o\
215          $(OBJDIR)/tbprint.o\
216          $(OBJDIR)/tbutils.o\
217          $(OBJDIR)/tbxface.o\
218          $(OBJDIR)/tbxfload.o\
219          $(OBJDIR)/utaddress.o\
220          $(OBJDIR)/utalloc.o\
221          $(OBJDIR)/utascii.o\
222          $(OBJDIR)/utbuffer.o\
223          $(OBJDIR)/utcache.o\
224          $(OBJDIR)/utcksum.o\
225          $(OBJDIR)/utcopy.o\
226          $(OBJDIR)/utdebug.o\
227          $(OBJDIR)/utdecode.o\
228          $(OBJDIR)/utdelete.o\
229          $(OBJDIR)/uterror.o\
230          $(OBJDIR)/utexcep.o\
231          $(OBJDIR)/utglobal.o\
232          $(OBJDIR)/uthex.o\
233          $(OBJDIR)/utinit.o\
234          $(OBJDIR)/utlock.o\
235          $(OBJDIR)/utmath.o\
236          $(OBJDIR)/utmisc.o\
237          $(OBJDIR)/utmutex.o\
238          $(OBJDIR)/utnonansi.o\
239          $(OBJDIR)/utobject.o\
240          $(OBJDIR)/utownerid.o\
241          $(OBJDIR)/utpredef.o\
242          $(OBJDIR)/utresdecode.o\
243          $(OBJDIR)/utresrc.o\
244          $(OBJDIR)/utstate.o\
245          $(OBJDIR)/utstrtoul64.o\
246          $(OBJDIR)/utstrsuppt.o\
247          $(OBJDIR)/utstring.o\
248          $(OBJDIR)/utuuid.o\
249          $(OBJDIR)/utxface.o\
250          $(OBJDIR)/utxferror.o
251
252INTERMEDIATES = \
253          $(OBJDIR)/aslcompiler.y\
254          $(OBJDIR)/aslcompilerlex.c\
255          $(OBJDIR)/aslcompilerparse.c\
256          $(OBJDIR)/dtparserlex.c\
257          $(OBJDIR)/dtparserparse.c\
258          $(OBJDIR)/dtcompilerparserlex.c\
259          $(OBJDIR)/dtcompilerparserparse.c\
260          $(OBJDIR)/prparserlex.c\
261          $(OBJDIR)/prparserparse.c
262
263MISC = \
264          $(OBJDIR)/aslcompiler.y.h\
265          $(OBJDIR)/dtcompilerparser.y.h\
266          $(OBJDIR)/dtparser.y.h\
267          $(OBJDIR)/prparser.y.h
268
269ASL_PARSER = \
270          $(ASL_COMPILER)/aslcstyle.y\
271          $(ASL_COMPILER)/aslhelpers.y\
272          $(ASL_COMPILER)/aslparser.y\
273          $(ASL_COMPILER)/aslprimaries.y\
274          $(ASL_COMPILER)/aslresources.y\
275          $(ASL_COMPILER)/aslrules.y\
276          $(ASL_COMPILER)/aslsupport.y\
277          $(ASL_COMPILER)/asltokens.y\
278          $(ASL_COMPILER)/asltypes.y
279
280ASL_LEXER = \
281          $(ASL_COMPILER)/aslcompiler.l\
282          $(ASL_COMPILER)/aslsupport.l\
283          $(OBJDIR)/aslcompiler.y.h
284
285
286#
287# Flags specific to iASL compiler
288#
289CFLAGS += \
290    -DACPI_ASL_COMPILER\
291    -I$(ASL_COMPILER)\
292    -I$(OBJDIR)
293
294ifeq ($(NOWERROR),TRUE)
295WERROR_FLAGS=
296else
297WERROR_FLAGS=-Werror
298endif
299
300#
301# Common Rules
302#
303include ../Makefile.rules
304
305#
306# Function to safely execute yacc:
307# Generate the output files to a temporary directory,
308# move the file to $(OBJDIR), and discard the directory.
309#
310safe_yacc = \
311          _d=`mktemp -d $(OBJDIR)/$(1).XXXXXX` &&\
312          cd $$_d &&\
313          $(YACC) $(YFLAGS) -v -d -p$(1) "$(abspath $(2))" &&\
314          cd - > /dev/null;\
315          mv $$_d/y.tab$(suffix $(3)) $(3);\
316          _r=$$?;\
317          rm -fr $$_d;\
318          exit $$_r
319
320#
321# Macro processing for iASL .y files
322#
323$(OBJDIR)/aslcompiler.y :      $(ASL_PARSER)
324          @echo "- " $(MACROPROC) "          Preprocess main iASL parser"
325          @$(MACROPROC) $(MFLAGS) $(ASL_COMPILER)/aslparser.y > $@
326
327#
328# Parser and Lexer - intermediate C files
329#
330$(OBJDIR)/aslcompilerlex.c :   $(ASL_LEXER)
331          @echo "- " $(LEX) "        "$<
332          @$(LEX) $(LFLAGS) -PAslCompiler -o$@ $(ASL_COMPILER)/aslcompiler.l
333
334$(OBJDIR)/aslcompilerparse.c $(OBJDIR)/aslcompiler.y.h : $(OBJDIR)/aslcompiler.y
335          @echo "- " $(YACC) "       "$<
336          @$(call safe_yacc,AslCompiler,$<,$@)
337
338$(OBJDIR)/dtcompilerparserlex.c :      $(ASL_COMPILER)/dtcompilerparser.l $(OBJDIR)/dtcompilerparser.y.h
339          @echo "- " $(LEX) "        "$<
340          @$(LEX) $(DLFLAGS) -PDtCompilerParser -o$@ $<
341
342$(OBJDIR)/dtcompilerparserparse.c $(OBJDIR)/dtcompilerparser.y.h :       $(ASL_COMPILER)/dtcompilerparser.y
343          @echo "- " $(YACC) "       "$<
344          @$(call safe_yacc,DtCompilerParser,$<,$@)
345
346$(OBJDIR)/dtparserlex.c :      $(ASL_COMPILER)/dtparser.l $(OBJDIR)/dtparser.y.h
347          @echo "- " $(LEX) "        "$<
348          @$(LEX) $(DLFLAGS) -PDtParser -o$@ $<
349
350$(OBJDIR)/dtparserparse.c $(OBJDIR)/dtparser.y.h :       $(ASL_COMPILER)/dtparser.y
351          @echo "- " $(YACC) "       "$<
352          @$(call safe_yacc,DtParser,$<,$@)
353
354$(OBJDIR)/prparserlex.c :      $(ASL_COMPILER)/prparser.l $(OBJDIR)/prparser.y.h
355          @echo "- " $(LEX) "        "$<
356          @$(LEX) $(LFLAGS) -PPrParser -o$@ $<
357
358$(OBJDIR)/prparserparse.c $(OBJDIR)/prparser.y.h :       $(ASL_COMPILER)/prparser.y
359          @echo "- " $(YACC) "       "$<
360          @$(call safe_yacc,PrParser,$<,$@)
361
362#
363# Parsers and Lexers - final object files
364#
365# Cannot use the common compile warning flags since the C files are created
366# by the utilities above and they are not necessarily ANSI C, etc.
367#
368$(OBJDIR)/aslcompilerlex.o :   $(OBJDIR)/aslcompilerlex.c
369          @echo "- " "Intermediate" $<
370          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
371
372$(OBJDIR)/aslcompilerparse.o : $(OBJDIR)/aslcompilerparse.c
373          @echo "- " "Intermediate" $<
374          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
375
376$(OBJDIR)/dtcompilerparserlex.o :      $(OBJDIR)/dtcompilerparserlex.c
377          @echo "- " "Intermediate" $<
378          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
379
380$(OBJDIR)/dtcompilerparserparse.o :    $(OBJDIR)/dtcompilerparserparse.c
381          @echo "- " "Intermediate" $<
382          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
383
384$(OBJDIR)/dtparserlex.o :      $(OBJDIR)/dtparserlex.c
385          @echo "- " "Intermediate" $<
386          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
387
388$(OBJDIR)/dtparserparse.o :    $(OBJDIR)/dtparserparse.c
389          @echo "- " "Intermediate" $<
390          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
391
392$(OBJDIR)/prparserlex.o :      $(OBJDIR)/prparserlex.c
393          @echo "- " "Intermediate" $<
394          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
395
396$(OBJDIR)/prparserparse.o :    $(OBJDIR)/prparserparse.c
397          @echo "- " "Intermediate" $<
398          @$(CC) -c $(CFLAGS) -Wall $(WERROR_FLAGS) -o$@ $<
399