177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Library Utility Functions 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# This should be included following 'lib_info.mk'. 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Function: GetCNAVar variable-name platform-key config arch 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Get a per-config-and-arch variable value. 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoGetCNAVar = $(strip \ 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(or $($(2).$(1).$(3).$(4)), \ 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $($(2).$(1).$(3)), \ 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $($(2).$(1).$(4)), \ 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $($(2).$(1)))) 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Function: SelectFunctionDir config arch function-name optimized 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Choose the appropriate implementation directory to use for 'function-name' in 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# the configuration 'config' and on given arch. 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctionDir = $(strip \ 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call Set,Tmp.SelectFunctionDir,$(call SelectFunctionDirs,$(1),$(2),$(3),$(4)))\ 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(call streq,1,$(words $(Tmp.SelectFunctionDir))),\ 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(Tmp.SelectFunctionDir),\ 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(error SelectFunctionDir: invalid function name "$(3)" ($(strip\ 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(call streq,0,$(words $(Tmp.SelectFunctionDir))),\ 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao no such function,\ 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao function implemented in multiple directories!!!)))))) 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Helper functions that select the entire list of subdirs where a function is 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# defined with a certain specificity. 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctionDirs_Opt_ConfigAndArch = $(strip \ 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(foreach key,$(AvailableIn.$(3)),\ 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(and $(call streq,Optimized,$($(key).Implementation)),\ 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call contains,$($(key).OnlyConfigs),$(1)),\ 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call contains,$($(key).OnlyArchs),$(2))),$(key),))) 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctionDirs_Opt_Config = $(strip \ 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(foreach key,$(AvailableIn.$(3)),\ 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(and $(call streq,Optimized,$($(key).Implementation)),\ 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call contains,$($(key).OnlyConfigs),$(1))),$(key),))) 3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctionDirs_Opt_Arch = $(strip \ 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(foreach key,$(AvailableIn.$(3)),\ 4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(and $(call streq,Optimized,$($(key).Implementation)),\ 4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call contains,$($(key).OnlyArchs),$(2))),$(key),))) 4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctionDirs_Gen = $(strip \ 4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(foreach key,$(AvailableIn.$(3)),\ 4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(call streq,Generic,$($(key).Implementation)),$(key)))) 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Helper function to select the right set of dirs in generic priority order. 4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctions_Gen = \ 4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(or $(call SelectFunctionDirs_Gen,$(1),$(2),$(3)),\ 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctionDirs_Opt_ConfigAndArch,$(1),$(2),$(3)), \ 5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctionDirs_Opt_Config,$(1),$(2),$(3)), \ 5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctionDirs_Opt_Arch,$(1),$(2),$(3))) 5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Helper function to select the right set of dirs in optimized priority order. 5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctions_Opt = \ 5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(or $(call SelectFunctionDirs_Opt_ConfigAndArch,$(1),$(2),$(3)), \ 5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctionDirs_Opt_Config,$(1),$(2),$(3)), \ 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctionDirs_Opt_Arch,$(1),$(2),$(3)), \ 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctionDirs_Gen,$(1),$(2),$(3))) 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Helper function to select the right set of dirs (which should be exactly one) 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# for a function. 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSelectFunctionDirs = \ 6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(call streq,1,$(4)),\ 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctions_Opt,$(1),$(2),$(3)),\ 6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(call SelectFunctions_Gen,$(1),$(2),$(3))) 66