#
# acpiexec: ACPI execution simulator. Runs ACPICA code in user
# space. Loads ACPI tables, displays the namespace, and allows
# execution of control methods.
#
# NOTE: This makefile is intended to be used in the Linux environment,
# with the Linux directory structure. It will not work directly
# on the native ACPICA source tree.
#

#
# Configuration
# Notes:
#   gcc should be version 4 or greater, otherwise some of the options
#       used will not be recognized.
#   Global optimization flags (such as -O2, -Os) are not used, since
#       they cause issues on some compilers.
#   The _GNU_SOURCE symbol is required for many hosts.
#
PROG = acpiexec

HOST =          _LINUX
NOMAN =         YES
COMPILE =       $(CC) -c $(CFLAGS) $(CWARNINGFLAGS) -o$@ $?
LDFLAGS +=      -lpthread -lrt

ACPICA_COMPONENTS =
ACPICA_SRC =    ../..
ACPICA_COMMON = $(ACPICA_SRC)/common
ACPICA_CORE =   $(ACPICA_SRC)$(ACPICA_COMPONENTS)
ACPICA_TOOLS =  $(ACPICA_SRC)/tools
ACPICA_OSL =    $(ACPICA_SRC)/os_specific/service_layers
INSTALLDIR =    /usr/bin
INSTALLPROG =   cp --remove-destination $(PROG) $(INSTALLDIR)

CFLAGS+= \
    -D$(HOST) \
    -D_GNU_SOURCE \
    -DACPI_EXEC_APP \
    -I$(ACPICA_SRC)/include

CWARNINGFLAGS = \
    -ansi \
    -Wall \
    -Wbad-function-cast \
    -Wdeclaration-after-statement \
    -Werror \
    -Wformat=2 \
    -Wmissing-declarations \
    -Wmissing-prototypes \
    -Wstrict-aliasing=0 \
    -Wstrict-prototypes \
    -Wswitch-default \
    -Wpointer-arith \
    -Wundef

OBJS = \
	aeexec.o \
	aehandlers.o \
	aemain.o \
	aetables.o \
	dbcmds.o \
	dbdisply.o \
	dbexec.o \
	dbfileio.o \
	dbhistry.o \
	dbinput.o \
	dbmethod.o \
	dbnames.o \
	dbstats.o \
	dbutils.o \
	dbxface.o \
	dmbuffer.o \
	dmnames.o \
	dmobject.o \
	dmopcode.o \
	dmresrc.o \
	dmresrcl.o \
	dmresrcs.o \
	dmutils.o \
	dmwalk.o \
	dsargs.o \
	dscontrol.o \
	dsfield.o \
	dsinit.o \
	dsmethod.o \
	dsmthdat.o \
	dsobject.o \
	dsopcode.o \
	dsutils.o \
	dswexec.o \
	dswload.o \
	dswload2.o \
	dswscope.o \
	dswstate.o \
	evevent.o \
	evglock.o \
	evgpe.o \
	evgpeblk.o \
	evgpeinit.o \
	evgpeutil.o \
	evmisc.o \
	evregion.o \
	evrgnini.o \
	evsci.o \
	evxface.o \
	evxfevnt.o \
	evxfgpe.o \
	evxfregn.o \
	exconfig.o \
	exconvrt.o \
	excreate.o \
	exdebug.o \
	exdump.o \
	exfield.o \
	exfldio.o \
	exmisc.o \
	exmutex.o \
	exnames.o \
	exoparg1.o \
	exoparg2.o \
	exoparg3.o \
	exoparg6.o \
	exprep.o \
	exregion.o \
	exresnte.o \
	exresolv.o \
	exresop.o \
	exstore.o \
	exstoren.o \
	exstorob.o \
	exsystem.o \
	exutils.o \
	getopt.o \
	hwacpi.o \
	hwgpe.o \
	hwpci.o \
	hwregs.o \
	hwsleep.o \
	hwvalid.o \
	hwxface.o \
	nsaccess.o \
	nsalloc.o \
	nsdump.o \
	nsdumpdv.o \
	nseval.o \
	nsinit.o \
	nsload.o \
	nsnames.o \
	nsobject.o \
	nsparse.o \
	nspredef.o \
	nsrepair.o \
	nsrepair2.o \
	nssearch.o \
	nsutils.o \
	nswalk.o \
	nsxfeval.o \
	nsxfname.o \
	nsxfobj.o \
	osunixxf.o \
	psargs.o \
	psloop.o \
	psopcode.o \
	psparse.o \
	psscope.o \
	pstree.o \
	psutils.o \
	pswalk.o \
	psxface.o \
	rsaddr.o \
	rscalc.o \
	rscreate.o \
	rsdump.o \
	rsinfo.o \
	rsio.o \
	rsirq.o \
	rslist.o \
	rsmemory.o \
	rsmisc.o \
	rsutils.o \
	rsxface.o \
	tbfadt.o \
	tbfind.o \
	tbinstal.o \
	tbutils.o \
	tbxface.o \
	tbxfroot.o \
	utalloc.o \
	utcache.o \
	utcopy.o \
	utdebug.o \
	utdecode.o \
	utdelete.o \
	uteval.o \
	utglobal.o \
	utids.o \
	utinit.o \
	utlock.o \
	utmath.o \
	utmisc.o \
	utmutex.o \
	utobject.o \
	utresrc.o \
	utstate.o \
	uttrack.o \
	utosi.o \
	utxferror.o \
	utxface.o

