Add soh-torch, rebuild ExtractAssets on it

soh links torch as a static library, which compiles out torch's own CLI,
so build-time extraction needs an entry point. soh-torch supplies one
around the same SohTorch::Extract the game calls -- one implementation,
so the CLI and the in-game path can't drift.

ExtractAssets keeps its old contract: SOH_ROM_PATH accepts roms and/or
directories of roms and defaults to roms/, so dropping a vanilla and a
master quest rom in produces oot.o2r and oot-mq.o2r in one run, and
chaining GenerateSohOtr keeps soh.o2r coming out of it too.

Extract now returns the archive name torch chose rather than deriving it
from IsMasterQuest(), so config.yml is the only thing naming archives.
The name comes from Companion::GetOutputPath(): scanning the destination
for *.o2r picks up an unrelated soh.o2r when extracting into the build
directory, which is only invisible in the game because it extracts into
an empty temp dir.

ExtractAssetHeaders stays as a target that explains why it can't run --
torch registers no OoT header exporter and emits no #define d<sym>, which
soh source references ~24k times. Documented in BUILDING.md alongside it.

This removes the last ZAPD dependency from the build.
This commit is contained in:
briaguya
2026-07-25 02:56:44 -04:00
parent bf8cc0b7ae
commit 48b3344237
6 changed files with 182 additions and 36 deletions
+14 -2
View File
@@ -80,6 +80,10 @@ C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target clean
```
#### Regenerate Asset Headers
> **Currently unavailable.** The Torch migration removed the ZAPD-based header
> generator, and Torch does not emit OoT asset headers yet. The checked-in headers
> under `soh/assets` are unaffected; only regenerating them is.
```powershell
# If you need to regenerate the asset headers to check them into source
C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target ExtractAssetHeaders
@@ -221,6 +225,10 @@ cpack -G External (creates appimage)
cmake --build build-cmake --target clean
```
#### Regenerate Asset Headers
> **Currently unavailable.** The Torch migration removed the ZAPD-based header
> generator, and Torch does not emit OoT asset headers yet. The checked-in headers
> under `soh/assets` are unaffected; only regenerating them is.
```bash
# If you need to regenerate the asset headers to check them into source
cmake --build build-cmake --target ExtractAssetHeaders
@@ -278,6 +286,10 @@ cmake --build build-cmake --target clean
```
#### Regenerate Asset Headers
> **Currently unavailable.** The Torch migration removed the ZAPD-based header
> generator, and Torch does not emit OoT asset headers yet. The checked-in headers
> under `soh/assets` are unaffected; only regenerating them is.
```bash
# If you need to regenerate the asset headers to check them into source
cmake --build build-cmake --target ExtractAssetHeaders
@@ -287,7 +299,7 @@ cmake --build build-cmake --target ExtractAssetHeaders
1. Requires that your build machine is setup with the tools necessary for your platform above
2. Requires that you have the switch build tools installed
3. Clone the Ship of Harkinian repository
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
4. Place one or more [compatible](#compatible-roms) roms in the `roms` directory with namings of your choice
```bash
cd Shipwright
@@ -308,7 +320,7 @@ cmake --build build-switch --target soh_nro
1. Requires that your build machine is setup with the tools necessary for your platform above
2. Requires that you have the Wii U build tools installed
3. Clone the Ship of Harkinian repository
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
4. Place one or more [compatible](#compatible-roms) roms in the `roms` directory with namings of your choice
```bash
cd Shipwright