Makefile revision a6fd8452b557b9bc8350d343da2bea2b0b5dc28a
1b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel DunbarSubDirs := lib
2b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
3b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Set default rule before anything else.
448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarall: help
5b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
6b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarinclude make/config.mk
7b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarinclude make/util.mk
8557a6eace292091d14419a334e8d62d9ec9e772bDaniel Dunbar# If SRCROOT is defined, assume we are doing an Apple style build. We should be
9557a6eace292091d14419a334e8d62d9ec9e772bDaniel Dunbar# able to use RC_XBS for this but that is unused during "make installsrc".
10b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarifdef SRCROOT
11b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar  include make/AppleBI.mk
12b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarendif
13b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
14b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Make sure we don't build with a missing ProjObjRoot.
15b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarifeq ($(ProjObjRoot),)
16b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar$(error Refusing to build with empty ProjObjRoot variable)
17b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarendif
18b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
19b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar##############
20b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
21b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar###
22b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Rules
23b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
24b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar###
25b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Top level targets
26b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
27f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar# FIXME: Document the available subtargets.
28f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbarhelp:
29f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "usage: make [{VARIABLE=VALUE}*] target"
30f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo
31f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "User variables:"
32f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "  VERBOSE=1: Use to show all commands [default=0]"
33f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo
34f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "Available targets:"
3548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  <platform name>: build the libraries for 'platform'"
3648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  clean:           clean all configurations"
3748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  test:            run unit tests"
3848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo
3948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  info-platforms:  list available platforms"
4048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  help-devel:      print additional help for developers"
41f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo
42f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar
439edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbarhelp-devel: help
449edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@echo "Development targets:"
4548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  <platform name>-<config name>:"
4648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "    build the libraries for a single platform config"
4748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  <platform name>-<config name>-<arch name>:"
4848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "    build the libraries for a single config and arch"
499edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@echo "  info-functions: list available compiler-rt functions"
5048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "  help-hidden: print help for Makefile debugging"
519edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@echo
529edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar
539edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbarhelp-hidden: help-devel
54f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "Debugging variables:"
55faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbar	@echo "  DEBUGMAKE=1: enable some Makefile logging [default=]"
56faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbar	@echo "           =2: enable more Makefile logging"
57f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo
58f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "Debugging targets:"
59f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo "  make-print-FOO: print information on the variable 'FOO'"
60f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar	@echo
61f5722759b8fd2ae65042fe6f87908e3569dbfdf0Daniel Dunbar
629edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbarinfo-functions:
639edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@echo "compiler-rt Available Functions"
649edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@echo
659edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@echo "All Functions: $(AvailableFunctions)"
669edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	@$(foreach fn,$(AvailableFunctions),\
679edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	  printf "  %-20s - available in (%s)\n" $(fn)\
689edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar	    "$(foreach key,$(AvailableIn.$(fn)),$($(key).Dir))";)
699edf5cdd69d2d2a74b37ec14e475c5d6367e6eecDaniel Dunbar
7048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarinfo-platforms:
7148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "compiler-rt Available Platforms"
7248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo
7348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@echo "Platforms:"
7448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	@$(foreach key,$(PlatformKeys),\
7548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	  printf "  %s - from '%s'\n" $($(key).Name) $($(key).Path);\
7648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	  printf "    %s\n" "$($(key).Description)";\
7748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	  printf "    Configurations: %s\n\n" "$($(key).Configs)";)
7848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
79b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Provide default clean target which is extended by other templates.
80b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar.PHONY: clean
81b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarclean::
82b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
83b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Test
84b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar.PHONY: test
85b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbartest:
86b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	cd test/Unit && ./test
87b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
88b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar###
89b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Directory handling magic.
90b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
91b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Create directories as needed, and timestamp their creation.
92b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar%/.dir:
93b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	$(Summary) "  MKDIR:     $*"
94b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	$(Verb) $(MKDIR) $* > /dev/null
95b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	$(Verb) $(DATE) > $@
96b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
97b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Remove directories
98b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar%/.remove:
99b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	$(Verb) $(RM) -r $*
100b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
101b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar###
102b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar# Include child makefile fragments
103b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
104faf0150036689985ecea64e78f2637093857cd7bDaniel DunbarDir := .
105faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbarinclude make/subdir.mk
10678cfbc57c62949e16fa7b4a69775aa6450343a00Daniel Dunbarinclude make/lib_info.mk
10778cfbc57c62949e16fa7b4a69775aa6450343a00Daniel Dunbarinclude make/lib_util.mk
10848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarinclude make/lib_platforms.mk
10948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
11048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar###
11148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Define Platform Rules
11248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
11348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbardefine PerPlatform_template
11448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Key,$(1))
11548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Name,$($(Tmp.Key).Name))
11648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Configs,$($(Tmp.Key).Configs))
11748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name))
11848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
11948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Top-Level Platform Target
12048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.Name):: $(Tmp.Configs:%=$(Tmp.ObjPath)/%/libcompiler_rt.a)
12148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar.PHONY: $(Tmp.Name)
12248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
12348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarclean::
12448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Verb) rm -rf $(Tmp.ObjPath)
12548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
12648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Per-Config Libraries
12748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(foreach config,$(Tmp.Configs),\
12848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call PerPlatformConfig_template,$(config)))
12948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendef
13048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
13148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbardefine PerPlatformConfig_template
13248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Config,$(1))
13348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config))
13448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
13548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Compute the archs to build, depending on whether this is a universal build or
13648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# not.
13748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.ArchsToBuild,\
13848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(if $(call IsDefined,$(Tmp.Key).UniversalArchs),\
13906f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel Dunbar       $(strip \
14006f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel Dunbar         $(or $($(Tmp.Key).UniversalArchs.$(Tmp.Config)),\
14106f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel Dunbar              $($(Tmp.Key).UniversalArchs))),\
14248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar       $(call VarOrDefault,$(Tmp.Key).Arch.$(Tmp.Config),$($(Tmp.Key).Arch))))
14348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
14448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Copy or lipo to create the per-config library.
14548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Inputs,$(Tmp.ArchsToBuild:%=$(Tmp.ObjPath)/%/libcompiler_rt.a))
14648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.ObjPath)/libcompiler_rt.a: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
14748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Summary) "  FINAL-ARCHIVE: $(Tmp.Name)/$(Tmp.Config): $$@"
14848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	-$(Verb) $(RM) $$@
14948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(if $(call streq,1,$(words $(Tmp.ArchsToBuild))), \
15048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	  $(Verb) $(CP) $(Tmp.Inputs) $$@, \
15148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	  $(Verb) $(LIPO) -create -output $$@ $(Tmp.Inputs))
15248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar.PRECIOUS: $(Tmp.ObjPath)/.dir
15348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
15448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Per-Config Targets
15548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.Name)-$(Tmp.Config):: $(Tmp.ObjPath)/libcompiler_rt.a
15648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar.PHONY: $(Tmp.Name)-$(Tmp.Config)
15748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
15848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Per-Config-Arch Libraries
15948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(foreach arch,$(Tmp.ArchsToBuild),\
16048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call PerPlatformConfigArch_template,$(arch)))
16148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendef
16248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
16348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbardefine PerPlatformConfigArch_template
16448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Arch,$(1))
16548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch))
16648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Functions,$(strip \
167401f693a874c0f2fd9e37173e3ab7045a1bdeb3dDaniel Dunbar  $(AlwaysRequiredModules) \
16848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,FUNCTIONS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
16948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Optimized,$(strip \
17048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,OPTIMIZED,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.AR,$(strip \
17248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,AR,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.ARFLAGS,$(strip \
17448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,ARFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.RANLIB,$(strip \
17648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,RANLIB,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.RANLIBFLAGS,$(strip \
17848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,RANLIBFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
17948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
18048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Compute the object inputs for this library.
18148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Inputs,\
18248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(foreach fn,$(sort $(Tmp.Functions)),\
18348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar    $(call Set,Tmp.FnDir,\
18448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar      $(call SelectFunctionDir,$(Tmp.Config),$(Tmp.Arch),$(fn),$(Tmp.Optimized)))\
18548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar    $(Tmp.ObjPath)/$(Tmp.FnDir)/$(fn).o))
18648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.ObjPath)/libcompiler_rt.a: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
18748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Summary) "  ARCHIVE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@"
18848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	-$(Verb) $(RM) $$@
18948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Verb) $(Tmp.AR) $(Tmp.ARFLAGS) $$@ $(Tmp.Inputs)
19048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Verb) $(Tmp.RANLIB) $(Tmp.RANLIBFLAGS) $$@
19148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar.PRECIOUS: $(Tmp.ObjPath)/.dir
19248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
19348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Per-Config-Arch Targets
19448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch):: $(Tmp.ObjPath)/libcompiler_rt.a
19548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar.PHONY: $(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch)
19648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
19748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Per-Config-Arch-SubDir Objects
19848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(foreach key,$(SubDirKeys),\
19948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call PerPlatformConfigArchSubDir_template,$(key)))
20048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendef
20148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
20248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbardefine PerPlatformConfigArchSubDir_template
20348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.SubDirKey,$(1))
20448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.SubDir,$($(Tmp.SubDirKey).Dir))
20548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.SrcPath,$(ProjSrcRoot)/$(Tmp.SubDir))
20648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch)/$(Tmp.SubDirKey))
20748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.Dependencies,$($(Tmp.SubDirKey).Dependencies))
20848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.CC,$(strip \
20948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,CC,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
210d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar$(call Set,Tmp.KERNEL_USE,$(strip \
211d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar  $(call GetCNAVar,KERNEL_USE,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
212d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar$(call Set,Tmp.VISIBILITY_HIDDEN,$(strip \
213d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar  $(call GetCNAVar,VISIBILITY_HIDDEN,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
21448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(call Set,Tmp.CFLAGS,$(strip \
2156a571fb3c515c5ea53308ba0eda750e8dd76ef6bDaniel Dunbar  $(if $(call IsDefined,$(Tmp.Key).UniversalArchs),-arch $(Tmp.Arch),)\
216d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar  $(if $(call streq,$(Tmp.VISIBILITY_HIDDEN),1),\
2176a571fb3c515c5ea53308ba0eda750e8dd76ef6bDaniel Dunbar       -fvisibility=hidden -DVISIBILITY_HIDDEN,)\
218d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar  $(if $(call streq,$(Tmp.KERNEL_USE),1),\
219d3d22631ca0b314f0564a9bcfe96dd2d6ca85fa6Daniel Dunbar       -mkernel -DKERNEL_USE,)\
22048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(call GetCNAVar,CFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
22148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
22248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.s $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
22348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Summary) "  ASSEMBLE:  $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
2246a571fb3c515c5ea53308ba0eda750e8dd76ef6bDaniel Dunbar	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS)  -c -o $$@ $$<
22548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.S $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
22648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Summary) "  ASSEMBLE:  $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
2276a571fb3c515c5ea53308ba0eda750e8dd76ef6bDaniel Dunbar	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS) -c -o $$@ $$<
22848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.c $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
22948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	$(Summary) "  COMPILE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
2306a571fb3c515c5ea53308ba0eda750e8dd76ef6bDaniel Dunbar	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS) -c -o $$@ $$<
231a6fd8452b557b9bc8350d343da2bea2b0b5dc28aDaniel Dunbar$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.cc $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
232a6fd8452b557b9bc8350d343da2bea2b0b5dc28aDaniel Dunbar	$(Summary) "  COMPILE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
233a6fd8452b557b9bc8350d343da2bea2b0b5dc28aDaniel Dunbar	$(Verb) $(Tmp.CC) $(Tmp.CFLAGS) -c -o $$@ $$<
23448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar.PRECIOUS: $(Tmp.ObjPath)/.dir
23548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
23648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbarendef
23748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
23848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar# Run templates.
23948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar$(foreach key,$(PlatformKeys),\
24048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar  $(eval $(call PerPlatform_template,$(key))))
24148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
24248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar###
24378cfbc57c62949e16fa7b4a69775aa6450343a00Daniel Dunbar
244faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbarifneq ($(DEBUGMAKE),)
245faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbar  $(info MAKE: Done processing Makefile)
246faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbar  $(info  )
247faf0150036689985ecea64e78f2637093857cd7bDaniel Dunbarendif
248