#
# Root rule
#
$(PROG) : $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) -o $(PROG)

#
# acpiexec source
#
aeexec.o :          $(ACPICA_TOOLS)/acpiexec/aeexec.c
	$(COMPILE)

aehandlers.o :      $(ACPICA_TOOLS)/acpiexec/aehandlers.c
	$(COMPILE)

aemain.o :          $(ACPICA_TOOLS)/acpiexec/aemain.c
	$(COMPILE)

aetables.o :        $(ACPICA_TOOLS)/acpiexec/aetables.c
	$(COMPILE)

#
# ACPICA core source - common
#
getopt.o :          $(ACPICA_COMMON)/getopt.c
	$(COMPILE)

#
# ACPICA core source
#
dbcmds.o :          $(ACPICA_CORE)/debugger/dbcmds.c
	$(COMPILE)

dbdisply.o :        $(ACPICA_CORE)/debugger/dbdisply.c
	$(COMPILE)

dbexec.o :          $(ACPICA_CORE)/debugger/dbexec.c
	$(COMPILE)

dbfileio.o :        $(ACPICA_CORE)/debugger/dbfileio.c
	$(COMPILE)

dbhistry.o :        $(ACPICA_CORE)/debugger/dbhistry.c
	$(COMPILE)

dbinput.o :         $(ACPICA_CORE)/debugger/dbinput.c
	$(COMPILE)

dbmethod.o :        $(ACPICA_CORE)/debugger/dbmethod.c
	$(COMPILE)

dbnames.o :         $(ACPICA_CORE)/debugger/dbnames.c
	$(COMPILE)

dbstats.o :         $(ACPICA_CORE)/debugger/dbstats.c
	$(COMPILE)

dbutils.o :         $(ACPICA_CORE)/debugger/dbutils.c
	$(COMPILE)

dbxface.o :         $(ACPICA_CORE)/debugger/dbxface.c
	$(COMPILE)

dmbuffer.o :        $(ACPICA_CORE)/disassembler/dmbuffer.c
	$(COMPILE)

dmnames.o :         $(ACPICA_CORE)/disassembler/dmnames.c
	$(COMPILE)

dmobject.o :        $(ACPICA_CORE)/disassembler/dmobject.c
	$(COMPILE)

dmopcode.o :        $(ACPICA_CORE)/disassembler/dmopcode.c
	$(COMPILE)

dmresrc.o :         $(ACPICA_CORE)/disassembler/dmresrc.c
	$(COMPILE)

dmresrcl.o :        $(ACPICA_CORE)/disassembler/dmresrcl.c
	$(COMPILE)

dmresrcs.o :        $(ACPICA_CORE)/disassembler/dmresrcs.c
	$(COMPILE)

dmutils.o :         $(ACPICA_CORE)/disassembler/dmutils.c
	$(COMPILE)

dmwalk.o :          $(ACPICA_CORE)/disassembler/dmwalk.c
	$(COMPILE)

dsargs.o :          $(ACPICA_CORE)/dispatcher/dsargs.c
	$(COMPILE)

dscontrol.o :       $(ACPICA_CORE)/dispatcher/dscontrol.c
	$(COMPILE)

dsfield.o :         $(ACPICA_CORE)/dispatcher/dsfield.c
	$(COMPILE)

