# Makefile for libcryptomodule.a
#
# David A. McGrew
# Cisco Systems, Inc.

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
VPATH = @srcdir@

CC	= @CC@
INCDIR	= -Iinclude -I$(srcdir)/include
DEFS	= @DEFS@
CPPFLAGS= @CPPFLAGS@
CFLAGS	= @CFLAGS@
LIBS	= @LIBS@
LDFLAGS	= @LDFLAGS@ -L.
COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS)
CRYPTOLIB = -lcryptomodule

RANLIB	= @RANLIB@

# EXE defines the suffix on executables - it's .exe for cygwin, and
# null on linux, bsd, and OS X and other OSes.  we define this so that
# `make clean` will work on the cygwin platform
EXE = @EXE@
# Random source.
RNG_OBJS = @RNG_OBJS@

ifdef ARCH
  DEFS += -D$(ARCH)=1
endif

ifdef sysname
  DEFS += -D$(sysname)=1
endif

.PHONY: dummy all runtest clean superclean

dummy : all runtest 

# test applications 

testapp = test/cipher_driver$(EXE) test/datatypes_driver$(EXE) \
	  test/stat_driver$(EXE) test/sha1_driver$(EXE) \
	  test/kernel_driver$(EXE) test/aes_calc$(EXE) test/rand_gen$(EXE) \
	  test/env$(EXE)

# data values used to test the aes_calc application for AES-128
k128=000102030405060708090a0b0c0d0e0f
p128=00112233445566778899aabbccddeeff
c128=69c4e0d86a7b0430d8cdb78070b4c55a


# data values used to test the aes_calc application for AES-256
k256=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
p256=00112233445566778899aabbccddeeff
c256=8ea2b7ca516745bfeafc49904b496089


runtest: libcryptomodule.a $(testapp)
	test/env$(EXE) # print out information on the build environment
	@echo "running libcryptomodule test applications..."
	test `test/aes_calc $(k128) $(p128)` = $(c128)
	test `test/aes_calc $(k256) $(p256)` = $(c256)
	test/cipher_driver$(EXE) -v >/dev/null
	test/datatypes_driver$(EXE) -v >/dev/null
	test/stat_driver$(EXE) >/dev/null
	test/sha1_driver$(EXE) -v >/dev/null
	test/kernel_driver$(EXE) -v >/dev/null
	test/rand_gen$(EXE) -n 256 >/dev/null
	@echo "libcryptomodule test applications passed."

# libcryptomodule.a (the crypto engine) 

ciphers = cipher/cipher.o cipher/null_cipher.o      \
          cipher/aes.o cipher/aes_icm.o             \
          cipher/aes_cbc.o

hashes  = hash/null_auth.o hash/sha1.o \
          hash/hmac.o hash/auth.o

math    = math/datatypes.o math/stat.o

rng     = rng/$(RNG_OBJS) rng/rand_source.o rng/prng.o rng/ctr_prng.o

err     = kernel/err.o

kernel  = kernel/crypto_kernel.o  kernel/alloc.o   \
          kernel/key.o $(rng) $(err)

xfm     = ae_xfm/xfm.o

cryptobj =  $(ciphers) $(hashes) $(math) $(stat) $(kernel) $(xfm)

# the rule for making object files and test apps

%.o: %.c
	$(COMPILE) -c $< -o $@

%$(EXE): %.c libcryptomodule.a 
	$(COMPILE) $(LDFLAGS) $< -o $@ $(CRYPTOLIB) $(LIBS)

ifndef AR
  AR=ar
endif

# and the crypto module library itself

libcryptomodule.a: $(cryptobj) 
	$(AR) cr libcryptomodule.a $(cryptobj) 
	$(RANLIB) libcryptomodule.a

all: libcryptomodule.a $(testapp)

# housekeeping functions

clean:
	rm -f libcryptomodule.a
	rm -f $(testapp) *.o */*.o 
	for a in * .* */*; do if [ -f "$$a~" ] ; then rm $$a~; fi; done;
	rm -f `find . -name "*.[ch]~*~"`
	rm -rf latex

superclean: clean
	rm -f *core TAGS ktrace.out


# the target 'package' builds a compressed tar archive of the source code

distname = crypto-$(shell cat VERSION)

package: superclean
	cd ..; tar cvzf $(distname).tgz crypto/


# EOF
