summaryrefslogtreecommitdiff
path: root/cesar/common/make/config.mk
blob: b49ae019f8a17b777d9b2935c23d1fba81f50a8f (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
# Build time configuration.

USER_PROJECT_CONFIG ?= $(wildcard $(if $(VARIANT),$(VARIANT)-)Config)
DEFAULT_PROJECT_CONFIG := $(OBJ_DIR)/Config.empty
PROJECT_CONFIG := $(if $(USER_PROJECT_CONFIG),$(USER_PROJECT_CONFIG),$(DEFAULT_PROJECT_CONFIG))
HEADERS_CONFIG := $(OBJ_INC_DIR)/config
CONFIG_LIST_FILE := $(OBJ_DIR)/Config.list
MODULE_LIST_FILE := $(OBJ_DIR)/Module.list

# Configuration is automatically updated if the list of config file has
# changed since last update.
-include $(CONFIG_LIST_FILE)
.PHONY: CONFIG_FORCE
CONFIG_FORCE := $(if $(call list-neq,$(CONFIG_LIST),$(PROJECT_CONFIG) $(MODULES_CONFIG)),CONFIG_FORCE)

# Module configuration should be updated if the list has changed.
-include $(MODULE_LIST_FILE)
.PHONY: MODULE_CONFIG_FORCE
MODULE_CONFIG_FORCE := $(if $(call list-neq,$(MODULE_LIST),$(ALL_MODULES)),MODULE_CONFIG_FORCE)

HEADERS_CONFIG_STAMP := $(HEADERS_CONFIG)/headers.stamp

.PHONY: BUILD_INFO_FORCE
BUILD_INFO_FLAGS := -i implementation

COMPILE_DEPS += $(HEADERS_CONFIG_STAMP) $(OBJ_INC_DIR)/module_config.h $(OBJ_INC_DIR)/build_info.h

$(DEFAULT_PROJECT_CONFIG): $(OBJ_DIR_STAMP)
	touch $@

$(MERGED_CONFIG): $(PROJECT_CONFIG) $(MODULES_CONFIG) $(OBJ_DIR_STAMP) $(CONFIG_FORCE)
	@echo CONF merge
	$Qsleep 1 # needed to make make see the file update.
	$Q$(TOOLS_DIR)/config-merge $(PROJECT_CONFIG) $(MODULES_CONFIG) > $@
	$Qecho CONFIG_LIST = $(PROJECT_CONFIG) $(MODULES_CONFIG) > $(CONFIG_LIST_FILE)

$(HEADERS_CONFIG_STAMP): $(MERGED_CONFIG)
	@echo CONF headers
	$Qmkdir -p $(dir $@)
	$Q$(TOOLS_DIR)/config-headers $(OBJ_INC_DIR) $<
	$Qtouch $@

$(OBJ_INC_DIR)/module_config.h: $(OBJ_INC_DIR_STAMP) $(MODULE_CONFIG_FORCE)
	@echo CONF module
	$Q$(TOOLS_DIR)/config-module $(ALL_MODULES) > $@
	$Qecho MODULE_LIST = $(ALL_MODULES) > $(MODULE_LIST_FILE)

$(OBJ_INC_DIR)/build_info.h: $(OBJ_INC_DIR_STAMP) BUILD_INFO_FORCE
	@echo CONF build-info
	$Q$(TOOLS_DIR)/build-info -H $@ $(BUILD_INFO_FLAGS)

config.clean:
	rm -f $(DEFAULT_PROJECT_CONFIG) $(MERGED_CONFIG) $(CONFIG_LIST_FILE) $(MODULE_LIST_FILE)
	rm -rf $(OBJ_INC_DIR)/config.h $(HEADERS_CONFIG) $(OBJ_INC_DIR)/module_config.h \
		$(OBJ_INC_DIR)/build_info.h