- Each AudioOut is logged as audio #N: the open with its guest call site, Start / Stop / Close (first 32 per output), and the 2000-callback stats line per output. An Engage phone log had two outputs after a background round trip, one fed and one starved; the combined stats read as "every other callback underruns" - DM_OE_SCRIPT gains bg=1 / bg=0, the same sequence as the iOS lifecycle callbacks (focus, audio take-over, guest clock freeze, graphics suspend); DM_AUDIO_MUTE=1 silences the real Core Audio path for such tests on the Mac - The silent sink no longer makes up time the process was suspended (it pulled seconds' worth at once and logged hundreds of underruns) - Host tests t_audio, t_audio_spsc and t_oe build again (game profile include, stubs) and pass - docs/agents/03-bringup.md: several outputs, background round trip on the Mac
111 lines
6.9 KiB
Makefile
111 lines
6.9 KiB
Makefile
DM_ROOT ?= $(HOME)/dm-work
|
||
# dm/host 单测一条命令:make -C dm/host/tests run(秒级;产物放 build/ 不进仓)
|
||
# dm/host unit tests in one command: make -C dm/host/tests run (takes seconds; build output goes to build/ and is not committed)
|
||
PY ?= $(DM_ROOT)/build/cache/dm/venv/bin/python
|
||
EXEFS ?= $(DM_ROOT)/data/switch/3.3.94012/Update/ExeFS
|
||
B = build
|
||
# 游戏档案头(dm.h 要 game_profile.h,由宿主 Makefile 生成在 ../gen/<档案>/)| game profile header (dm.h needs game_profile.h, generated by the host Makefile into ../gen/<profile>/)
|
||
GAME ?= smbw
|
||
GINC = -I../gen/$(GAME) -I../../games/$(GAME)
|
||
run: $(B)/t_textbox $(B)/t_padmap $(B)/t_touch $(B)/t_hid_receipt $(B)/t_hid_script $(B)/t_touch_mac $(B)/t_oe $(B)/t_fs $(B)/t_thread_leak $(B)/t_fs_case $(B)/t_romfs_validate $(B)/t_audio $(B)/t_audio_spsc $(B)/t_swkbd $(B)/t_altstack $(B)/t_movie $(B)/t_condvar $(B)/t_condvar_old $(B)/t_target_rank $(B)/t_hud_dead $(B)/t_namegen $(B)/t_modetx $(B)/t_unit_level $(B)/t_widget $(B)/t_doorspot $(B)/t_cloudsync $(B)/t_i18n $(B)/main.orig.bin $(B)/subsdk0.orig.bin
|
||
python3 native_write_scan.py --selftest ..
|
||
python3 mode_scan.py ../..
|
||
python3 ../../ios/tools/dm_i18n.py --check
|
||
python3 ../../i18n/scan_literals.py
|
||
$(B)/t_textbox
|
||
$(B)/t_touch
|
||
$(B)/t_hid_script 2>/dev/null
|
||
$(B)/t_hid_receipt 2>/dev/null
|
||
$(B)/t_touch_mac
|
||
$(B)/t_oe 2>/dev/null
|
||
$(B)/t_fs 2>/dev/null
|
||
$(B)/t_thread_leak
|
||
TMPDIR="$(abspath $(B))" $(B)/t_fs_case 2>/dev/null
|
||
DM_ROMFS="$(DM_ROOT)/data/switch/3.3.94012/Update/RomFS" $(B)/t_romfs_validate
|
||
$(B)/t_audio
|
||
$(B)/t_audio_spsc
|
||
$(B)/t_swkbd
|
||
$(B)/t_altstack
|
||
$(B)/t_movie
|
||
$(B)/t_condvar
|
||
$(B)/t_condvar_old
|
||
$(B)/t_target_rank 2>/dev/null
|
||
$(B)/t_hud_dead
|
||
$(B)/t_namegen
|
||
$(B)/t_modetx
|
||
$(B)/t_padmap
|
||
$(B)/t_unit_level
|
||
$(B)/t_widget
|
||
$(B)/t_doorspot
|
||
TMPDIR="$(abspath $(B))" $(B)/t_cloudsync 2>/dev/null
|
||
for m in en zh none sysen systw tags game; do TMPDIR="$(abspath $(B))" $(B)/t_i18n $$m || exit 1; done
|
||
$(PY) movie_cut.py $(B)/main.orig.bin $(B)/subsdk0.orig.bin
|
||
$(PY) oe_notify.py $(B)/main.orig.bin
|
||
$(B)/t_i18n: t_i18n.c ../dm_i18n.c ../dm_i18n.h ../dm_i18n_tab.h | $(B)
|
||
clang -O1 -Wall -Werror -I.. -o $@ t_i18n.c ../dm_i18n.c
|
||
$(B)/t_hud_dead: t_hud_dead.c ../dm_hud.h | $(B)
|
||
clang -O1 -Wall -Werror -I.. -o $@ t_hud_dead.c
|
||
$(B)/t_textbox: t_textbox.c ../dm_textbox_core.c ../dm_textbox_core.h | $(B)
|
||
clang -O1 -Wall -Werror -o $@ t_textbox.c ../dm_textbox_core.c
|
||
$(B)/t_doorspot: t_doorspot.c ../dm_doorspot.h | $(B)
|
||
clang -O1 -Wall -Werror -I.. -o $@ t_doorspot.c
|
||
$(B)/t_widget: t_widget.c ../dm_widget.h | $(B)
|
||
clang -O1 -Wall -Werror -I.. -o $@ t_widget.c
|
||
$(B)/t_unit_level: t_unit_level.c ../dm_unit.h | $(B)
|
||
clang -O1 -Wall -Werror -I.. -o $@ t_unit_level.c
|
||
$(B)/t_padmap: t_padmap.c ../dm_padmap.h ../dm_input.h | $(B)
|
||
clang -O1 -Wall -Werror -o $@ t_padmap.c
|
||
$(B)/t_modetx: t_modetx.c ../dm_modetx.h | $(B)
|
||
clang -O1 -Wall -Werror -o $@ t_modetx.c
|
||
$(B)/t_namegen: t_namegen.c ../dm_namegen.c | $(B)
|
||
clang -O1 -Wall -Werror -o $@ t_namegen.c ../dm_namegen.c
|
||
$(B)/t_cloudsync: t_cloudsync.c ../dm_cloudsync.c ../dm.h | $(B)
|
||
clang -O1 -Wall -Werror -I.. -o $@ t_cloudsync.c ../dm_cloudsync.c
|
||
$(B)/t_touch: t_touch.c ../hle_touch.c ../front.h ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_touch.c ../hle_touch.c
|
||
$(B)/t_thread_leak: t_thread_leak.c ../thread.c ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. $(GINC) -o $@ t_thread_leak.c
|
||
$(B)/t_fs: t_fs.c t_fs_stub.c ../hle_fs.c ../hle.h ../dm.h ../dm_i18n.c | $(B)
|
||
clang -O1 -Wno-unused-function -I.. $(GINC) -o $@ t_fs.c t_fs_stub.c ../dm_i18n.c
|
||
$(B)/t_audio: t_audio.c ../hle_audio.c ../hle.h ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. $(GINC) -o $@ t_audio.c -framework AudioToolbox
|
||
$(B)/t_audio_spsc: t_audio_spsc.c ../hle_audio.c ../hle.h ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. $(GINC) -o $@ t_audio_spsc.c -framework AudioToolbox
|
||
$(B)/t_audio_spsc_tsan: t_audio_spsc.c ../hle_audio.c ../hle.h ../dm.h | $(B)
|
||
clang -O1 -g -O1 -fsanitize=thread -Wno-unused-function -I.. -o $@ t_audio_spsc.c -framework AudioToolbox
|
||
$(B)/t_swkbd: t_swkbd.c ../hle_swkbd.c ../hle.h ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_swkbd.c ../hle_swkbd.c
|
||
$(B)/t_movie: t_movie.c ../hle_movie.c ../hle.h ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_movie.c ../hle_movie.c
|
||
$(B)/t_altstack: t_altstack.c t_altstack_stub.c ../crash.c ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_altstack.c t_altstack_stub.c ../crash.c
|
||
$(B)/%.orig.bin: $(EXEFS)/% | $(B)
|
||
$(PY) ../../tools/nso.py $< $@ > /dev/null
|
||
$(B):
|
||
mkdir -p $@
|
||
.PHONY: run tsan
|
||
tsan: $(B)/t_audio_spsc_tsan
|
||
$(B)/t_audio_spsc_tsan
|
||
$(B)/t_condvar: t_condvar.c t_condvar_stub.c ../hle_thread.c ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -DDM_TEST_HOOKS -I.. -o $@ t_condvar.c t_condvar_stub.c ../hle_thread.c
|
||
$(B)/t_condvar_old: t_condvar.c t_condvar_stub.c ../hle_thread.c ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -DDM_TEST_HOOKS -DDM_TEST_CV_OLD_ORDER -I.. -o $@ t_condvar.c t_condvar_stub.c ../hle_thread.c
|
||
|
||
$(B)/t_fs_case: t_fs_case.c ../hle_fs.c ../hle.h ../dm.h ../dm_i18n.c | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_fs_case.c ../dm_i18n.c
|
||
$(B)/t_romfs_validate: t_romfs_validate.c ../romfs_validate.c ../romfs_validate.h ../dm_i18n.c ../dm_i18n_tab.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_romfs_validate.c ../romfs_validate.c ../dm_i18n.c
|
||
|
||
$(B)/t_hid_script: t_hid_script.c t_touch_tick_stub.c ../hle_hid.c ../dm_cursor.c ../dm_hud.c ../dm_hud.h ../touch_mac.c ../../ios/Sources/dm_touch_controls.c ../hle.h ../dm.h ../dm_input.h ../front.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -I../../ios/Sources -o $@ t_hid_script.c t_touch_tick_stub.c ../dm_cursor.c ../dm_hud.c ../touch_mac.c ../../ios/Sources/dm_touch_controls.c -lm
|
||
|
||
$(B)/t_oe: t_oe.c ../hle_oe.c ../hle.h ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. $(GINC) -o $@ t_oe.c
|
||
|
||
$(B)/t_hid_receipt: t_hid_receipt.c t_touch_tick_stub.c ../hle_hid.c ../dm_cursor.c ../dm_hud.c ../dm_hud.h ../touch_mac.c ../../ios/Sources/dm_touch_controls.c ../hle.h ../dm.h ../dm_input.h ../front.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -I../../ios/Sources -o $@ t_hid_receipt.c t_touch_tick_stub.c ../dm_cursor.c ../dm_hud.c ../touch_mac.c ../../ios/Sources/dm_touch_controls.c -lm
|
||
$(B)/t_touch_mac: t_touch_mac.c ../touch_mac.c ../dm_cursor.c ../dm_hud.c ../dm_hud.h ../../ios/Sources/dm_touch_controls.c ../../ios/Sources/dm_touch_controls.h ../../host/dm_input.h | $(B) # 测试 #include 了 touch_mac.c 与 dm_touch_controls.c,须列为依赖(漏列致改源不重编) | the test #includes touch_mac.c and dm_touch_controls.c, which must be listed as dependencies (omitting them means source changes do not trigger a rebuild)
|
||
clang -std=c11 -Wall -Wextra -Werror -I.. -I../../ios/Sources -o $@ t_touch_mac.c ../dm_cursor.c ../dm_hud.c -lm
|
||
$(B)/t_target_rank: t_target_rank.c ../hle_target.c ../dm.h | $(B)
|
||
clang -O1 -Wno-unused-function -I.. -o $@ t_target_rank.c ../hle_target.c
|