msxbuild/lib/msxbuild.mk
Willem Cazander c13a26d6b5
All checks were successful
Run test asserts / Test-Asserts (push) Successful in -13s
Auto setup module flow and packages as targets.
2024-07-14 03:46:29 +02:00

95 lines
4.6 KiB
Makefile
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
# 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_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))
@@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),@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.","<bin-dir> <src-dir>")