# This is the default Makefile integrated
# by each Gem. It integrates important constants
# for usage inside of a Gem.

# mruby src root
MRUBY_ROOT := ../../../

# Tools
CC := gcc
RM := rm -f
AR := ar

SRC_DIR := src
MRB_DIR := mrblib

INCLUDES := -I$(SRC_DIR) -I$(MRUBY_ROOT)include -I$(MRUBY_ROOT)src -I.
CFLAGS := $(INCLUDES) -O3 -g -Wall -Werror-implicit-function-declaration

# LIBR can be manipulated with command line arguments
ifeq ($(strip $(LIBR)),)
  # default mruby library
  LIBR := $(MRUBY_ROOT)lib/libmruby.a
endif

# Default rules which are calling the
# gem specific gem-all and gem-clean
# implementations of a gem

.PHONY : all
all : gem-info gem-all

gem-info:
	@echo "Building Gem '$(GEM)'"

# Building target for C and Ruby files
gem-c-and-rb-files : gem_mixlib.o
	$(AR) rs gem.a $(GEM_OBJECTS) $^

gem_mixlib.c : gem_mrblib_header.ctmp gem_mrblib_irep.ctmp gem_mixlib_init.ctmp
	cat $^ > $@

gem_mixlib_init.ctmp :
	../../generator gem_mixlib $(GEM) > $@

# Building target for C files
gem-c-files : gem_srclib.o
	$(AR) rs gem.a $(GEM_OBJECTS) $<

gem_srclib.c :
	../../generator gem_srclib $(GEM) > $@

# Building target for Ruby Files
gem-rb-files : gem_mrblib.o
	$(AR) rs gem.a $<

gem_mrblib.c : gem_mrblib_header.ctmp gem_mrblib_irep.ctmp gem_mrblib_init.ctmp
	cat $^ > $@

gem_mrblib_header.ctmp :
	../../generator gem_mrblib > $@

gem_mrblib_init.ctmp :
	../../generator gem_mrblib $(GEM) > $@

gem_mrblib_irep.ctmp : gem_mrblib.rbtmp
	../../../bin/mrbc -Bgem_mrblib_irep_$(GEM) -o$@ $<

gem_mrblib.rbtmp :
	cat $(GEM_RB_FILES) > $@

gem-clean-c-and-rb-files :
	-$(RM) gem.a gem_mixlib.o gem_mixlib.c gem_mrblib_header.ctmp gem_mrblib_irep.ctmp gem_mixlib_init.ctmp gem_mrblib.rbtmp

gem-clean-c-files :
	-$(RM) gem.a gem_srclib.c gem_srclib.o $(GEM_OBJECTS)

gem-clean-rb-files :
	-$(RM) gem.a gem_mrblib.o gem_mrblib.c gem_mrblib_header.ctmp gem_mrblib_init.ctmp gem_mrblib_irep.ctmp gem_mrblib.rbtmp

.PHONY : clean
clean : gem-clean
	@echo "Gem '$(GEM)' is clean"
