xref: /aosp_15_r20/external/compiler-rt/Makefile (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger RobotSubDirs := lib
2*7c3d14c8STreehugger Robot
3*7c3d14c8STreehugger Robot# Set default rule before anything else.
4*7c3d14c8STreehugger Robotall: help
5*7c3d14c8STreehugger Robot
6*7c3d14c8STreehugger Robotinclude make/config.mk
7*7c3d14c8STreehugger Robotinclude make/util.mk
8*7c3d14c8STreehugger Robot# If SRCROOT is defined, assume we are doing an Apple style build. We should be
9*7c3d14c8STreehugger Robot# able to use RC_XBS for this but that is unused during "make installsrc".
10*7c3d14c8STreehugger Robotifdef SRCROOT
11*7c3d14c8STreehugger Robot  include make/AppleBI.mk
12*7c3d14c8STreehugger Robotendif
13*7c3d14c8STreehugger Robot
14*7c3d14c8STreehugger Robot# Make sure we don't build with a missing ProjObjRoot.
15*7c3d14c8STreehugger Robotifeq ($(ProjObjRoot),)
16*7c3d14c8STreehugger Robot$(error Refusing to build with empty ProjObjRoot variable)
17*7c3d14c8STreehugger Robotendif
18*7c3d14c8STreehugger Robot
19*7c3d14c8STreehugger Robot##############
20*7c3d14c8STreehugger Robot
21*7c3d14c8STreehugger Robot###
22*7c3d14c8STreehugger Robot# Rules
23*7c3d14c8STreehugger Robot
24*7c3d14c8STreehugger Robot###
25*7c3d14c8STreehugger Robot# Top level targets
26*7c3d14c8STreehugger Robot
27*7c3d14c8STreehugger Robot# FIXME: Document the available subtargets.
28*7c3d14c8STreehugger Robothelp:
29*7c3d14c8STreehugger Robot	@echo "usage: make [{VARIABLE=VALUE}*] target"
30*7c3d14c8STreehugger Robot	@echo
31*7c3d14c8STreehugger Robot	@echo "User variables:"
32*7c3d14c8STreehugger Robot	@echo "  VERBOSE=1: Use to show all commands [default=0]"
33*7c3d14c8STreehugger Robot	@echo
34*7c3d14c8STreehugger Robot	@echo "Available targets:"
35*7c3d14c8STreehugger Robot	@echo "  <platform name>: build the libraries for 'platform'"
36*7c3d14c8STreehugger Robot	@echo "  clean:           clean all configurations"
37*7c3d14c8STreehugger Robot	@echo "  test:            run unit tests"
38*7c3d14c8STreehugger Robot	@echo
39*7c3d14c8STreehugger Robot	@echo "  info-platforms:  list available platforms"
40*7c3d14c8STreehugger Robot	@echo "  help-devel:      print additional help for developers"
41*7c3d14c8STreehugger Robot	@echo
42*7c3d14c8STreehugger Robot
43*7c3d14c8STreehugger Robothelp-devel: help
44*7c3d14c8STreehugger Robot	@echo "Development targets:"
45*7c3d14c8STreehugger Robot	@echo "  <platform name>-<config name>:"
46*7c3d14c8STreehugger Robot	@echo "    build the libraries for a single platform config"
47*7c3d14c8STreehugger Robot	@echo "  <platform name>-<config name>-<arch name>:"
48*7c3d14c8STreehugger Robot	@echo "    build the libraries for a single config and arch"
49*7c3d14c8STreehugger Robot	@echo "  info-functions: list available compiler-rt functions"
50*7c3d14c8STreehugger Robot	@echo "  help-hidden: print help for Makefile debugging"
51*7c3d14c8STreehugger Robot	@echo
52*7c3d14c8STreehugger Robot
53*7c3d14c8STreehugger Robothelp-hidden: help-devel
54*7c3d14c8STreehugger Robot	@echo "Debugging variables:"
55*7c3d14c8STreehugger Robot	@echo "  DEBUGMAKE=1: enable some Makefile logging [default=]"
56*7c3d14c8STreehugger Robot	@echo "           =2: enable more Makefile logging"
57*7c3d14c8STreehugger Robot	@echo
58*7c3d14c8STreehugger Robot	@echo "Debugging targets:"
59*7c3d14c8STreehugger Robot	@echo "  make-print-FOO: print information on the variable 'FOO'"
60*7c3d14c8STreehugger Robot	@echo
61*7c3d14c8STreehugger Robot
62*7c3d14c8STreehugger Robotinfo-functions:
63*7c3d14c8STreehugger Robot	@echo "compiler-rt Available Functions"
64*7c3d14c8STreehugger Robot	@echo
65*7c3d14c8STreehugger Robot	@echo "All Functions: $(AvailableFunctions)"
66*7c3d14c8STreehugger Robot	@$(foreach fn,$(AvailableFunctions),\
67*7c3d14c8STreehugger Robot	  printf "  %-20s - available in (%s)\n" $(fn)\
68*7c3d14c8STreehugger Robot	    "$(foreach key,$(AvailableIn.$(fn)),$($(key).Dir))";)
69*7c3d14c8STreehugger Robot
70*7c3d14c8STreehugger Robotinfo-platforms:
71*7c3d14c8STreehugger Robot	@echo "compiler-rt Available Platforms"
72*7c3d14c8STreehugger Robot	@echo
73*7c3d14c8STreehugger Robot	@echo "Platforms:"
74*7c3d14c8STreehugger Robot	@$(foreach key,$(PlatformKeys),\
75*7c3d14c8STreehugger Robot	  printf "  %s - from '%s'\n" $($(key).Name) $($(key).Path);\
76*7c3d14c8STreehugger Robot	  printf "    %s\n" "$($(key).Description)";\
77*7c3d14c8STreehugger Robot	  printf "    Configurations: %s\n\n" "$($(key).Configs)";)
78*7c3d14c8STreehugger Robot
79*7c3d14c8STreehugger Robot# Provide default clean target which is extended by other templates.
80*7c3d14c8STreehugger Robot.PHONY: clean
81*7c3d14c8STreehugger Robotclean::
82*7c3d14c8STreehugger Robot
83*7c3d14c8STreehugger Robot# Test
84*7c3d14c8STreehugger Robot.PHONY: test
85*7c3d14c8STreehugger Robottest:
86*7c3d14c8STreehugger Robot	cd test/Unit && ./test
87*7c3d14c8STreehugger Robot
88*7c3d14c8STreehugger Robot###
89*7c3d14c8STreehugger Robot# Directory handling magic.
90*7c3d14c8STreehugger Robot
91*7c3d14c8STreehugger Robot# Create directories as needed, and timestamp their creation.
92*7c3d14c8STreehugger Robot%/.dir:
93*7c3d14c8STreehugger Robot	$(Summary) "  MKDIR:     $*"
94*7c3d14c8STreehugger Robot	$(Verb) $(MKDIR) $* > /dev/null
95*7c3d14c8STreehugger Robot	$(Verb) echo 'Created.' > $@
96*7c3d14c8STreehugger Robot
97*7c3d14c8STreehugger Robot# Remove directories
98*7c3d14c8STreehugger Robot%/.remove:
99*7c3d14c8STreehugger Robot	$(Verb) $(RM) -r $*
100*7c3d14c8STreehugger Robot
101*7c3d14c8STreehugger Robot###
102*7c3d14c8STreehugger Robot# Include child makefile fragments
103*7c3d14c8STreehugger Robot
104*7c3d14c8STreehugger RobotDir := .
105*7c3d14c8STreehugger Robotinclude make/subdir.mk
106*7c3d14c8STreehugger Robotinclude make/lib_info.mk
107*7c3d14c8STreehugger Robotinclude make/lib_util.mk
108*7c3d14c8STreehugger Robotinclude make/lib_platforms.mk
109*7c3d14c8STreehugger Robot
110*7c3d14c8STreehugger Robot###
111*7c3d14c8STreehugger Robot# Define Platform Rules
112*7c3d14c8STreehugger Robot
113*7c3d14c8STreehugger Robotdefine PerPlatform_template
114*7c3d14c8STreehugger Robot$(call Set,Tmp.Key,$(1))
115*7c3d14c8STreehugger Robot$(call Set,Tmp.Name,$($(Tmp.Key).Name))
116*7c3d14c8STreehugger Robot$(call Set,Tmp.Configs,$($(Tmp.Key).Configs))
117*7c3d14c8STreehugger Robot$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name))
118*7c3d14c8STreehugger Robot
119*7c3d14c8STreehugger Robot# Top-Level Platform Target
120*7c3d14c8STreehugger Robot$(Tmp.Name):: $(Tmp.Configs:%=$(Tmp.Name)-%)
121*7c3d14c8STreehugger Robot.PHONY: $(Tmp.Name)
122*7c3d14c8STreehugger Robot
123*7c3d14c8STreehugger Robotclean::
124*7c3d14c8STreehugger Robot	$(Verb) rm -rf $(Tmp.ObjPath)
125*7c3d14c8STreehugger Robot
126*7c3d14c8STreehugger Robot# Per-Config Libraries
127*7c3d14c8STreehugger Robot$(foreach config,$(Tmp.Configs),\
128*7c3d14c8STreehugger Robot  $(call PerPlatformConfig_template,$(config)))
129*7c3d14c8STreehugger Robotendef
130*7c3d14c8STreehugger Robot
131*7c3d14c8STreehugger Robotdefine PerPlatformConfig_template
132*7c3d14c8STreehugger Robot$(call Set,Tmp.Config,$(1))
133*7c3d14c8STreehugger Robot$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config))
134*7c3d14c8STreehugger Robot$(call Set,Tmp.SHARED_LIBRARY,$(strip \
135*7c3d14c8STreehugger Robot  $(call GetCNAVar,SHARED_LIBRARY,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
136*7c3d14c8STreehugger Robot$(call Set,Tmp.SHARED_LIBRARY_SUFFIX,$(strip \
137*7c3d14c8STreehugger Robot  $(call GetCNAVar,SHARED_LIBRARY_SUFFIX,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
138*7c3d14c8STreehugger Robot
139*7c3d14c8STreehugger Robot# Compute the library suffix.
140*7c3d14c8STreehugger Robot$(if $(call streq,1,$(Tmp.SHARED_LIBRARY)),
141*7c3d14c8STreehugger Robot  $(call Set,Tmp.LibrarySuffix,$(Tmp.SHARED_LIBRARY_SUFFIX)),
142*7c3d14c8STreehugger Robot  $(call Set,Tmp.LibrarySuffix,a))
143*7c3d14c8STreehugger Robot
144*7c3d14c8STreehugger Robot# Compute the archs to build, depending on whether this is a universal build or
145*7c3d14c8STreehugger Robot# not.
146*7c3d14c8STreehugger Robot$(call Set,Tmp.ArchsToBuild,\
147*7c3d14c8STreehugger Robot  $(if $(call IsDefined,$(Tmp.Key).UniversalArchs),\
148*7c3d14c8STreehugger Robot       $(strip \
149*7c3d14c8STreehugger Robot         $(or $($(Tmp.Key).UniversalArchs.$(Tmp.Config)),\
150*7c3d14c8STreehugger Robot              $($(Tmp.Key).UniversalArchs))),\
151*7c3d14c8STreehugger Robot       $(call VarOrDefault,$(Tmp.Key).Arch.$(Tmp.Config),$($(Tmp.Key).Arch))))
152*7c3d14c8STreehugger Robot
153*7c3d14c8STreehugger Robot# Copy or lipo to create the per-config library.
154*7c3d14c8STreehugger Robot$(call Set,Tmp.Inputs,$(Tmp.ArchsToBuild:%=$(Tmp.ObjPath)/%/libcompiler_rt.$(Tmp.LibrarySuffix)))
155*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/libcompiler_rt.$(Tmp.LibrarySuffix): $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
156*7c3d14c8STreehugger Robot	$(Summary) "  FINAL-ARCHIVE: $(Tmp.Name)/$(Tmp.Config): $$@"
157*7c3d14c8STreehugger Robot	-$(Verb) $(RM) $$@
158*7c3d14c8STreehugger Robot	$(if $(call streq,1,$(words $(Tmp.ArchsToBuild))), \
159*7c3d14c8STreehugger Robot	  $(Verb) $(CP) $(Tmp.Inputs) $$@, \
160*7c3d14c8STreehugger Robot	  $(Verb) $(LIPO) -create -output $$@ $(Tmp.Inputs))
161*7c3d14c8STreehugger Robot.PRECIOUS: $(Tmp.ObjPath)/.dir
162*7c3d14c8STreehugger Robot
163*7c3d14c8STreehugger Robot# Per-Config Targets
164*7c3d14c8STreehugger Robot$(Tmp.Name)-$(Tmp.Config):: $(Tmp.ObjPath)/libcompiler_rt.$(Tmp.LibrarySuffix)
165*7c3d14c8STreehugger Robot.PHONY: $(Tmp.Name)-$(Tmp.Config)
166*7c3d14c8STreehugger Robot
167*7c3d14c8STreehugger Robot# Per-Config-Arch Libraries
168*7c3d14c8STreehugger Robot$(foreach arch,$(Tmp.ArchsToBuild),\
169*7c3d14c8STreehugger Robot  $(call PerPlatformConfigArch_template,$(arch)))
170*7c3d14c8STreehugger Robotendef
171*7c3d14c8STreehugger Robot
172*7c3d14c8STreehugger Robotdefine PerPlatformConfigArch_template
173*7c3d14c8STreehugger Robot$(call Set,Tmp.Arch,$(1))
174*7c3d14c8STreehugger Robot$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch))
175*7c3d14c8STreehugger Robot$(call Set,Tmp.Functions,$(strip \
176*7c3d14c8STreehugger Robot  $(AlwaysRequiredModules) \
177*7c3d14c8STreehugger Robot  $(call GetCNAVar,FUNCTIONS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
178*7c3d14c8STreehugger Robot$(call Set,Tmp.Optimized,$(strip \
179*7c3d14c8STreehugger Robot  $(call GetCNAVar,OPTIMIZED,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
180*7c3d14c8STreehugger Robot$(call Set,Tmp.AR,$(strip \
181*7c3d14c8STreehugger Robot  $(call GetCNAVar,AR,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
182*7c3d14c8STreehugger Robot$(call Set,Tmp.ARFLAGS,$(strip \
183*7c3d14c8STreehugger Robot  $(call GetCNAVar,ARFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
184*7c3d14c8STreehugger Robot$(call Set,Tmp.CC,$(strip \
185*7c3d14c8STreehugger Robot  $(call GetCNAVar,CC,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
186*7c3d14c8STreehugger Robot$(call Set,Tmp.LDFLAGS,$(strip \
187*7c3d14c8STreehugger Robot  $(call GetCNAVar,LDFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
188*7c3d14c8STreehugger Robot$(call Set,Tmp.RANLIB,$(strip \
189*7c3d14c8STreehugger Robot  $(call GetCNAVar,RANLIB,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
190*7c3d14c8STreehugger Robot$(call Set,Tmp.RANLIBFLAGS,$(strip \
191*7c3d14c8STreehugger Robot  $(call GetCNAVar,RANLIBFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
192*7c3d14c8STreehugger Robot$(call Set,Tmp.SHARED_LIBRARY,$(strip \
193*7c3d14c8STreehugger Robot  $(call GetCNAVar,SHARED_LIBRARY,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
194*7c3d14c8STreehugger Robot
195*7c3d14c8STreehugger Robot# Compute the library suffix.
196*7c3d14c8STreehugger Robot$(if $(call streq,1,$(Tmp.SHARED_LIBRARY)),
197*7c3d14c8STreehugger Robot  $(call Set,Tmp.LibrarySuffix,$(Tmp.SHARED_LIBRARY_SUFFIX)),
198*7c3d14c8STreehugger Robot  $(call Set,Tmp.LibrarySuffix,a))
199*7c3d14c8STreehugger Robot
200*7c3d14c8STreehugger Robot# Compute the object inputs for this library.
201*7c3d14c8STreehugger Robot$(call Set,Tmp.Inputs,\
202*7c3d14c8STreehugger Robot  $(foreach fn,$(sort $(Tmp.Functions)),\
203*7c3d14c8STreehugger Robot    $(call Set,Tmp.FnDir,\
204*7c3d14c8STreehugger Robot      $(call SelectFunctionDir,$(Tmp.Config),$(Tmp.Arch),$(fn),$(Tmp.Optimized)))\
205*7c3d14c8STreehugger Robot    $(Tmp.ObjPath)/$(Tmp.FnDir)/$(fn).o))
206*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/libcompiler_rt.a: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
207*7c3d14c8STreehugger Robot	$(Summary) "  ARCHIVE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@"
208*7c3d14c8STreehugger Robot	-$(Verb) $(RM) $$@
209*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.AR) $(Tmp.ARFLAGS) $$@ $(Tmp.Inputs)
210*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.RANLIB) $(Tmp.RANLIBFLAGS) $$@
211*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/libcompiler_rt.dylib: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
212*7c3d14c8STreehugger Robot	$(Summary) "  DYLIB:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@"
213*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.CC) -arch $(Tmp.Arch) -dynamiclib -o $$@ \
214*7c3d14c8STreehugger Robot	  $(Tmp.Inputs) $(Tmp.LDFLAGS)
215*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/libcompiler_rt.so: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
216*7c3d14c8STreehugger Robot	$(Summary) "  SO:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@"
217*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.CC) -shared -o $$@ \
218*7c3d14c8STreehugger Robot	  $(Tmp.Inputs) $(Tmp.LDFLAGS)
219*7c3d14c8STreehugger Robot.PRECIOUS: $(Tmp.ObjPath)/.dir
220*7c3d14c8STreehugger Robot
221*7c3d14c8STreehugger Robot# Per-Config-Arch Targets
222*7c3d14c8STreehugger Robot$(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch):: $(Tmp.ObjPath)/libcompiler_rt.$(Tmp.LibrarySuffix)
223*7c3d14c8STreehugger Robot.PHONY: $(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch)
224*7c3d14c8STreehugger Robot
225*7c3d14c8STreehugger Robot# Per-Config-Arch-SubDir Objects
226*7c3d14c8STreehugger Robot$(foreach key,$(SubDirKeys),\
227*7c3d14c8STreehugger Robot  $(call PerPlatformConfigArchSubDir_template,$(key)))
228*7c3d14c8STreehugger Robotendef
229*7c3d14c8STreehugger Robot
230*7c3d14c8STreehugger Robotdefine PerPlatformConfigArchSubDir_template
231*7c3d14c8STreehugger Robot$(call Set,Tmp.SubDirKey,$(1))
232*7c3d14c8STreehugger Robot$(call Set,Tmp.SubDir,$($(Tmp.SubDirKey).Dir))
233*7c3d14c8STreehugger Robot$(call Set,Tmp.SrcPath,$(ProjSrcRoot)/$(Tmp.SubDir))
234*7c3d14c8STreehugger Robot$(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch)/$(Tmp.SubDirKey))
235*7c3d14c8STreehugger Robot$(call Set,Tmp.Dependencies,$($(Tmp.SubDirKey).Dependencies))
236*7c3d14c8STreehugger Robot$(call Set,Tmp.CC,$(strip \
237*7c3d14c8STreehugger Robot  $(call GetCNAVar,CC,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
238*7c3d14c8STreehugger Robot$(call Set,Tmp.KERNEL_USE,$(strip \
239*7c3d14c8STreehugger Robot  $(call GetCNAVar,KERNEL_USE,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
240*7c3d14c8STreehugger Robot$(call Set,Tmp.VISIBILITY_HIDDEN,$(strip \
241*7c3d14c8STreehugger Robot  $(call GetCNAVar,VISIBILITY_HIDDEN,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
242*7c3d14c8STreehugger Robot$(call Set,Tmp.CFLAGS,$(strip \
243*7c3d14c8STreehugger Robot  $(if $(call IsDefined,$(Tmp.Key).UniversalArchs),-arch $(Tmp.Arch),)\
244*7c3d14c8STreehugger Robot  $(if $(call streq,$(Tmp.VISIBILITY_HIDDEN),1),\
245*7c3d14c8STreehugger Robot       -fvisibility=hidden -DVISIBILITY_HIDDEN,)\
246*7c3d14c8STreehugger Robot  $(if $(call streq,$(Tmp.KERNEL_USE),1),\
247*7c3d14c8STreehugger Robot       -mkernel -DKERNEL_USE,)\
248*7c3d14c8STreehugger Robot  $(call GetCNAVar,CFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
249*7c3d14c8STreehugger Robot
250*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.s $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
251*7c3d14c8STreehugger Robot	$(Summary) "  ASSEMBLE:  $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
252*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.CC) $(COMMON_ASMFLAGS) $(Tmp.CFLAGS)  -c -o $$@ $$<
253*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.S $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
254*7c3d14c8STreehugger Robot	$(Summary) "  ASSEMBLE:  $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
255*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.CC) $(COMMON_ASMFLAGS) $(Tmp.CFLAGS) -c -o $$@ $$<
256*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.c $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
257*7c3d14c8STreehugger Robot	$(Summary) "  COMPILE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
258*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.CC) $(COMMON_CFLAGS) $(Tmp.CFLAGS) -c -o $$@ $$<
259*7c3d14c8STreehugger Robot$(Tmp.ObjPath)/%.o: $(Tmp.SrcPath)/%.cc $(Tmp.Dependencies) $(Tmp.ObjPath)/.dir
260*7c3d14c8STreehugger Robot	$(Summary) "  COMPILE:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$<"
261*7c3d14c8STreehugger Robot	$(Verb) $(Tmp.CC) $(COMMON_CXXFLAGS) $(Tmp.CFLAGS) -c -o $$@ $$<
262*7c3d14c8STreehugger Robot.PRECIOUS: $(Tmp.ObjPath)/.dir
263*7c3d14c8STreehugger Robot
264*7c3d14c8STreehugger Robotendef
265*7c3d14c8STreehugger Robot
266*7c3d14c8STreehugger Robot# Run templates.
267*7c3d14c8STreehugger Robot$(foreach key,$(PlatformKeys),\
268*7c3d14c8STreehugger Robot  $(eval $(call PerPlatform_template,$(key))))
269*7c3d14c8STreehugger Robot
270*7c3d14c8STreehugger Robot###
271*7c3d14c8STreehugger Robot
272*7c3d14c8STreehugger Robotifneq ($(DEBUGMAKE),)
273*7c3d14c8STreehugger Robot  $(info MAKE: Done processing Makefile)
274*7c3d14c8STreehugger Robot  $(info  )
275*7c3d14c8STreehugger Robotendif
276