dsinit.o :          $(ACPICA_CORE)/dispatcher/dsinit.c
	$(COMPILE)

dsmethod.o :        $(ACPICA_CORE)/dispatcher/dsmethod.c
	$(COMPILE)

dsmthdat.o :        $(ACPICA_CORE)/dispatcher/dsmthdat.c
	$(COMPILE)

dsobject.o :        $(ACPICA_CORE)/dispatcher/dsobject.c
	$(COMPILE)

dsopcode.o :        $(ACPICA_CORE)/dispatcher/dsopcode.c
	$(COMPILE)

dsutils.o :         $(ACPICA_CORE)/dispatcher/dsutils.c
	$(COMPILE)

dswexec.o :         $(ACPICA_CORE)/dispatcher/dswexec.c
	$(COMPILE)

dswload.o :         $(ACPICA_CORE)/dispatcher/dswload.c
	$(COMPILE)

dswload2.o :        $(ACPICA_CORE)/dispatcher/dswload2.c
	$(COMPILE)

dswscope.o :        $(ACPICA_CORE)/dispatcher/dswscope.c
	$(COMPILE)

dswstate.o :        $(ACPICA_CORE)/dispatcher/dswstate.c
	$(COMPILE)

evevent.o :         $(ACPICA_CORE)/events/evevent.c
	$(COMPILE)

evglock.o :         $(ACPICA_CORE)/events/evglock.c
	$(COMPILE)

evgpe.o :           $(ACPICA_CORE)/events/evgpe.c
	$(COMPILE)

evgpeblk.o :        $(ACPICA_CORE)/events/evgpeblk.c
	$(COMPILE)

evgpeinit.o :       $(ACPICA_CORE)/events/evgpeinit.c
	$(COMPILE)

evgpeutil.o :       $(ACPICA_CORE)/events/evgpeutil.c
	$(COMPILE)

evmisc.o :          $(ACPICA_CORE)/events/evmisc.c
	$(COMPILE)

evregion.o :        $(ACPICA_CORE)/events/evregion.c
	$(COMPILE)

evrgnini.o :        $(ACPICA_CORE)/events/evrgnini.c
	$(COMPILE)

evsci.o :           $(ACPICA_CORE)/events/evsci.c
	$(COMPILE)

evxface.o :         $(ACPICA_CORE)/events/evxface.c
	$(COMPILE)

evxfevnt.o :        $(ACPICA_CORE)/events/evxfevnt.c
	$(COMPILE)

evxfgpe.o :         $(ACPICA_CORE)/events/evxfgpe.c
	$(COMPILE)

evxfregn.o :        $(ACPICA_CORE)/events/evxfregn.c
	$(COMPILE)

exconfig.o :        $(ACPICA_CORE)/executer/exconfig.c
	$(COMPILE)

exconvrt.o :        $(ACPICA_CORE)/executer/exconvrt.c
	$(COMPILE)

excreate.o :        $(ACPICA_CORE)/executer/excreate.c
	$(COMPILE)

exdebug.o :         $(ACPICA_CORE)/executer/exdebug.c
	$(COMPILE)

exdump.o :          $(ACPICA_CORE)/executer/exdump.c
	$(COMPILE)

exfield.o :         $(ACPICA_CORE)/executer/exfield.c
	$(COMPILE)

exfldio.o :         $(ACPICA_CORE)/executer/exfldio.c
	$(COMPILE)

exmisc.o :          $(ACPICA_CORE)/executer/exmisc.c
	$(COMPILE)

exmutex.o :         $(ACPICA_CORE)/executer/exmutex.c
	$(COMPILE)

exnames.o :         $(ACPICA_CORE)/executer/exnames.c
	$(COMPILE)

exoparg1.o :        $(ACPICA_CORE)/executer/exoparg1.c
	$(COMPILE)

exoparg2.o :        $(ACPICA_CORE)/executer/exoparg2.c
	$(COMPILE)

exoparg3.o :        $(ACPICA_CORE)/executer/exoparg3.c
	$(COMPILE)

exoparg6.o :        $(ACPICA_CORE)/executer/exoparg6.c
	$(COMPILE)

exprep.o :          $(ACPICA_CORE)/executer/exprep.c
	$(COMPILE)

exregion.o :        $(ACPICA_CORE)/executer/exregion.c
	$(COMPILE)

exresnte.o :        $(ACPICA_CORE)/executer/exresnte.c
	$(COMPILE)

