SubDirs := lib

# Set default rule before anything else.
all::

include make/config.mk
include make/util.mk
# If SRCROOT is defined, assume we are doing an Apple style build. We
# should be able to use RC_XBS for this but that is unused during
# "make installsrc".
ifdef SRCROOT
  include make/AppleBI.mk
endif

# Make sure we don't build with a missing ProjObjRoot.
ifeq ($(ProjObjRoot),)
$(error Refusing to build with empty ProjObjRoot variable)
endif

##############

###
# Rules

###
# Top level targets

# Provide default clean target which is extended by other templates.
.PHONY: clean
clean::

# Test
.PHONY: test
test:
	cd test/Unit && ./test

# Template: Config_template Config
#
# This template is used once per Config at the top-level.
define Config_template
$(call Set,ActiveConfig,$1)
$(call Set,ActiveObjPath,$(ProjObjRoot)/$(ActiveConfig))
$(call Set,ActiveLibGen,$(ActiveObjPath)/libcompiler_rt.Generic.a)
$(call Set,ActiveLibOpt,$(ActiveObjPath)/libcompiler_rt.Optimized.a)

# The sublibraries to use for a generic version.
$(call Set,GenericInputs,$(foreach arch,$(TargetArchs),$(ActiveObjPath)/$(arch)/libcompiler_rt.Generic.a))
# The sublibraries to use for an optimized version.
$(call Set,OptimizedInputs,$(foreach arch,$(TargetArchs),$(ActiveObjPath)/$(arch)/libcompiler_rt.Optimized.a))

# Provide top-level fat archive targets. We make sure to not try to lipo if only
# building one target arch.
$(ActiveLibGen): $(GenericInputs) $(ActiveObjPath)/.dir
	$(Summary) "  UNIVERSAL: $(ActiveConfig): $$@"
	-$(Verb) $(RM) $$@
	$(if $(TargetArch), \
	  $(Verb) $(CP) $(GenericInputs) $$@, \
	  $(Verb) $(Lipo) -create -output $$@ $(GenericInputs))
$(ActiveLibOpt): $(OptimizedInputs) $(ActiveObjPath)/.dir
	$(Summary) "  UNIVERSAL: $(ActiveConfig): $$@"
	-$(Verb) $(RM) $$@
	$(if $(TargetArch), \
	  $(Verb) $(CP) $(GenericInputs) $$@, \
	  $(Verb) $(Lipo) -create -output $$@ $(OptimizedInputs))
.PRECIOUS: $(ActiveObjPath)/.dir

# Add to default "alias" target.
$(ActiveConfig):: $(ActiveLibGen) $(ActiveLibOpt)

# Add to target lists.
all:: $(ActiveConfig) $(ActiveLibGen) $(ActiveLibOpt)

# Remove entire config directory on clean.
clean:: $(ActiveObjPath)/.remove
endef

# Template: CNA_template Config Arch
# 
# This template is used once per Config/Arch at the top-level.
define CNA_template
$(call Set,ActiveConfig,$1)
$(call Set,ActiveArch,$2)
$(call Set,ActiveObjPath,$(ProjObjRoot)/$(ActiveConfig)/$(ActiveArch))
$(call Set,ActiveLibGen,$(ActiveObjPath)/libcompiler_rt.Generic.a)
$(call Set,ActiveLibOpt,$(ActiveObjPath)/libcompiler_rt.Optimized.a)

# Initialize inputs lists. This are extended by the CNA_subdir
# template. The one tricky bit is that we need to use these quoted,
# because they are not complete until the entire makefile has been
# processed.
$(call Set,GenericInputs.$(ActiveConfig).$(ActiveArch),)
$(call Set,OptimizedInputs.$(ActiveConfig).$(ActiveArch),)
# Final.Inputs is created once we have loaded all the subdirectories
# and know what the correct inputs are.

# Provide top-level archive targets.
$(ActiveLibGen): $(ActiveObjPath)/.dir
	$(Summary) "  ARCHIVE:   $(ActiveConfig)/$(ActiveArch): $$@"
	-$(Verb) $(RM) $$@
	$(Verb) $(Archive) $$@ $$(Generic.Inputs.$(ActiveConfig).$(ActiveArch))
	$(Verb) $(Ranlib) $$@
# FIXME: The dependency on ActiveLibGen is a hack, this picks up the
# dependencies on the generic inputs.
$(ActiveLibOpt): $(ActiveLibGen) $(ActiveObjPath)/.dir
	$(Summary) "  ARCHIVE:   $(ActiveConfig)/$(ActiveArch): $$@"
	-$(Verb) $(RM) $$@
	$(Verb) $(Archive) $$@ $$(Final.Inputs.$(ActiveConfig).$(ActiveArch))
	$(Verb) $(Ranlib) $$@
