###############################################
# Linux
###############################################
LIB_TYPE=so
LIB_FLAGS=-shared
PCSC_HEADERS=-I/usr/include/PCSC
PCSC_LIB=-lpcsclite -Wl,-rpath,.

###############################################
# MacOS X
############################################### 
#LIB_TYPE=dylib
#LIB_FLAGS=-dynamiclib -flat_namespace -undefined suppress
#PCSC_HEADERS=-I/System/Library/Frameworks/PCSC.framework/Headers
#PCSC_LIB=-framework PCSC

CC = gcc
LD = gcc
CFLAGS = -fPIC -Wall -std=c99 -O4 $(PCSC_HEADERS)
LDFLAGS = -fPIC $(PCSC_LIB)

OBJS = acr122.o bitutils.o libnfc.o
HEADERS = acr122.h bitutils.h defines.h libnfc.h
LIB = libnfc.$(LIB_TYPE)
EXES = anticol list simulate relay mfread mfwrite

all: $(LIB) $(EXES)

acr122.o: acr122.c $(HEADERS)
bitutils.o: bitutils.c $(HEADERS)
libnfc.o: libnfc.c $(HEADERS)

%.s : %.c
	$(CC) -S -dA $(CFLAGS) -o $@ $<

libnfc.$(LIB_TYPE): $(OBJS)
	$(LD) $(LDFLAGS) -o $(LIB) $(LIB_FLAGS) $(OBJS)

anticol: $(OBJS)
	$(LD) $(LDFLAGS) -o anticol anticol.c -L. -lnfc

list: $(OBJS)
	$(LD) $(LDFLAGS) -o list list.c -L. -lnfc

simulate: $(OBJS)
	$(LD) $(LDFLAGS) -o simulate simulate.c -L. -lnfc

relay: $(OBJS)
	$(LD) $(LDFLAGS) -o relay relay.c -L. -lnfc
 
mfread: $(OBJS)
	$(LD) $(LDFLAGS) -o mfread mfread.c -L. -lnfc
 
mfwrite: $(OBJS)
	$(LD) $(LDFLAGS) -o mfwrite mfwrite.c -L. -lnfc
 
clean: 
	rm -f $(OBJS) $(LIB) $(EXES)