VENV ?= .venv
PYTHON := $(VENV)/bin/python
# The interpreter that creates $(VENV); everything else runs inside the venv.
# macOS's own python3 is 3.9, so pass e.g. PYTHON3=/opt/homebrew/bin/python3 if needed.
PYTHON3 ?= python3
ROM ?= rom.z64
NATIVE_CXX ?= clang++
NATIVE_TEST_FLAGS := -std=c++20 -Isrc/native -fsanitize=address,undefined -g
RECOMP_BUILD := build/recomp
RECOMP_RUNTIME := $(RECOMP_BUILD)/upstream/N64ModernRuntime

.PHONY: all host bootstrap test check recomp-bootstrap recomp-layout recomp-scan recomp-lz recomp-cpu recomp-audio-queue-test recomp-intro-test
.DEFAULT_GOAL := all

# `make`: from a fresh clone to a built game host, given the ROM at rom.z64.
# Then play with scripts/Play SRW64 Native.command (README).
all: $(ROM)
	@$(MAKE) --no-print-directory bootstrap
	@$(MAKE) --no-print-directory recomp-bootstrap
	@$(MAKE) --no-print-directory recomp-layout
	@$(MAKE) --no-print-directory recomp-scan
	@$(MAKE) --no-print-directory recomp-cpu
	@$(MAKE) --no-print-directory host

$(ROM):
	@echo "Missing $(ROM): put your Super Robot Taisen 64 ROM (Japan, Rev 0) there; see README." >&2; exit 1

# The RT64/Metal game host, built as the launcher would build it.
host: $(PYTHON)
	$(PYTHON) tools/recomp/run/run_host_probe.py --graphics --build-only

# Optional shared-UI experiment; requires the existing native graphics toolchain.
.PHONY: recomp-ui-probe
recomp-ui-probe: $(PYTHON)
	$(PYTHON) tools/recomp/toolchain/prepare_frontend.py --fetch
	cmake -S src/host -B $(RECOMP_BUILD)/gfx-build -DSRW64_ENABLE_RT64=ON -DSRW64_BUILD_UI_PROBE=ON -DPython3_EXECUTABLE=$(abspath $(PYTHON))
	cmake --build $(RECOMP_BUILD)/gfx-build --target srw64-ui-probe -j 6

$(PYTHON):
	@$(PYTHON3) -c 'import sys; sys.exit(sys.version_info < (3, 11))' 2>/dev/null || { \
	  echo "Python 3.11 or newer is required; $(PYTHON3) is $$($(PYTHON3) --version 2>&1)." >&2; \
	  echo "Install one (brew install python) and run: make PYTHON3=/path/to/python3" >&2; exit 1; }
	$(PYTHON3) -m venv $(VENV)

bootstrap: $(PYTHON)
	$(PYTHON) -m pip install --upgrade pip
	$(PYTHON) -m pip install -e . -r requirements.lock

test:
	$(PYTHON) -m unittest discover -s tests -v

check: test
	$(PYTHON) -m compileall -q src tools tests
	$(PYTHON) -m pip check

recomp-bootstrap: $(PYTHON)
	$(PYTHON) tools/recomp/toolchain/bootstrap.py

recomp-layout: $(PYTHON)
	$(PYTHON) tools/recomp/toolchain/analyze_layout.py --rom $(ROM)

recomp-scan: $(PYTHON)
	$(PYTHON) tools/recomp/toolchain/scan_functions.py --rom $(ROM)

recomp-lz:
	$(PYTHON) tools/recomp/probes/run_lz_probe.py --limit 0

recomp-cpu: $(PYTHON)
	$(PYTHON) tools/recomp/toolchain/generate_cpu.py

recomp-audio-queue-test:
	mkdir -p build/recomp
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -I src/host tests/native_audio_queue.cpp -o build/recomp/native-audio-queue-test
	build/recomp/native-audio-queue-test

