# Makefile fragment for defining the various tools and their options

INCLUDED_STDTOOLS = YES

#
# These are the tool definitions for builds using either the Norcroft or GNU toolchain in a POSIX environment, targetting RISC OS.
#

ifneq (Host,${APCS})
GNUTOOLPREFIX = arm-unknown-riscos-
SUFFIX_MODULE   = ,ffa
SUFFIX_ABSOLUTE = ,ff8
SUFFIX_OBEY     = ,feb
SUFFIX_DEBIMAGE = ,fd3
endif
SUFFIX_PERL     = ,102
SUFFIX_HEADER   = .h

#
# Core toolset.
#
ifeq (GNU,${TOOLCHAIN})
AOFASM          = asasm -aof
AR              = ${GNUTOOLPREFIX}ar
AS              = asasm
CC              = ${GNUTOOLPREFIX}gcc
C++             = ${GNUTOOLPREFIX}g++
CMHG            = cmunge
CPREPRO         = gcc -E -x c
ELF2AIF         = elf2aif
ifeq (C++,${LINK_TYPE})
LD              = ${GNUTOOLPREFIX}g++
else
LD              = ${GNUTOOLPREFIX}gcc
endif
LDBIN           = ldbin () { arm-unknown-riscos-objcopy -O binary $$2 $$1; }; ldbin
ifneq (Host,${APCS})
STRIP           = @echo > /dev/null
else
STRIP           = strip
endif
else
AOFASM          = armasm
AR              = armlib
AS              = armasm
CC              = armcc
C++             = armcpp
CMHG            = armcmhg
CPREPRO         = armcc -C++ -E
ELF2AIF         = @echo > /dev/null
ifeq (C++,${LINK_TYPE})
LD              = armlink -c++
else
LD              = armlink
endif
LDBIN           = armlink -bin -o
STRIP           = @echo > /dev/null
endif

BINAOF          = binaof
CAT             = cat
#DATA2AOF        = datatoaof
#DEFMOD          = defmod
DO              = 
ECHO            = echo
ERASECVS        = @erasecvs () { echo EraseCVS $$1; find $$1 -type d -exec rm -rf '{}/CVS' \; -exec rm -f '{}/.cvstag' \; }; erasecvs
FAPPEND         = @fappend () { echo FAppend $$@; local temp_file=$$(mktemp); local dest=$$1; shift; cat $$@ > $$temp_file; mv $$temp_file $$dest; }; fappend
FILTERCOMP      = perl ${TOOLSDIR}/Misc/FilterComp,102
FILTERCOMP2     = perl ${TOOLSDIR}/Misc/FilterComp2,102
GETVERSION      = perl ${TOOLSDIR}/Misc/GetVersion,102
HDR2H           = perl ${TOOLSDIR}/Build/Hdr2H,102
INSERTVERSION   = awk -f ${TOOLSDIR}/Build/AwkVers
INSTRES         = perl ${TOOLSDIR}/Build/InstRes,102
INSTVIARG       = perl ${TOOLSDIR}/Build/InstViaRG,102
MAKE            = make
MODGEN          = modgen
MODSQZ          = modsqz
NOP             = #
PERL            = perl
RESGEN          = resgen
RM              = rm -f
#SETTYPE         = settype
#SQUASH          = squash
ifneq (Host,${APCS})
SQZ             = armsqueeze
else
SQZ             = @echo > /dev/null
endif
#STRIPDEPEND     = stripdepnd
#TOGPA           = ToGPA
#TOKENCHECK      = tokencheck
TOKENISE        = Tokenise
TOUCH           = touch
#TRANSLATE       = translate
#UNMODSQZ        = unmodsqz

AWK             = awk
CD              = cd
CHMOD           = chmod
DF              = df
DIFF            = diff
EGREP           = egrep
FIND            = find
GAWK            = gawk
#IDENT           = GNU.ident
LEX             = flex
LS              = ls
MKDIR           = mkdir -p
PWD             = pwd
RPCGEN          = rpcgen
SED             = sed
WC              = wc
YACC            = bison
ZIP             = zip -9qr
UNZIP           = unzip

#
# Standard options.  These can be added to or overridden in the
# including makefile.
#
STDTOOLOPTIONS = ${THROWBACK}

