跳到主要内容

Packaging

Wuwe produces a platform-specific SDK archive containing the library, public headers, CMake package files, examples, documentation, release metadata, and the default document-parsing runtime.

The archive version is read from the repository VERSION file. CMake package metadata, vcpkg.json, public wuwe/version.hpp, protocol defaults, CI artifact names, and release documentation use the same 1.0.0 release identity.

Build an archive

Windows x64:

$env:VCPKG_ROOT = "D:\tools\vcpkg"
cmake --preset windows-vcpkg
cmake --build --preset windows-vcpkg-release
ctest --preset windows-vcpkg-release
.\tools\package-wuwe.ps1 -BuildDir build-vcpkg -Configuration Release

Linux x64:

export VCPKG_ROOT="$HOME/vcpkg"
cmake --preset linux-vcpkg
cmake --build --preset linux-vcpkg-release
ctest --preset linux-vcpkg-release
bash ./tools/package-wuwe.sh --build-dir build-linux-vcpkg --configuration Release

macOS arm64:

cmake --preset macos-arm64-vcpkg
cmake --build --preset macos-arm64-vcpkg-release
ctest --preset macos-arm64-vcpkg-release
bash ./tools/package-wuwe.sh --build-dir build-macos-arm64-vcpkg --configuration Release

Windows produces a .zip; Linux and macOS produce a .tar.gz. Build each archive on its target operating system so native binaries, permissions, symbolic links, and the bundled JRE remain correct. All certified packages contain the matching pinned Temurin 21 runtime.

Archive contents

  • public headers and static libraries
  • wuwe-config.cmake and exported CMake targets
  • docs and example source
  • the strict local Skill package example under examples/skills
  • README.md, CHANGELOG.md, LICENSE, VERSION, and vcpkg.json
  • manifest.json with resolved build and runtime capabilities
  • checksums.sha256
  • runtime/tika/tika-server-standard.jar
  • runtime/jre with the platform-specific Temurin 21 runtime

The packaging scripts use the pinned assets under third_party/runtime/ and verify their checksums. They do not download Tika or Java while packaging. The expected archive digest is also pinned independently in the build configuration, so changing an archive and its adjacent checksum file together does not bypass verification. macOS installs apply and verify an ad-hoc signature over the extracted JRE; official notarized distribution remains a release-channel responsibility rather than a source-build prerequisite.

Install without creating an archive

cmake --install build-vcpkg --config Release --prefix install

The install tree has the same SDK layout and, by default, the bundled runtime sidecars.

Wuwe 1.x CMake package compatibility is major-version scoped. A consumer asking for Wuwe 1 can use a later 1.x package after recompilation. This is a source compatibility promise, not a cross-release C++ ABI promise. See Versioning and compatibility.

Tika and the JRE are independently optional:

cmake -S . -B build-core -DWUWE_INSTALL_TIKA_RUNTIME=OFF -DWUWE_INSTALL_BUNDLED_JRE=OFF
cmake --install build-core --config Release --prefix install-core

For the Windows archive script, -ExcludeTikaRuntime and -ExcludeBundledJre remove the corresponding runtime. The Linux/macOS archive script provides --without-tika and --without-jre. Both scripts record the decision in manifest.json. A package can include Tika without a JRE when the deployment supplies Java through PATH, or omit Tika entirely when document parsing is not needed or an external endpoint is managed by the host.

Default document runtime

auto loader =
wuwe::agent::knowledge::knowledge_document_loader::make_default();

The default loader registers local parsers, starts the bundled Tika server when the runtime is discoverable, and keeps that process alive for the loader lifetime. It uses runtime/jre/bin/java.exe on Windows, runtime/jre/bin/java on Linux, and runtime/jre/Contents/Home/bin/java on macOS.

What is not bundled

The archive is a complete Wuwe SDK, not a copy of every C++ development package. A consumer of the static library must provide the public dependencies recorded by the build:

  • SQLite3 for SQLite-enabled packages;
  • OpenSSL for OpenSSL-enabled packages.

Use manifest.json and the exported CMake package as the source of truth for a specific archive.