Shipwright/BUILDING.md
Jeffrey Crowell d4c1c40c1d
add support for clang compiler (#592)
* hacks to align strings for clang... wow just wow

* start work to getting built with clang

* fix issues with struct constructors, all builds, doesn't link still

* fix some narrowing issues that clang complains about

* fix compliation of zapd

* fix null deref in VersionInfo

* builds with clang

* make stringbuilding use StringHelper instead of addition

* fix linking

* add CLANG SHIP overlay on clang built versions

* doesn't need to be volatile

* mark unknown strings as extern

* rename some stuff

* can't align extern

* hopefully fix compilation for everythign

* expandtab

* allow setting LD

* Revert "allow setting LD"

This reverts commit 711aba6db2.

maybe to use lld it should be a LDFLAG?

* -Wno-deprecated-declarations is required for newer versions of clang

on macOS 13 beta sdk, the version of apple clang requires this

* Add jenkins support for clang

* Forward CXX flags to stormlib compilation

* Move GCC only flags to check

* use exports to set multiarch setup

* Fix Jenkins forever

* use make instead of cmake --build

add some flags to build with clang-11 as well

* address review coments

- rework extraction to allow multi thread
- misc readability cleanup

* update makefile to add WARN on linux+clang

Co-authored-by: David Chavez <david@dcvz.io>
2022-07-10 10:51:12 -04:00

3.0 KiB

Building Ship of Harkinian

Windows

  1. Requires Python >= 3.6.
  2. Install Visual Studio 2022 Community Edition
  3. In the Visual Studio Installer, install MSVC v142 - VS 2019 C++.
  4. Clone the Ship of Harkinian repository.
  5. Place one or more compatible roms in the OTRExporter directory with namings of your choice.
  6. Run OTRExporter/OTRExporter.sln.
  7. Switch the solution to Release x64.
  8. Build the solution.
  9. Launching OTRExporter/extract_assets.py will generate an oot.otr archive file in OTRExporter/oot.otr.
  10. Run soh/soh.sln
  11. Switch the solution to Release x86.
  12. Build the solution.
  13. Copy the OTRExporter/oot.otr archive file to soh/Release.
  14. Launch soh.exe.

Linux

# Clone the repo
git clone https://github.com/HarbourMasters/Shipwright.git
cd Shipwright
# Copy the baserom to the OTRExporter folder
cp <path to your ROM> OTRExporter
# Build the docker image
sudo docker build . -t soh
# Run the docker image with the working directory mounted to /soh
sudo docker run --rm -it -v $(pwd):/soh soh /bin/bash

Inside the Docker container:

# Clone and build StormLib
git clone https://github.com/ladislav-zezula/StormLib external/StormLib
cmake -B external/StormLib/build -S external/StormLib
cmake --build external/StormLib/build
cp external/StormLib/build/libstorm.a external
cp /usr/local/lib/libGLEW.a external

cd soh
# Extract the assets/Compile the exporter/Run the exporter
make setup -j$(nproc) OPTFLAGS=-O2 DEBUG=0
# Compile the code
make -j $(nproc) OPTFLAGS=-O2 DEBUG=0

macOS

  1. Requires Xcode (or xcode-tools) && sdl2, libpng, glew, dylibbundler (can be installed via brew, etc)
# Clone the repo
git clone https://github.com/HarbourMasters/Shipwright.git
cd ShipWright
# Copy the baserom to the OTRExporter folder
cp <path to your ROM> OTRExporter

cd soh
# Extract the assets/Compile the exporter/Run the exporter
# -jX defines number of cores to use for compilation - lower or remove entirely if having issues
make setup -j8 DEBUG=0
# Compile the code (watch the -j parameter as above)
make -j8 DEBUG=0
# Create macOS app bundle
make filledappbundle
  1. Launch soh app in the soh folder!

Compatible Roms

OOT_PAL_GC      checksum 0x09465AC3
OOT_PAL_GC_DBG1 checksum 0x871E1C92 (debug non-master quest)

OTRExporter Usage

The OTRExporter exports an oot.otr archive file which Ship of Harkinian requires to play.

Use the extract_assets.py script file to run the exporter using any of the following methods:

  1. Double click on the script after placing one or more roms in the directory.
  2. Drag & Drop a rom onto the script.
  3. In a terminal run python3 extract_assets.py after placing one or more roms in the directory.
  4. In a terminal run python3 extract_assets.py <path_to_rom>

If the script finds multiple roms the user is prompted which to use. Selection is done using the number keys and then pressing the carriage return key.