148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# compiler-rt Configuration Support 248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# 348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# This should be included following 'lib_util.mk'. 448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# The simple variables configurations can define. 606f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel DunbarPlainConfigVariables := Configs Description 706f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel DunbarPerConfigVariables := UniversalArchs Arch $(AvailableOptions) 848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel DunbarRequiredConfigVariables := Configs Description 948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 1048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar### 1148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Load Platforms 1248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 1348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Template: subdir_traverse_template subdir 1448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbardefine load_platform_template 1548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,PlatformName,$(basename $(notdir $(1)))) 1648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarifneq ($(DEBUGMAKE),) 1748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(info MAKE: $(PlatformName): Loading platform) 1848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendif 1948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 2048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Construct the variable key for this directory. 2148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,PlatformKey,Platform.$(PlatformName)) 2248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Append,PlatformKeys,$(PlatformKey)) 2348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,$(PlatformKey).Name,$(PlatformName)) 2448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,$(PlatformKey).Path,$(1)) 2548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 2648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Reset platform specific variables to sentinel value. 2748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(foreach var,$(PlainConfigVariables) $(PerConfigVariables),\ 2848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call Set,$$(var),UNDEFINED)) 2948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(foreach var,$(PerConfigVariables),\ 3048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(foreach config,$$(Configs),\ 3148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call Set,$$(var).$$(config),UNDEFINED))) 3248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(foreach var,$(PerConfigVariables),\ 3348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(foreach arch,$(AvailableArchs),\ 3448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call Set,$$(var).$$(arch),UNDEFINED))) 3548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 3648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Get the platform variables. 3748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarinclude make/options.mk 3848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarinclude $(1) 3948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 4048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Check for undefined required variables. 4148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(foreach var,$(RequiredConfigVariables),\ 4248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(if $$(call strneq,UNDEFINED,$$($$(var))),, \ 4348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(error $(Dir): variable '$$(var)' was not undefined))) 4448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 4548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Check that exactly one of UniversalArchs or Arch was defined. 4648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(if $$(and $$(call strneq,UNDEFINED,$$(UniversalArchs)),\ 4748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call strneq,UNDEFINED,$$(Arch))),\ 4848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(error '$(1)': cannot define both 'UniversalArchs' and 'Arch')) 4948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(if $$(or $$(call strneq,UNDEFINED,$$(UniversalArchs)),\ 5048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call strneq,UNDEFINED,$$(Arch))),,\ 5148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(error '$(1)': must define one of 'UniversalArchs' and 'Arch')) 5248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 5348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Collect all the platform variables for subsequent use. 5448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(foreach var,$(PlainConfigVariables) $(PerConfigVariables),\ 5548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(if $$(call strneq,UNDEFINED,$$($$(var))),\ 5648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call CopyVariable,$$(var),$(PlatformKey).$$(var)))) 5748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$$(foreach var,$(PerConfigVariables),\ 5848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(foreach config,$$(Configs),\ 5948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(if $$(call strneq,UNDEFINED,$$($$(var).$$(config))),\ 6048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call CopyVariable,$$(var).$$(config),$(PlatformKey).$$(var).$$(config))))\ 6148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(foreach arch,$(AvailableArchs),\ 6248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(if $$(call strneq,UNDEFINED,$$($$(var).$$(arch))),\ 6348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call CopyVariable,$$(var).$$(arch),$(PlatformKey).$$(var).$$(arch))))\ 6448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(foreach config,$$(Configs),\ 6548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(foreach arch,$(AvailableArchs),\ 6648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(if $$(call strneq,UNDEFINED,$$($$(var).$$(config).$$(arch))),\ 6748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(call CopyVariable,$$(var).$$(config).$$(arch),\ 6848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $(PlatformKey).$$(var).$$(config).$$(arch)))))) 6948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 7048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarifneq ($(DEBUGMAKE),) 7148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $$(info MAKE: $(PlatformName): Done loading platform) 7248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendif 7348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendef 7448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 7548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Evaluate this now so we do not have to worry about order of evaluation. 7648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel DunbarPlatformFiles := $(wildcard make/platform/*.mk) 7748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarifneq ($(DEBUGMAKE),) 7848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $(info MAKE: Loading platforms: $(PlatformFiles)) 7948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendif 8048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar 8148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(foreach file,$(PlatformFiles),\ 8248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar $(eval $(call load_platform_template,$(file)))) 83