Initial files
This commit is contained in:
parent
2f34088fc3
commit
a92a2b8dad
16 changed files with 755 additions and 2 deletions
33
lib/make/mb_assert.mk
Normal file
33
lib/make/mb_assert.mk
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
|
||||
define _mb_assert_success
|
||||
@echo success: mb_assert_$(1)\; \'$(2)\'
|
||||
endef
|
||||
define _mb_assert_failure
|
||||
@echo failure: mb_assert_$(1)\; \'$(2)\'
|
||||
@exit 1
|
||||
endef
|
||||
define _mb_assert_if
|
||||
$(if $(1),$(call _mb_assert_success,$(2),$(3)),$(call _mb_assert_failure,$(2),$(3)))
|
||||
endef
|
||||
define _mb_assert_if_not
|
||||
$(if $(1),$(call _mb_assert_failure,$(2),$(3)),$(call _mb_assert_success,$(2),$(3)))
|
||||
endef
|
||||
|
||||
# FIXME: Not stable
|
||||
#define mb_assert_file_contains
|
||||
# $(call _mb_assert_if,$(findstring $(2),$(file < $(1))),file_contains,$(2))
|
||||
#endef
|
||||
define mb_assert_file_equals
|
||||
$(call _mb_assert_if_not,$(subst $(2),,$(file < $(1))),file_equals,$(2))
|
||||
endef
|
||||
|
||||
# Assert that the variable(s) are set and doesn't have non-empty values.
|
||||
# Params;
|
||||
# 1. Variable name(s) to validate.
|
||||
# 2. (optional) Error message to user.
|
||||
define mb_assert_defined
|
||||
$(strip $(foreach 1,$1,$(call _mb_assert_defined_error,$1,$(strip $(value 2)))))
|
||||
endef
|
||||
define _mb_assert_defined_error
|
||||
$(if $(value $1),,$(error Undefined $1$(if $2, ($2))))
|
||||
endef
|
||||
68
lib/make/mb_autoexec.mk
Normal file
68
lib/make/mb_autoexec.mk
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
|
||||
MB_AUTOEXEC_BYSELF ?= true
|
||||
MB_AUTOEXEC_BYSELF_MSG ?= Generated by msxbuild Makefile
|
||||
MB_AUTOEXEC_TEXTMODE ?= 80
|
||||
MB_AUTOEXEC_STARTUP_TIMEOUT ?= 60
|
||||
MB_AUTOEXEC_STARTUP_EXITCODE ?= 124
|
||||
MB_AUTOEXEC_TEST_TIMEOUT ?= 120
|
||||
MB_AUTOEXEC_TEST_EXITCODE ?= 1
|
||||
|
||||
define mb_autoexec_append_cmd
|
||||
echo "$(2)\r" >> $(1)/autoexec.bat
|
||||
endef
|
||||
define mb_autoexec_append_echo
|
||||
$(call mb_autoexec_append_cmd,$(1),echo $(2))
|
||||
endef
|
||||
define mb_autoexec_append_rem
|
||||
$(call mb_autoexec_append_cmd,$(1),rem $(2))
|
||||
endef
|
||||
define mb_autoexec_append_gui_mode
|
||||
$(call mb_autoexec_append_echo,$(1),Enabling renderer.)
|
||||
$(call mb_autoexec_append_cmd,$(1),omsxctl set renderer SDL > NUL)
|
||||
$(call mb_autoexec_append_echo,$(1),Enabling throttling.)
|
||||
$(call mb_autoexec_append_cmd,$(1),omsxctl set throttle on > NUL)
|
||||
endef
|
||||
define mb_autoexec_append_stop_fail
|
||||
$(call mb_autoexec_append_echo,$(1),Disabling automatic failure.)
|
||||
$(call mb_autoexec_append_cmd,$(1),omsxctl fail_after 0)
|
||||
endef
|
||||
define mb_autoexec_append_exit
|
||||
$(call mb_autoexec_append_cmd,$(1),omsxctl exit 0)
|
||||
endef
|
||||
define mb_autoexec_write_default
|
||||
echo -n "" > $(1)/autoexec.bat
|
||||
$(if $(filter true,$(MB_AUTOEXEC_BYSELF)),$(call mb_autoexec_append_rem,$(1),$(MB_AUTOEXEC_BYSELF_MSG)))
|
||||
$(call mb_autoexec_append_cmd,$(1),omsxctl fail_after $(MB_AUTOEXEC_STARTUP_TIMEOUT) seconds fail_after_init $(MB_AUTOEXEC_STARTUP_EXITCODE))
|
||||
$(if $(filter 40,$(MB_AUTOEXEC_TEXTMODE)),$(call mb_autoexec_append_cmd,$(1),mode 40))
|
||||
$(if $(filter 40,$(MB_AUTOEXEC_TEXTMODE)),$(call mb_autoexec_append_echo,$(1),Enabled mode 40.))
|
||||
$(if $(filter 80,$(MB_AUTOEXEC_TEXTMODE)),$(call mb_autoexec_append_cmd,$(1),mode 80))
|
||||
$(if $(filter 80,$(MB_AUTOEXEC_TEXTMODE)),$(call mb_autoexec_append_echo,$(1),Enabled mode 80.))
|
||||
endef
|
||||
|
||||
define mb_autoexec_open_gui
|
||||
@echo === Generating autoexec.bat for command with gui
|
||||
$(call mb_autoexec_write_default,$(1))
|
||||
$(call mb_autoexec_append_gui_mode,$(1))
|
||||
$(call mb_autoexec_append_stop_fail,$(1))
|
||||
$(call mb_autoexec_append_echo,$(1),Type 'omsxctl exit' to stop emulation.)
|
||||
endef
|
||||
define mb_autoexec_open_gui_cmd
|
||||
$(call mb_autoexec_open_gui,$(1))
|
||||
$(call mb_autoexec_append_echo,$(1),Running command '$(2)')
|
||||
$(call mb_autoexec_append_cmd,$(1),$(2))
|
||||
endef
|
||||
define mb_autoexec_cmd
|
||||
@echo === Generating autoexec.bat for command
|
||||
$(call mb_autoexec_write_default,$(1))
|
||||
$(call mb_autoexec_append_echo,$(1),Running command '$(2)')
|
||||
$(call mb_autoexec_append_cmd,$(1),$(2))
|
||||
$(call mb_autoexec_append_exit,$(1))
|
||||
endef
|
||||
define mb_autoexec_cmd_test
|
||||
@echo === Generating autoexec.bat for command test
|
||||
$(call mb_autoexec_write_default,$(1))
|
||||
$(call mb_autoexec_append_cmd,$(1),omsxctl fail_after $(MB_AUTOEXEC_TEST_TIMEOUT) seconds fail_after_test $(MB_AUTOEXEC_TEST_EXITCODE))
|
||||
$(call mb_autoexec_append_echo,$(1),Running test '$(2)')
|
||||
$(call mb_autoexec_append_cmd,$(1),$(2))
|
||||
$(call mb_autoexec_append_exit,$(1))
|
||||
endef
|
||||
44
lib/make/mb_base.mk
Normal file
44
lib/make/mb_base.mk
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# TODO: clean up + make working for non-unix systems.
|
||||
|
||||
# OS cmds
|
||||
ifeq ($(OS),Windows_NT)
|
||||
MB_RM = del /F /Q
|
||||
MB_RMDIR = RMDIR /S /Q
|
||||
MB_MKDIR = mkdir
|
||||
MB_COPY = copy
|
||||
MB_ERRIGNORE = 2>NUL || true
|
||||
MB_SEP=\\
|
||||
else
|
||||
MB_RM = rm -f
|
||||
MB_RMDIR = rm -rf
|
||||
MB_MKDIR = mkdir -p
|
||||
MB_COPY = cp
|
||||
MB_ERRIGNORE = 2>/dev/null
|
||||
MB_SEP=/
|
||||
endif
|
||||
|
||||
# Remove space after separator
|
||||
MB_PSEP = $(strip $(MB_SEP))
|
||||
|
||||
define mb_clean
|
||||
@echo === Cleaning build folder.
|
||||
test $(1) && $(MB_RMDIR) $(1)
|
||||
endef
|
||||
define mb_mkdir
|
||||
@echo === Create module build folder.
|
||||
$(MB_MKDIR) $(1)
|
||||
endef
|
||||
define mb_delete
|
||||
test $(1) && $(MB_RM) $(1)
|
||||
endef
|
||||
define mb_copy
|
||||
$(MB_COPY) $(1) $(2)
|
||||
endef
|
||||
define mb_file_info
|
||||
sha1sum $(1)
|
||||
ls -lah $(1)
|
||||
endef
|
||||
define mb_create_dist
|
||||
tar -czf $(1) -C $(2) `ls $(2)`
|
||||
$(call mb_file_info,$(1))
|
||||
endef
|
||||
62
lib/make/mb_openmsx.mk
Normal file
62
lib/make/mb_openmsx.mk
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
|
||||
# TODO move to new msxhub native posix+win cmd tool
|
||||
# + local userdir caching like ~/.cache/msxhub/repro/m/s/x/msxdos2
|
||||
CMD_WGET ?= wget
|
||||
|
||||
PATH_OPENMSX ?= /usr/bin
|
||||
|
||||
# Define openmsx defaults
|
||||
MB_OPENMSX_BOOT_TIMEOUT ?= 25
|
||||
MB_OPENMSX_MACHINE ?= Philips_NMS_8250
|
||||
MB_OPENMSX_JOYPORTA ?=
|
||||
MB_OPENMSX_JOYPORTB ?=
|
||||
# Workaround for include msxbuild.mk file and 'older' openmsx segfaults on relative settings path.
|
||||
MB_OPENMSX_SETTING := $(if $(realpath $(PATH_MSXBUILD)),$(realpath $(PATH_MSXBUILD)),$(PATH_MSXBUILD))/lib/openmsx/boot_settings.xml
|
||||
MB_OPENMSX_EXTS_ORG += -ext ide -ext ram4mb
|
||||
MB_OPENMSX_ARGS = \
|
||||
-setting $(MB_OPENMSX_SETTING) \
|
||||
-machine $(MB_OPENMSX_MACHINE) \
|
||||
-ext slotexpander $(MB_OPENMSX_EXTS_ORG) $(MB_OPENMSX_EXTS) \
|
||||
-script $(PATH_MSXBUILD)/lib/openmsx/boot_env.tcl \
|
||||
-script $(PATH_MSXBUILD)/lib/openmsx/boot_hdd.tcl \
|
||||
-script $(PATH_MSXBUILD)/lib/openmsx/fail_after.tcl \
|
||||
-script $(PATH_MSXBUILD)/bin/wget/omsxctl.tcl
|
||||
|
||||
# TODO: add run flag to disable xml output like "-control stdio-boot-only"
|
||||
ifeq ($(OS),Windows_NT)
|
||||
MB_OPENMSX_CMD = $(PATH_OPENMSX)/openmsx $(MB_OPENMSX_ARGS) -control stdio < $(PATH_MSXBUILD)/lib/openmsx/boot_stdio.xml
|
||||
else
|
||||
MB_OPENMSX_CMD = $(PATH_OPENMSX)/openmsx $(MB_OPENMSX_ARGS) -control stdio < $(PATH_MSXBUILD)/lib/openmsx/boot_stdio.xml | sed -n -e 's/.*>\(.*\)<.*/\1/p' | tail -n+3
|
||||
endif
|
||||
define _mb_openmsx_run
|
||||
@echo === Running openmsx
|
||||
test -f $(PATH_MSXBUILD)/bin/wget/omsxctl.tcl || $(CMD_WGET) -O $(PATH_MSXBUILD)/bin/wget/omsxctl.tcl https://msxhub.com/api/OMSXCTL/1.0-1/get/OMSXCTL/omsxctl.tcl
|
||||
FAIL_AFTER_BOOT=$(MB_OPENMSX_BOOT_TIMEOUT) \
|
||||
FAIL_AFTER_PATH=bin \
|
||||
BOOT_HDD_PATH="$(1)" \
|
||||
BOOT_HDD_IMAGE="$(1)/../dsk.img" \
|
||||
JOYPORTA=$(MB_OPENMSX_JOYPORTA) \
|
||||
JOYPORTB=$(MB_OPENMSX_JOYPORTB) \
|
||||
$(MB_OPENMSX_CMD)
|
||||
endef
|
||||
define _mb_openmsx_run_dos
|
||||
@echo === run openmsx
|
||||
test -f $(PATH_MSXBUILD)/bin/wget/omsxctl.com || $(CMD_WGET) -O $(PATH_MSXBUILD)/bin/wget/omsxctl.com https://msxhub.com/api/OMSXCTL/1.0-1/get/OMSXCTL/omsxctl.com
|
||||
$(call mb_copy,$(PATH_MSXBUILD)/bin/wget/omsxctl.com,$(1))
|
||||
$(call _mb_openmsx_run,$(1))
|
||||
endef
|
||||
# TODO: add msx1+allversions of dos to https://github.com/fr3nd/msxhub-packages/issues/18
|
||||
#define mb_openmsx_dos1
|
||||
# @echo === Run openmsx_dos1
|
||||
# cp build/msxdos1/* $(1)
|
||||
# $(call _mb_openmsx_run_dos,$(1))
|
||||
#endef
|
||||
define mb_openmsx_dos2
|
||||
@echo === Prepare openmsx run with dos2
|
||||
test -f $(PATH_MSXBUILD)/bin/wget/msxdos2.sys || $(MB_MKDIR) $(PATH_MSXBUILD)/bin/wget
|
||||
test -f $(PATH_MSXBUILD)/bin/wget/msxdos2.sys || $(CMD_WGET) -O $(PATH_MSXBUILD)/bin/wget/msxdos2.sys https://msxhub.com/api/MSXDOS2/2.20-1/get/MSXDOS2/MSXDOS2.SYS
|
||||
test -f $(PATH_MSXBUILD)/bin/wget/command2.com || $(CMD_WGET) -O $(PATH_MSXBUILD)/bin/wget/command2.com https://msxhub.com/api/MSXDOS2/2.20-1/get/MSXDOS2/COMMAND2.COM
|
||||
$(call mb_copy,$(PATH_MSXBUILD)/bin/wget/msxdos2.sys,$(1))
|
||||
$(call mb_copy,$(PATH_MSXBUILD)/bin/wget/command2.com,$(1))
|
||||
$(call _mb_openmsx_run_dos, $(1))
|
||||
endef
|
||||
74
lib/make/msxbuild.mk
Normal file
74
lib/make/msxbuild.mk
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
# msxbuild.mk - Makefile helper to use with msx projects.
|
||||
#
|
||||
# note: this needs more work.
|
||||
#
|
||||
|
||||
|
||||
# Required tools paths
|
||||
PATH_HEX2BIN ?= /usr/bin
|
||||
PATH_SDCC ?= /usr/bin
|
||||
PATH_MSXBUILD ?= $(dir $(lastword $(MAKEFILE_LIST)))../..
|
||||
|
||||
include $(PATH_MSXBUILD)/lib/make/mb_base.mk
|
||||
include $(PATH_MSXBUILD)/lib/make/mb_autoexec.mk
|
||||
include $(PATH_MSXBUILD)/lib/make/mb_openmsx.mk
|
||||
include $(PATH_MSXBUILD)/lib/make/mb_assert.mk
|
||||
|
||||
CMD_H2B ?= $(PATH_HEX2BIN)/hex2bin
|
||||
CMD_SDCC ?= $(PATH_SDCC)/sdcc
|
||||
CMD_SDASM ?= $(PATH_SDCC)/sdasz80
|
||||
CMD_SDAR ?= $(PATH_SDCC)/sdar
|
||||
|
||||
# Define build flags
|
||||
MB_SDCC_FLAG_CPU ?= -mz80
|
||||
MB_SDCC_FLAG_LD ?= --nostdinc
|
||||
MB_SDASM_FLAGS ?= -g -l -c -o
|
||||
MB_SDAR_FLAGS ?= -rc
|
||||
#$(MB_SDASM) -I$(MB_LIBASM_SRC)/include
|
||||
|
||||
define mb_compile_asm
|
||||
@echo === Compile module asm.
|
||||
$(CMD_SDASM) $(MB_SDASM_FLAGS) $(1) $(2)
|
||||
endef
|
||||
|
||||
define mb_link_asm_lib
|
||||
@echo === Link module asm lib.
|
||||
$(CMD_SDAR) $(MB_SDAR_FLAGS) $(1) $(2)
|
||||
endef
|
||||
|
||||
define mb_link_asm
|
||||
@echo === Link asm module at $(3)
|
||||
$(CMD_SDCC) $(MB_SDCC_FLAG_CPU) --no-std-crt0 --code-loc $(3) -o $(1) $(2)
|
||||
endef
|
||||
define mb_link_asm_0000
|
||||
$(call mb_link_asm,$(1),$(2),0x0000)
|
||||
endef
|
||||
define mb_link_asm_dos
|
||||
$(call mb_link_asm,$(1),$(2),0x0100)
|
||||
endef
|
||||
define mb_link_asm_1000
|
||||
$(call mb_link_asm,$(1),$(2),0x1000)
|
||||
endef
|
||||
define mb_link_asm_4000
|
||||
$(call mb_link_asm,$(1),$(2),0x4000)
|
||||
endef
|
||||
define mb_link_asm_8000
|
||||
$(call mb_link_asm,$(1),$(2),0x8000)
|
||||
endef
|
||||
define mb_link_asm_C000
|
||||
$(call mb_link_asm,$(1),$(2),0xC000)
|
||||
endef
|
||||
#-l$(LIBASM_LINK)
|
||||
|
||||
define mb_hex2com
|
||||
@echo === Convert to binary: $(notdir $(1)).com
|
||||
cd $(dir $(1)) && $(CMD_H2B) -e com $(notdir $(1))
|
||||
$(call mb_file_info,$(2))
|
||||
@echo === Done $(notdir $(2))
|
||||
endef
|
||||
define mb_hex2dat
|
||||
@echo === Convert to binary $(notdir $(1)).dat
|
||||
cd $(dir $(1)) && $(CMD_H2B) -e dat $(notdir $(1))
|
||||
$(call mb_file_info,$(2))
|
||||
@echo === Done $(notdir $(2))
|
||||
endef
|
||||
Loading…
Add table
Add a link
Reference in a new issue