# # msxbuild.mk - Makefile helper to use with msx projects. # # Make make, make behave; MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-variables MAKEFLAGS += --warn-undefined-variables .DELETE_ON_ERROR := .RECIPEPREFIX := $(if $(.RECIPEPREFIX),$(.RECIPEPREFIX),>) .SUFFIXES := .ONESHELL := .SHELLFLAGS := -e -u -o pipefail -c SHELL := bash ifeq ($(origin .RECIPEPREFIX), undefined) $(error This version of make does not support dynamic white space brain fuck mode.) endif ######################################################### ### IN THIS FILE NEVER USE A WHITE SPACE OR TAB SPACE ### ######################################################### # Set some root variable to use in this library MB_@RECIPE := ] MB_@RECIPEPREFIX := $(.RECIPEPREFIX) MB_@BASEPATH := $(dir $(lastword $(MAKEFILE_LIST))) MB_@WORK := /../_work/ MB_@INCLUDE_CHAIN := # Build multiple groups of chains of includes define __mb-include ifdef DEBUG ifneq ("$$(DEBUG)", "off") $$(warning DEBUG $(0) ($(1))) endif endif .PHONY: $(MB_@BASEPATH)$(1) include $(MB_@BASEPATH)$(1) $(if $(MB_@INCLUDE_CHAIN),$(eval $(MB_@BASEPATH)$(1): $(MB_@INCLUDE_CHAIN))) MB_@INCLUDE_CHAIN := $(MB_@BASEPATH)$(1) endef # Include full library grouped in functional blocks MB_@INCLUDE_CHAIN := @@include-parent $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_xxx.mk)) $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_doc.mk)) $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_call.mk)) $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_check.mk)) $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_module.mk)) $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_xml.mk)) $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make.mk)) @@include-libs:: $(MB_@INCLUDE_CHAIN) MB_@INCLUDE_CHAIN := @@include-parent $(eval $(call __mb-include,make/ᐅᖓᕙᕆᐊᖅᓯᓂᖅ/mb_os.mk)) $(eval $(call __mb-include,make/ᐅᖓᕙᕆᐊᖅᓯᓂᖅ/mb_conv.mk)) $(eval $(call __mb-include,make/ᐅᖓᕙᕆᐊᖅᓯᓂᖅ/mb_sdcc.mk)) $(eval $(call __mb-include,make/ᐅᖓᕙᕆᐊᖅᓯᓂᖅ/mb_package.mk)) $(eval $(call __mb-include,make/ᐅᖓᕙᕆᐊᖅᓯᓂᖅ/mb_nestor80.mk)) @@include-libs:: $(MB_@INCLUDE_CHAIN) MB_@INCLUDE_CHAIN := @@include-parent $(eval $(call __mb-include,make/天房系統擴展/mb_msxrom.mk)) $(eval $(call __mb-include,make/天房系統擴展/mb_msxhub.mk)) $(eval $(call __mb-include,make/天房系統擴展/mb_msxpipe.mk)) $(eval $(call __mb-include,make/天房系統擴展/mb_openmsx.mk)) $(eval $(call __mb-include,make/天房系統擴展/mb_autoexec.mk)) @@include-libs:: $(MB_@INCLUDE_CHAIN) MB_@INCLUDE_CHAIN := @@include-parent $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_0module.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_help.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_proj.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_assert.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_macro80.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_nestor80.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_sdcc.mk)) $(eval $(call __mb-include,make/𓃬𓍄𓋹𓀭/mb_flow_clone.mk)) @@include-libs:: $(MB_@INCLUDE_CHAIN) MB_@INCLUDE_CHAIN := $(eval $(call __mb-include,make/mb_env.mk)) $(eval $(call __mb-include,make/mb_flight.mk)) $(eval $(call __mb-include,make/ i18n/mb_i18n.mk)) ifneq ("$(MB_I18N)", "off") $(if $(MB_I18N),$(if $(wildcard $(MB_@BASEPATH)make/ i18n/mb_i18n_$(MB_I18N).mk),,$(error Unsupported i18n language code: $(MB_I18N)))) $(eval $(call __mb-include,make/ i18n/mb_i18n_$(MB_I18N).mk)) endif @include:: $(MB_@INCLUDE_CHAIN) MB_@INCLUDE_CHAIN := # Glue phony targets to get internal @include tree (semi) correct (TODO: fix chain in: mb_flow_0module_setup) .PHONY: @include @@include-root @@include-libs @@include-mods @@include-parent @@include-tree @@include-parent:: @@include-mods @include:: @@include-libs @@include-root # Document our internal variables, now we have the functions loaded $(MB_ᕽᕽᕽ )$(call mb-make-call,mb-doc-variable-rock,MB_@RECIPE,Recipe prefix to set and indent flow eval rules.) $(MB_ᕽᕽᕽ  )$(call mb-make-call,mb-doc-variable-rock,MB_@RECIPEPREFIX,Recipe prefix to restore to after flow eval rules.) $(MB_ᕽᕽᕽ   )$(call mb-make-call,mb-doc-variable-rock,MB_@BASEPATH,Path where msxbuild lib folder is located.) $(MB_ᕽᕽᕽ    )$(call mb-make-call,mb-doc-variable-rock,MB_@WORK,Shorthand to move to the work folder of module.) $(MB_ᕽᕽᕽ     )$(call mb-make-call,mb-doc-variable-rock,MB_@INCLUDE_CHAIN,Helper to chain includes into groups.) # Provider+doc easy single function start point for user define mb-setup-default $(MB_ᕽᕽᕽ   )$(call mb-make-call,mb-make-check-arg2,$(0),$(1),$(2)) $(MB_ᕽᕽᕽ   )$(call mb-make-call,mb-flow-doc-help) $(MB_ᕽᕽᕽ   )$(call mb-make-call,mb-flow-0module-include,$(2)) $(MB_ᕽᕽᕽ   )$(call mb-make-call,mb-flow-proj-setup,$(1),@include) $(MB_ᕽᕽᕽ   )$(call mb-make-call,mb-flight-proj-flow-video,$(1)) endef $(call mb-make-call,mb-doc-function,mb-setup-default,Setup default extenstions to configure dynamic project flow., )