include ../../make.conf

BUILDDIR = ../../build/lib

TARGET = libccl

MAJOR = 0
MINOR = 1
VERSION = $(MAJOR).$(MINOR)

GEN_HEADERS = queue.h list.h util.h
CCL_HEADERS = ../include/ccl.h monitor.h protocol.h session.h settings.h app_tracker.h app_constants.h app_utils.h remote_config.h cJSON.h

GEN_SOURCES = queue.c dictionary.c list.c util.c json.c cJSON.c
CCL_SOURCES = ccl.c session.c protocol.c settings.c app_tracker.c event_handler.c app_utils.c remote_config.c

ifneq ($(BUILD_APP_ONLY),YES)
CCL_SOURCES += monitor.c bidid.c
endif

HEADERS = ${CCL_HEADERS} ${GEN_HEADERS} $(OUT_HEADERS)
SOURCES = ${CCL_SOURCES} ${GEN_SOURCES} $(OUT_SOURCES)
OBJECTS = $(patsubst %.c,$(BUILDDIR)/%.o,$(SOURCES))


CFLAGS += -I../include
CFLAGS += -fPIC
ifeq ($(ENABLE_COVERAGE), YES)
CFLAGS += -fprofile-arcs -ftest-coverage
endif

ifeq ($(UNAME), Linux)
LDFLAGS += -shared -Wl,-soname,$(TARGET).so.$(VERSION)
CFLAGS += $(COMMON_CFLAGS) -Werror
ifeq ($(ENABLE_COVERAGE), YES)
LDFLAGS += -fprofile-arcs -ftest-coverage
endif
endif

ifeq ($(UNAME), Darwin)
CFLAGS += $(COMMON_CFLAGS)
LDFLAGS += -lcurl
LDFLAGS += -dynamiclib
LDFLAGS += -install_name @rpath/$(TARGET).so
ifeq ($(ENABLE_COVERAGE), YES)
LDFLAGS += --coverage
endif
endif

all: build

build: CFLAGS += $(BUILD_CFLAGS)
build: $(BUILDDIR)/$(TARGET).so $(BUILDDIR)/$(TARGET).a

debug: CFLAGS += $(DEBUG_CFLAGS)
debug: $(BUILDDIR)/$(TARGET).so $(BUILDDIR)/$(TARGET).a

$(BUILDDIR)/$(TARGET).so.$(VERSION): $(OBJECTS)
	${CC} $(LDFLAGS) $^ -o $@

$(BUILDDIR)/$(TARGET).so: $(BUILDDIR)/$(TARGET).so.$(VERSION)
	rm -f $(BUILDDIR)/$(TARGET).so
	ln -s $(BUILDDIR)/$(TARGET).so.$(VERSION) $(BUILDDIR)/$(TARGET).so

$(BUILDDIR)/$(TARGET).a.$(VERSION): $(OBJECTS)
	ar rcs $@ $^

$(BUILDDIR)/$(TARGET).a: $(BUILDDIR)/$(TARGET).a.$(VERSION)
	rm -f $(BUILDDIR)/$(TARGET).a
	ln -s $(BUILDDIR)/$(TARGET).a.$(VERSION) $(BUILDDIR)/$(TARGET).a

$(BUILDDIR)/%.o:%.c $(BUILDDIR)/.d
	${CC} ${CFLAGS} -c $< -o $@

%/.d:
	mkdir -p $(BUILDDIR)
	mkdir -p ../../build/include
	cp ../include/* ../../build/include

clean:
	rm -f $(OBJECTS) $(BUILDDIR)/$(TARGET).so.$(VERSION) $(BUILDDIR)/$(TARGET).so a.out
