GPP      ?= $(CROSS_PREFIX)g++
AR       := $(CROSS_PREFIX)ar
LIB_NAME := libpcida
RT_ROOT  ?= ../
RT_OUT ?= ../output
OBJ_DIR  := ./obj
LIB_DIR  := $(RT_OUT)/lib
SO_DIR   := $(RT_OUT)/so
BIN_DIR  := $(RT_OUT)/bin
KL2_RT_EN ?= 0

INC      := -I. -I$(RT_ROOT)/include
CFLAGS   := -fPIC -O0 -g -Werror -std=c++0x -fvisibility=hidden

ifdef CROSS_SYSROOT
	CFLAGS += --sysroot=$(CROSS_SYSROOT)
endif

ifeq ($(KL2_RT_EN), 1)
       CFLAGS += -DKL2_RT -lcrypto -lssl
endif

LDFLAGS  := -ldl -lpthread \
            -lstdc++ \
            -Wl,--no-undefined \
            -Wl,-rpath,'$$ORIGIN'

targets = $(LIB_DIR)/$(LIB_NAME).a \
          $(SO_DIR)/$(LIB_NAME).so

all: $(targets)

$(LIB_DIR)/$(LIB_NAME).a: $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(wildcard *.cpp))
	$(AR) -r -o $@ $^

$(SO_DIR)/$(LIB_NAME).so: $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(wildcard *.cpp))
	$(GPP) $(INC) $(CFLAGS) -shared -o $@ $^ $(LDFLAGS) -Wl,-soname,$(LIB_NAME).so

$(OBJ_DIR)/%.o: %.cpp dirmake
	$(GPP) -c $(INC) $(CFLAGS) -o $@  $<

$(OBJ_DIR)/%-debug.o: %.cpp dirmake
	$(GPP) -c $(INC) $(CFLAGS) -DDEBUG_XPU_RUNTIME -o $@  $<

dirmake:
	@mkdir -p $(LIB_DIR)
	@mkdir -p $(SO_DIR)
	@mkdir -p $(OBJ_DIR)

clean:
	rm -f $(OBJ_DIR)/*.o Makefile.bak
	rm -rf $(OBJ_DIR)
	rm -f $(targets)

rebuild: clean build
