mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
61 lines
1.9 KiB
Makefile
61 lines
1.9 KiB
Makefile
# Define a standard rule helper
|
|
# If passed a last parameter value of with_local_version, we also define an
|
|
# extra rule that can build source files within the $(BUILD_DIR). This is useful
|
|
# for rules that can be applied for intermediate objects (for example, when
|
|
# going .png -> .cpp -> .o).
|
|
|
|
define rule_label
|
|
@ echo "$(shell printf "%-8s" $(strip $(1)))$(@:$(BUILD_DIR)/%=%)"
|
|
endef
|
|
|
|
# rule_for can define both global and local rules
|
|
# - use local if the source can be an intermediate file
|
|
# - use global if the source can be in the main tree
|
|
define rule_for
|
|
ifneq ($(filter global,$(5)),)
|
|
$(addprefix $$(BUILD_DIR)/,$(strip $(2))): $(strip $(3)) | $$$$(@D)/.
|
|
@ echo "$(shell printf "%-8s" $(strip $(1)))$$(@:$$(BUILD_DIR)/%=%)"
|
|
$(Q) $(4)
|
|
endif
|
|
ifneq ($(filter local,$(5)),)
|
|
$(addprefix $$(BUILD_DIR)/,$(strip $(2))): $(addprefix $$(BUILD_DIR)/,$(strip $(3)))
|
|
@ echo "$(shell printf "%-8s" $(strip $(1)))$$(@:$$(BUILD_DIR)/%=%)"
|
|
$(Q) $(4)
|
|
endif
|
|
endef
|
|
|
|
# Helper functions to work with variants
|
|
|
|
define direct_object_for
|
|
$(addprefix $(BUILD_DIR)/,$(addsuffix .o,$(basename $(1))))
|
|
endef
|
|
|
|
# Objects for source files in $(1) matching flavor $(2). A flavor is a dot
|
|
# separated list of variants (e.g. large.speed).
|
|
define flavored_object_for
|
|
$(call direct_object_for,$(call filter_variants,$(1),$(sort $(subst ., ,$(2)))))
|
|
endef
|
|
|
|
define object_for
|
|
$(call direct_object_for,$(call any_variant,$(1)))
|
|
endef
|
|
|
|
# Multi-arch helpers
|
|
ifdef ARCHS
|
|
ifndef ARCH
|
|
|
|
# This rule allow us to build any executable (%) for a specified ARCH ($1)
|
|
# We depend on a phony target to make sure this rule is always executed
|
|
.PHONY: force_remake
|
|
define rule_for_arch_executable
|
|
.PRECIOUS: $$(BUILD_DIR)/$(1)/%.$$(EXE)
|
|
$$(BUILD_DIR)/$(1)/%.$$(EXE): force_remake
|
|
$(Q) echo "MAKE ARCH=$(1)"
|
|
$(Q) $$(MAKE) ARCH=$(1) $$*.$$(EXE)
|
|
endef
|
|
|
|
$(foreach ARCH,$(ARCHS),$(eval $(call rule_for_arch_executable,$(ARCH))))
|
|
|
|
endif
|
|
endif
|