Files
dat-thang/docs/windows-build.md
T
divorce b735900f2e 0.0.002
ddat interop with dat js
cable interop with cabal js
ddat's frontend = dat-thang
cable fe = cable-thang
dillo support based on cel's dillo-dat
bootstrap node
xplatform support

Signed-off-by: divo <418@cryspace.space>
2026-10-19 00:17:02 -04:00

4.2 KiB

Windows build

The native Windows build uses MSYS2's UCRT64 toolchain and creates a runnable folder of PE executables plus their runtime DLLs and data files. It does not reuse the GNU/Linux build/ directory or generated config.mk.

Install MSYS2, then install the UCRT64 packages needed by the project:

pacman -S --needed \
  mingw-w64-ucrt-x86_64-gcc \
  mingw-w64-ucrt-x86_64-make \
  mingw-w64-ucrt-x86_64-pkgconf \
  mingw-w64-ucrt-x86_64-libsodium \
  mingw-w64-ucrt-x86_64-curl \
  mingw-w64-ucrt-x86_64-SDL2 \
  mingw-w64-ucrt-x86_64-SDL2_ttf

From the repository root in PowerShell, run:

.\build-windows.ps1

Compiler outputs, including tests and intermediate files, stay in build\windows. Distribution output is staged separately: dist\windows-x64 contains only the eight user-facing programs, their runtime DLLs, assets, Scheme files, and manuals. dist\installers contains a portable ZIP and, when Inno Setup is installed, the setup executable. Do not distribute the contents of build\windows directly. The build date's Discordian calendar conversion is compiled into the GUI; no external ddate installation is needed.

To create just the portable ZIP, run build-windows.ps1. To create the install wizard as well, run build-windows-installer.ps1.

cable-thang.exe is a native C/S7 client using Cesspool and Sleep. Node.js and Cabal JavaScript modules are needed only for optional interoperability tests. Cable audio and video support are experimental and disabled by default, so the regular Windows build does not require FFmpeg. To enable both, install FFmpeg and build with:

pacman -S --needed mingw-w64-ucrt-x86_64-ffmpeg
.\build-windows.ps1 -EnableCableMedia

The UCRT64 FFmpeg libraries provide Cable's AAC-LC encoder/decoder, OBS MPEG-TS ingest, and low-resolution JPEG video exchange; their runtime DLLs are copied beside the Windows executables. In cable-thang, OBS INPUT (or Ctrl+Shift+V) listens on local UDP port 5000; OBS can publish MPEG-TS there using its Custom FFmpeg Output.

The GNU/Linux workflow is ./configure, make, and make install; its default compiler output is build/linux. To create a staged GNU/Linux tarball, use make package. Release artifacts go under dist/ on both platforms. To create a source-only archive, run package-source.ps1; its contents and exclusions are documented in docs\source-distribution.md. That configuration checks for libcurl because the Dillo-compatible dat-dns lookup uses HTTPS /.well-known/dat; it does not call the operating system DNS TXT resolver.

Install wizard

Install Inno Setup 6 after installing the MSYS2 build tools. From PowerShell at the repository root, run:

.\build-windows-installer.ps1

The script rebuilds the Windows applications, bundles their DLLs and runtime assets, and creates dist\installers\dat-thang-setup-0.0.002-x64.exe. The application identifies itself as dat-thang v0.0.002 (prototype, pre-alpha); the executable file version is 0.0.2.0. The wizard offers a per-user or all-users install, a destination folder, optional desktop shortcut, optional PATH entry for the terminal commands, and an optional launch at the end. Uninstall removes a PATH entry only when this installer added it. The app and installer use the same generic green hexagon icon. The Start menu includes dat-thang and a command prompt with the installed tools on PATH.

cable-thang.exe is included for opening a room address from the command prompt and connects through Cesspool.

cesspool-bootstrap.exe runs a dedicated Cesspool discovery node in the foreground. It is for an operator deploying a reachable public rendezvous host, not something chat users need to run. The node needs a stable state directory and inbound UDP on the selected port; see docs\cesspool-bootstrap.1 for process-supervisor and firewall setup. The Windows installer includes the executable and the operator manpage in its docs folder.

Keep the node identity outside the checkout. In PowerShell, run the development executable with --state-dir "$env:LOCALAPPDATA\dat-gpt\cesspool-bootstrap-state". That keeps the private identity key in per-user application data rather than in the source tree or disposable compiler output.