TOOLCHAIN_PREFIX ?=

CXX := $(TOOLCHAIN_PREFIX)g++
AR  := $(TOOLCHAIN_PREFIX)ar

TARGET      := prog 
STATIC_LIB  := libjtag_wb_bridge.a
SHARED_LIB  := libjtag_wb_bridge.so

ADEPT_LIBDIR := /opt/packages/digilent.adept.runtime_2.27.9-x86_64/lib64

CPPFLAGS := -MMD -MP
CXXFLAGS := -O2 -Wall -Wextra -std=c++17 -fPIC
LDFLAGS  := -L$(ADEPT_LIBDIR) -Wl,--disable-new-dtags -Wl,-rpath,$(ADEPT_LIBDIR)
LIBS     := -ldjtg -ldmgr -ldpcomm -ldabs -ldftd2xx

LIB_SRCS := difilent_jtag.cpp jtag_wb_bridge_client.cpp jtag_wb_bridge_c.cpp
APP_SRCS := prog.cpp argparse.cpp

LIB_OBJS := $(LIB_SRCS:.cpp=.o)
APP_OBJS := $(APP_SRCS:.cpp=.o)
DEPS     := $(LIB_OBJS:.o=.d) $(APP_OBJS:.o=.d)

.PHONY: all clean

all: $(STATIC_LIB) $(SHARED_LIB) $(TARGET)

$(STATIC_LIB): $(LIB_OBJS)
	$(AR) rcs $@ $(LIB_OBJS)

$(SHARED_LIB): $(LIB_OBJS)
	$(CXX) -shared $(LDFLAGS) -o $@ $(LIB_OBJS) $(LIBS)

$(TARGET): $(APP_OBJS) $(STATIC_LIB)
	$(CXX) $(LDFLAGS) -o $@ $(APP_OBJS) -L. $(STATIC_LIB) $(LIBS)

%.o: %.cpp
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

clean:
	rm -f $(TARGET) $(STATIC_LIB) $(SHARED_LIB) $(LIB_OBJS) $(APP_OBJS) $(DEPS)

-include $(DEPS)
