xref: /DragonStub/Make.defaults (revision bd38ba4b6bd944986d148b923d26aa3069087a57)
1530d68baSNigel Croxon# -*- makefile -*-
2530d68baSNigel Croxon# Copyright (c) 1999-2007 Hewlett-Packard Development Company, L.P.
3530d68baSNigel Croxon#	Contributed by David Mosberger <davidm@hpl.hp.com>
4530d68baSNigel Croxon#	Contributed by Stephane Eranian <eranian@hpl.hp.com>
5530d68baSNigel Croxon#
6530d68baSNigel Croxon#    All rights reserved.
7530d68baSNigel Croxon#
8530d68baSNigel Croxon#    Redistribution and use in source and binary forms, with or without
9530d68baSNigel Croxon#    modification, are permitted provided that the following conditions
10530d68baSNigel Croxon#    are met:
11530d68baSNigel Croxon#
12530d68baSNigel Croxon#    * Redistributions of source code must retain the above copyright
13530d68baSNigel Croxon#      notice, this list of conditions and the following disclaimer.
14530d68baSNigel Croxon#    * Redistributions in binary form must reproduce the above
15530d68baSNigel Croxon#      copyright notice, this list of conditions and the following
16530d68baSNigel Croxon#      disclaimer in the documentation and/or other materials
17530d68baSNigel Croxon#      provided with the distribution.
18530d68baSNigel Croxon#    * Neither the name of Hewlett-Packard Co. nor the names of its
19530d68baSNigel Croxon#      contributors may be used to endorse or promote products derived
20530d68baSNigel Croxon#      from this software without specific prior written permission.
21530d68baSNigel Croxon#
22530d68baSNigel Croxon#    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23530d68baSNigel Croxon#    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24530d68baSNigel Croxon#    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25530d68baSNigel Croxon#    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26530d68baSNigel Croxon#    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
27530d68baSNigel Croxon#    BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28530d68baSNigel Croxon#    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29530d68baSNigel Croxon#    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30530d68baSNigel Croxon#    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31530d68baSNigel Croxon#    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
32530d68baSNigel Croxon#    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
33530d68baSNigel Croxon#    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34530d68baSNigel Croxon#    SUCH DAMAGE.
35530d68baSNigel Croxon#
36530d68baSNigel Croxon
37530d68baSNigel CroxonTOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
38530d68baSNigel Croxon
39530d68baSNigel Croxon#
40530d68baSNigel Croxon# Variables below overridable from command-line:
41530d68baSNigel Croxon#   make VARNAME=value ...
42530d68baSNigel Croxon#
43530d68baSNigel Croxon
44530d68baSNigel Croxon#
45530d68baSNigel Croxon# Where to install the package. GNU-EFI will create and access
46530d68baSNigel Croxon# lib and include under the root
47530d68baSNigel Croxon#
48530d68baSNigel CroxonINSTALLROOT  := /
49530d68baSNigel CroxonPREFIX       := /usr/local
50530d68baSNigel CroxonLIBDIR 	     := $(PREFIX)/lib
51530d68baSNigel CroxonINSTALL	     := install
52530d68baSNigel Croxon
53530d68baSNigel Croxon# Compilation tools
54530d68baSNigel CroxonHOSTCC       := $(prefix)gcc
55530d68baSNigel CroxonCC           := $(prefix)$(CROSS_COMPILE)gcc
56530d68baSNigel CroxonAS           := $(prefix)$(CROSS_COMPILE)as
57530d68baSNigel CroxonLD           := $(prefix)$(CROSS_COMPILE)ld
58530d68baSNigel CroxonAR           := $(prefix)$(CROSS_COMPILE)ar
59530d68baSNigel CroxonRANLIB       := $(prefix)$(CROSS_COMPILE)ranlib
60530d68baSNigel CroxonOBJCOPY      := $(prefix)$(CROSS_COMPILE)objcopy
61530d68baSNigel Croxon
62530d68baSNigel Croxon
63530d68baSNigel Croxon# Host/target identification
64530d68baSNigel CroxonOS           := $(shell uname -s)
65530d68baSNigel CroxonHOSTARCH     := $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed s,i[3456789]86,ia32,)
66530d68baSNigel CroxonARCH         := $(HOSTARCH)
67530d68baSNigel Croxon
68530d68baSNigel Croxon# Get ARCH from the compiler if cross compiling
69530d68baSNigel Croxonifneq ($(CROSS_COMPILE),)
70530d68baSNigel Croxon  override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed s,i[3456789]86,ia32,)
71530d68baSNigel Croxonendif
72530d68baSNigel Croxon
73530d68baSNigel Croxon# FreeBSD (and possibly others) reports amd64 instead of x86_64
74530d68baSNigel Croxonifeq ($(ARCH),amd64)
75530d68baSNigel Croxon  override ARCH := x86_64
76530d68baSNigel Croxonendif
77530d68baSNigel Croxon
78530d68baSNigel Croxon#
79ce7098fbSNigel Croxon# Where to build the package
80ce7098fbSNigel Croxon#
81ce7098fbSNigel CroxonOBJDIR       := $(TOPDIR)/$(ARCH)
82ce7098fbSNigel Croxon
83ce7098fbSNigel Croxon#
84530d68baSNigel Croxon# Variables below derived from variables above
85530d68baSNigel Croxon#
86530d68baSNigel Croxon
87530d68baSNigel Croxon# Arch-specific compilation flags
88530d68baSNigel CroxonCPPFLAGS += -DCONFIG_$(ARCH)
89530d68baSNigel Croxon
90530d68baSNigel Croxonifeq ($(ARCH),ia64)
91530d68baSNigel Croxon  CFLAGS += -mfixed-range=f32-f127
92530d68baSNigel Croxonendif
93530d68baSNigel Croxon
94530d68baSNigel Croxonifeq ($(ARCH),ia32)
95530d68baSNigel Croxon  CFLAGS += -mno-mmx -mno-sse
96530d68baSNigel Croxon  ifeq ($(HOSTARCH),x86_64)
97530d68baSNigel Croxon    ARCH3264 = -m32
98530d68baSNigel Croxon  endif
99530d68baSNigel Croxonendif
100530d68baSNigel Croxon
101530d68baSNigel Croxonifeq ($(ARCH),x86_64)
102530d68baSNigel Croxon  GCCVERSION   := $(shell $(CC) -dumpversion | cut -f1 -d.)
103530d68baSNigel Croxon  GCCMINOR     := $(shell $(CC) -dumpversion | cut -f2 -d.)
104530d68baSNigel Croxon
105530d68baSNigel Croxon  # Rely on GCC MS ABI support?
106530d68baSNigel Croxon  GCCNEWENOUGH := $(shell ( [ $(GCCVERSION) -gt "4" ]           \
107530d68baSNigel Croxon                            || ( [ $(GCCVERSION) -eq "4" ]      \
108530d68baSNigel Croxon                                 && [ $(GCCMINOR) -ge "7" ] ) ) \
109530d68baSNigel Croxon                          && echo 1)
110530d68baSNigel Croxon  ifeq ($(GCCNEWENOUGH),1)
111530d68baSNigel Croxon    CPPFLAGS += -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args --std=c11
112530d68baSNigel Croxon  endif
113530d68baSNigel Croxon
114b2c4db06SNigel Croxon  CFLAGS += -mno-red-zone
115530d68baSNigel Croxon  ifeq ($(HOSTARCH),ia32)
116530d68baSNigel Croxon    ARCH3264 = -m64
117530d68baSNigel Croxon  endif
118530d68baSNigel Croxonendif
119530d68baSNigel Croxon
120530d68baSNigel Croxon#
121530d68baSNigel Croxon# Set HAVE_EFI_OBJCOPY if objcopy understands --target efi-[app|bsdrv|rtdrv],
122530d68baSNigel Croxon# otherwise we need to compose the PE/COFF header using the assembler
123530d68baSNigel Croxon#
124530d68baSNigel Croxonifneq ($(ARCH),aarch64)
125530d68baSNigel Croxonifneq ($(ARCH),arm)
126530d68baSNigel Croxonexport HAVE_EFI_OBJCOPY=y
127530d68baSNigel Croxonendif
128530d68baSNigel Croxonendif
129530d68baSNigel Croxon
130530d68baSNigel Croxonifneq ($(ARCH),arm)
131530d68baSNigel Croxonexport LIBGCC=$(shell $(CC) $(ARCH3264) -print-libgcc-file-name)
132530d68baSNigel Croxonendif
133530d68baSNigel Croxon
134530d68baSNigel Croxonifeq ($(ARCH),arm)
135530d68baSNigel CroxonCFLAGS += -marm
136530d68baSNigel Croxonendif
137530d68baSNigel Croxon
138530d68baSNigel Croxon# Generic compilation flags
139530d68baSNigel CroxonINCDIR  += -I$(SRCDIR) -I$(TOPDIR)/inc -I$(TOPDIR)/inc/$(ARCH) \
140530d68baSNigel Croxon           -I$(TOPDIR)/inc/protocol
141530d68baSNigel Croxon
14250b88377SNigel Croxon# Only enable -fpic for non MinGW compilers (unneeded on MinGW)
14350b88377SNigel CroxonGCCMACHINE := $(shell $(CC) -dumpmachine)
14450b88377SNigel Croxonifneq (mingw32,$(findstring mingw32, $(GCCMACHINE)))
14550b88377SNigel Croxon  CFLAGS += -fpic
14650b88377SNigel Croxonendif
14750b88377SNigel Croxon
148530d68baSNigel Croxonifeq (FreeBSD, $(findstring FreeBSD, $(OS)))
14950b88377SNigel CroxonCFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
150a213b514SNigel Croxon           -fshort-wchar -fno-strict-aliasing \
151530d68baSNigel Croxon           -ffreestanding -fno-stack-protector
152530d68baSNigel Croxonelse
15350b88377SNigel CroxonCFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
154a213b514SNigel Croxon           -fshort-wchar -fno-strict-aliasing \
155530d68baSNigel Croxon           -fno-merge-constants -ffreestanding -fno-stack-protector \
156530d68baSNigel Croxon           -fno-stack-check
157530d68baSNigel Croxonendif
158530d68baSNigel Croxon
159*bd38ba4bSNigel CroxonARFLAGS += -U
160530d68baSNigel CroxonASFLAGS += $(ARCH3264)
16111a459baSNigel CroxonLDFLAGS	+= -nostdlib --warn-common --no-undefined --fatal-warnings \
16211a459baSNigel Croxon	   --build-id=sha1
163