# # 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 # Set some root variable to use in this library MB_@RECIPE := ] MB_@RECIPEPREFIX := $(.RECIPEPREFIX) MB_@BASEPATH := $(dir $(lastword $(MAKEFILE_LIST))) MB_@INCLUDE_CHAIN := # Build multiple groups of chains of includes define __mb_include .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_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)) @@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_m80.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)))) $(if $(MB_I18N),$(eval include $(MB_@BASEPATH)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 $(call mb_make_call,mb_doc_variable_rock,MB_@RECIPE,"Recipe prefix to set and indent flow eval rules.") $(call mb_make_call,mb_doc_variable_rock,MB_@RECIPEPREFIX,"Recipe prefix to restore to after flow eval rules.") $(call mb_make_call,mb_doc_variable_rock,MB_@BASEPATH,"Path where msxbuild lib folder is located.") # 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_setup,$(2)) $(MB_ᕽᕽᕽ   )$(call mb_make_call,mb_flow_proj_setup,$(1)) $(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."," ")