summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/Makefile4gem
blob: 87ff317f48d81d95d7d35421bf85ba529be3b2e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# This is the default Makefile integrated
# by each Gem. It integrates important constants
# for usage inside of a Gem.

ifeq ($(strip $(MRUBY_ROOT)),)
  # mruby src root
  MRUBY_ROOT := $(realpath ../../..)
endif

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

SRC_DIR := src
MRB_DIR := mrblib

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

GEM_PACKAGE := mrb-$(GEM)-gem.a

ifeq ($(strip $(ACTIVE_GEMS)),)
  # the default file which contains the active GEMs
  ACTIVE_GEMS = GEMS.active
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_PACKAGE) $(GEM_OBJECTS) $^

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

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

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

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

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

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

gem_mrblib_header.ctmp :
	$(MRUBY_ROOT)/mrbgems/generator gem_mrblib > $@

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

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

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

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

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

gem-clean-rb-files :
	-$(RM) $(GEM_PACKAGE) 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"