# *****************************************************************************
# * 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
else
CURDIR=$(shell pwd)
%.o: %.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $(CURDIR)/$<
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 -Wextra -Wno-unused-parameter
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) \
	  -fshort-wchar

export CC AS LD CLEAN OBJCOPY OBJDUMP STRIP AR RANLIB CFLAGS
