#
# Makefile.config
#
# Common configuration and setup file to generate the ACPICA tools and
# utilities: the iASL compiler, acpiexec, acpihelp, acpinames, acpisrc,
# acpixtract, acpibin.
#
# This file is included by the individual makefiles for each tool.
#

#
# Note: This makefile is intended to be used from within the native
# ACPICA directory structure, from under generate/unix. It specifically
# places all object files in a generate/unix subdirectory, not within
# the various ACPICA source directories. This prevents collisions
# between different compilations of the same source file with different
# compile options, and prevents pollution of the source code.
#

#
# Configuration
#
# OPT_CFLAGS can be overridden on the make command line by
#   adding OPT_CFLAGS="..." to the invocation.
#
# Notes:
#   gcc should be version 4 or greater, otherwise some of the options
#     used will not be recognized.
#   Optional: Set HOST to an appropriate value (_LINUX, _FreeBSD, _APPLE, _CYGWIN, etc.)
#     See include/platform/acenv.h for supported values.
#     Note: HOST is not nearly as important for applications as it
#     is for the kernel-resident version of ACPICA, and it may
#     not be necessary to change it.
#
.SUFFIXES :
PROGS = acpibin acpidump acpiexamples acpiexec acpihelp acpinames acpisrc acpixtract iasl
HOST ?= _CYGWIN
CC =    gcc

#
# Common defines
#
OBJDIR =     obj
BINDIR =     bin
COMPILEOBJ = $(CC) -c $(CFLAGS) $(OPT_CFLAGS) -o $@ $<
LINKPROG =   $(CC) $(OBJECTS) -o $(PROG) $(LDFLAGS)
PREFIX ?=    /usr
INSTALLDIR = $(PREFIX)/bin
UNAME_S := $(shell uname -s)

#
# Host detection and configuration
#
ifeq ($(UNAME_S), Darwin)  # Mac OS X
HOST =       _APPLE
endif

ifeq ($(UNAME_S), DragonFly)
HOST =       _DragonFly
endif

ifeq ($(UNAME_S), FreeBSD)
HOST =       _FreeBSD
endif

ifeq ($(UNAME_S), NetBSD)
HOST =       _NetBSD
endif

ifeq ($(HOST), _APPLE)
INSTALL  =   cp
INSTALLFLAGS ?= -f
else
INSTALL =    install
INSTALLFLAGS ?= -m 555 -s
endif

INSTALLPROG = \
	mkdir -p $(DESTDIR)$(INSTALLDIR); \
	$(INSTALL) $(INSTALLFLAGS) ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG)

#
# Rename a .exe file if necessary
#
RENAMEPROG = \
	@if [ -e "$(PROG).exe" ] ; then \
		mv $(PROG).exe $(PROG); \
		echo "Renamed $(PROG).exe to $(PROG)"; \
	fi;

#
# Copy the final executable to the local bin directory
#
COPYPROG = \
	@mkdir -p ../$(BINDIR); \
	cp -f $(PROG) ../$(BINDIR); \
	echo "Copied $(PROG) to $(FINAL_PROG)";

#
# Main ACPICA source directories
#
ACPICA_SRC =            ../../../source
ACPICA_COMMON =         $(ACPICA_SRC)/common
ACPICA_TOOLS =          $(ACPICA_SRC)/tools
ACPICA_OSL =            $(ACPICA_SRC)/os_specific/service_layers
ACPICA_CORE =           $(ACPICA_SRC)/components
ACPICA_INCLUDE =        $(ACPICA_SRC)/include
ACPICA_DEBUGGER =       $(ACPICA_CORE)/debugger
ACPICA_DISASSEMBLER =   $(ACPICA_CORE)/disassembler
ACPICA_DISPATCHER =     $(ACPICA_CORE)/dispatcher
ACPICA_EVENTS =         $(ACPICA_CORE)/events
ACPICA_EXECUTER =       $(ACPICA_CORE)/executer
ACPICA_HARDWARE =       $(ACPICA_CORE)/hardware
ACPICA_NAMESPACE =      $(ACPICA_CORE)/namespace
ACPICA_PARSER =         $(ACPICA_CORE)/parser
ACPICA_RESOURCES =      $(ACPICA_CORE)/resources
ACPICA_TABLES =         $(ACPICA_CORE)/tables
ACPICA_UTILITIES =      $(ACPICA_CORE)/utilities