recomp-intro-test:
	mkdir -p build/recomp/intro
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -I src/host tests/native_intro.cpp -o build/recomp/intro/controls-test
	build/recomp/intro/controls-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -I src/host -I build/recomp/upstream/RT64/src/contrib -I build/recomp/upstream/N64Recomp/include -I build/recomp/cpu-bound/generated -I build/recomp/upstream/N64ModernRuntime/librecomp/include/librecomp -I build/recomp/upstream/N64ModernRuntime/thirdparty tests/native_intro_adapter.cpp src/host/native_intro.cpp -o build/recomp/intro/adapter-test
	build/recomp/intro/adapter-test

.PHONY: recomp-content-test recomp-name-entry-test
recomp-name-entry-test:
	mkdir -p build/recomp/name-input
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Isrc/native -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include -Ibuild/recomp/cpu-bound/generated tests/native_name_entry.cpp src/host/native_name_entry.cpp -o build/recomp/name-input/name-entry-test
	build/recomp/name-input/name-entry-test

recomp-content-test:
	cmake --build build/recomp/gfx-build --target srw64-content-test srw64-dialogue-test -j 6
	build/recomp/gfx-build/srw64-content-test
	build/recomp/gfx-build/srw64-dialogue-test

# Native components require the pinned toolchain/generated headers. Keep this
# separate from the ROM-independent Python `check` target.
.PHONY: recomp-native-check recomp-timer-test recomp-replay-test
recomp-native-check: recomp-move-range-test recomp-input-bindings-test recomp-button-prompts-test recomp-game-speed-test recomp-battle-preview-test recomp-audio-queue-test recomp-intro-test recomp-name-entry-test recomp-content-test recomp-timer-test recomp-guest-shutdown-test recomp-replay-test recomp-state-probe-test recomp-script-inject-test recomp-script-skip-test recomp-mini-stage-test recomp-rule-fixes-test recomp-base-fixes-test recomp-upgrade-rules-test recomp-upgrade-refund-test recomp-parts-carry-test recomp-cheats-test recomp-bezel-test recomp-rom-art-test recomp-link-battler-test recomp-debug-protocol-test recomp-intermission-test recomp-unit-name-test recomp-stage-info-test

.PHONY: recomp-state-probe-test
recomp-state-probe-test:
	mkdir -p build/recomp/state-probe
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_state_probe.cpp -o build/recomp/state-probe/test
	build/recomp/state-probe/test

.PHONY: recomp-guest-shutdown-test
recomp-guest-shutdown-test:
	$(PYTHON) tools/recomp/toolchain/prepare_runtime_lifecycle.py
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -I$(RECOMP_BUILD)/runtime-lifecycle -I$(RECOMP_RUNTIME)/ultramodern/include -I$(RECOMP_RUNTIME)/thirdparty -I$(RECOMP_RUNTIME)/thirdparty/concurrentqueue tests/native_guest_shutdown.cpp $(RECOMP_RUNTIME)/ultramodern/src/threadqueue.cpp -o $(RECOMP_BUILD)/runtime-lifecycle/guest-shutdown-test
	$(RECOMP_BUILD)/runtime-lifecycle/guest-shutdown-test

recomp-timer-test:
	$(PYTHON) tools/recomp/toolchain/prepare_runtime_lifecycle.py
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -I$(RECOMP_BUILD)/runtime-lifecycle -I$(RECOMP_RUNTIME)/ultramodern/include -I$(RECOMP_RUNTIME)/thirdparty -I$(RECOMP_RUNTIME)/thirdparty/concurrentqueue tests/native_timer_shutdown.cpp -o $(RECOMP_BUILD)/runtime-lifecycle/timer-test
	$(RECOMP_BUILD)/runtime-lifecycle/timer-test

recomp-replay-test:
	mkdir -p $(RECOMP_BUILD)
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) tests/native_replay_vi.cpp -o $(RECOMP_BUILD)/replay-vi-test
	$(RECOMP_BUILD)/replay-vi-test

.PHONY: recomp-input-bindings-test
recomp-input-bindings-test:
	mkdir -p $(RECOMP_BUILD)
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_input_bindings.cpp -o $(RECOMP_BUILD)/input-bindings-test
	$(RECOMP_BUILD)/input-bindings-test