.PRECIOUS: $(ActiveObjPath)/.dir

# Provide some default "alias" targets.
$(ActiveConfig):: $(ActiveLibGen) $(ActiveLibOpt)
$(ActiveArch):: $(ActiveLibGen) $(ActiveLibOpt)
$(ActiveConfig)-$(ActiveArch):: $(ActiveLibGen) $(ActiveLibOpt)
endef

$(foreach config,$(Configs), \
  $(foreach arch,$(Archs), \
    $(eval $(call CNA_template,$(config),$(arch)))))

$(foreach config,$(Configs), \
  $(eval $(call Config_template,$(config))))

###
# How to build things.

# Define rules for building on each configuration & architecture. This
# is not exactly obvious, but variables inside the template are being
# expanded during the make processing, so automatic variables must be
# quoted and normal assignment cannot be used.

# Template: CNA_template Config Arch Dir
#   Uses: GetArgs, Dependencies, ObjNames
#
# This template is used once per Config/Arch/Dir.
define CNA_subdir_template
$(call Set,ActiveConfig,$1)
$(call Set,ActiveArch,$2)
$(call Set,ActiveDir,$3)
$(call Set,ActiveSrcPath,$(ProjSrcRoot)/$(ActiveDir))
$(call Set,ActiveObjPath,$(ProjObjRoot)/$(ActiveDir)/$(ActiveConfig)/$(ActiveArch))

$(call Set,ActiveFlags,$(call GetArgs,$(ActiveConfig),$(ActiveArch)))
$(call Set,ActiveObjects,$(ObjNames:%=$(ActiveObjPath)/%))

# Add to the input list for the appropriate library and update the
# dependency.
$(call Append,$(Target).Inputs.$(ActiveConfig).$(ActiveArch),$(ActiveObjects))
$(ProjObjRoot)/$(ActiveConfig)/$(ActiveArch)/libcompiler_rt.$(Target).a: $(ActiveObjects)

$(ActiveObjPath)/%.o: $(ActiveSrcPath)/%.s $(Dependencies) $(ActiveObjPath)/.dir
	$(Summary) "  ASSEMBLE:  $(ActiveConfig)/$(ActiveArch): $$<"
	$(Verb) $(CC) -c -o $$@ $(ActiveFlags) $$<
.PRECIOUS: $(ActiveObjPath)/.dir

$(ActiveObjPath)/%.o: $(ActiveSrcPath)/%.S $(Dependencies) $(ActiveObjPath)/.dir
	$(Summary) "  ASSEMBLE:  $(ActiveConfig)/$(ActiveArch): $$<"
	$(Verb) $(CC) -c -o $$@ $(ActiveFlags) $$<
.PRECIOUS: $(ActiveObjPath)/.dir

$(ActiveObjPath)/%.o: $(ActiveSrcPath)/%.c $(Dependencies) $(ActiveObjPath)/.dir
	$(Summary) "  COMPILE:   $(ActiveConfig)/$(ActiveArch): $$<"
	$(Verb) $(CC) -c -o $$@ $(ActiveFlags) $$<
.PRECIOUS: $(ActiveObjPath)/.dir

# Remove entire config directory on clean.
clean:: $(ProjObjRoot)/$(ActiveDir)/$(ActiveConfig)/.remove
endef

###
# Directory handling magic.

# Create directories as needed, and timestamp their creation.
%/.dir:
	$(Summary) "  MKDIR:     $*"
	$(Verb) $(MKDIR) $* > /dev/null
	$(Verb) $(DATE) > $@

# Remove directories
%/.remove:
	$(Verb) $(RM) -r $*

###
# Include child makefile fragments

$(foreach subdir,$(SubDirs),$(eval include $(subdir)/Makefile.mk))

###
# Determine the actual inputs for an optimized library.

# Template: Final_CNA_template Config Arch
#   Uses: GetArgs, Dependencies, ObjNames
#
# This template is used once per Config/Arch.
define Final_CNA_template
$(call Set,ActiveConfig,$1)
$(call Set,ActiveArch,$2)

$(call Set,Final.Inputs.$(ActiveConfig).$(ActiveArch),\
  $(shell make/filter-inputs \
	          $(Optimized.Inputs.$(ActiveConfig).$(ActiveArch)) \
	          $(Generic.Inputs.$(ActiveConfig).$(ActiveArch))))
endef

$(foreach config,$(Configs), \
  $(foreach arch,$(Archs), \
    $(eval $(call Final_CNA_template,$(config),$(arch)))))
