# --------------------------------------------------------------------------
# Builds:
#   diskimage
#	libtool
#	keymap
#   makerom
#   libclap
#
# and puts them inside the build/tools folder.
#


# --------------------------------------------------------------------------
# Common Directories
#

BUILD_DIR := ../build
TOOLS_DIR := $(BUILD_DIR)/tools
OBJS_DIR := $(BUILD_DIR)/tools-objs
LIBS_DIR := ../Library
LIBSYSTEM_HEADERS_DIR := $(LIBS_DIR)/libsystem/Headers
LIBCLAP_DIR := $(LIBS_DIR)/libclap
LIBCLAP_HEADERS_DIR := $(LIBCLAP_DIR)/Headers
LIBCLAP_SOURCES_DIR := $(LIBCLAP_DIR)/Sources


# --------------------------------------------------------------------------
# Common Settings
#

#DEBUG_FLAGS := /Od /Zi
DEBUG_FLAGS :=


# --------------------------------------------------------------------------
# Includes
#

include ../common.mk


# --------------------------------------------------------------------------
# Build rules
#

.SUFFIXES:
.PHONY: clean


default: all

all: libclap makerom libtool keymap
#all: libclap makerom libtool keymap diskimage
#diskimage: $(TOOLS_DIR)/diskimage
keymap: $(TOOLS_DIR)/keymap
libtool: $(TOOLS_DIR)/libtool
makerom: $(TOOLS_DIR)/makerom
libclap: $(OBJS_DIR)/libclap.ar

clean:
	$(call rm_if_exists,$(OBJS_DIR))


$(TOOLS_DIR):
	$(call mkdir_if_needed,$(TOOLS_DIR))

$(OBJS_DIR):
	$(call mkdir_if_needed,$(OBJS_DIR))


# --------------------------------------------------------------------------
# libclap
#

LIBCLAP_H_SOURCES := $(wildcard $(LIBCLAP_SOURCES_DIR)/*.h)
LIBCLAP_C_SOURCES := $(wildcard $(LIBCLAP_SOURCES_DIR)/*.c)
LIBCLAP_OBJS := $(patsubst $(LIBCLAP_SOURCES_DIR)/%.c, $(OBJS_DIR)/%.o, $(LIBCLAP_C_SOURCES))

$(OBJS_DIR)%.o: $(LIBCLAP_SOURCES_DIR)%.c $(LIBCLAP_H_SOURCES) | $(OBJS_DIR)
	gcc -c -I$(LIBCLAP_HEADERS_DIR) $(DEBUG_FLAGS) -Wno-nullability-completeness -o $@ $<

$(OBJS_DIR)/libclap.ar: $(LIBCLAP_OBJS)
	ar rvs $@ $^


# --------------------------------------------------------------------------
# diskimage
#

# XXX not yet


# --------------------------------------------------------------------------
# keymap
#

KEYMAP_C_SOURCES := keymap.c

$(OBJS_DIR)/keymap.o: $(KEYMAP_C_SOURCES) | $(OBJS_DIR) $(TOOLS_DIR)
	gcc -c -I$(LIBCLAP_HEADERS_DIR) $(DEBUG_FLAGS) -Wno-nullability-completeness -o $@ $<

$(TOOLS_DIR)/keymap: $(OBJS_DIR)/keymap.o $(OBJS_DIR)/libclap.ar
	gcc -o $@ $^


# --------------------------------------------------------------------------
# libtool
#

LIBTOOL_C_SOURCES := libtool.c

$(OBJS_DIR)/libtool.o: $(LIBTOOL_C_SOURCES) | $(OBJS_DIR) $(TOOLS_DIR)
	gcc -c -I$(LIBCLAP_HEADERS_DIR) $(DEBUG_FLAGS) -Wno-nullability-completeness -o $@ $<

$(TOOLS_DIR)/libtool: $(OBJS_DIR)/libtool.o $(OBJS_DIR)/libclap.ar
	gcc -o $@ $^


# --------------------------------------------------------------------------
# makerom
#

MAKEROM_C_SOURCES := makerom.c

$(OBJS_DIR)/makerom.o: $(MAKEROM_C_SOURCES) | $(OBJS_DIR) $(TOOLS_DIR)
	gcc -c -I$(LIBCLAP_HEADERS_DIR) $(DEBUG_FLAGS) -Wno-nullability-completeness -o $@ $<

$(TOOLS_DIR)/makerom: $(OBJS_DIR)/makerom.o $(OBJS_DIR)/libclap.ar
	gcc -o $@ $^
