Skip to content

ci: frametap.exe を配布用にビルドする - #19

Merged
torabit merged 1 commit into
mainfrom
torabit/ci/publish-frametap
Sep 27, 2026
Merged

torabit merged 1 commit into
mainfrom
torabit/ci/publish-frametap

Conversation

@torabit

@torabit torabit commented Sep 27, 2026

Copy link
Copy Markdown
Owner

変更内容

  • Windows CI で frametap.exe を release build する。RUSTFLAGS は hid_probe と同じ -C target-feature=+crt-static
  • system の DLL かどうかを、名前の一覧ではなく解決した先のパスで判定する
  • frametap.exe と hid_probe.exe を同じ step で扱い、artifact を frametap-windows-x64 にまとめる

なぜ

実機で確かめられるのは Windows と DualSense を持つ人だけになる。手元では build も実行もできないので、CI が作った exe を Release に置いて渡したい。

判定を書き換えたのは、名前の一覧が漏れる形で壊れるため。$systemDllNames に載っていない import は PATH から解決され、そのまま dist/ に複製される。PATH には System32 が入るので、載せ忘れた OS の DLL は「見つかったから同梱した」という扱いになる。hid_probe は import が 4 つで全部一覧にあったため露出していなかった。eframe は opengl32.dll や dwmapi.dll を引く。

解決した先が System32 の下かどうかで判定すれば、一覧の保守が要らなくなる。api-ms-win-* だけは名前で残す。OS の一部だが、実体のあるファイルとして解決されないことがある。

検証

PowerShell は手元で走らせられないので、この PR の CI の run が検証になる。確かめるのは 4 つ。

  • frametap.exe の import が log に並び、System32 配下のものが (system: ...) と出る
  • dist/ の中身が frametap.exe と hid_probe.exe の 2 つだけになる
  • hid_probe.exe の判定結果が変わらない。前回の run では api-ms-win-core-synch-l1-2-0.dll kernel32.dll ntdll.dll oleaut32.dll の 4 つがすべて system だった
  • crt-static と eframe が両立する

結果は run を読んでからこの PR に書く。

変えていないこと

Release への添付は CI に入れない。artifact を upload するところまでを CI が持ち、添付は hid_probe のときと同じ手順で行う。tag を打つ条件をここで決めると、実機に渡す判断が CI の trigger に移る。

Closes #15

system の DLL かどうかを名前の一覧で決めていたので、一覧に無い import は runner の
System32 から解決されて dist/ に複製された。hid_probe は import が 4 つで全部一覧に
載っていたため露出していなかったが、eframe は opengl32.dll や dwmapi.dll を引く。
Windows の構成要素を Release に混ぜることになる。

解決した先が System32 の下かどうかで判定する。一覧を保守しなくても漏れない。
api-ms-win-* だけは実体のあるファイルとして解決されないことがあるため名前で残す。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@torabit

torabit commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

run の結果

4 点すべて確認した。

frametap.exe が import する DLL:
  ADVAPI32.dll (system: C:\Windows\system32\ADVAPI32.dll)
  api-ms-win-core-synch-l1-2-0.dll (system)
  bcryptprimitives.dll (system: C:\Windows\system32\bcryptprimitives.dll)
  dwmapi.dll (system: C:\Windows\system32\dwmapi.dll)
  GDI32.dll (system: C:\Windows\system32\GDI32.dll)
  imm32.dll (system: C:\Windows\system32\imm32.dll)
  kernel32.dll (system: C:\Windows\system32\kernel32.dll)
  ntdll.dll (system: C:\Windows\system32\ntdll.dll)
  ole32.dll (system: C:\Windows\system32\ole32.dll)
  oleaut32.dll (system: C:\Windows\system32\oleaut32.dll)
  OPENGL32.dll (system: C:\Windows\system32\OPENGL32.dll)
  SHELL32.dll (system: C:\Windows\system32\SHELL32.dll)
  user32.dll (system: C:\Windows\system32\user32.dll)
  uxtheme.dll (system: C:\Windows\system32\uxtheme.dll)

hid_probe.exe が import する DLL:
  api-ms-win-core-synch-l1-2-0.dll (system)
  kernel32.dll (system: C:\Windows\system32\kernel32.dll)
  ntdll.dll (system: C:\Windows\system32\ntdll.dll)
  oleaut32.dll (system: C:\Windows\system32\oleaut32.dll)

artifact の中身:
  frametap.exe (7019520 bytes)
  hid_probe.exe (331776 bytes)

hid_probe.exe の 4 件は前回の run と同じで、判定結果も変わっていない。crt-static と eframe は両立した。同梱した DLL は 0 件で、frametap.exe も追加の DLL を要らない。

書き換えが要った証拠

bcryptprimitives.dll dwmapi.dll imm32.dll OPENGL32.dll uxtheme.dll の 5 つは、消した $systemDllNames に載っていなかった。PATH には System32 が入るので、名前で判定していたら 5 つとも dist/ に複製され、Windows の構成要素を Release に混ぜて配っていた。

@torabit
torabit merged commit 7b00420 into main Sep 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI で frametap.exe を配布用にビルドする

2 participants