| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | # -*- makefile -*-# Copyright (c) 1999-2007 Hewlett-Packard Development Company, L.P.#	Contributed by David Mosberger <davidm@hpl.hp.com>#	Contributed by Stephane Eranian <eranian@hpl.hp.com>##    All rights reserved.##    Redistribution and use in source and binary forms, with or without#    modification, are permitted provided that the following conditions#    are met:##    * Redistributions of source code must retain the above copyright#      notice, this list of conditions and the following disclaimer.#    * Redistributions in binary form must reproduce the above#      copyright notice, this list of conditions and the following#      disclaimer in the documentation and/or other materials#      provided with the distribution.#    * Neither the name of Hewlett-Packard Co. nor the names of its#      contributors may be used to endorse or promote products derived#      from this software without specific prior written permission.##    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND#    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,#    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF#    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE#    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS#    BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,#    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,#    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR#    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY#    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR#    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF#    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF#    SUCH DAMAGE.#TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)## Variables below overridable from command-line:#   make VARNAME=value ...### Where to install the package. GNU-EFI will create and access# lib and include under the root#DESTDIR ?= /ifeq ($(origin INSTALLROOT),undefined)INSTALLROOT = $(DESTDIR)endifempty :=space := $(empty) $(empty)stripped = $(subst $(space),/,$(strip $(subst /,$(space),$(1))))unstripped = $(subst $(space),/,$(subst /,$(space),$(1)))is_absolute = $(subst $(call stripped,$(1)),$(empty),$(call unstripped,$(1)))override INSTALLROOT:=$(if $(call is_absolute,$(INSTALLROOT)),,$(TOPDIR)/)$(INSTALLROOT)PREFIX       := /usr/localEXEC_PREFIX  := $(PREFIX)LIBDIR 	 := $(EXEC_PREFIX)/libINCLUDEDIR   := $(PREFIX)/includeINSTALL	 := install# Compilation toolsHOSTCC       := $(prefix)gccCC           := $(prefix)$(CROSS_COMPILE)gccAS           := $(prefix)$(CROSS_COMPILE)asLD           := $(prefix)$(CROSS_COMPILE)ldAR           := $(prefix)$(CROSS_COMPILE)arRANLIB       := $(prefix)$(CROSS_COMPILE)ranlibOBJCOPY      := $(prefix)$(CROSS_COMPILE)objcopy# Host/target identificationOS           := $(shell uname -s)HOSTARCH     ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv[67].*,arm,' )ARCH         ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv[67].*,arm,' )# Get ARCH from the compiler if cross compiling ifneq ($(CROSS_COMPILE),)  override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv[67].*,arm,' )endif# FreeBSD (and possibly others) reports amd64 instead of x86_64ifeq ($(ARCH),amd64)  override ARCH := x86_64endif## Where to build the package#OBJDIR       := $(TOPDIR)/$(ARCH)## Variables below derived from variables above## Arch-specific compilation flagsCPPFLAGS += -DCONFIG_$(ARCH)CFLAGS += -Wno-error=pragmasifeq ($(ARCH),ia64)  CFLAGS += -mfixed-range=f32-f127endififeq ($(ARCH),ia32)  CFLAGS += -mno-mmx -mno-sse  ifeq ($(HOSTARCH),x86_64)    ARCH3264 = -m32  endifendififeq ($(ARCH),x86_64)  GCCVERSION   := $(shell $(CC) -dumpversion | cut -f1 -d.)  GCCMINOR     := $(shell $(CC) -dumpversion | cut -f2 -d.)  USING_CLANG  := $(shell $(CC) -v 2>&1 | grep -q 'clang version' && echo clang)  # Rely on GCC MS ABI support?  GCCNEWENOUGH := $(shell ( [ $(GCCVERSION) -gt "4" ]           \                            || ( [ $(GCCVERSION) -eq "4" ]      \                                 && [ $(GCCMINOR) -ge "7" ] ) ) \                          && echo 1)  ifeq ($(GCCNEWENOUGH),1)    CPPFLAGS += -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args -std=c11  else ifeq ($(USING_CLANG),clang)    CPPFLAGS += -DGNU_EFI_USE_MS_ABI -std=c11  endif  CFLAGS += -mno-red-zone  ifeq ($(HOSTARCH),ia32)    ARCH3264 = -m64  endifendififneq (,$(filter $(ARCH),ia32 x86_64))  # Disable AVX, if the compiler supports that.  CC_CAN_DISABLE_AVX=$(shell $(CC) -Werror -c -o /dev/null -xc -mno-avx - </dev/null >/dev/null 2>&1 && echo 1)  ifeq ($(CC_CAN_DISABLE_AVX), 1)    CFLAGS += -mno-avx  endifendififeq ($(ARCH),mips64el)  CFLAGS += -march=mips64r2  ARCH3264 = -mabi=64endif## Set HAVE_EFI_OBJCOPY if objcopy understands --target efi-[app|bsdrv|rtdrv],# otherwise we need to compose the PE/COFF header using the assembler#ifneq ($(ARCH),arm)ifneq ($(ARCH),mips64el)ifneq ($(ARCH),riscv64)ifneq ($(ARCH),loongarch64)export HAVE_EFI_OBJCOPY=yendifendifendifendififeq ($(ARCH),arm)CFLAGS += -marmendififeq ($(ARCH),aarch64)LDFLAGS += -z common-page-size=4096LDFLAGS += -z max-page-size=4096endif# Generic compilation flagsINCDIR  += -I$(SRCDIR) -I$(TOPDIR)/inc -I$(TOPDIR)/inc/$(ARCH) \           -I$(TOPDIR)/inc/protocol# Only enable -fPIE for non MinGW compilers (unneeded on MinGW)GCCMACHINE := $(shell $(CC) -dumpmachine)ifneq (mingw32,$(findstring mingw32, $(GCCMACHINE)))  CFLAGS += -fPIEendififeq (FreeBSD, $(findstring FreeBSD, $(OS)))CFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \           -funsigned-char -fshort-wchar -fno-strict-aliasing \           -ffreestanding -fno-stack-protectorelseCFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Wno-pointer-sign -Werror \           -funsigned-char -fshort-wchar -fno-strict-aliasing \	   -ffreestanding -fno-stack-protector -fno-stack-check \           -fno-stack-check \           $(if $(findstring gcc,$(CC)),-fno-merge-all-constants,)endifARFLAGS := rDvASFLAGS += $(ARCH3264)LDFLAGS	+= -nostdlib --warn-common --no-undefined --fatal-warnings \	   --build-id=sha1 -z nocombrelocifneq ($(ARCH),arm)export LIBGCC=$(shell $(CC) $(CFLAGS) $(ARCH3264) -print-libgcc-file-name)endif
 |