summaryrefslogtreecommitdiff
path: root/Puma/src/weave.mk
blob: a2b1ebd4ba075a1c6a25977e1c16b45b98101f7a (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifeq ($(MAKELEVEL),0)
#$(error Sorry, this makefile is not intended to be \
#used directly. Please use the makefile in the toplevel \
#directory of the PUMA source tree instead)
#endif

#-------------------------------------------------
# variables 
#-------------------------------------------------

include $(ROOT)/vars.mk

HEADERS   := $(shell find $(STEP1)/inc -name "*")
HEADERSDEP:= $(STEP2)/.inc

ACOBJECTS := $(notdir $(filter-out $(DONTWEAVE), $(SOURCES)))
ACOBJECTS += $(notdir $(LEMSOURCES:.lem=.cc))
ACOBJECTS := $(addprefix $(STEP2)/src/, $(ACOBJECTS))

CPPFLAGS  += -I $(EXTDIR) -I $(STEP1)/inc -I $(STEP1)/aspects

ACFILES   := $(addprefix $(STEP1)/aspects/Puma/, $(notdir $(ASPECTS)))
ACDEPS    := $(addprefix --include , $(ACFILES))
ACFLAGS   += $(addprefix -a , $(ACFILES))
#ACFLAGS   += $(CPPFLAGS) -I $(STEP1)/src -r $(GENDIR)/puma.acp
ACFLAGS   += $(CPPFLAGS) -I $(STEP1)/src
ACFLAGS   += --config $(CONFIG) --gen_size_type __SIZE_TYPE__ -k

DEPDIR    := $(STEP1)/dep
DEPFILES  := $(addprefix $(DEPDIR)/, $(notdir $(ACOBJECTS:.cc=.d)))

#-------------------------------------------------
# targets
#-------------------------------------------------

vpath %.cc  $(STEP1)/src
vpath %.d   $(DEPDIR)

ifneq ($(ASPECTS),)
all: showinfo dontweave $(ACOBJECTS) $(HEADERSDEP)
else
all: dontweave
	@cp -pr $(STEP1)/inc/Puma $(STEP2)/inc
	@cp -pr $(STEP1)/inc/Puma $(INCDIR)
endif

prof:
	@echo Profiling enabled

showinfo:
	@echo 
	@echo "---"
	@echo "Weaving PUMA for TARGET=$(TARGET)"
	@echo "  Weaver = $(AC) $(ACFLAGS)"
	@echo "---"
	@echo 

ifeq ($(DONTWEAVE),)
dontweave:
	@echo "Weaving into ALL files"
else
dontweave:
	@echo "Copying sources not to weave..."
	@cp -p $(DONTWEAVE) $(STEP2)/src
endif

#-------------------------------------------------
# rules
#-------------------------------------------------

$(STEP2)/src/%.cc : %.cc
	@echo "Weaving aspects into $(notdir $<)..."
	@$(AC) $(ACFLAGS) -p $(STEP1) -c $< -o $@
	@echo "$@: \\" > $(addprefix $(DEPDIR)/, $(notdir $(<:.cc=.d)))
	@grep "^#line" $@ | grep -v $(STEP2) | grep -v "<ac" | grep -v "\.ah" | \
	 awk '{print $$3}' | sed -e "s#\"##g" | sort | uniq |\
	 sed -e "s/$$/ \\\/g" >> $(addprefix $(DEPDIR)/, $(notdir $(<:.cc=.d)))
	@echo $(ACFILES) >> $(addprefix $(DEPDIR)/, $(notdir $(<:.cc=.d)))


$(HEADERSDEP): $(HEADERS) $(ACFILES)
	@echo "Generating library header files..."
	@touch $(HEADERSDEP)
	@cd $(STEP1) && $(AC) $(ACFLAGS) -i -p. -d$(STEP2)
	@cp -p $(STEP2)/aspects/Puma/*.ah $(STEP2)/inc/Puma
	@cp -pr $(STEP2)/inc/Puma $(INCDIR)


#-------------------------------------------------
# special targets
#-------------------------------------------------

.PHONY: all dontweave config showinfo

#-------------------------------------------------
# includes
#-------------------------------------------------

ifeq ($(MAKECMDGOALS),)
ifneq ($(DEPFILES),)
-include $(DEPFILES)
endif
endif