1# compiler-rt Configuration Support 2# 3# This should be included following 'lib_util.mk'. 4 5# The simple variables configurations can define. 6PlainConfigVariables := Configs Description 7PerConfigVariables := UniversalArchs Arch $(AvailableOptions) 8RequiredConfigVariables := Configs Description 9 10### 11# Load Platforms 12 13# Template: subdir_traverse_template subdir 14define load_platform_template 15$(call Set,PlatformName,$(basename $(notdir $(1)))) 16ifneq ($(DEBUGMAKE),) 17 $$(info MAKE: $(PlatformName): Loading platform) 18endif 19 20# Construct the variable key for this directory. 21$(call Set,PlatformKey,Platform.$(PlatformName)) 22$(call Append,PlatformKeys,$(PlatformKey)) 23$(call Set,$(PlatformKey).Name,$(PlatformName)) 24$(call Set,$(PlatformKey).Path,$(1)) 25 26# Reset platform specific variables to sentinel value. 27$$(foreach var,$(PlainConfigVariables) $(PerConfigVariables),\ 28 $$(call Set,$$(var),UNDEFINED)) 29$$(foreach var,$(PerConfigVariables),\ 30 $$(foreach config,$$(Configs),\ 31 $$(call Set,$$(var).$$(config),UNDEFINED))) 32$$(foreach var,$(PerConfigVariables),\ 33 $$(foreach arch,$(AvailableArchs),\ 34 $$(call Set,$$(var).$$(arch),UNDEFINED))) 35 36# Get the platform variables. 37include make/options.mk 38include $(1) 39 40# Check for undefined required variables. 41$$(foreach var,$(RequiredConfigVariables),\ 42 $$(if $$(call strneq,UNDEFINED,$$($$(var))),, \ 43 $$(error $(Dir): variable '$$(var)' was not undefined))) 44 45# Check that exactly one of UniversalArchs or Arch was defined. 46$$(if $$(and $$(call strneq,UNDEFINED,$$(UniversalArchs)),\ 47 $$(call strneq,UNDEFINED,$$(Arch))),\ 48 $$(error '$(1)': cannot define both 'UniversalArchs' and 'Arch')) 49$$(if $$(or $$(call strneq,UNDEFINED,$$(UniversalArchs)),\ 50 $$(call strneq,UNDEFINED,$$(Arch))),,\ 51 $$(error '$(1)': must define one of 'UniversalArchs' and 'Arch')) 52 53# Collect all the platform variables for subsequent use. 54$$(foreach var,$(PlainConfigVariables) $(PerConfigVariables),\ 55 $$(if $$(call strneq,UNDEFINED,$$($$(var))),\ 56 $$(call CopyVariable,$$(var),$(PlatformKey).$$(var)))) 57$$(foreach var,$(PerConfigVariables),\ 58 $$(foreach config,$$(Configs),\ 59 $$(if $$(call strneq,UNDEFINED,$$($$(var).$$(config))),\ 60 $$(call CopyVariable,$$(var).$$(config),$(PlatformKey).$$(var).$$(config))))\ 61 $$(foreach arch,$(AvailableArchs),\ 62 $$(if $$(call strneq,UNDEFINED,$$($$(var).$$(arch))),\ 63 $$(call CopyVariable,$$(var).$$(arch),$(PlatformKey).$$(var).$$(arch))))\ 64 $$(foreach config,$$(Configs),\ 65 $$(foreach arch,$(AvailableArchs),\ 66 $$(if $$(call strneq,UNDEFINED,$$($$(var).$$(config).$$(arch))),\ 67 $$(call CopyVariable,$$(var).$$(config).$$(arch),\ 68 $(PlatformKey).$$(var).$$(config).$$(arch)))))) 69 70ifneq ($(DEBUGMAKE),) 71 $$(info MAKE: $(PlatformName): Done loading platform) 72endif 73endef 74 75# Evaluate this now so we do not have to worry about order of evaluation. 76PlatformFiles := $(wildcard make/platform/*.mk) 77ifneq ($(DEBUGMAKE),) 78 $(info MAKE: Loading platforms: $(PlatformFiles)) 79endif 80 81$(foreach file,$(PlatformFiles),\ 82 $(eval $(call load_platform_template,$(file)))) 83