Skip to content

Commit 1c2400a

Browse files
committed
#75 wip: xboxビルドテスト v64
1 parent bd8c8b5 commit 1c2400a

2 files changed

Lines changed: 19 additions & 46 deletions

File tree

src/xbox.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,9 @@ export const minifyJs = (name: string, code: string): string =>
227227
/**
228228
* @description Xbox ホストの assets/app とホストスクリプト(js/bootstrap.js 等)を
229229
* 単一の pak バイナリへまとめ、`assets.pak` と RCDATA 参照用の
230-
* `assets.rc` を xbox/ 直下へ生成する。CMake が assets.rc を検出すると
231-
* これらを exe 内リソースへ埋め込み、平文 JS/HTML を配布物に残さない。
232-
* 環境変数 `NEXT2D_XBOX_NO_EMBED` が設定されている場合は埋め込みを無効化し、
233-
* 既存の生成物を削除して隣接ファイル読み込みへ戻す。
230+
* `assets.rc` を xbox/ 直下へ生成する。CMake が assets.rc を検出して
231+
* これらを exe 内リソースへ**必ず**埋め込み、平文 JS/HTML を配布物に残さない。
232+
* 埋め込みは必須(非埋め込みの選択肢は無い)。資材が無ければハードエラー。
234233
*
235234
* pak フォーマット (リトルエンディアン uint32):
236235
* magic "N2DA" / version(=1) / count / [keyLen,key,dataLen,data]...
@@ -249,16 +248,6 @@ const embedXboxAssets = (): Promise<void> =>
249248
const pakPath: string = `${xboxDir}/assets.pak`;
250249
const rcPath: string = `${xboxDir}/assets.rc`;
251250

252-
// 明示的に無効化された場合は生成物を消してフォールバックへ戻す。
253-
if (process.env.NEXT2D_XBOX_NO_EMBED) {
254-
try {
255-
fs.rmSync(pakPath, { "force": true });
256-
fs.rmSync(rcPath, { "force": true });
257-
} catch { /* ignore */ }
258-
console.log(pc.yellow("Xbox asset embedding disabled (NEXT2D_XBOX_NO_EMBED)."));
259-
return resolve();
260-
}
261-
262251
try {
263252
// 収集: assets/app 一式 (キーは app 基準) + host スクリプト (js/ 基準)。
264253
const entries: [string, string][] = [];
@@ -310,7 +299,6 @@ const embedXboxAssets = (): Promise<void> =>
310299
// 埋め込み済みの平文 `assets/`・`js/` は書き出し一覧から除外する。
311300
// これらは assets.pak (=exe 内 RCDATA) に格納済みで、CMake も埋め込みモードでは
312301
// exe 隣へステージしないため、xbox/ 直下に残しても不要かつ平文流出になる。
313-
// (無効化時は上で早期 return するため、隣接読み込み用の実体はそのまま残る)
314302
fs.rmSync(`${xboxDir}/assets`, { "recursive": true, "force": true });
315303
fs.rmSync(`${xboxDir}/js`, { "recursive": true, "force": true });
316304
console.log(pc.green("Excluded plaintext `assets/` and `js/` from the export (embedded in exe)."));

templates/xbox/CMakeLists.txt

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,17 @@ file(GLOB_RECURSE NEXT2D_HOST_SOURCES
8989
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.h"
9090
)
9191

92-
# 埋め込みアセット: builder の deployXbox が assets.pak と assets.rc を生成する。
93-
# 存在すれば RCDATA "N2DASSETS" として exe にリンクし、ゲーム JS/HTML を平文で
94-
# 隣に置かずに済む。無ければ従来どおり隣接 assets/app・js から読む。
92+
# 埋め込みアセット: builder の buildXbox が assets.pak と assets.rc を必ず生成し、
93+
# RCDATA "N2DASSETS" として exe にリンクする (ゲーム JS/HTML は平文で隣に置かない)。
94+
# 埋め込みは必須。assets.rc が無いのは builder を経由せず cmake を直接叩いた
95+
# ホスト単体ビルド (ゲーム資材なし) のみで、その場合はゲームは起動しない。
9596
set(NEXT2D_ASSETS_RC "${CMAKE_CURRENT_SOURCE_DIR}/assets.rc")
9697
if(EXISTS "${NEXT2D_ASSETS_RC}")
9798
enable_language(RC)
9899
list(APPEND NEXT2D_HOST_SOURCES "${NEXT2D_ASSETS_RC}")
99100
message(STATUS "Next2D: embedding assets from ${NEXT2D_ASSETS_RC}")
100101
else()
101-
message(STATUS "Next2D: no assets.rc found - runtime reads adjacent files")
102+
message(WARNING "Next2D: assets.rc not found - host-only build (no game assets). Run @next2d/builder to embed.")
102103
endif()
103104

104105
add_executable(Next2DXboxHost WIN32 ${NEXT2D_HOST_SOURCES})
@@ -189,31 +190,15 @@ target_compile_definitions(Next2DXboxHost PRIVATE
189190

190191
# -----------------------------------------------------------------------------
191192
# ランタイム資材のステージング
192-
# builder が assets/app に JS/HTML/アセットを配置する。
193-
# js/bootstrap.js はブラウザ相当グローバルを整える起動スクリプト。
194-
#
195-
# 埋め込みモード (assets.rc あり) では assets/ と js/ は exe 内 pak に入るため
196-
# exe 隣へは一切コピーしない (平文 JS/HTML を配布物に残さないのが目的)。
197-
# MicrosoftGame.config だけは常にステージングする。
193+
# ゲーム JS/HTML/アセット (assets/app) とホストスクリプト (js/bootstrap.js) は
194+
# builder が assets.pak にまとめて exe 内 RCDATA へ**必ず**埋め込む
195+
# (非埋め込みの選択肢は無い。平文 JS/HTML を配布物に残さないのが目的)。
196+
# したがって exe 隣へは assets/ も js/ もコピーしない。
197+
# MicrosoftGame.config (GDK タイトル設定) だけを exe の隣へステージングする。
198198
# -----------------------------------------------------------------------------
199-
if(EXISTS "${NEXT2D_ASSETS_RC}")
200-
add_custom_command(TARGET Next2DXboxHost POST_BUILD
201-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
202-
"${CMAKE_CURRENT_SOURCE_DIR}/MicrosoftGame.config"
203-
"$<TARGET_FILE_DIR:Next2DXboxHost>/MicrosoftGame.config"
204-
COMMENT "Staging MicrosoftGame.config (assets/JS embedded in exe)"
205-
)
206-
else()
207-
add_custom_command(TARGET Next2DXboxHost POST_BUILD
208-
COMMAND ${CMAKE_COMMAND} -E copy_directory
209-
"${CMAKE_CURRENT_SOURCE_DIR}/assets"
210-
"$<TARGET_FILE_DIR:Next2DXboxHost>/assets"
211-
COMMAND ${CMAKE_COMMAND} -E copy_directory
212-
"${CMAKE_CURRENT_SOURCE_DIR}/js"
213-
"$<TARGET_FILE_DIR:Next2DXboxHost>/js"
214-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
215-
"${CMAKE_CURRENT_SOURCE_DIR}/MicrosoftGame.config"
216-
"$<TARGET_FILE_DIR:Next2DXboxHost>/MicrosoftGame.config"
217-
COMMENT "Staging Next2D assets, bootstrap JS and MicrosoftGame.config"
218-
)
219-
endif()
199+
add_custom_command(TARGET Next2DXboxHost POST_BUILD
200+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
201+
"${CMAKE_CURRENT_SOURCE_DIR}/MicrosoftGame.config"
202+
"$<TARGET_FILE_DIR:Next2DXboxHost>/MicrosoftGame.config"
203+
COMMENT "Staging MicrosoftGame.config (assets/JS embedded in exe)"
204+
)

0 commit comments

Comments
 (0)