forked from open-power/libekb_p10
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile.generate
145 lines (121 loc) · 3.75 KB
/
Makefile.generate
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
ROOTPATH := ekb
PROJECT_ROOT := $(ROOTPATH)
OUTPUTPATH := output
LIBPATH := $(OUTPUTPATH)/lib
EXEPATH := $(OUTPUTPATH)/bin
OJBPATH := $(OUTPUTPATH)/obj
GENPATH := $(OUTPUTPATH)/gen
IMAGEPATH := $(OUTPUTPATH)/images
XIPPATH := $(OUTPUTPATH)/chips/p10/xip
DLIST :=
HLIST :=
PLIST :=
RLIST :=
SLIST :=
EKB_HLIST = \
$(shell find ekb/hwpf/fapi2/include -name '*.[Hh]' -print) \
$(shell find ekb/chips/common -name '*.[Hh]' -print) \
$(shell find ekb/chips/p10 -name '*.[Hh]' -print)
define _ADD_MODULE_SRCDIR
$(eval search_$(1) += $(2))
endef
define ADD_MODULE_SRCDIR
$(eval search_$(1) += $(2)/)
endef
define ADD_MODULE_INCDIR
$(eval DLIST += $(2))
endef
define ADD_MEMORY_INCDIRS
$(eval DLIST += $(GENPATH))
$(eval DLIST += $(ROOTPATH))
$(eval DLIST += $(ROOTPATH)/chips/centaur/procedures/hwp/memory/lib/shared)
$(eval DLIST += $(ROOTPATH)/chips/p10/common/include)
$(eval DLIST += $(ROOTPATH)/chips/p10/procedures/hwp/memory/lib)
$(eval DLIST += $(ROOTPATH)/chips/p10/procedures/hwp/memory)
endef
define __ADD_MODULE_INCDIRS
$(warning "WARNING: Missing implementation of __ADD_MODULE_INCDIRS")
endef
define BUILD_PROCEDURE
$(if $(findstring ifCompiler,$(PROCEDURE)),,\
$(eval $(call _BUILD_PROCEDURE))) \
$(eval OBJS :=) \
$(eval FAPI :=)
endef
define _BUILD_PROCEDURE
$(eval localdir := $(dir $(lastword $(MAKEFILE_LIST)))) \
$(eval DLIST += $(localdir)) \
$(eval RLIST += rule_$(PROCEDURE)) \
$(call _ADD_MODULE_SRCDIR,$(PROCEDURE),$(localdir)) \
$(eval $(call __BUILD_PROCEDURE)) \
$(eval header=$(wildcard $(localdir)/$(PROCEDURE).H)) \
$(if $(header),$(eval HLIST += $(PROCEDURE).H),) \
$(eval PLIST += lib$(PROCEDURE).a)
endef
define __BUILD_PROCEDURE
$(eval SRC := $(if $(filter $(FAPI),2_IFCOMPILER),\
$(subst _ifCompiler,,$(PROCEDURE).C),\
$(PROCEDURE).C)) \
$(eval SLIST += $(localdir)$(SRC)) \
$(if $(OBJS),$(eval $(call SET_OBJ_PATH)),) \
$(if $(FAPI),$(call FAPI$(FAPI)_PROCEDURE),$(call FAPI2_PROCEDURE))
endef
pathsearch = $(firstword $(wildcard $(addsuffix $(1),$(2))))
define SET_OBJ_PATH
$(foreach obj,$(OBJS),
$(eval objsrc=$(patsubst %.o,%.C,$(obj)))
$(eval objsrcpath=$(call pathsearch,$(objsrc),$(search_$(PROCEDURE))))
$(if $(objsrcpath),$(eval SRC_EXTRA += $(objsrcpath)),
$(error "Did not find $(obj) for $(PROCEDURE)")))
endef
define FAPI1_PROCEDURE
$(warning "WARNING: We don't know how to build FAPI1 yet for $(PROCEDURE)")
endef
dollar := \$$$$
define FAPI2_PROCEDURE
$(eval rule_$(PROCEDURE):
@echo "lib$(PROCEDURE)_a_CXXFLAGS = $(dollar)(LOCALCXXFLAGS)"
@echo "lib$(PROCEDURE)_a_CXXFLAGS += $(lib$(PROCEDURE)_COMMONFLAGS)"
@echo "lib$(PROCEDURE)_a_SOURCES = $(localdir)$(SRC) $(SRC_EXTRA)"
@echo
)
endef
define FAPI2_IFCOMPILER_PROCEDURE
$(eval rule_$(PROCEDURE):
@echo "lib$(PROCEDURE)_a_CXXFLAGS = $(dollar)(LOCALCXXFLAGS)"
@echo "lib$(PROCEDURE)_a_CXXFLAGS += $(lib$(PROCEDURE)_COMMONFLAGS)"
@echo "lib$(PROCEDURE)_a_CXXFLAGS += -DFAPI_SUPPORT_SPY_AS_STRING=1"
@echo "lib$(PROCEDURE)_a_CXXFLAGS += -DIFCOMPILER_PLAT=1"
@echo "lib$(PROCEDURE)_a_CXXFLAGS += -DPLAT_NO_THREAD_LOCAL_STORAGE=1"
@echo "lib$(PROCEDURE)_a_SOURCES = $(localdir)$(SRC) $(SRC_EXTRA)"
@echo
)
endef
all: definitions
include Makefile.istep
SLIST += $(SRC_EXTRA)
# Sort the source list to remove duplicates
ULIST = $(sort $(SLIST))
definitions:
@echo -n "PROC_INCLUDE_CFLAGS ="
@printf " \\\\\n\t-I\$$(srcdir)/%s" $(sort $(DLIST))
@echo
@echo
@echo -n "PROCEDURES ="
@printf " \\\\\n\t%s" $(ULIST)
@echo
@echo
@echo -n "EKB_HEADER = "
@printf " \\\\\n\t%s" $(EKB_HLIST)
@echo
@echo
procedures: $(RLIST)
headers:
@echo "/* This file is auto-generated, do not edit */"
@echo "#ifndef __EKB_INCLUDE_H__"
@echo "#define __EKB_INCLUDE_H__"
@echo
@printf "#include <%s>\n" $(sort $(HLIST))
@echo
@echo "#endif /* __EKB_INCLUDE_H__ */"
.PHONY: all definitions procedures headers