# *****************************************************************************
# * 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=...).
CROSS		?= powerpc64-linux-

CELLSIZE	?= 64

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

ONLY_CC 	= $(CROSS)gcc -m$(CELLSIZE)
ONLY_AS 	= $(CROSS)as -m$(CELLSIZE)
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
CFLAGS ?= -g -O2 -fno-builtin -ffreestanding -nostdinc -msoft-float -fno-strict-aliasing \
	  -mno-altivec -mabi=no-altivec -fno-stack-protector $(WARNFLAGS)

export CC AS LD CLEAN OBJCOPY OBJDUMP STRIP AR RANLIB CFLAGS