exresolv.o :        $(ACPICA_CORE)/executer/exresolv.c
	$(COMPILE)

exresop.o :         $(ACPICA_CORE)/executer/exresop.c
	$(COMPILE)

exstore.o :         $(ACPICA_CORE)/executer/exstore.c
	$(COMPILE)

exstoren.o :        $(ACPICA_CORE)/executer/exstoren.c
	$(COMPILE)

exstorob.o :        $(ACPICA_CORE)/executer/exstorob.c
	$(COMPILE)

exsystem.o :        $(ACPICA_CORE)/executer/exsystem.c
	$(COMPILE)

exutils.o :         $(ACPICA_CORE)/executer/exutils.c
	$(COMPILE)

hwacpi.o :          $(ACPICA_CORE)/hardware/hwacpi.c
	$(COMPILE)

hwgpe.o :           $(ACPICA_CORE)/hardware/hwgpe.c
	$(COMPILE)

hwpci.o :           $(ACPICA_CORE)/hardware/hwpci.c
	$(COMPILE)

hwregs.o :          $(ACPICA_CORE)/hardware/hwregs.c
	$(COMPILE)

hwsleep.o :         $(ACPICA_CORE)/hardware/hwsleep.c
	$(COMPILE)

hwvalid.o :         $(ACPICA_CORE)/hardware/hwvalid.c
	$(COMPILE)

hwxface.o :         $(ACPICA_CORE)/hardware/hwxface.c
	$(COMPILE)

nsaccess.o :        $(ACPICA_CORE)/namespace/nsaccess.c
	$(COMPILE)

nsalloc.o :         $(ACPICA_CORE)/namespace/nsalloc.c
	$(COMPILE)

nsdump.o :          $(ACPICA_CORE)/namespace/nsdump.c
	$(COMPILE)

nsdumpdv.o :        $(ACPICA_CORE)/namespace/nsdumpdv.c
	$(COMPILE)

nseval.o :          $(ACPICA_CORE)/namespace/nseval.c
	$(COMPILE)

nsinit.o :          $(ACPICA_CORE)/namespace/nsinit.c
	$(COMPILE)

nsload.o :          $(ACPICA_CORE)/namespace/nsload.c
	$(COMPILE)

nsnames.o :         $(ACPICA_CORE)/namespace/nsnames.c
	$(COMPILE)

nsobject.o :        $(ACPICA_CORE)/namespace/nsobject.c
	$(COMPILE)

nsparse.o :         $(ACPICA_CORE)/namespace/nsparse.c
	$(COMPILE)

nspredef.o :        $(ACPICA_CORE)/namespace/nspredef.c
	$(COMPILE)

nsrepair.o :        $(ACPICA_CORE)/namespace/nsrepair.c
	$(COMPILE)

nsrepair2.o :       $(ACPICA_CORE)/namespace/nsrepair2.c
	$(COMPILE)

nssearch.o :        $(ACPICA_CORE)/namespace/nssearch.c
	$(COMPILE)

nsutils.o :         $(ACPICA_CORE)/namespace/nsutils.c
	$(COMPILE)

nswalk.o :          $(ACPICA_CORE)/namespace/nswalk.c
	$(COMPILE)

nsxfeval.o :        $(ACPICA_CORE)/namespace/nsxfeval.c
	$(COMPILE)

nsxfname.o :        $(ACPICA_CORE)/namespace/nsxfname.c
	$(COMPILE)

nsxfobj.o :         $(ACPICA_CORE)/namespace/nsxfobj.c
	$(COMPILE)

psargs.o :          $(ACPICA_CORE)/parser/psargs.c
	$(COMPILE)

psloop.o :          $(ACPICA_CORE)/parser/psloop.c
	$(COMPILE)

psopcode.o :        $(ACPICA_CORE)/parser/psopcode.c
	$(COMPILE)

psparse.o :         $(ACPICA_CORE)/parser/psparse.c
	$(COMPILE)

psscope.o :         $(ACPICA_CORE)/parser/psscope.c
	$(COMPILE)

pstree.o :          $(ACPICA_CORE)/parser/pstree.c
	$(COMPILE)

psutils.o :         $(ACPICA_CORE)/parser/psutils.c
	$(COMPILE)

pswalk.o :          $(ACPICA_CORE)/parser/pswalk.c
	$(COMPILE)

