##
## Copyright 2020 Intel Corporation.
##
##
## This software and the related documents are Intel copyrighted materials, and your use of them is governed by
## the express license under which they were provided to you ('License'). Unless the License provides otherwise,
## you may not use, modify, copy, publish, distribute, disclose or transmit this software or the related
## documents without Intel's prior written permission.
## This software and the related documents are provided as is, with no express or implied warranties, other than
## those that are expressly stated in the License.
##

ifeq ($(G_SYSTEM),)
	exit 0
endif

CFLAGS   ?= $(G_CFLAGS)
CXXFLAGS ?= $(G_CXXFLAGS)
#
# Set binary architecture
#
ifeq ($(G_ARCH),intel64)
	CFLAGS        += -m64
	G_LIB_LDFLAGS += -m64
endif

#
# Set build name and paths
#
PROJ_NAME := ippcv_tl
ifeq ($(OUT_NAME),)
ifneq ($(DYNAMIC),)
    OUT_NAME := lib$(PROJ_NAME)$(G_LIB_SFX).so.$(G_IPP_INTERFACE_VERSION_MAJOR).$(G_IPP_INTERFACE_VERSION_MINOR)
	OUT_SONAME := lib$(PROJ_NAME)$(G_LIB_SFX).so.$(G_IPP_INTERFACE_VERSION_MAJOR)
	OUT_LN_NAME := lib$(PROJ_NAME)$(G_LIB_SFX).so
    G_LIB_LDFLAGS += -shared export.lin -Wl,-soname,$(OUT_SONAME)
else
    OUT_NAME := lib$(PROJ_NAME)$(G_LIB_SFX).a
endif
endif

ifneq ($(DYNAMIC),)
	CONF_LOC	:= $(G_CONF_DIR)_dynamic
else
	CONF_LOC	:= $(G_CONF_DIR)
endif

BUILD_PATH      := $(G_BUILD_ROOT)/$(G_ARCH)/$(CONF_LOC)
BUILD_PATH2     := $(G_BUILD_ROOT)/$(G_ARCH)/$(G_CONF)
OBJ_PATH        := $(BUILD_PATH)/obj/$(PROJ_NAME)
OUT_FULL        := $(BUILD_PATH)/$(OUT_NAME)
INCLUDES        := -I$(IPPROOT)/$(G_INCLUDE_RELATIVE_PATH) -I./include -I../include

ifneq ($(DYNAMIC),)
	IPP_LIBS_PATH   := $(IPPROOT)/$(G_IPP_PATH_SUFFIX)
	SO_LIBS		:= -L$(BUILD_PATH) -Wl,--start-group -lippcore_tl$(G_LIB_SFX) -lippi_tl$(G_LIB_SFX) $(IPP_LIBS_PATH)/libippi.a $(IPP_LIBS_PATH)/libipps.a $(IPP_LIBS_PATH)/libippvm.a $(IPP_LIBS_PATH)/libippcore.a $(IPP_LIBS_PATH)/libippcv.a -Wl,--end-group
endif

OBJS := $(patsubst src/%.c,$(OBJ_PATH)/%.o,$(wildcard src/*.c))

#
# Set variable targets
#
BUILD_TARGET := build

CLEAN_TARGET :=

all: out_path $(BUILD_TARGET)

build: obj_path out

out_path:
	mkdir -p $(BUILD_PATH)

obj_path:
	mkdir -p $(OBJ_PATH)

$(OBJ_PATH)/%.o : src/%.c
	$(CC) -c $(G_LIB_CFLAGS) $(CFLAGS) $(INCLUDES) -o $@ $<

ifneq ($(DYNAMIC),)
ifeq ($(G_SYSTEM),Linux)
out: $(OBJS)
	$(CC) -o $(OUT_FULL) $(G_LIB_LDFLAGS) $^ $(SO_LIBS)
	$(shell ln -sf $(OUT_NAME) $(BUILD_PATH)/$(OUT_SONAME))
	$(shell ln -sf $(OUT_SONAME) $(BUILD_PATH)/$(OUT_LN_NAME))
else
out: $(OBJS)
	$(CC) -o $(OUT_FULL) $(G_LIB_LDFLAGS) $^ $(SO_LIBS)
endif
else
out: $(OBJS)
	$(AR) $(ARFLAGS) $(OUT_FULL) $?
endif

ifeq ($(G_SYSTEM),Linux)
clean: $(CLEAN_TARGET)
	$(RM) $(BUILD_PATH)/$(OUT_SONAME)
	$(RM) $(BUILD_PATH)/$(OUT_LN_NAME)
	$(RM) $(OUT_FULL)
	$(RM) $(OBJS)
else
clean: $(CLEAN_TARGET)
	$(RM) $(OUT_FULL)
	$(RM) $(OBJS)
endif
