# Copyright 2010 by Nest Labs, Inc. All rights reserved.
#
# This program is confidential and proprietary to Nest Labs, Inc.,
# and may not be reproduced, published or disclosed to others without
# company authorization.
#

DEPTH = ../

include $(DEPTH)Makefile.config

OUTDIR = $(OBJ_DIR)
SRCDIR = ./
INCDIR = ./

OBJECT_FILES = \
    aes

HEADER_FILES = \
    aes

OBJECTS = $(OBJECT_FILES:%=$(OUTDIR)/%.o)
HEADERS = $(HEADER_FILES:%=$(INCDIR)/%.h)

.PHONY: ctrdrbg

all: $(OUTDIR) ctrdrbg $(LIB_DIR)/libpolarssl.a

$(OUTDIR):
	$(MKDIR) $(OUTDIR)

$(OUTDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
	$(CC) $(CFLAGS) -c $< -o $@

$(OUTDIR)/%.o: $(SRCDIR)/%.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c $< -o $@

$(OUTDIR)/libpolarssl.a: $(OBJECTS)
	$(ARCHIVE) $@ $(OBJECTS)
	$(RANLIB) $@

$(LIB_DIR)/libpolarssl.a: $(OUTDIR)/libpolarssl.a
	$(MKDIR) $(dir $@)
	$(CP) $< $@

$(OUTDIR)/aes.o: aes.c aes.h
	$(CC) $(CFLAGS) -c $(AES_IMPL_REDIRECT) $< -o $@
	

ctrdrbg:
	$(MAKE) -C $@

clean:
	$(MAKE) -C ctrdrbg clean
	$(RM) $(OUTDIR)