#
# ACPICA tool and utility source directories
#
ACPIBIN =               $(ACPICA_TOOLS)/acpibin
ACPIDUMP =              $(ACPICA_TOOLS)/acpidump
ACPIEXAMPLES =          $(ACPICA_TOOLS)/examples
ACPIEXEC =              $(ACPICA_TOOLS)/acpiexec
ACPIHELP =              $(ACPICA_TOOLS)/acpihelp
ACPINAMES =             $(ACPICA_TOOLS)/acpinames
ACPISRC =               $(ACPICA_TOOLS)/acpisrc
ACPIXTRACT =            $(ACPICA_TOOLS)/acpixtract
ASL_COMPILER =          $(ACPICA_SRC)/compiler

#
# Common ACPICA header files
#
ACPICA_HEADERS = \
    $(wildcard $(ACPICA_INCLUDE)/*.h) \
    $(wildcard $(ACPICA_INCLUDE)/platform/*.h)

#
# Common compiler flags
# The _GNU_SOURCE symbol is required for many hosts.
#
OPT_CFLAGS ?= $(CWARNINGFLAGS)

#
# Optionally disable optimizations. Optimization causes problems on
# some compilers such as gcc 4.4
#
ifneq ($(NOOPT),TRUE)
OPT_CFLAGS += -O2
endif

#
# Optionally disable fortify source. This option can cause
# compile errors in toolchains where it is already defined.
#
ifneq ($(NOFORTIFY),TRUE)
OPT_CFLAGS += -D_FORTIFY_SOURCE=2
endif

CFLAGS += \
    -D$(HOST)\
    -D_GNU_SOURCE\
    -I$(ACPICA_INCLUDE)

#
# Common compiler warning flags. The warning flags in addition
# to -Wall are not automatically included in -Wall.
#
CWARNINGFLAGS = \
    -std=c99\
    -Wall\
    -Wbad-function-cast\
    -Wdeclaration-after-statement\
    -Werror\
    -Wformat=2\
    -Wmissing-declarations\
    -Wmissing-prototypes\
    -Wstrict-aliasing=0\
    -Wstrict-prototypes\
    -Wswitch-default\
    -Wpointer-arith\
    -Wundef

#
# Common gcc 4+ warning flags
#
CWARNINGFLAGS += \
    -Waddress\
    -Waggregate-return\
    -Winit-self\
    -Winline\
    -Wmissing-declarations\
    -Wmissing-field-initializers\
    -Wnested-externs\
    -Wold-style-definition\
    -Wno-format-nonliteral\
    -Wredundant-decls
#
# Per-host flags and exclusions
#
ifneq ($(HOST), _FreeBSD)
    CWARNINGFLAGS += \
        -Wempty-body

    ifneq ($(HOST), _APPLE)
        CWARNINGFLAGS += \
            -Woverride-init\
            -Wlogical-op\
            -Wmissing-parameter-type\
            -Wold-style-declaration\
            -Wtype-limits
    endif
endif

#
# Extra warning flags (for possible future use)
#
#CWARNINGFLAGS += \
#	-Wcast-qual\
#	-Wconversion\
#	-Wshadow\

#
# M4 macro processor is used to build the final parser file
#
# Bison/Flex configuration
#
# -y: act like yacc
#
# -i: generate case insensitive scanner
# -s: suppress default rule, abort on unknown input
#
# Optional for Bison/yacc:
# -v: verbose, produces a .output file
# -d: produces the defines header file
#
# Berkeley yacc configuration
#
#YACC=      byacc
#YFLAGS +=
#
YACC=       bison
YFLAGS +=   -y

MACROPROC=  m4
MFLAGS=     -P -I$(ASL_COMPILER)

LEX=        flex
LFLAGS +=   -i -s
