@@ -25,25 +25,41 @@ endif
2525PREFIX := /usr/local
2626LIBDIR := $(PREFIX ) /lib
2727BINDIR := $(PREFIX ) /bin
28+ SHAREDDIR := $(PREFIX ) /share
2829INCDIR := $(PREFIX ) /include
30+ ETCDIR := /etc
2931BASEDIR := $(CURDIR )
32+ ROOTDIR := $(CURDIR )
3033BUILDDIR := $(BASEDIR ) /.build
34+ TARGET_BUILDDIR := $(BUILDDIR ) /target
35+ HOST_BUILDDIR := $(BUILDDIR ) /host
3136MODULES := $(BASEDIR ) /modules
3237CONFIG := $(BASEDIR ) /.config.mk
3338TEST := 0
3439DEBUG := 0
3540PROFILE := 0
3641TRACE := 0
3742
43+ ifeq ($(DEVEL ) ,1)
44+ X_URL_SUFFIX = _RW
45+ else
46+ X_URL_SUFFIX = _RO
47+ endif
48+
3849include $(BASEDIR ) /make/functions.mk
3950include $(BASEDIR ) /make/system.mk
4051include $(BASEDIR ) /make/tools.mk
41- include $(BASEDIR ) /dependencies .mk
52+ include $(BASEDIR ) /modules .mk
4253include $(BASEDIR ) /project.mk
54+ include $(BASEDIR ) /dependencies.mk
4355
4456# 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 ) ) )
4763
4864# Determine versions
4965ifeq ($(findstring -devel,$(ARTIFACT_VERSION ) ) ,-devel)
@@ -61,54 +77,104 @@ endif
6177
6278define pkgconfig =
6379 $(eval name=$(1 ) )
80+
6481 $(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) ") ) ) \
6687 )
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 :=) )
7191endef
7292
7393define libconfig =
7494 $(eval name=$(1 ) )
95+
7596 $(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) ) ) \
77100 )
78- $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
101+
102+ $(if $($(name ) _OBJ) ,, $(eval $(name ) _OBJ :=) )
103+ $(if $(HOST_$(name ) _OBJ ) ,, $(eval HOST_$(name ) _OBJ :=) )
79104endef
80105
81106define optconfig =
82107 $(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") ) )
84147endef
85148
86149define srcconfig =
87150 $(eval name=$(1 ) )
88151 $(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 ) ,) )
101158endef
102159
103160define hdrconfig =
104161 $(eval name=$(1 ) )
105162 $(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") ) )
112178endef
113179
114180define vardef =
@@ -118,13 +184,21 @@ define vardef =
118184 $(if $(findstring src,$($(name ) _TYPE) ) , $(eval $(call srcconfig, $(name ) ) ) )
119185 $(if $(findstring hdr,$($(name ) _TYPE) ) , $(eval $(call hdrconfig, $(name ) ) ) )
120186 $(if $(findstring lib,$($(name ) _TYPE) ) , $(eval $(call libconfig, $(name ) ) ) )
187+ $(if $(findstring bin,$($(name ) _TYPE) ) , $(eval $(call binconfig, $(name ) ) ) )
121188 $(if $(findstring opt,$($(name ) _TYPE) ) , $(eval $(call optconfig, $(name ) ) ) )
122189endef
123190
124191# Define predefined variables
192+ ifndef ARTIFACT_TYPE
193+ ARTIFACT_TYPE := src
194+ endif
195+
125196ifndef $(ARTIFACT_ID)_NAME
126197 $(ARTIFACT_ID)_NAME := $(ARTIFACT_NAME )
127198endif
199+ ifndef $(ARTIFACT_ID)_TYPE
200+ $(ARTIFACT_ID)_TYPE := $(ARTIFACT_TYPE )
201+ endif
128202ifndef $(ARTIFACT_ID)_DESC
129203 $(ARTIFACT_ID)_DESC := $(ARTIFACT_DESC )
130204endif
@@ -134,11 +208,14 @@ endif
134208ifndef $(ARTIFACT_ID)_PATH
135209 $(ARTIFACT_ID)_PATH := $(BASEDIR )
136210endif
211+ ifndef HOST_$(ARTIFACT_ID)_PATH
212+ HOST_$(ARTIFACT_ID)_PATH := $(BASEDIR )
213+ endif
137214
215+ ROOT_ARTIFACT_ID := $(ARTIFACT_ID )
138216$(ARTIFACT_ID)_TESTING = $(TEST )
139- $(ARTIFACT_ID)_TYPE := src
140217
141- OVERALL_DEPS := $(DEPENDENCIES ) $(ARTIFACT_ID )
218+ OVERALL_DEPS := $(call uniq, $( DEPENDENCIES ) $(ARTIFACT_ID ) )
142219__tmp := $(foreach dep,$(OVERALL_DEPS ) ,$(call vardef, $(dep ) ) )
143220
144221CONFIG_VARS = \
@@ -149,19 +226,32 @@ CONFIG_VARS = \
149226 $(name ) _DESC \
150227 $(name ) _VERSION \
151228 $(name ) _TYPE \
229+ $(name ) _URL \
152230 $(name ) _BRANCH \
231+ \
153232 $(name ) _PATH \
154233 $(name ) _INC \
155234 $(name ) _SRC \
156235 $(name ) _TEST \
157236 $(name ) _TESTING \
158- $(name ) _URL \
159237 $(name ) _BIN \
160238 $(name ) _CFLAGS \
161239 $(name ) _MFLAGS \
162240 $(name ) _LDFLAGS \
163241 $(name ) _OBJ \
164242 $(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 \
165255 )
166256
167257.DEFAULT_GOAL := config
@@ -176,6 +266,8 @@ $(CONFIG_VARS): prepare
176266 echo " $( @) =$( $( @) ) " >> " $( CONFIG) "
177267
178268config : $(CONFIG_VARS )
269+ echo " Architecture: $( ARCHITECTURE) ($( ARCHITECTURE_CFLAGS) )"
270+ echo " Features: $( FEATURES) "
179271 echo " Configured OK"
180272
181273help : | toolvars sysvars
@@ -194,14 +286,15 @@ help: | toolvars sysvars
194286 echo " <ARTIFACT>_SRC path to source code files of the artifact"
195287 echo " <ARTIFACT>_TEST location of test files of the artifact"
196288 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"
202295 echo " <ARTIFACT>_URL location of the artifact git repoisitory"
203296 echo " <ARTIFACT>_VERSION version of the artifact used for building"
204297 echo " "
205298 echo " Artifacts used for build:"
206299 echo " $( DEPENDENCIES) "
207-
300+ echo " "
0 commit comments