acpica/generate/efi/Makefile.config
Lv Zheng 3fcc59f475 EFI: Add efihello demo application.
This patch adds a demo EFI application for stdin/stdout testing. This
utility can be used to narrow down root causes of porting issues. Lv Zheng.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
2016-12-14 16:33:22 +08:00

249 lines
5.4 KiB
Makefile

# Makefile.config
#
# Common configuration and setup file to generate the ACPICA tools and
# utilities: the acpidump.
#
# 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/efi. It specifically
# places all object files in a generate/efi 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
#
# TARGET Build target platform can be overridden on the make command
# line by adding the followings to the invocation:
# TARGET="..."
# Possible target (ia32, x86_64, etc.) can be used to initiate
# a possible cross build.
# OPT_CFLAGS Optimization CFLAGS can be overridden on the make command
# line by adding the followings to the invocation:
# OPT_CFLAGS="..."
#
# Notes:
# gcc should be version 4 or greater, otherwise some of the options
# used will not be recognized.
#
.SUFFIXES :
#
# Common defines
#
PROGS = acpidump efihello
HOST = $(shell uname -m | sed s,i[3456789]86,ia32,)
TARGET = $(shell uname -m | sed s,i[3456789]86,ia32,)
OBJDIR = obj
BINDIR = bin
#
# 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_EFI = $(ACPICA_SRC)/os_specific/efi
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
#
ACPIDUMP = $(ACPICA_TOOLS)/acpidump
EFIHELLO = $(ACPICA_TOOLS)/efihello
#
# Common ACPICA header files
#
ACPICA_HEADERS = \
$(wildcard $(ACPICA_INCLUDE)/*.h) \
$(wildcard $(ACPICA_INCLUDE)/platform/*.h)
#
# GCC configuration
#
CC = gcc
LD = ld
OBJCOPY = objcopy
CFLAGS = \
--save-temps\
-nostdinc\
-nostdlib\
-std=c99\
-U__linux__\
-U_LINUX\
-D_GNU_EFI\
-D_GNU_SOURCE\
-fno-builtin\
-iwithprefix include\
-fno-stack-protector\
-fno-strict-aliasing\
-fpic\
-fshort-wchar\
-I$(ACPICA_INCLUDE)
LDFLAGS = \
-nostdinc\
-nostdlib\
-znocombreloc\
-Bsymbolic\
-shared\
-no-undefined
OBJCOPYFLAGS = \
-j .text\
-j .sdata\
-j .data\
-j .dynamic\
-j .dynsym\
-j .rel\
-j .rela\
-j .reloc\
--target=efi-app-$(TARGET)
#
# 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
# Common compiler warning flags. The warning flags in addition
# to -Wall are not automatically included in -Wall.
#
CWARNINGFLAGS = \
-Wall\
-Wbad-function-cast\
-Wdeclaration-after-statement\
-Werror\
-Wformat=2\
-Wmissing-declarations\
-Wmissing-prototypes\
-Wstrict-aliasing=0\
-Wswitch-default\
-Wpointer-arith\
-Wempty-body\
-Wlogical-op\
-Wmissing-parameter-type\
-Wold-style-declaration\
-Wtype-limits
#
# Extra warning flags (for possible future use)
#
#CWARNINGFLAGS += \
# -Wcast-qual\
# -Wconversion\
# -Wshadow\
# -Wstrict-prototypes\
# -Wundef\
CFLAGS += $(OPT_CFLAGS)
#
# EFI environment definitions
#
EFIINC = /usr/include/efi
ifeq ($(TARGET),ia32)
CFLAGS += -DACPI_MACHINE_WIDTH=32
ifeq ($(HOST),x86_64)
EFILIB = /usr/lib32
CFLAGS += -m32
LDFLAGS += -melf_i386
else # HOST eq ia32
EFILIB = /usr/lib
endif
else # TARGET eq x86_64
CFLAGS += \
-DEFI_FUNCTION_WRAPPER\
-DACPI_MACHINE_WIDTH=64
ifeq ($(HOST),ia32)
EFILIB = /usr/lib64
CFLAGS += -m64
LDFLAGS += -melf_x86_64
else # HOST eq x86_64
EFILIB = /usr/lib
endif
endif
CFLAGS += \
-I$(EFIINC)\
-I$(EFIINC)/$(TARGET)\
-I$(EFIINC)/protocol
LDFLAGS += \
-T $(EFILIB)/elf_$(TARGET)_efi.lds\
-L$(EFILIB)\
$(EFILIB)/crt0-efi-$(TARGET).o
LIBS = \
-lefi\
-lgnuefi\
$(shell $(CC) -print-libgcc-file-name)
#
# 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
#
YACC= bison
YFLAGS += -y
LEX= flex
LFLAGS += -i -s
#
# Command definitions
#
COMPILEOBJ = $(CC) -c $(CFLAGS) -o $@ $<
LINKPROG = $(LD) $(LDFLAGS) $(OBJECTS) -o $@ $(LIBS)
OBJCOPYPROG = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
COPYPROG = \
@mkdir -p ../$(BINDIR); \
cp -f $< ../$(BINDIR); \
echo "Copied $< to $@";