#
# Makefile
# Ilja KartaĊĦov, 2019-03-02 17:32
#
.POSIX:

# Project directories
SRC_DIR ?= src
SDK_DIR ?= sdk
OUT_DIR ?= build
LIB_DIR ?= lib
DESTDIR ?=

# Project definition
include project.mk

# Examples submodule
include examples.mk

# CFLAGS

CFLAGS := \
  $(PROJECT_INCLUDES) \
  -std=c99 \
  -pedantic \
  -Wall \
  -Wmissing-prototypes \
  -Wstrict-prototypes \
  -Wold-style-definition \
  -O2 \
  -s \
  -fvisibility=hidden \
  -DVERSION_MAJOR=$(PROJECT_VERSION_MAJOR) \
  -DVERSION_MINOR=$(PROJECT_VERSION_MINOR) \
  -DVERSION_TWEAK=$(PROJECT_VERSION_TWEAK) \
  -DVERSION_LABEL=$(PROJECT_VERSION_LABEL) \
  $(CPPFLAGS) \
  $(CFLAGS) \
  $(PROJECT_CFLAGS) \


LDFLAGS := \
  $(PROJECT_LIBRARIES) \
  $(LDFLAGS) \
  $(PROJECT_LDFLAGS) \


SOURCE_LIST := $(wildcard $(PROJECT_SOURCES))
OBJECT_FILES := $(addprefix $(OUT_DIR)/o_, ${SOURCE_LIST:.c=.o})


library: dirs $(OBJECT_FILES)
	$(info linking target: $@)
	@$(CC) -shared -o $(OUT_DIR)/lib$(PROJECT_NAME).so $(OBJECT_FILES) $(LDFLAGS)
	$(info done: $@)


build/o_%.o: %.c
	$(info compiling file: $<)
	@$(CC) $(CFLAGS) -fpic -c $< -o $@

dirs:
	$(info preparing: build folders)
	@mkdir -p $(OUT_DIR)/o_$(SRC_DIR)
	@mkdir -p $(OUT_DIR)/o_$(SDK_DIR)


clean:
	$(info cleaning: build files)
	@rm -Rf $(OUT_DIR)
	@rm -Rf ./vgcore.*

doc:
	doxygen doc/api-reference.conf

all: library examples doc

default: library
.PHONY:  all dirs clean doc install

install: library
	$(info installing files)
	@mkdir -p $(DESTDIR)$(PREFIX)/$(LIB_DIR)
	@mkdir -p $(DESTDIR)$(PREFIX)/include

	@cp $(OUT_DIR)/lib$(PROJECT_NAME).so $(DESTDIR)$(PREFIX)/$(LIB_DIR)
	@cp -R include/aisl $(DESTDIR)$(PREFIX)/include

# vim:ft=make
#