OBJECTS := main.o
EXE_NAME = can_utility
LIB_NAME = can
PRJ_OBJS = ${LIB_NAME}.o
STATIC_LIB_NAME = lib${LIB_NAME}.a
SHARED_LIB_NAME = lib${LIB_NAME}.so
CFLAGS = -O2 -Wall -lcurses -lpthread 
LFLAGS_STATIC = -L/usr/lib
LFLAGS_SHARED = -L/usr/lib -L./


all: libs util_static util_shared

libs: static_lib shared_lib

util_static: main.o
	gcc $(LFLAGS_STATIC) $(CFLAGS) -o $(EXE_NAME)_s main.o $(STATIC_LIB_NAME)

util_shared: main.o
	gcc $(LFLAGS_SHARED) $(CFLAGS) -lcan -o $(EXE_NAME)_d main.o 

main.o: main.c can.h
	gcc -O2 -Wall -D_REENTRANT -c main.c

static_lib: $(PRJ_OBJS)
	ar -crv $(STATIC_LIB_NAME) $(PRJ_OBJS)

shared_lib: $(PRJ_OBJS)
	ld -shared -soname $(SHARED_LIB_NAME) -o $(SHARED_LIB_NAME) $(PRJ_OBJS)

$(PRJ_OBJS):

.PHONY: clean

clean:
	rm *.o $(EXE_NAME)_s $(EXE_NAME)_d $(STATIC_LIB_NAME) $(SHARED_LIB_NAME)
