BUILD_DIR ?= build

CC      ?= gcc
MKDIR   ?= mkdir
CP      ?= cp
RM      ?= rm
CMD     ?= cmd.exe
OPT     ?= -O0
CFLAGS  ?= -Wall -Wextra -Werror -std=gnu99 $(OPT)

SAMPLE_CODE_SRC_DIR ?= sample_code
CHIPLIB_LIB_DIR     ?= chiplib/bin/x86-64/windows
CHIPLIB_INC_DIRS    ?= chiplib/inc chiplib/inc/internal
UTILITIES_INC_DIR   ?= utilities/inc

BIN_SUFFIX ?= _source

INCS := \
	$(CHIPLIB_INC_DIRS) \
	$(UTILITIES_INC_DIR)

LIB_DIRS := \
	$(CHIPLIB_LIB_DIR)

DEFINES = -DNUM_SUPPORTED_DEVICES=1

INC_FLAGS += $(addprefix -I,$(INCS))
LIBDIR_FLAGS += $(addprefix -L,$(LIB_DIRS))

all: as7352_sample_code_chiplib_ftdi as7352_sample_code_chiplib_unicom

$(BUILD_DIR):
ifeq ($(OS),Windows_NT)
	$(CMD) /c "if not exist $(subst /,\,$@) md $(subst /,\,$@)"
else
	$(MKDIR) $@
endif

$(BUILD_DIR)/as7352_chiplib_ftdi.dll: $(BUILD_DIR) $(CHIPLIB_LIB_DIR)/as7352_chiplib_ftdi.dll
ifeq ($(OS),Windows_NT)
	$(CMD) /c "copy $(subst /,\,$(word 2,$^)) $(subst /,\,$@)"
else
	$(CP) $(word 2,$^) $@
endif

$(BUILD_DIR)/as7352_chiplib_unicom.dll: $(BUILD_DIR) $(CHIPLIB_LIB_DIR)/as7352_chiplib_unicom.dll
ifeq ($(OS),Windows_NT)
	$(CMD) /c "copy $(subst /,\,$(word 2,$^)) $(subst /,\,$@)"
else
	$(CP) $(word 2,$^) $@
endif

$(BUILD_DIR)/as7352_sample_code_chiplib_ftdi$(BIN_SUFFIX).exe: $(BUILD_DIR) $(SAMPLE_CODE_SRC_DIR)/as7352_sample_code_chiplib.c $(BUILD_DIR)/as7352_chiplib_ftdi.dll
	$(CC) $(word 2,$^) $(DEFINES) $(INC_FLAGS) $(LIBDIR_FLAGS) -DOSAL_FTDI=1 -las7352_chiplib_ftdi -o $@

$(BUILD_DIR)/as7352_sample_code_chiplib_unicom$(BIN_SUFFIX).exe: $(BUILD_DIR) $(SAMPLE_CODE_SRC_DIR)/as7352_sample_code_chiplib.c $(BUILD_DIR)/as7352_chiplib_unicom.dll
	$(CC) $(word 2,$^) $(DEFINES) $(INC_FLAGS) $(LIBDIR_FLAGS) -DOSAL_UNICOM=1 -las7352_chiplib_unicom -o $@

as7352_sample_code_chiplib_ftdi: $(BUILD_DIR)/as7352_sample_code_chiplib_ftdi$(BIN_SUFFIX).exe

as7352_sample_code_chiplib_unicom: $(BUILD_DIR)/as7352_sample_code_chiplib_unicom$(BIN_SUFFIX).exe

.PHONY: clean

clean:
ifeq ($(OS),Windows_NT)
	$(CMD) /c "if exist $(subst /,\,$(BUILD_DIR)) rmdir $(subst /,\,$(BUILD_DIR)) /s /q"
else
	$(RM) -rf $(BUILD_DIR)
endif
