# Copyright 1996 Acorn Computers Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Makefile for SprExtend
#
# ***********************************
# ***    C h a n g e   L i s t    ***
# ***********************************
# Date       Name    Description
# ----       ----    -----------
# 25-May-94  AMcC    Created.
# 12-Aug-94  AMcC    Updated for modified SpriteExtend (JPEG support)
# 29-Oct-94  AMcC    Exports hdr.SprExtend (SWI defs)
#                    Data file now called CFSIjpeg (was CFSI-jpeg)
#                    - exported to ChangeFSI at install time
# 01-Feb-95  GPS     Now compiles with cc505
# 13-Feb-95  GPS     CFSIjpeg now compiles with cc505
# 15-May-01  SNB     Re-engineered to use objasm throughout, not aasm
# 25-Sep-10  RPS     Now objasm is used, no need to postprocess C code
#                    as assembler with 'sed', just use the linker
#

#
# Paths
#
EXP_HDR = <export$dir>

# To switch between making debugging and non-debugging versions of SprExtend:
#   change the #define of DEBUG at the top of c.PutScaled
#   change the SETL of 'debug' in sources.SprExtend.
CDEFINES = -DRISCOS -DASMHUFF
CINCLUDES = -IC:

#
# Generic options:
#
include StdTools

#
# Libraries
#
CLIB = CLIB:o.stubs

#
# Program specific options:
#
COMPONENT = SpriteExtend
TARGET    = SprExtend
ROM_SOURCE= sources.${TARGET}
ROM_TARGET= rm.${TARGET}
LOCALMSG  = rm.${TARGET}M
EXPORTS   = ${EXP_HDR}.SprExtend

SFILES =\
 jhdr.s\
 stdpalette.s\
 yuvtabs.s

# Extra utilites (generate assembler code)
GENJHDR    = utils.genjhdr
GENPALETTE = utils.genpalette
GENYUVTABS = utils.genyuvtabs

# Needed for ChangeFSI
CFSI-JPEG  = data.CFSIjpeg

#
# Rule patterns
#
.SUFFIXES: .o .oh .c .sources

.c.o:;       ${CC} -c ${CFLAGS} ${TFLAGS} -o $@ $<
.c.oh:;      ${CC} -c ${CFLAGS} -o $@ $<
.sources.o:; ${AS} ${ASFLAGS} -from $< -to $@

#
# Rules:
#
all: ${CFSI-JPEG} ${LOCALMSG}
        @echo ${COMPONENT}: all built

install: ${CFSI-JPEG}
        ${MKDIR} ${INSTDIR}
        ${CP} ${CFSI-JPEG} ${INSTDIR}.CFSIjpeg ${CPFLAGS}
        Access ${INSTDIR}.CFSIjpeg lr/r
        @echo ${COMPONENT}: CFSIjpeg file installed

cfsi-jpeg: ${CFSI-JPEG}
        @echo ${COMPONENT}: CFSIjpeg file generated

#
# Generic rules:
#
rom: ${ROM_TARGET}
        @echo ${COMPONENT}: rom module built

export: ${EXPORTS}
        @echo ${COMPONENT}: export complete

install_rom: ${ROM_TARGET}
        ${MKDIR} ${INSTDIR}
        ${CP} ${ROM_TARGET} ${INSTDIR}.${TARGET} ${CPFLAGS}
        @echo ${COMPONENT}: rom module installed

clean:
        ${RM} ${ROM_TARGET}
        ${RM} ${LOCALMSG}
        ${RM} ${GENPALETTE}
        ${RM} ${GENYUVTABS}
        ${RM} ${GENJHDR}
        ${RM} ${CFSI-JPEG}
        ${WIPE} o.* ${WFLAGS}
        ${WIPE} oh.* ${WFLAGS}
        ${WIPE} s.* ${WFLAGS}
        @echo ${COMPONENT}: cleaned

resources:
        ${MKDIR} ${RESDIR}.${TARGET}
        TokenCheck LocalRes:Messages
        ${CP} LocalRes:Messages  ${RESDIR}.${TARGET}.Messages  ${CPFLAGS}
        @echo ${COMPONENT}: resource files copied


ROM_OBJECT  = ${TARGET}.o
${ROM_OBJECT}: ${ROM_SOURCE} ${SFILES} putscaled.o
        do mkdir -p o
        ${AS} ${ASFLAGS} -o $@ ${ROM_SOURCE}
${ROM_TARGET}: ${ROM_OBJECT}
        ${LD} -o $@ -rmf ${ROM_OBJECT} putscaled.o

# Get the Messages from somewhere other than Resources:$.Resources.SprExtend
LCL_OBJECT = ${TARGET}M.o
${LOCALMSG}: ${LCL_OBJECT}
        ${LD} -rmf -o $@ ${LCL_OBJECT} putscaled.o
${LCL_OBJECT}: ${ROM_SOURCE} ${SFILES} putscaled.o
        ${AS} ${ASFLAGS} -o $@ ${ROM_SOURCE} -PD "localmessages SETL {TRUE}"

# Export the SWI definitions to Hdr:
${EXP_HDR}.SprExtend: hdr.SprExtend
        ${CP} hdr.SprExtend $@ ${CPFLAGS}
        
#
# Generate the SFILES:
#
yuvtabs.s: ${GENYUVTABS}
        ${RUN}${GENYUVTABS} > $@

stdpalette.s: ${GENPALETTE}
        ${RUN}${GENPALETTE} > $@

jhdr.s: ${GENJHDR}
        ${RUN}${GENJHDR} > $@

${GENPALETTE}: genpalette.c
        ${MAKE} -f util/mk COMPONENT=genpalette THROWBACK=${THROWBACK}

${GENYUVTABS}: genyuvtabs.c
        ${MAKE} -f util/mk COMPONENT=genyuvtabs THROWBACK=${THROWBACK}

${GENJHDR}: genjhdr.c
        ${MAKE} -f util/mk COMPONENT=genjhdr THROWBACK=${THROWBACK}

#
# For ChangeFSI:
#
${CFSI-JPEG}: Sources.CFSI-JPEG jhdr.s stdpalette.s rojpeg.o
        ${AS} ${ASFLAGS} -o cfsi-jpeg.o Sources.CFSI-JPEG
        ${LD} -bin -o $@ cfsi-jpeg.o rojpeg.o

#
# Standalone C code (no library calls) for the assembler to use:
#
rojpeg.o:
        ${CC} ${CFLAGS} ${TFLAGS} -ff -zps1 -DEMBED -DSOURCE_IS_rojpeg $*.c

putscaled.o:
        ${CC} ${CFLAGS} ${TFLAGS} -ff -zps1 -DEMBED -DSOURCE_IS_putscaled $*.c

# Dynamic dependencies: