# compiler-rt Library Info
#
# This should be included once the subdirectory information has been loaded, and
# uses the utilities in 'util.mk'.
#
# This defines the following variables describing compiler-rt:
#   AvailableFunctions   - The entire list of function names (unmangled) the
#                          library can provide.
#   CommonFunctions      - The list of generic functions available.
#   ArchFunctions.<arch> - The list of functions commonly available for
#                          'arch'. This does not include any config specific
#                          functions.
#
#   AvailableIn.<function> - The list of subdir keys where 'function' is
#                            defined.

# Determine the set of available modules.
AvailableModules := $(sort $(foreach key,$(SubDirKeys),\
	$($(key).ModuleName)))

# Build a per-module map of subdir keys.
$(foreach key,$(SubDirKeys),\
	$(call Append,ModuleSubDirKeys.$($(key).ModuleName),$(key)))

AvailableArchs := $(sort $(foreach key,$(SubDirKeys),\
	$($(key).OnlyArchs)))

AvailableFunctions := $(sort $(foreach key,$(SubDirKeys),\
	$(basename $($(key).ObjNames))))

CommonFunctions := $(sort\
  $(foreach key,$(ModuleSubDirKeys.builtins),\
    $(if $(call strneq,,$(strip $($(key).OnlyArchs) $($(key).OnlyConfigs))),,\
         $(basename $($(key).ObjNames)))))

# Compute common arch functions.
$(foreach key,$(ModuleSubDirKeys.builtins),\
  $(if $(call strneq,,$($(key).OnlyConfigs)),,\
    $(foreach arch,$($(key).OnlyArchs),\
      $(call Append,ArchFunctions.$(arch),$(sort \
        $(basename $($(key).ObjNames)))))))

# Compute arch only functions.
$(foreach arch,$(AvailableArchs),\
  $(call Set,ArchFunctions.$(arch),$(sort $(ArchFunctions.$(arch))))\
  $(call Set,ArchOnlyFunctions.$(arch),\
    $(call set_difference,$(ArchFunctions.$(arch)),$(CommonFunctions))))

# Compute lists of where each function is available.
$(foreach key,$(SubDirKeys),\
  $(foreach fn,$(basename $($(key).ObjNames)),\
    $(call Append,AvailableIn.$(fn),$(key))))

# The names of all the available options.
AvailableOptions := AR ARFLAGS \
                    CC CFLAGS FUNCTIONS OPTIMIZED \
                    RANLIB RANLIBFLAGS \
                    VISIBILITY_HIDDEN \
                    KERNEL_USE \
                    STRIP LIPO