@@ -25,25 +25,41 @@ endif
25
25
PREFIX := /usr/local
26
26
LIBDIR := $(PREFIX ) /lib
27
27
BINDIR := $(PREFIX ) /bin
28
+ SHAREDDIR := $(PREFIX ) /share
28
29
INCDIR := $(PREFIX ) /include
30
+ ETCDIR := /etc
29
31
BASEDIR := $(CURDIR )
32
+ ROOTDIR := $(CURDIR )
30
33
BUILDDIR := $(BASEDIR ) /.build
34
+ TARGET_BUILDDIR := $(BUILDDIR ) /target
35
+ HOST_BUILDDIR := $(BUILDDIR ) /host
31
36
MODULES := $(BASEDIR ) /modules
32
37
CONFIG := $(BASEDIR ) /.config.mk
33
38
TEST := 0
34
39
DEBUG := 0
35
40
PROFILE := 0
36
41
TRACE := 0
37
42
43
+ ifeq ($(DEVEL ) ,1)
44
+ X_URL_SUFFIX = _RW
45
+ else
46
+ X_URL_SUFFIX = _RO
47
+ endif
48
+
38
49
include $(BASEDIR ) /make/functions.mk
39
50
include $(BASEDIR ) /make/system.mk
40
51
include $(BASEDIR ) /make/tools.mk
41
- include $(BASEDIR ) /dependencies .mk
52
+ include $(BASEDIR ) /modules .mk
42
53
include $(BASEDIR ) /project.mk
54
+ include $(BASEDIR ) /dependencies.mk
43
55
44
56
# Compute the full list of dependencies
45
- UNIQ_DEPENDENCIES := $(call uniq, $(DEPENDENCIES ) $(TEST_DEPENDENCIES ) )
46
- DEPENDENCIES = $(UNIQ_DEPENDENCIES )
57
+ MERGED_DEPENDENCIES := \
58
+ $(DEPENDENCIES ) \
59
+ $(TEST_DEPENDENCIES )
60
+ UNIQ_MERGED_DEPENDENCIES := $(call uniq, $(MERGED_DEPENDENCIES ) )
61
+ DEPENDENCIES = $(UNIQ_MERGED_DEPENDENCIES )
62
+ FEATURES := $(call uniq, $(call subtraction,$(SUB_FEATURES ) ,$(DEFAULT_FEATURES ) $(ADD_FEATURES ) ) )
47
63
48
64
# Determine versions
49
65
ifeq ($(findstring -devel,$(ARTIFACT_VERSION ) ) ,-devel)
@@ -61,54 +77,104 @@ endif
61
77
62
78
define pkgconfig =
63
79
$(eval name=$(1 ) )
80
+
64
81
$(if $($(name ) _NAME) , \
65
- $(if $($(name ) _CFLAGS) ,, $(eval $(name ) _CFLAGS := $(shell pkg-config --cflags "$($(name ) _NAME) ") ) ) \
82
+ $(if $($(name ) _CFLAGS) ,, $(eval $(name ) _CFLAGS := $(shell $(PKG_CONFIG ) --cflags "$($(name ) _NAME) ") ) ) \
83
+ $(if $($(name ) _LDLAGS) ,, $(eval $(name ) _LDFLAGS := $(shell $(PKG_CONFIG ) --libs "$($(name ) _NAME) ") ) ) \
84
+ \
85
+ $(if $(HOST_$(name ) _CFLAGS ) ,, $(eval HOST_$(name ) _CFLAGS := $(shell $(HOST_PKG_CONFIG ) --cflags "$($(name ) _NAME) ") ) ) \
86
+ $(if $(HOST_$(name ) _LDLAGS ) ,, $(eval HOST_$(name ) _LDFLAGS := $(shell $(HOST_PKG_CONFIG ) --libs "$($(name ) _NAME) ") ) ) \
66
87
)
67
- $(if $($(name ) _NAME) , \
68
- $(if $($(name ) _LDLAGS) ,, $(eval $(name ) _LDFLAGS := $(shell pkg-config --libs "$($(name ) _NAME) ") ) ) \
69
- )
70
- $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
88
+
89
+ $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
90
+ $(if $(HOST_$(name ) _OBJ ) ,, $(eval HOST_$(name ) _OBJ :=) )
71
91
endef
72
92
73
93
define libconfig =
74
94
$(eval name=$(1 ) )
95
+
75
96
$(if $($(name ) _NAME) , \
76
- $(if $($(name ) _LDLAGS) ,, $(eval $(name ) _LDFLAGS := -l$($(name ) _NAME) ) ) \
97
+ $(if $($(name ) _LDLAGS) ,, $(eval $(name ) _LDFLAGS := -l$($(name ) _NAME) ) ) \
98
+ \
99
+ $(if $(HOST_$(name ) _LDLAGS ) ,, $(eval HOST_$(name ) _LDFLAGS := -l$($(name ) _NAME) ) ) \
77
100
)
78
- $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
101
+
102
+ $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
103
+ $(if $(HOST_$(name ) _OBJ ) ,, $(eval HOST_$(name ) _OBJ :=) )
79
104
endef
80
105
81
106
define optconfig =
82
107
$(eval name=$(1 ) )
83
- $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
108
+
109
+ $(if $($(name ) _NAME) , \
110
+ $(if $(HOST_$(name ) _LDLAGS ) ,, $(eval HOST_$(name ) _LDFLAGS := $($(name ) _LDFLAGS) ) ) \
111
+ )
112
+
113
+ $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
114
+ $(if $(HOST_$(name ) _OBJ ) ,, $(eval HOST_$(name ) _OBJ :=) )
115
+ endef
116
+
117
+ define _modconfig =
118
+ $(eval name=$(1 ) )
119
+ $(eval builtin=$(2 ) )
120
+
121
+ $(if $($(name ) _DESC) ,, $(eval $(name ) _DESC := $($(name ) _DESC) ) )
122
+ $(if $($(name ) _URL) ,, $(eval $(name ) _URL := $($(name ) _URL$(X_URL_SUFFIX ) ) ) )
123
+
124
+ $(if $($(name ) _PATH) ,, $(eval $(name ) _PATH := $(MODULES ) /$($(name ) _NAME) ) )
125
+ $(if $($(name ) _INC) ,, $(eval $(name ) _INC := $($(name ) _PATH) /include) )
126
+ $(if $($(name ) _SRC) ,, $(eval $(name ) _SRC := $($(name ) _PATH) /src) )
127
+ $(if $($(name ) _TEST) ,, $(eval $(name ) _TEST := $($(name ) _PATH) /test) )
128
+ $(if $($(name ) _TESTING) ,, $(eval $(name ) _TESTING := 0) )
129
+ $(if $($(name ) _BIN) ,, $(eval $(name ) _BIN := $(TARGET_BUILDDIR ) /$($(name ) _NAME) ) )
130
+ $(if $($(name ) _CFLAGS) ,, $(eval $(name ) _CFLAGS := "-I\"$($(name ) _INC) \""$(if $(builtin ) ," -D$(name ) _BUILTIN") ) )
131
+ $(if $($(name ) _LDLAGS) ,, $(eval $(name ) _LDFLAGS :=) )
132
+ $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ := "$($(name ) _BIN) /$($(name ) _NAME) .o") )
133
+ $(if $($(name ) _OBJ_TEST) ,, $(eval $(name ) _OBJ_TEST := "$($(name ) _BIN) /$($(name ) _NAME) -test.o") )
134
+ $(if $($(name ) _MFLAGS) ,, $(eval $(name ) _MFLAGS := $(if $(builtin ) ,"-D$(name ) _BUILTIN -fvisibility=hidden") ) )
135
+
136
+ $(if $(HOST_$(name ) _PATH ) ,, $(eval HOST_$(name ) _PATH := $(MODULES ) /$($(name ) _NAME) ) )
137
+ $(if $(HOST_$(name ) _INC ) ,, $(eval HOST_$(name ) _INC := $(HOST_$(name ) _PATH ) /include) )
138
+ $(if $(HOST_$(name ) _SRC ) ,, $(eval HOST_$(name ) _SRC := $(HOST_$(name ) _PATH ) /src) )
139
+ $(if $(HOST_$(name ) _TEST ) ,, $(eval HOST_$(name ) _TEST := $(HOST_$(name ) _PATH ) /test) )
140
+ $(if $(HOST_$(name ) _TESTING ) ,, $(eval HOST_$(name ) _TESTING := 0) )
141
+ $(if $(HOST_$(name ) _BIN ) ,, $(eval HOST_$(name ) _BIN := $(HOST_BUILDDIR ) /$($(name ) _NAME) ) )
142
+ $(if $(HOST_$(name ) _CFLAGS ) ,, $(eval HOST_$(name ) _CFLAGS := "-I\"$(HOST_$(name ) _INC ) \""$(if $(builtin ) ," -D$(name ) _BUILTIN") ) )
143
+ $(if $(HOST_$(name ) _LDLAGS ) ,, $(eval HOST_$(name ) _LDFLAGS :=) )
144
+ $(if $(HOST_$(name ) _OBJ ) ,, $(eval HOST_$(name ) _OBJ := "$(HOST_$(name ) _BIN ) /$($(name ) _NAME) .o") )
145
+ $(if $(HOST_$(name ) _OBJ_TEST ) ,,$(eval HOST_$(name ) _OBJ_TEST:= "$(HOST_$(name ) _BIN ) /$($(name ) _NAME) -test.o") )
146
+ $(if $(HOST_$(name ) _MFLAGS ) ,, $(eval HOST_$(name ) _MFLAGS := $(if $(builtin ) ,"-D$(name ) _BUILTIN -fvisibility=hidden") ) )
84
147
endef
85
148
86
149
define srcconfig =
87
150
$(eval name=$(1 ) )
88
151
$(eval builtin=$(patsubst $(ARTIFACT_NAME ) ,,$($(name ) _NAME) ) )
89
- $(if $($(name ) _PATH) ,, $(eval $(name ) _PATH := $(MODULES ) /$($(name ) _NAME) ) )
90
- $(if $($(name ) _DESC) ,, $(eval $(name ) _DESC := $($(name ) _DESC) ) )
91
- $(if $($(name ) _INC) ,, $(eval $(name ) _INC := $($(name ) _PATH) /include) )
92
- $(if $($(name ) _SRC) ,, $(eval $(name ) _SRC := $($(name ) _PATH) /src) )
93
- $(if $($(name ) _TEST) ,, $(eval $(name ) _TEST := $($(name ) _PATH) /test) )
94
- $(if $($(name ) _TESTING) ,, $(eval $(name ) _TESTING := 0) )
95
- $(if $($(name ) _BIN) ,, $(eval $(name ) _BIN := $(BUILDDIR ) /$($(name ) _NAME) ) )
96
- $(if $($(name ) _CFLAGS) ,, $(eval $(name ) _CFLAGS := "-I\"$($(name ) _INC) \"" $(if $(builtin ) ,"-D$(name ) _BUILTIN") ) )
97
- $(if $($(name ) _LDLAGS) ,, $(eval $(name ) _LDFLAGS :=) )
98
- $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ := "$($(name ) _BIN) /$($(name ) _NAME) .o") )
99
- $(if $($(name ) _OBJ_TEST) ,,$(eval $(name ) _OBJ_TEST:= "$($(name ) _BIN) /$($(name ) _NAME) -test.o") )
100
- $(if $($(name ) _MFLAGS) ,, $(eval $(name ) _MFLAGS := $(if $(builtin ) ,"-D$(name ) _BUILTIN -fvisibility=hidden") ) )
152
+ $(eval $(call _modconfig,$(name ) ,$(builtin ) ) )
153
+ endef
154
+
155
+ define binconfig =
156
+ $(eval name=$(1 ) )
157
+ $(eval $(call _modconfig,$(1 ) ,) )
101
158
endef
102
159
103
160
define hdrconfig =
104
161
$(eval name=$(1 ) )
105
162
$(eval builtin=$(patsubst $(ARTIFACT_NAME ) ,,$($(name ) _NAME) ) )
106
- $(if $($(name ) _PATH) ,, $(eval $(name ) _PATH := $(MODULES ) /$($(name ) _NAME) ) )
107
- $(if $($(name ) _DESC) ,, $(eval $(name ) _DESC := $($(name ) _DESC) ) )
108
- $(if $($(name ) _INC) ,, $(eval $(name ) _INC := $($(name ) _PATH) /include) )
109
- $(if $($(name ) _TESTING) ,, $(eval $(name ) _TESTING := 0) )
110
- $(if $($(name ) _CFLAGS) ,, $(eval $(name ) _CFLAGS := "-I\"$($(name ) _INC) \"" $(if $(builtin ) ,"-D$(name ) _BUILTIN") ) )
111
- $(if $($(name ) _MFLAGS) ,, $(eval $(name ) _MFLAGS := $(if $(builtin ) ,"-D$(name ) _BUILTIN -fvisibility=hidden") ) )
163
+
164
+ $(if $($(name ) _DESC) ,, $(eval $(name ) _DESC := $($(name ) _DESC) ) )
165
+ $(if $($(name ) _URL) ,, $(eval $(name ) _URL := $($(name ) _URL$(X_URL_SUFFIX ) ) ) )
166
+
167
+ $(if $($(name ) _PATH) ,, $(eval $(name ) _PATH := $(MODULES ) /$($(name ) _NAME) ) )
168
+ $(if $($(name ) _INC) ,, $(eval $(name ) _INC := $($(name ) _PATH) /include) )
169
+ $(if $($(name ) _TESTING) ,, $(eval $(name ) _TESTING := 0) )
170
+ $(if $($(name ) _CFLAGS) ,, $(eval $(name ) _CFLAGS := "-I\"$($(name ) _INC) \""$(if $(builtin ) ," -D$(name ) _BUILTIN") ) )
171
+ $(if $($(name ) _MFLAGS) ,, $(eval $(name ) _MFLAGS := $(if $(builtin ) ,"-D$(name ) _BUILTIN -fvisibility=hidden") ) )
172
+
173
+ $(if $(HOST_$(name ) _PATH ) ,, $(eval HOST_$(name ) _PATH := $(MODULES ) /$($(name ) _NAME) ) )
174
+ $(if $(HOST_$(name ) _INC ) ,, $(eval HOST_$(name ) _INC := $(HOST_$(name ) _PATH ) /include) )
175
+ $(if $(HOST_$(name ) _TESTING ) ,, $(eval HOST_$(name ) _TESTING := 0) )
176
+ $(if $(HOST_$(name ) _CFLAGS ) ,, $(eval HOST_$(name ) _CFLAGS := "-I\"$(HOST_$(name ) _INC ) \""$(if $(builtin ) ," -D$(name ) _BUILTIN") ) )
177
+ $(if $(HOST_$(name ) _MFLAGS ) ,, $(eval HOST_$(name ) _MFLAGS := $(if $(builtin ) ,"-D$(name ) _BUILTIN -fvisibility=hidden") ) )
112
178
endef
113
179
114
180
define vardef =
@@ -118,13 +184,21 @@ define vardef =
118
184
$(if $(findstring src,$($(name ) _TYPE) ) , $(eval $(call srcconfig, $(name ) ) ) )
119
185
$(if $(findstring hdr,$($(name ) _TYPE) ) , $(eval $(call hdrconfig, $(name ) ) ) )
120
186
$(if $(findstring lib,$($(name ) _TYPE) ) , $(eval $(call libconfig, $(name ) ) ) )
187
+ $(if $(findstring bin,$($(name ) _TYPE) ) , $(eval $(call binconfig, $(name ) ) ) )
121
188
$(if $(findstring opt,$($(name ) _TYPE) ) , $(eval $(call optconfig, $(name ) ) ) )
122
189
endef
123
190
124
191
# Define predefined variables
192
+ ifndef ARTIFACT_TYPE
193
+ ARTIFACT_TYPE := src
194
+ endif
195
+
125
196
ifndef $(ARTIFACT_ID)_NAME
126
197
$(ARTIFACT_ID)_NAME := $(ARTIFACT_NAME )
127
198
endif
199
+ ifndef $(ARTIFACT_ID)_TYPE
200
+ $(ARTIFACT_ID)_TYPE := $(ARTIFACT_TYPE )
201
+ endif
128
202
ifndef $(ARTIFACT_ID)_DESC
129
203
$(ARTIFACT_ID)_DESC := $(ARTIFACT_DESC )
130
204
endif
@@ -134,11 +208,14 @@ endif
134
208
ifndef $(ARTIFACT_ID)_PATH
135
209
$(ARTIFACT_ID)_PATH := $(BASEDIR )
136
210
endif
211
+ ifndef HOST_$(ARTIFACT_ID)_PATH
212
+ HOST_$(ARTIFACT_ID)_PATH := $(BASEDIR )
213
+ endif
137
214
215
+ ROOT_ARTIFACT_ID := $(ARTIFACT_ID )
138
216
$(ARTIFACT_ID)_TESTING = $(TEST )
139
- $(ARTIFACT_ID)_TYPE := src
140
217
141
- OVERALL_DEPS := $(DEPENDENCIES ) $(ARTIFACT_ID )
218
+ OVERALL_DEPS := $(call uniq, $( DEPENDENCIES ) $(ARTIFACT_ID ) )
142
219
__tmp := $(foreach dep,$(OVERALL_DEPS ) ,$(call vardef, $(dep ) ) )
143
220
144
221
CONFIG_VARS = \
@@ -149,19 +226,32 @@ CONFIG_VARS = \
149
226
$(name ) _DESC \
150
227
$(name ) _VERSION \
151
228
$(name ) _TYPE \
229
+ $(name ) _URL \
152
230
$(name ) _BRANCH \
231
+ \
153
232
$(name ) _PATH \
154
233
$(name ) _INC \
155
234
$(name ) _SRC \
156
235
$(name ) _TEST \
157
236
$(name ) _TESTING \
158
- $(name ) _URL \
159
237
$(name ) _BIN \
160
238
$(name ) _CFLAGS \
161
239
$(name ) _MFLAGS \
162
240
$(name ) _LDFLAGS \
163
241
$(name ) _OBJ \
164
242
$(name ) _OBJ_TEST \
243
+ \
244
+ HOST_$(name ) _PATH \
245
+ HOST_$(name ) _INC \
246
+ HOST_$(name ) _SRC \
247
+ HOST_$(name ) _TEST \
248
+ HOST_$(name ) _TESTING \
249
+ HOST_$(name ) _BIN \
250
+ HOST_$(name ) _CFLAGS \
251
+ HOST_$(name ) _MFLAGS \
252
+ HOST_$(name ) _LDFLAGS \
253
+ HOST_$(name ) _OBJ \
254
+ HOST_$(name ) _OBJ_TEST \
165
255
)
166
256
167
257
.DEFAULT_GOAL := config
@@ -176,6 +266,8 @@ $(CONFIG_VARS): prepare
176
266
echo " $( @) =$( $( @) ) " >> " $( CONFIG) "
177
267
178
268
config : $(CONFIG_VARS )
269
+ echo " Architecture: $( ARCHITECTURE) ($( ARCHITECTURE_CFLAGS) )"
270
+ echo " Features: $( FEATURES) "
179
271
echo " Configured OK"
180
272
181
273
help : | toolvars sysvars
@@ -194,14 +286,15 @@ help: | toolvars sysvars
194
286
echo " <ARTIFACT>_SRC path to source code files of the artifact"
195
287
echo " <ARTIFACT>_TEST location of test files of the artifact"
196
288
echo " <ARTIFACT>_TYPE artifact usage type"
197
- echo " - src - use sources and headers from git"
198
- echo " - hdr - use headers only from git"
199
- echo " - pkg - use pkgconfig for configuration"
200
- echo " - lib - use system headers and -l<libname> flags"
201
- echo " - opt - use optional configuration"
289
+ echo " - bin - binaries build from source code"
290
+ echo " - hdr - use headers only from git"
291
+ echo " - lib - use system headers and -l<libname> flags"
292
+ echo " - opt - use optional configuration"
293
+ echo " - pkg - use pkgconfig for configuration"
294
+ echo " - src - use sources and headers from git"
202
295
echo " <ARTIFACT>_URL location of the artifact git repoisitory"
203
296
echo " <ARTIFACT>_VERSION version of the artifact used for building"
204
297
echo " "
205
298
echo " Artifacts used for build:"
206
299
echo " $( DEPENDENCIES) "
207
-
300
+ echo " "
0 commit comments