.PHONY: recomp-game-speed-test
recomp-game-speed-test:
	mkdir -p $(RECOMP_BUILD)
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_game_speed.cpp -o $(RECOMP_BUILD)/game-speed-test
	$(RECOMP_BUILD)/game-speed-test

.PHONY: recomp-button-prompts-test
recomp-button-prompts-test:
	mkdir -p $(RECOMP_BUILD)
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/native -Isrc/host tests/native_button_prompts.cpp -o $(RECOMP_BUILD)/button-prompts-test
	$(RECOMP_BUILD)/button-prompts-test

.PHONY: recomp-data
recomp-data:
	$(PYTHON) tools/content/extract_original.py --rom $(ROM)

.PHONY: recomp-script-inject-test
recomp-script-skip-test:
	mkdir -p build/recomp/script-skip
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_script_skip.cpp -o build/recomp/script-skip/test
	build/recomp/script-skip/test

recomp-script-inject-test:
	mkdir -p build/recomp/script-inject
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib tests/native_script_inject.cpp -o build/recomp/script-inject/test
	rm -rf build/recomp/script-inject/test-run && build/recomp/script-inject/test build/recomp/script-inject/test-run

.PHONY: recomp-upgrade-rules-test
recomp-upgrade-rules-test:
	mkdir -p build/recomp/upgrade-rules-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_upgrade_rules.cpp -o build/recomp/upgrade-rules-test/test
	rm -rf build/recomp/upgrade-rules-test/test-run && build/recomp/upgrade-rules-test/test build/recomp/upgrade-rules-test/test-run $(ROM)

.PHONY: recomp-upgrade-refund-test
recomp-upgrade-refund-test:
	mkdir -p build/recomp/upgrade-refund-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_upgrade_refund.cpp -o build/recomp/upgrade-refund-test/test
	rm -rf build/recomp/upgrade-refund-test/test-run && build/recomp/upgrade-refund-test/test build/recomp/upgrade-refund-test/test-run

.PHONY: recomp-mod-library-test
MINIZ_DIR := $(RECOMP_RUNTIME)/thirdparty/miniz
ifeq ($(shell uname),Darwin)
HD_PREPARE_TEST_LIBS := -framework CoreFoundation
endif
recomp-mod-library-test:
	mkdir -p build/recomp/mod-library-test
	for c in miniz miniz_tdef miniz_tinfl miniz_zip; do cc -c -g -fsanitize=address,undefined -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		$(MINIZ_DIR)/$$c.c -o build/recomp/mod-library-test/$$c.o || exit 1; done
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -I$(RECOMP_BUILD)/upstream/RT64/src/contrib -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		tests/native_mod_library.cpp src/host/mod_library.cpp build/recomp/mod-library-test/miniz*.o -o build/recomp/mod-library-test/test
	build/recomp/mod-library-test/test build/recomp/mod-library-test/run tests/mods/manifests.json

# The HD pack's setup step (src/host/hd_prepare.hpp): unpacking and replacing, without the network.
.PHONY: recomp-hd-prepare-test
recomp-hd-prepare-test:
	mkdir -p build/recomp/hd-prepare-test
	for c in miniz miniz_tdef miniz_tinfl miniz_zip; do cc -c -g -fsanitize=address,undefined -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		$(MINIZ_DIR)/$$c.c -o build/recomp/hd-prepare-test/$$c.o || exit 1; done
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Isrc/native -I$(RECOMP_BUILD)/upstream/RT64/src/contrib -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		tests/native_hd_prepare.cpp src/host/hd_prepare.cpp src/native/app/runtime.cpp src/native/app/save_library.cpp src/native/app/sram.cpp \
		build/recomp/hd-prepare-test/miniz*.o $(HD_PREPARE_TEST_LIBS) -o build/recomp/hd-prepare-test/test
	build/recomp/hd-prepare-test/test build/recomp/hd-prepare-test/run

