Makefile revision 77ed6142daed1e068fbda64405d0de9845e40e1
177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSubDirs := lib
277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Set default rule before anything else.
477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoall: help
577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/config.mk
777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/util.mk
877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# If SRCROOT is defined, assume we are doing an Apple style build. We should be
977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# able to use RC_XBS for this but that is unused during "make installsrc".
1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifdef SRCROOT
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  include make/AppleBI.mk
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Make sure we don't build with a missing ProjObjRoot.
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifeq ($(ProjObjRoot),)
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(error Refusing to build with empty ProjObjRoot variable)
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao##############
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao###
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Rules
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao###
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Top level targets
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# FIXME: Document the available subtargets.
2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaohelp:
2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "usage: make [{VARIABLE=VALUE}*] target"
3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "User variables:"
3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  VERBOSE=1: Use to show all commands [default=0]"
3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "Available targets:"
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  <platform name>: build the libraries for 'platform'"
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  clean:           clean all configurations"
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  test:            run unit tests"
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  info-platforms:  list available platforms"
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  help-devel:      print additional help for developers"
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaohelp-devel: help
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "Development targets:"
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  <platform name>-<config name>:"
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "    build the libraries for a single platform config"
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  <platform name>-<config name>-<arch name>:"
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "    build the libraries for a single config and arch"
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  info-functions: list available compiler-rt functions"
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  help-hidden: print help for Makefile debugging"
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaohelp-hidden: help-devel
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "Debugging variables:"
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  DEBUGMAKE=1: enable some Makefile logging [default=]"
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "           =2: enable more Makefile logging"
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "Debugging targets:"
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "  make-print-FOO: print information on the variable 'FOO'"
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinfo-functions:
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "compiler-rt Available Functions"
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "All Functions: $(AvailableFunctions)"
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@$(foreach fn,$(AvailableFunctions),\
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	  printf "  %-20s - available in (%s)\n" $(fn)\
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	    "$(foreach key,$(AvailableIn.$(fn)),$($(key).Dir))";)
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinfo-platforms:
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "compiler-rt Available Platforms"
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@echo "Platforms:"
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	@$(foreach key,$(PlatformKeys),\
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	  printf "  %s - from '%s'\n" $($(key).Name) $($(key).Path);\
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	  printf "    %s\n" "$($(key).Description)";\
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	  printf "    Configurations: %s\n\n" "$($(key).Configs)";)
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Provide default clean target which is extended by other templates.
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PHONY: clean
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoclean::
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Test
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PHONY: test
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotest:
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	cd test/Unit && ./test
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao###
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Directory handling magic.
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Create directories as needed, and timestamp their creation.
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao%/.dir:
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Summary) "  MKDIR:     $*"
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(MKDIR) $* > /dev/null
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(DATE) > $@
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Remove directories
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao%/.remove:
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(RM) -r $*
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao###
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Include child makefile fragments
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoDir := .
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/subdir.mk
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/lib_info.mk
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/lib_util.mk
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/lib_platforms.mk
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao###
11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Define Platform Rules
11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodefine PerPlatform_template
11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Key,$(1))
11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Name,$($(Tmp.Key).Name))
11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Configs,$($(Tmp.Key).Configs))
11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name))
11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Top-Level Platform Target
12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.Name):: $(Tmp.Configs:%=$(Tmp.ObjPath)/%/libcompiler_rt.a)
12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PHONY: $(Tmp.Name)
12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoclean::
12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) rm -rf $(Tmp.ObjPath)
12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Per-Config Libraries
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(foreach config,$(Tmp.Configs),\
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call PerPlatformConfig_template,$(config)))
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendef
13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodefine PerPlatformConfig_template
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Config,$(1))
13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config))
13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Compute the archs to build, depending on whether this is a universal build or
13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# not.
13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.ArchsToBuild,\
13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(if $(call IsDefined,$(Tmp.Key).UniversalArchs),\
13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao       $(strip \
14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao         $(or $($(Tmp.Key).UniversalArchs.$(Tmp.Config)),\
14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao              $($(Tmp.Key).UniversalArchs))),\
14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao       $(call VarOrDefault,$(Tmp.Key).Arch.$(Tmp.Config),$($(Tmp.Key).Arch))))
14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Copy or lipo to create the per-config library.
14577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Inputs,$(Tmp.ArchsToBuild:%=$(Tmp.ObjPath)/%/libcompiler_rt.a))
14677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.ObjPath)/libcompiler_rt.a: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
14777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Summary) "  FINAL-ARCHIVE: $(Tmp.Name)/$(Tmp.Config): $$@"
14877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	-$(Verb) $(RM) $$@
14977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(if $(call streq,1,$(words $(Tmp.ArchsToBuild))), \
15077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	  $(Verb) $(CP) $(Tmp.Inputs) $$@, \
15177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	  $(Verb) $(LIPO) -create -output $$@ $(Tmp.Inputs))
15277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PRECIOUS: $(Tmp.ObjPath)/.dir
15377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
15477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Per-Config Targets
15577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.Name)-$(Tmp.Config):: $(Tmp.ObjPath)/libcompiler_rt.a
15677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PHONY: $(Tmp.Name)-$(Tmp.Config)
15777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
15877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Per-Config-Arch Libraries
15977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(foreach arch,$(Tmp.ArchsToBuild),\
16077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call PerPlatformConfigArch_template,$(arch)))
16177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendef
16277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
16377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodefine PerPlatformConfigArch_template
16477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Arch,$(1))
16577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch))
16677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Functions,$(strip \
16777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,FUNCTIONS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
16877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Optimized,$(strip \
16977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,OPTIMIZED,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.AR,$(strip \
17177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,AR,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.ARFLAGS,$(strip \
17377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,ARFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.RANLIB,$(strip \
17577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,RANLIB,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.RANLIBFLAGS,$(strip \
17777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,RANLIBFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
17977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Compute the object inputs for this library.
18077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Inputs,\
18177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(foreach fn,$(sort $(Tmp.Functions)),\
18277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    $(call Set,Tmp.FnDir,\
18377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao      $(call SelectFunctionDir,$(Tmp.Config),$(Tmp.Arch),$(fn),$(Tmp.Optimized)))\
18477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    $(Tmp.ObjPath)/$(Tmp.FnDir)/$(fn).o))
18577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.ObjPath)/libcompiler_rt.a: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
18677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Summary) "  ARCHIVE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@"
18777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	-$(Verb) $(RM) $$@
18877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(Tmp.AR) $(Tmp.ARFLAGS) $$@ $(Tmp.Inputs)
18977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(Tmp.RANLIB) $(Tmp.RANLIBFLAGS) $$@
19077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PRECIOUS: $(Tmp.ObjPath)/.dir
19177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
19277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Per-Config-Arch Targets
19377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch):: $(Tmp.ObjPath)/libcompiler_rt.a
19477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PHONY: $(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch)
19577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
19677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Per-Config-Arch-SubDir Objects
19777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(foreach key,$(SubDirKeys),\
19877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call PerPlatformConfigArchSubDir_template,$(key)))
19977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendef
20077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
20177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodefine PerPlatformConfigArchSubDir_template
20277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.SubDirKey,$(1))
20377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.SubDir,$($(Tmp.SubDirKey).Dir))
20477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.SrcPath,$(ProjSrcRoot)/$(Tmp.SubDir))
20577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch)/$(Tmp.SubDirKey))
20677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.Dependencies,$($(Tmp.SubDirKey).Dependencies))
20777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.CC,$(strip \
20877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,CC,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
20977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Tmp.CFLAGS,$(strip \
21077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(if $(call IsDefined,$(Tmp.Key).UniversalArchs),-arch $(Tmp.Arch),)\
21177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(if $(call streq,$($(Tmp.Key).VISIBILITY_HIDDEN),1),\
21277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao       -fvisibility=hidden -DVISIBILITY_HIDDEN,)\
21377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(call GetCNAVar,CFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
21477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
21577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.s $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
21677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Summary) "  ASSEMBLE:  $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
21777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS)  -c -o $$@ $$<
21877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.S $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
21977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Summary) "  ASSEMBLE:  $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
22077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS) -c -o $$@ $$<
22177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.c $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
22277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Summary) "  COMPILE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
22377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS) -c -o $$@ $$<
22477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.PRECIOUS: $(Tmp.ObjPath)/.dir
22577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
22677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendef
22777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
22877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Run templates.
22977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(foreach key,$(PlatformKeys),\
23077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(eval $(call PerPlatform_template,$(key))))
23177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
23277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao###
23377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
23477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifneq ($(DEBUGMAKE),)
23577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(info MAKE: Done processing Makefile)
23677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  $(info  )
23777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif
238