Make.defaults revision 1.1.1.2
11.1Sjakllsch# -*- makefile -*-
21.1Sjakllsch# Copyright (c) 1999-2007 Hewlett-Packard Development Company, L.P.
31.1Sjakllsch#	Contributed by David Mosberger <davidm@hpl.hp.com>
41.1Sjakllsch#	Contributed by Stephane Eranian <eranian@hpl.hp.com>
51.1Sjakllsch#
61.1Sjakllsch#    All rights reserved.
71.1Sjakllsch#
81.1Sjakllsch#    Redistribution and use in source and binary forms, with or without
91.1Sjakllsch#    modification, are permitted provided that the following conditions
101.1Sjakllsch#    are met:
111.1Sjakllsch#
121.1Sjakllsch#    * Redistributions of source code must retain the above copyright
131.1Sjakllsch#      notice, this list of conditions and the following disclaimer.
141.1Sjakllsch#    * Redistributions in binary form must reproduce the above
151.1Sjakllsch#      copyright notice, this list of conditions and the following
161.1Sjakllsch#      disclaimer in the documentation and/or other materials
171.1Sjakllsch#      provided with the distribution.
181.1Sjakllsch#    * Neither the name of Hewlett-Packard Co. nor the names of its
191.1Sjakllsch#      contributors may be used to endorse or promote products derived
201.1Sjakllsch#      from this software without specific prior written permission.
211.1Sjakllsch#
221.1Sjakllsch#    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
231.1Sjakllsch#    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
241.1Sjakllsch#    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
251.1Sjakllsch#    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
261.1Sjakllsch#    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
271.1Sjakllsch#    BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
281.1Sjakllsch#    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
291.1Sjakllsch#    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
301.1Sjakllsch#    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
311.1Sjakllsch#    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
321.1Sjakllsch#    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
331.1Sjakllsch#    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
341.1Sjakllsch#    SUCH DAMAGE.
351.1Sjakllsch#
361.1Sjakllsch
371.1SjakllschTOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
381.1Sjakllsch
391.1Sjakllsch#
401.1Sjakllsch# Variables below overridable from command-line:
411.1Sjakllsch#   make VARNAME=value ...
421.1Sjakllsch#
431.1Sjakllsch
441.1Sjakllsch#
451.1Sjakllsch# Where to install the package. GNU-EFI will create and access
461.1Sjakllsch# lib and include under the root
471.1Sjakllsch#
481.1SjakllschINSTALLROOT  := /
491.1SjakllschPREFIX       := /usr/local
501.1SjakllschLIBDIR 	     := $(PREFIX)/lib
511.1SjakllschINSTALL	     := install
521.1Sjakllsch
531.1.1.2Sjmcneill# Compilation tools
541.1.1.2SjmcneillHOSTCC       := $(prefix)gcc
551.1.1.2SjmcneillCC           := $(prefix)$(CROSS_COMPILE)gcc
561.1.1.2SjmcneillAS           := $(prefix)$(CROSS_COMPILE)as
571.1.1.2SjmcneillLD           := $(prefix)$(CROSS_COMPILE)ld
581.1.1.2SjmcneillAR           := $(prefix)$(CROSS_COMPILE)ar
591.1.1.2SjmcneillRANLIB       := $(prefix)$(CROSS_COMPILE)ranlib
601.1.1.2SjmcneillOBJCOPY      := $(prefix)$(CROSS_COMPILE)objcopy
611.1.1.2Sjmcneill
621.1.1.2Sjmcneill
631.1Sjakllsch# Host/target identification
641.1.1.2SjmcneillOS           := $(shell uname -s)
651.1.1.2SjmcneillHOSTARCH     ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
661.1.1.2SjmcneillARCH         ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
671.1.1.2Sjmcneill
681.1.1.2Sjmcneill# Get ARCH from the compiler if cross compiling 
691.1.1.2Sjmcneillifneq ($(CROSS_COMPILE),)
701.1.1.2Sjmcneill  override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
711.1.1.2Sjmcneillendif
721.1Sjakllsch
731.1Sjakllsch# FreeBSD (and possibly others) reports amd64 instead of x86_64
741.1Sjakllschifeq ($(ARCH),amd64)
751.1Sjakllsch  override ARCH := x86_64
761.1Sjakllschendif
771.1Sjakllsch
781.1.1.2Sjmcneill#
791.1.1.2Sjmcneill# Where to build the package
801.1.1.2Sjmcneill#
811.1.1.2SjmcneillOBJDIR       := $(TOPDIR)/$(ARCH)
821.1Sjakllsch
831.1Sjakllsch#
841.1Sjakllsch# Variables below derived from variables above
851.1Sjakllsch#
861.1Sjakllsch
871.1Sjakllsch# Arch-specific compilation flags
881.1SjakllschCPPFLAGS += -DCONFIG_$(ARCH)
891.1Sjakllsch
901.1.1.2SjmcneillCFLAGS += -Wno-error=pragmas
911.1.1.2Sjmcneill
921.1Sjakllschifeq ($(ARCH),ia64)
931.1Sjakllsch  CFLAGS += -mfixed-range=f32-f127
941.1Sjakllschendif
951.1Sjakllsch
961.1Sjakllschifeq ($(ARCH),ia32)
971.1Sjakllsch  CFLAGS += -mno-mmx -mno-sse
981.1Sjakllsch  ifeq ($(HOSTARCH),x86_64)
991.1Sjakllsch    ARCH3264 = -m32
1001.1Sjakllsch  endif
1011.1Sjakllschendif
1021.1Sjakllsch
1031.1Sjakllschifeq ($(ARCH),x86_64)
1041.1.1.2Sjmcneill  GCCVERSION   := $(shell $(CC) -dumpversion | cut -f1 -d.)
1051.1.1.2Sjmcneill  GCCMINOR     := $(shell $(CC) -dumpversion | cut -f2 -d.)
1061.1.1.2Sjmcneill  USING_CLANG  := $(shell $(CC) -v 2>&1 | grep -q 'clang version' && echo clang)
1071.1.1.2Sjmcneill
1081.1.1.2Sjmcneill  # Rely on GCC MS ABI support?
1091.1.1.2Sjmcneill  GCCNEWENOUGH := $(shell ( [ $(GCCVERSION) -gt "4" ]           \
1101.1.1.2Sjmcneill                            || ( [ $(GCCVERSION) -eq "4" ]      \
1111.1.1.2Sjmcneill                                 && [ $(GCCMINOR) -ge "7" ] ) ) \
1121.1.1.2Sjmcneill                          && echo 1)
1131.1.1.2Sjmcneill  ifeq ($(GCCNEWENOUGH),1)
1141.1.1.2Sjmcneill    CPPFLAGS += -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args --std=c11
1151.1.1.2Sjmcneill  else ifeq ($(USING_CLANG),clang)
1161.1.1.2Sjmcneill    CPPFLAGS += -DGNU_EFI_USE_MS_ABI --std=c11
1171.1.1.2Sjmcneill  endif
1181.1.1.2Sjmcneill
1191.1.1.2Sjmcneill  CFLAGS += -mno-red-zone
1201.1Sjakllsch  ifeq ($(HOSTARCH),ia32)
1211.1Sjakllsch    ARCH3264 = -m64
1221.1Sjakllsch  endif
1231.1Sjakllschendif
1241.1Sjakllsch
1251.1.1.2Sjmcneillifneq (,$(filter $(ARCH),ia32 x86_64))
1261.1.1.2Sjmcneill  # Disable AVX, if the compiler supports that.
1271.1.1.2Sjmcneill  CC_CAN_DISABLE_AVX=$(shell $(CC) -Werror -c -o /dev/null -xc -mno-avx - </dev/null >/dev/null 2>&1 && echo 1)
1281.1.1.2Sjmcneill  ifeq ($(CC_CAN_DISABLE_AVX), 1)
1291.1.1.2Sjmcneill    CFLAGS += -mno-avx
1301.1.1.2Sjmcneill  endif
1311.1.1.2Sjmcneillendif
1321.1.1.2Sjmcneill
1331.1.1.2Sjmcneillifeq ($(ARCH),mips64el)
1341.1.1.2Sjmcneill  CFLAGS += -march=mips64r2
1351.1.1.2Sjmcneill  ARCH3264 = -mabi=64
1361.1.1.2Sjmcneillendif
1371.1.1.2Sjmcneill
1381.1.1.2Sjmcneill#
1391.1.1.2Sjmcneill# Set HAVE_EFI_OBJCOPY if objcopy understands --target efi-[app|bsdrv|rtdrv],
1401.1.1.2Sjmcneill# otherwise we need to compose the PE/COFF header using the assembler
1411.1.1.2Sjmcneill#
1421.1.1.2Sjmcneillifneq ($(ARCH),aarch64)
1431.1.1.2Sjmcneillifneq ($(ARCH),arm)
1441.1.1.2Sjmcneillifneq ($(ARCH),mips64el)
1451.1.1.2Sjmcneillexport HAVE_EFI_OBJCOPY=y
1461.1.1.2Sjmcneillendif
1471.1.1.2Sjmcneillendif
1481.1.1.2Sjmcneillendif
1491.1.1.2Sjmcneill
1501.1.1.2Sjmcneillifneq ($(ARCH),arm)
1511.1.1.2Sjmcneillexport LIBGCC=$(shell $(CC) $(ARCH3264) -print-libgcc-file-name)
1521.1.1.2Sjmcneillendif
1531.1.1.2Sjmcneill
1541.1.1.2Sjmcneillifeq ($(ARCH),arm)
1551.1.1.2SjmcneillCFLAGS += -marm
1561.1.1.2Sjmcneillendif
1571.1.1.2Sjmcneill
1581.1Sjakllsch# Generic compilation flags
1591.1SjakllschINCDIR  += -I$(SRCDIR) -I$(TOPDIR)/inc -I$(TOPDIR)/inc/$(ARCH) \
1601.1Sjakllsch           -I$(TOPDIR)/inc/protocol
1611.1.1.2Sjmcneill
1621.1.1.2Sjmcneill# Only enable -fpic for non MinGW compilers (unneeded on MinGW)
1631.1.1.2SjmcneillGCCMACHINE := $(shell $(CC) -dumpmachine)
1641.1.1.2Sjmcneillifneq (mingw32,$(findstring mingw32, $(GCCMACHINE)))
1651.1.1.2Sjmcneill  CFLAGS += -fpic
1661.1.1.2Sjmcneillendif
1671.1.1.2Sjmcneill
1681.1.1.2Sjmcneillifeq (FreeBSD, $(findstring FreeBSD, $(OS)))
1691.1.1.2SjmcneillCFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
1701.1.1.2Sjmcneill           -fshort-wchar -fno-strict-aliasing \
1711.1.1.2Sjmcneill           -ffreestanding -fno-stack-protector
1721.1.1.2Sjmcneillelse
1731.1.1.2SjmcneillCFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
1741.1.1.2Sjmcneill           -fshort-wchar -fno-strict-aliasing \
1751.1.1.2Sjmcneill	   -ffreestanding -fno-stack-protector -fno-stack-check \
1761.1.1.2Sjmcneill           -fno-stack-check \
1771.1.1.2Sjmcneill           $(if $(findstring gcc,$(CC)),-fno-merge-all-constants,)
1781.1.1.2Sjmcneillendif
1791.1.1.2Sjmcneill
1801.1.1.2SjmcneillARFLAGS := rDv
1811.1SjakllschASFLAGS += $(ARCH3264)
1821.1.1.2SjmcneillLDFLAGS	+= -nostdlib --warn-common --no-undefined --fatal-warnings \
1831.1.1.2Sjmcneill	   --build-id=sha1
184