msxbuild/lib/make/mb_proj.mk
Willem Cazander e7f1b75a1f
All checks were successful
Run test asserts / Test-Asserts (push) Successful in -1s
Moved run phase into firemake run target help system.
2024-07-07 14:29:32 +02:00

280 lines
11 KiB
Makefile

MB_PROJ_META_NAME ?= MSXBUILD
MB_DOC_FIRE_VARIABLE += $(call mb_make_call,mb_doc_variable,MB_PROJ_META_NAME,"The project name.")
MB_PROJ_META_DESCRIPTION ?=
MB_DOC_FIRE_VARIABLE += $(call mb_make_call,mb_doc_variable,MB_PROJ_META_DESCRIPTION,"The project description.")
MB_PROJ_META_WEBSITE ?=
MB_DOC_FIRE_VARIABLE += $(call mb_make_call,mb_doc_variable,MB_PROJ_META_WEBSITE,"The project website location.")
MB_PROJ_STEP_BEFORE_PREFIX ?= "Before -- "
MB_DOC_FIRE_VARIABLE_DEEP += $(call mb_make_call,mb_doc_variable_deep,MB_PROJ_STEP_BEFORE_PREFIX,"Prefix for begin phase message.")
MB_PROJ_STEP_AFTER_PREFIX ?= "After ---- "
MB_DOC_FIRE_VARIABLE_DEEP += $(call mb_make_call,mb_doc_variable_deep,MB_PROJ_STEP_AFTER_PREFIX,"Prefix for af phase message.")
MB_PROJ_STEP_DONE_PREFIX ?= "Finished executing prime pi target "
MB_DOC_FIRE_VARIABLE_DEEP += $(call mb_make_call,mb_doc_variable_deep,MB_PROJ_STEP_DONE_PREFIX,"Prefix for af phase message.")
MB_PROJ_PHASE_PROCESS_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_PROCESS_DEPS,"The targets to trigger by project @process target.")
MB_PROJ_PHASE_COMPILE_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_COMPILE_DEPS,"The targets to trigger by project @compile target.")
MB_PROJ_PHASE_LINK_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_LINK_DEPS,"The targets to trigger by project @link target.")
MB_PROJ_PHASE_BUILD_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_BUILD_DEPS,"The targets to trigger by project @build target.")
MB_PROJ_PHASE_TEST_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_TEST_DEPS,"The targets to trigger by project @test target.")
MB_PROJ_PHASE_PACKAGE_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_PACKAGE_DEPS,"The targets to trigger by project @package target.")
MB_PROJ_PHASE_PACKAGE_QA_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_PACKAGE_QA_DEPS,"The targets to trigger by project @package-qa target.")
MB_PROJ_PHASE_PACKAGE_DEPLOY_DEPS ?=
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_PHASE_PACKAGE_QA_DEPLOY,"The targets to trigger by project @package-deploy target.")
define mb_proj_module_path_src
$(1)/$(subst /,,$(subst $(1),,$(dir $(lastword $(MAKEFILE_LIST)))))
endef
MB_DOC_FIRE_FUNCTION_DEEP += $(call mb_make_call,mb_doc_function_deep,mb_proj_module_path_src,"Convert include location folder as src folder.","<path-src>")
define mb_proj_module_path_bin
$(2)/$(subst /,,$(subst $(1),,$(dir $(lastword $(MAKEFILE_LIST)))))
endef
MB_DOC_FIRE_FUNCTION_DEEP += $(call mb_make_call,mb_doc_function_deep,mb_proj_module_path_src,"Convert include location folder as bin folder.","<path-src> <path-bin>")
define mb_proj_module_local_deps
$(foreach dep,$(2),$(1)/$(notdir $(dep)))
endef
MB_DOC_FIRE_FUNCTION_DEEP += $(call mb_make_call,mb_doc_function_deep,mb_proj_module_deps,"Convert other files to local deps.","<mod-bin> <deps>")
define _mb_proj_flow_step_before
$(call mb_make_call,mb_make_echo_phase,$(MB_PROJ_STEP_BEFORE_PREFIX)$@)
endef
define _mb_proj_flow_step_done
$(call mb_make_call,mb_make_echo_phase,$(MB_PROJ_STEP_AFTER_PREFIX)$@)
$(if $(filter $@,$(MAKECMDGOALS)),$(call mb_make_call,mb_make_echo_good,$(MB_PROJ_STEP_DONE_PREFIX)$@))
endef
define _mb_proj_run_clean
$(foreach folder,$(1),$(if $(wildcard $(folder)),$(call mb_make_call,mb_make_echo_command,Removing folder $(folder));))
$(foreach folder,$(1),$(if $(wildcard $(folder)),$(call mb_make_call,mb_clean,$(folder))))
endef
define _mb_proj_run_init
$(foreach folder,$(1),$(if $(wildcard $(folder)),,$(call mb_make_call,mb_make_echo_command,Creating folder $(folder));))
$(foreach folder,$(1),$(if $(wildcard $(folder)),,$(call mb_make_call,mb_mkdir,$(folder))))
endef
define mb_proj_flow_setup
@@clean:
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@clean
@clean: @@clean
$$(call mb_make_call,_mb_proj_run_clean,$(1))
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@clean,"Clean's the project build folders.")
.PHONY: @clean
@@init:
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@init
@init: @@init
$$(call mb_make_call,_mb_proj_run_init,$(1))
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@init,"Create the project output folders.")
.PHONY: @init
@@process: @init
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@process
@process: @@process $$(MB_PROJ_PHASE_PROCESS_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@process,"Process sources before compiling.")
.PHONY: @process
@@compile: @process
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@compile
@compile: @@compile $$(MB_PROJ_PHASE_COMPILE_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@compile,"Compiles all project sources.")
.PHONY: @compile
@@link: @compile
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@link
@link: @@link $$(MB_PROJ_PHASE_LINK_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@link,"Link all project intermediate files.")
.PHONY: @link
@@build: @link
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@build
@build: @@build $$(MB_PROJ_PHASE_BUILD_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@build,"Build all project artifacts.")
.PHONY: @build
@@test: @build
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@test
@test: @@test $$(MB_PROJ_PHASE_TEST_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@test,"Run all assertion tests.")
.PHONY: @test
@@package: @test
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@package
@package: @@package $$(MB_PROJ_PHASE_PACKAGE_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@package,"Create all packages of project.")
.PHONY: @package
@@package-qa: @package
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@package-qa
@package-qa: @@package-qa $$(MB_PROJ_PHASE_PACKAGE_QA_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@package-qa,"Run all packages QA of project.")
.PHONY: @package-qa
@@package-deploy: @package-qa
$$(call mb_make_call,_mb_proj_flow_step_before)
.PHONY: @@package-deploy
@package-deploy: @@package-deploy $$(MB_PROJ_PHASE_PACKAGE_DEPLOY_DEPS)
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@package-deploy,"Deploy all the packages.")
.PHONY: @package-deploy
endef
MB_DOC_FIRE_FUNCTION_FLOW += $(call mb_make_call,mb_doc_function_flow,mb_proj_flow_setup,"Prints flow of abstract project build cycle.","<build-dirs>")
define mb_proj_flow_setup_jp
@クリーン: @clean
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@クリーン,"プロジェクトのビルドフォルダーをクリーンアップします。")
.PHONY: @クリーン
@初期化する: @init
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@初期化する,"モジュール出力フォルダーをセットアップして検証します。")
.PHONY: @@初期化する
@プロセス: @初期化する @process
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@プロセス,"コンパイル前にソースを処理します。")
.PHONY: @プロセス
@コンパイル: @プロセス @compile
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@コンパイル,"すべてのプロジェクト ソースをコンパイルします。")
.PHONY: @コンパイル
@リンク: @コンパイル @link
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@リンク,"すべてのプロジェクト中間ファイルをリンクします。")
.PHONY: @リンク
@建てる: @リンク @build
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@建てる,"すべてのプロジェクト成果物をビルドします。")
.PHONY: @建てる
@テスト: @建てる @test
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@テスト,"すべてのアサーション テストを実行します。")
.PHONY: @テスト
@パッケージ: @テスト @package
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@パッケージ,"プロジェクトのパッケージを作成します。")
.PHONY: @パッケージ
@パッケージの品質保証: @パッケージ @package-qa
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@パッケージの品質保証,"すべてのパッケージを実行します。プロジェクトの品質保証。")
.PHONY: @パッケージの品質保証
@パッケージのデプロイ: @パッケージの品質保証 @package-deploy
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $$(call mb_make_call,mb_doc_target_help,@パッケージのデプロイ,"パッケージをデプロイします。")
.PHONY: @パッケージのデプロイ
endef
MB_DOC_FIRE_FUNCTION_FLOW += $(call mb_make_call,mb_doc_function_flow,mb_proj_flow_setup_jp,"Prints flow for japanese wrapper of project build cycle.")
define mb_proj_flow_flight_video
@@test-video: @test
$$(if $$(filter on,$$(MB_FLIGHT_VIDEO)),$$(call mb_make_call,mb_flight_video_merge,$(1)))
@test-video: @clean
$$(call mb_make_call,_mb_proj_flow_step_before)
MB_OPENMSX_HEADLESS=off MB_FLIGHT_VIDEO=on $$(MAKE) @@test-video
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $(call mb_make_call,mb_doc_target_help,@test-video,"Runs @test with video recorder and merges flight videos to one.")
.PHONY: @test-video
@@package-qa-video: @package-qa
$$(if $$(filter on,$$(MB_FLIGHT_VIDEO)),$$(call mb_make_call,mb_flight_video_merge,$(1)))
@package-qa-video: @clean
$$(call mb_make_call,_mb_proj_flow_step_before)
MB_OPENMSX_HEADLESS=off MB_FLIGHT_VIDEO=on $$(MAKE) -s @@package-qa-video
$$(call mb_make_call,_mb_proj_flow_step_done)
MB_DOC_FIRE_HELP += $(call mb_make_call,mb_doc_target_help,@package-qa-video,"Runs @package-qa with video recorder and merges flight videos to one.")
.PHONY: @test-video
endef
MB_DOC_FIRE_FUNCTION_FLOW += $(call mb_make_call,mb_doc_function_flow,mb_proj_flow_flight_video,"Prints flow for adding video targets in project build cycle.","<path-bin>")