Home | History | Annotate | Download | only in gnu-efi-3.0
      1 # -*- makefile -*-
      2 # Copyright (c) 1999-2007 Hewlett-Packard Development Company, L.P.
      3 #	Contributed by David Mosberger <davidm (a] hpl.hp.com>
      4 #	Contributed by Stephane Eranian <eranian (a] hpl.hp.com>
      5 #
      6 #    All rights reserved.
      7 #
      8 #    Redistribution and use in source and binary forms, with or without
      9 #    modification, are permitted provided that the following conditions
     10 #    are met:
     11 #
     12 #    * Redistributions of source code must retain the above copyright
     13 #      notice, this list of conditions and the following disclaimer.
     14 #    * Redistributions in binary form must reproduce the above
     15 #      copyright notice, this list of conditions and the following
     16 #      disclaimer in the documentation and/or other materials
     17 #      provided with the distribution.
     18 #    * Neither the name of Hewlett-Packard Co. nor the names of its
     19 #      contributors may be used to endorse or promote products derived
     20 #      from this software without specific prior written permission.
     21 #
     22 #    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
     23 #    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
     24 #    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     25 #    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     26 #    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     27 #    BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
     28 #    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     29 #    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     30 #    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     31 #    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     32 #    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
     33 #    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     34 #    SUCH DAMAGE.
     35 #
     36 
     37 TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
     38 
     39 #
     40 # Variables below overridable from command-line:
     41 #   make VARNAME=value ...
     42 #
     43 
     44 #
     45 # Where to install the package. GNU-EFI will create and access
     46 # lib and include under the root
     47 #
     48 INSTALLROOT  := /
     49 PREFIX       := /usr/local
     50 LIBDIR 	     := $(PREFIX)/lib
     51 INSTALL	     := install
     52 
     53 # Compilation tools
     54 prefix       := /usr/bin/
     55 CC           := $(prefix)gcc
     56 AS           := $(prefix)as
     57 LD           := $(prefix)ld
     58 AR           := $(prefix)ar
     59 RANLIB       := $(prefix)ranlib
     60 OBJCOPY      := $(prefix)objcopy
     61 
     62 
     63 # Host/target identification
     64 OS	     := $(shell uname -s)
     65 HOSTARCH     := $(shell $(CC) -dumpmachine | cut -f1 -d- | sed s,i[3456789]86,ia32,)
     66 ARCH	     := $(shell uname -m | sed s,i[3456789]86,ia32,)
     67 
     68 # FreeBSD (and possibly others) reports amd64 instead of x86_64
     69 ifeq ($(ARCH),amd64)
     70   override ARCH := x86_64
     71 endif
     72 
     73 #
     74 # Variables below derived from variables above
     75 #
     76 
     77 GCCVERSION   := $(shell $(CC) -dumpversion | cut -f1 -d.)
     78 GCCMINOR     := $(shell $(CC) -dumpversion | cut -f2 -d.)
     79 
     80 # Rely on GCC MS ABI support?
     81 GCCNEWENOUGH := $(shell ( [ $(GCCVERSION) -gt "4" ]           \
     82                           || ( [ $(GCCVERSION) -eq "4" ]      \
     83                                && [ $(GCCMINOR) -ge "7" ] ) ) \
     84                         && echo 1)
     85 ifeq ($(GCCNEWENOUGH),1)
     86   CPPFLAGS += -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args --std=c11
     87 endif
     88 
     89 # Arch-specific compilation flags
     90 CPPFLAGS += -DCONFIG_$(ARCH)
     91 
     92 ifeq ($(ARCH),ia64)
     93   CFLAGS += -mfixed-range=f32-f127
     94 endif
     95 
     96 ifeq ($(ARCH),ia32)
     97   CFLAGS += -mno-mmx -mno-sse
     98   ifeq ($(HOSTARCH),x86_64)
     99     ARCH3264 = -m32
    100   endif
    101 endif
    102 
    103 ifeq ($(ARCH),x86_64)
    104   CFLAGS += -mno-red-zone -mno-mmx -mno-sse
    105   ifeq ($(HOSTARCH),ia32)
    106     ARCH3264 = -m64
    107   endif
    108 endif
    109 
    110 # Generic compilation flags
    111 INCDIR  += -I$(SRCDIR) -I$(TOPDIR)/inc -I$(TOPDIR)/inc/$(ARCH) \
    112            -I$(TOPDIR)/inc/protocol
    113 CFLAGS  += $(ARCH3264) -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing \
    114            -fno-merge-constants -ffreestanding -fno-stack-protector       \
    115            -fno-stack-check
    116 ASFLAGS += $(ARCH3264)
    117 LDFLAGS	+= -nostdlib --warn-common --no-undefined --fatal-warnings
    118