.PHONY: recomp-mod-data-test
recomp-mod-data-test:
	mkdir -p build/recomp/mod-data-test
	for c in miniz miniz_tdef miniz_tinfl miniz_zip; do cc -c -g -fsanitize=address,undefined -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		$(MINIZ_DIR)/$$c.c -o build/recomp/mod-data-test/$$c.o || exit 1; done
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -I$(RECOMP_BUILD)/upstream/RT64/src/contrib -I$(RECOMP_BUILD)/upstream/N64Recomp/include \
		-I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		tests/native_mod_data.cpp src/host/mod_library.cpp build/recomp/mod-data-test/miniz*.o -o build/recomp/mod-data-test/test
	build/recomp/mod-data-test/test build/recomp/mod-data-test/run $(ROM)

.PHONY: recomp-story-mod-test
recomp-story-mod-test:
	mkdir -p build/recomp/story-mod-test
	$(PYTHON) tools/mods/story.py compile config/recomp/mods/master-asia/story/master.json -o build/recomp/story-mod-test/master.json
	for c in miniz miniz_tdef miniz_tinfl miniz_zip; do cc -c -g -fsanitize=address,undefined -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		$(MINIZ_DIR)/$$c.c -o build/recomp/story-mod-test/$$c.o || exit 1; done
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -I$(RECOMP_BUILD)/upstream/RT64/src/contrib -I$(RECOMP_BUILD)/upstream/N64Recomp/include \
		-I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		tests/native_story_mod.cpp src/host/mod_library.cpp build/recomp/story-mod-test/miniz*.o -o build/recomp/story-mod-test/test
	build/recomp/story-mod-test/test build/recomp/story-mod-test/run build/recomp/story-mod-test/master.json

.PHONY: recomp-mod-icons-test
recomp-mod-icons-test:
	mkdir -p build/recomp/mod-icons-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_mod_icons.cpp -o build/recomp/mod-icons-test/test
	build/recomp/mod-icons-test/test

.PHONY: recomp-mod-names-test
recomp-mod-names-test:
	mkdir -p build/recomp/mod-names-test
	for c in miniz miniz_tdef miniz_tinfl miniz_zip; do cc -c -g -fsanitize=address,undefined -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		$(MINIZ_DIR)/$$c.c -o build/recomp/mod-names-test/$$c.o || exit 1; done
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Isrc/native -I$(RECOMP_BUILD)/upstream/RT64/src/contrib -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		tests/native_mod_names.cpp src/host/mod_library.cpp build/recomp/mod-names-test/miniz*.o -o build/recomp/mod-names-test/test
	build/recomp/mod-names-test/test build/recomp/mod-names-test/run

.PHONY: recomp-mod-languages-test
recomp-mod-languages-test:
	mkdir -p build/recomp/mod-languages-test
	for c in miniz miniz_tdef miniz_tinfl miniz_zip; do cc -c -g -fsanitize=address,undefined -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		$(MINIZ_DIR)/$$c.c -o build/recomp/mod-languages-test/$$c.o || exit 1; done
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -I$(RECOMP_BUILD)/upstream/RT64/src/contrib -I$(MINIZ_DIR) -I$(RECOMP_BUILD)/gfx-build/runtime/librecomp/miniz \
		tests/native_mod_languages.cpp src/host/mod_library.cpp src/native/localization/catalog.cpp build/recomp/mod-languages-test/miniz*.o -o build/recomp/mod-languages-test/test
	build/recomp/mod-languages-test/test build/recomp/mod-languages-test/run

.PHONY: recomp-music-test
recomp-music-test:
	mkdir -p build/recomp/music-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_music.cpp -o build/recomp/music-test/test
	build/recomp/music-test/test build/recomp/music-test/run

.PHONY: recomp-stage-info-test
recomp-stage-info-test:
	mkdir -p build/recomp/stage-info-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Isrc/native -Ibuild/recomp/upstream/RT64/src/contrib tests/native_stage_info.cpp -o build/recomp/stage-info-test/test
	build/recomp/stage-info-test/test content/stages/status.json

