# *****************************************************************************
# * Copyright (c) 2004, 2008 IBM Corporation
# * All rights reserved.
# * This program and the accompanying materials
# * are made available under the terms of the BSD License
# * which accompanies this distribution, and is available at
# * http://www.opensource.org/licenses/bsd-license.php
# *
# * Contributors:
# *     IBM Corporation - initial implementation
# ****************************************************************************/

#############################################################################
# BUILD ENV SETTINGS
#############################################################################

# CROSS is the prefix of your cross-compiler.
# You can override this variable in your environment (export CROSS=...).
ARCH := $(shell uname -p)

# Auto-detect ppc64
ifeq (ppc64,$(findstring ppc64,$(ARCH)))
  ifeq ($(ARCH), ppc64le)
    EXTRA_CC	= -mbig -mabi=elfv1
    EXTRA_LD	= -mbig
  endif
CROSS		?=
else
CROSS		?= powerpc64-linux-
endif

CELLSIZE	?= 64

HOSTCC		?= gcc
HOSTCFLAGS	= -g -Wall -W -O2 -I. -I../include
DD		= dd

ONLY_CC 	= $(CROSS)gcc -m$(CELLSIZE) $(EXTRA_CC)
ONLY_AS 	= $(CROSS)as -m$(CELLSIZE) $(EXTRA_LD)
ONLY_LD 	= $(CROSS)ld -melf$(CELLSIZE)ppc

# Verbose level:
#   V=0 means completely silent
#   V=1 means brief output
#   V=2 means full output
V		?= 1

ifeq ($(V),0)
Q		:= @
MAKEFLAGS	+= --silent
MAKE		+= -s
endif

ifeq ($(V),1)
MAKEFLAGS	+= --silent
MAKE		+= -s
CC		= printf "\t[CC]\t%s\n" `basename "$@"`; $(ONLY_CC)
AS		= printf "\t[AS]\t%s\n" `basename "$@"`; $(ONLY_AS)
LD		= printf "\t[LD]\t%s\n" `basename "$@"`; $(ONLY_LD)
CLEAN		= printf "\t[CLEAN]\t%s\n" "$(DIRECTORY)$$dir"
else
CC		= $(ONLY_CC)
AS		= $(ONLY_AS)
LD		= $(ONLY_LD)
CLEAN		= echo -n
endif

OBJCOPY 	?= $(CROSS)objcopy
OBJDUMP 	?= $(CROSS)objdump
STRIP		?= $(CROSS)strip
AR		?= $(CROSS)ar
RANLIB		?= $(CROSS)ranlib
CPP		?= $(CROSS)cpp

WARNFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -Wformat-security
CFLAGS ?= -g -O2 -fno-builtin -ffreestanding -nostdinc -msoft-float \
	  -fno-strict-aliasing -mno-altivec -mabi=no-altivec \
	  -fno-stack-protector -fno-asynchronous-unwind-tables $(WARNFLAGS)

export CC AS LD CLEAN OBJCOPY OBJDUMP STRIP AR RANLIB CFLAGS