psxface.o :         $(ACPICA_CORE)/parser/psxface.c
	$(COMPILE)

rsaddr.o :          $(ACPICA_CORE)/resources/rsaddr.c
	$(COMPILE)

rscalc.o :          $(ACPICA_CORE)/resources/rscalc.c
	$(COMPILE)

rscreate.o :        $(ACPICA_CORE)/resources/rscreate.c
	$(COMPILE)

rsdump.o :          $(ACPICA_CORE)/resources/rsdump.c
	$(COMPILE)

rsio.o :            $(ACPICA_CORE)/resources/rsio.c
	$(COMPILE)

rsinfo.o :          $(ACPICA_CORE)/resources/rsinfo.c
	$(COMPILE)

rsirq.o :           $(ACPICA_CORE)/resources/rsirq.c
	$(COMPILE)

rslist.o :          $(ACPICA_CORE)/resources/rslist.c
	$(COMPILE)

rsmemory.o :        $(ACPICA_CORE)/resources/rsmemory.c
	$(COMPILE)

rsmisc.o :          $(ACPICA_CORE)/resources/rsmisc.c
	$(COMPILE)

rsutils.o :         $(ACPICA_CORE)/resources/rsutils.c
	$(COMPILE)

rsxface.o :         $(ACPICA_CORE)/resources/rsxface.c
	$(COMPILE)

tbfadt.o :          $(ACPICA_CORE)/tables/tbfadt.c
	$(COMPILE)

tbfind.o :          $(ACPICA_CORE)/tables/tbfind.c
	$(COMPILE)

tbinstal.o :        $(ACPICA_CORE)/tables/tbinstal.c
	$(COMPILE)

tbutils.o :         $(ACPICA_CORE)/tables/tbutils.c
	$(COMPILE)

tbxface.o :         $(ACPICA_CORE)/tables/tbxface.c
	$(COMPILE)

tbxfroot.o :        $(ACPICA_CORE)/tables/tbxfroot.c
	$(COMPILE)

utalloc.o :         $(ACPICA_CORE)/utilities/utalloc.c
	$(COMPILE)

utcache.o :         $(ACPICA_CORE)/utilities/utcache.c
	$(COMPILE)

utcopy.o :          $(ACPICA_CORE)/utilities/utcopy.c
	$(COMPILE)

utdebug.o :         $(ACPICA_CORE)/utilities/utdebug.c
	$(COMPILE)

utdecode.o :        $(ACPICA_CORE)/utilities/utdecode.c
	$(COMPILE)

utdelete.o :        $(ACPICA_CORE)/utilities/utdelete.c
	$(COMPILE)

uteval.o :          $(ACPICA_CORE)/utilities/uteval.c
	$(COMPILE)

utglobal.o :        $(ACPICA_CORE)/utilities/utglobal.c
	$(COMPILE)

utids.o :           $(ACPICA_CORE)/utilities/utids.c
	$(COMPILE)

utinit.o :          $(ACPICA_CORE)/utilities/utinit.c
	$(COMPILE)

utlock.o :          $(ACPICA_CORE)/utilities/utlock.c
	$(COMPILE)

utmath.o :          $(ACPICA_CORE)/utilities/utmath.c
	$(COMPILE)

utmisc.o :          $(ACPICA_CORE)/utilities/utmisc.c
	$(COMPILE)

utmutex.o :         $(ACPICA_CORE)/utilities/utmutex.c
	$(COMPILE)

utobject.o :        $(ACPICA_CORE)/utilities/utobject.c
	$(COMPILE)

utresrc.o :         $(ACPICA_CORE)/utilities/utresrc.c
	$(COMPILE)

utstate.o :         $(ACPICA_CORE)/utilities/utstate.c
	$(COMPILE)

uttrack.o :         $(ACPICA_CORE)/utilities/uttrack.c
	$(COMPILE)

utosi.o :           $(ACPICA_CORE)/utilities/utosi.c
	$(COMPILE)

utxferror.o :       $(ACPICA_CORE)/utilities/utxferror.c
	$(COMPILE)

utxface.o :         $(ACPICA_CORE)/utilities/utxface.c
	$(COMPILE)

#
# Unix OS services layer (OSL)
#
osunixxf.o :        $(ACPICA_OSL)/osunixxf.c
	$(COMPILE)


clean :
	rm -f $(PROG) $(PROG).exe $(OBJS)

install :
	$(INSTALLPROG)