.PHONY: recomp-rom-art-test
recomp-rom-art-test:
	mkdir -p build/recomp/rom-art-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Isrc/native -Ibuild/recomp/upstream/RT64/src/contrib tests/native_rom_art.cpp src/host/rom_art.cpp -o build/recomp/rom-art-test/test
	build/recomp/rom-art-test/test rom.z64 assets/hd-ai/frames/v1

.PHONY: recomp-parts-carry-test
recomp-parts-carry-test:
	mkdir -p build/recomp/parts-carry-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_parts_carry.cpp -o build/recomp/parts-carry-test/test
	rm -rf build/recomp/parts-carry-test/test-run && build/recomp/parts-carry-test/test build/recomp/parts-carry-test/test-run

.PHONY: recomp-cheats-test
recomp-cheats-test:
	mkdir -p build/recomp/cheats-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_cheats.cpp -o build/recomp/cheats-test/test
	build/recomp/cheats-test/test

.PHONY: recomp-bezel-test
recomp-bezel-test:
	mkdir -p build/recomp/bezel-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_bezel.cpp -o build/recomp/bezel-test/test
	rm -rf build/recomp/bezel-test/run && build/recomp/bezel-test/test build/recomp/bezel-test/run

.PHONY: recomp-link-battler-test
recomp-link-battler-test:
	mkdir -p build/recomp/link-battler-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_link_battler.cpp -o build/recomp/link-battler-test/test
	build/recomp/link-battler-test/test

.PHONY: recomp-rule-fixes-test
recomp-rule-fixes-test:
	mkdir -p build/recomp/rule-fixes-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_rule_fixes.cpp -o build/recomp/rule-fixes-test/test
	rm -rf build/recomp/rule-fixes-test/test-run && build/recomp/rule-fixes-test/test build/recomp/rule-fixes-test/test-run

.PHONY: recomp-base-fixes-test
recomp-base-fixes-test:
	mkdir -p build/recomp/base-fixes-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Ibuild/recomp/upstream/N64Recomp/include tests/native_base_fixes.cpp -o build/recomp/base-fixes-test/test
	build/recomp/base-fixes-test/test

.PHONY: recomp-move-range-test
recomp-move-range-test:
	mkdir -p build/recomp/move-range-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -O1 -Isrc/host tests/native_move_range.cpp -o build/recomp/move-range-test/test
	build/recomp/move-range-test/test

.PHONY: recomp-mini-stage-test
recomp-mini-stage-test:
	mkdir -p build/recomp/mini-stage-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Wno-deprecated-declarations -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_mini_stage.cpp -o build/recomp/mini-stage-test/test
	rm -rf build/recomp/mini-stage-test/test-run && build/recomp/mini-stage-test/test build/recomp/mini-stage-test/test-run

.PHONY: recomp-unit-name-test
recomp-unit-name-test:
	mkdir -p build/recomp/unit-name-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Isrc/native -Ibuild/recomp/upstream/RT64/src/contrib -Ibuild/recomp/upstream/N64Recomp/include tests/native_unit_name.cpp src/host/unit_name.cpp -o build/recomp/unit-name-test/test
	build/recomp/unit-name-test/test

.PHONY: recomp-intermission-test
recomp-intermission-test:
	mkdir -p build/recomp/intermission-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_intermission.cpp -o build/recomp/intermission-test/test
	build/recomp/intermission-test/test

.PHONY: recomp-debug-protocol-test
recomp-debug-protocol-test:
	mkdir -p build/recomp/debug-protocol-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host -Ibuild/recomp/upstream/RT64/src/contrib tests/native_debug_protocol.cpp -o build/recomp/debug-protocol-test/test
	build/recomp/debug-protocol-test/test

.PHONY: recomp-battle-preview-test
recomp-battle-preview-test:
	mkdir -p build/recomp/battle-preview-test
	$(NATIVE_CXX) $(NATIVE_TEST_FLAGS) -Isrc/host tests/native_battle_preview.cpp -o build/recomp/battle-preview-test/test
	build/recomp/battle-preview-test/test