ASFLAGS     += ${STDTOOLOPTIONS} ${ASMDEFINES} ${ASMINCLUDES}
ASFLAGS     += -I${GLOBALHDRDIR} -I${EXPORTDIR}
ASFLAGS     += -PD "APCS SETS \"${APCS}\"" -PD "Machine SETS \"${MACHINE}\"" -PD "UserIF SETS \"${USERIF}\""
ifeq (GNU,${TOOLCHAIN})
ifeq (Host,${APCS})
CINCLUDES   += -I${LIBDIR}/CLib
C++INCLUDES += -I${LIBDIR}/CLib
else
# GCCSDK seems to use the CLib headers instead of its own ones, which is a bad thing unless/until they gain GCC compatibility
endif
else
CINCLUDES   += -I${LIBDIR}/CLib
C++INCLUDES += -I${LIBDIR}/CLib
endif
CINCLUDES   += -I${LIBDIR}/RISC_OSLib \
               -I${CEXPORTDIR} \
               -I${LIBDIR} \
               -I.
C++INCLUDES += -I${LIBDIR}/RISC_OSLib \
               -I${CEXPORTDIR} \
               -I${LIBDIR} \
               -I.
ifeq (GNU,${TOOLCHAIN})
ifeq (Host,${APCS})
C++INCLUDES += -I${LIBDIR}/c++lib
else
# GCCSDK seems to use the C++Lib headers instead of its own ones, which is a bad thing unless/until they gain GCC compatibility
endif
else
C++INCLUDES += -I${LIBDIR}/c++lib
endif
CFLAGS      += -c ${STDTOOLOPTIONS} ${CDEFINES} ${CINCLUDES} ${C_NO_FNAMES} ${C_WARNINGS}
C++FLAGS    += -c ${STDTOOLOPTIONS} ${C++DEFINES} ${C++INCLUDES}
CMHGFLAGS   += -p ${STDTOOLOPTIONS} ${CMHGDEFINES} ${CMHGINCLUDES}

ifeq (GNU,${TOOLCHAIN})

ARFLAGS     := r
ASFLAGS     += ${ASASM_TOOLOPTIONS}
CFLAGS      += ${GCC_TOOLOPTIONS} -O2 -std=c99
C++FLAGS    += -O2
CMHGFLAGS   += ${CMUNGE_TOOLOPTIONS}

C_WARNINGS  := -Wall -Wextra
C_OPTSIZE   := -Os
C_OPTSPEED  := -O3
C_NO_ZI     := -fno-zero-initialized-in-bss
ifeq (Host,${APCS})
GCC_TOOLOPTIONS :=
else
C_NO_STKCHK := -mno-apcs-stack-check
C_STKCHK    := -mapcs-stack-check
C_NO_FNAMES := -mno-poke-function-name
C_FNAMES    := -mpoke-function-name
C_MODULE    := -mmodule
CFLAGS      += -mlibscl
C++FLAGS    += -mlibscl
LDFLAGS     += -mlibscl
endif
C_NOWARN_ASSIGNMENT_AS_CONDITION := -Wno-parentheses
C_NOWARN_NON_ANSI_INCLUDES :=

else

ARFLAGS     := -c -o
ASFLAGS     += ${OBJASM_TOOLOPTIONS} -Stamp -quit
CFLAGS      += ${NCC_TOOLOPTIONS}
CMHGFLAGS   += ${TOOLOPTIONS}

C_WARNINGS  := -fah
C_OPTSIZE   := -Ospace
C_OPTSPEED  := -Otime
C_NO_ZI     := -zz100000
C_NO_STKCHK := -zps1
C_STKCHK    := -zps0
C_NO_FNAMES := -ff
C_FNAMES    := -fn
C_MODULE    := -zM
C_NOWARN_ASSIGNMENT_AS_CONDITION := -Wa
C_NOWARN_NON_ANSI_INCLUDES := -Wp

endif

#
# Recursive forced copying options.
#
#  CPFLAGS go after the arguments
#  CPPREFLAGS go before the arguments
#
CPFLAGS    =
CPVFLAGS   =
CPPREFLAGS = -afL

CP         = cp ${CPPREFLAGS}

#
# Recursive forced deletion with no errors.
#
#  WFLAGS go after the arguments
#  WPREFLAGS go before the arguments
#
WFLAGS    =
WPREFLAGS = -rf

WIPE      = rm ${WPREFLAGS}

# Alternative version (implementation differs on RISC OS).
XWIPE     = rm ${WPREFLAGS}


# Directory separator character
SEP       = /

# Filename extension separator character
EXT       = .

# Parent directory
PARENT    = ..


# EOF