Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions .github/workflows/bump-hrx.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Copyright 2026 bong-water-water-bong
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Keep third_party/llama.cpp and third_party/hrx-system on the pair AMD's
# integration repo (ROCm/ggml-staging-automation) builds and tests together
# (docs/hrx.md, "Staying current"). When AMD moves its pins, this workflow:
# 1. syncs 1bit-MONSTER/llama.cpp: master to ggml-org, 1bit/hrx-vulkan to AMD's pin;
# 2. opens a PR here moving both submodules.
# GitHub-hosted CI builds that PR without HRX; run tests/hrx_lemonade_e2e.sh on
# Strix Halo before merging it.
#
# Needs the secret HRX_BUMP_TOKEN: a fine-grained token with Contents
# read/write on 1bit-MONSTER/llama.cpp and 1bit-MONSTER/engine, and Pull
# requests read/write on 1bit-MONSTER/engine. (A PR opened with the default
# GITHUB_TOKEN would not start CI, and that token cannot push to the fork.)
name: bump-hrx

on:
schedule:
- cron: "17 6 * * *"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: bump-hrx
cancel-in-progress: false

jobs:
bump:
runs-on: ubuntu-latest
steps:
- name: Require the token
env:
HRX_BUMP_TOKEN: ${{ secrets.HRX_BUMP_TOKEN }}
run: |
if [ -z "$HRX_BUMP_TOKEN" ]; then
echo "::error::secret HRX_BUMP_TOKEN is not set (see the header of this workflow)"
exit 1
fi

- uses: actions/checkout@v4
with:
token: ${{ secrets.HRX_BUMP_TOKEN }}
persist-credentials: true

- name: Read AMD's tested pair and ours
id: pins
env:
GH_TOKEN: ${{ secrets.HRX_BUMP_TOKEN }}
run: |
set -euo pipefail
amd_llama=$(gh api repos/ROCm/ggml-staging-automation/contents/llama.cpp --jq .sha)
amd_hrx=$(gh api repos/ROCm/ggml-staging-automation/contents/hrx-system --jq .sha)
ours_llama=$(git ls-tree HEAD third_party/llama.cpp | awk '{print $3}')
ours_hrx=$(git ls-tree HEAD third_party/hrx-system | awk '{print $3}')
echo "AMD: llama.cpp $amd_llama hrx-system $amd_hrx"
echo "ours: llama.cpp $ours_llama hrx-system $ours_hrx"
{
echo "amd_llama=$amd_llama"; echo "amd_hrx=$amd_hrx"
echo "ours_llama=$ours_llama"; echo "ours_hrx=$ours_hrx"
if [ "$amd_llama" = "$ours_llama" ] && [ "$amd_hrx" = "$ours_hrx" ]; then echo "changed=false"; else echo "changed=true"; fi
} >> "$GITHUB_OUTPUT"

- name: Sync the fork
if: steps.pins.outputs.changed == 'true'
env:
GH_TOKEN: ${{ secrets.HRX_BUMP_TOKEN }}
AMD_LLAMA: ${{ steps.pins.outputs.amd_llama }}
run: |
set -euo pipefail
# master mirrors ggml-org; 1bit/hrx-vulkan carries no commits of its own, so it
# moves to AMD's pin as long as that pin descends from it (no force needed).
gh api -X POST repos/1bit-MONSTER/llama.cpp/merge-upstream -f branch=master > /dev/null
git init -q fork && cd fork
git remote add fork "https://x-access-token:${GH_TOKEN}@github.com/1bit-MONSTER/llama.cpp.git"
git remote add amd https://github.com/AMD-Ecosystem/llama.cpp.git
git fetch -q --filter=blob:none amd "$AMD_LLAMA"
git fetch -q --filter=blob:none fork 1bit/hrx-vulkan
if ! git merge-base --is-ancestor FETCH_HEAD "$AMD_LLAMA"; then
echo "::error::1bit/hrx-vulkan has commits that AMD's pin does not contain; rebase them by hand"
exit 1
fi
git push -q fork "$AMD_LLAMA:refs/heads/1bit/hrx-vulkan"

- name: Open the bump PR
if: steps.pins.outputs.changed == 'true'
env:
GH_TOKEN: ${{ secrets.HRX_BUMP_TOKEN }}
AMD_LLAMA: ${{ steps.pins.outputs.amd_llama }}
AMD_HRX: ${{ steps.pins.outputs.amd_hrx }}
OURS_LLAMA: ${{ steps.pins.outputs.ours_llama }}
OURS_HRX: ${{ steps.pins.outputs.ours_hrx }}
run: |
set -euo pipefail
branch="bump-hrx/${AMD_LLAMA:0:12}-${AMD_HRX:0:12}"
if git ls-remote --exit-code origin "refs/heads/$branch" > /dev/null; then
echo "$branch already exists"; exit 0
fi
git config user.name "hrx-bump"
git config user.email "hrx-bump@users.noreply.github.com"
git switch -c "$branch"
git update-index --cacheinfo "160000,$AMD_LLAMA,third_party/llama.cpp"
git update-index --cacheinfo "160000,$AMD_HRX,third_party/hrx-system"
git commit -q -m "Bump HRX: llama.cpp ${AMD_LLAMA:0:12}, hrx-system ${AMD_HRX:0:12} (AMD's tested pair)"
git push -q origin "$branch"
gh pr create --base main --head "$branch" \
--title "Bump HRX: llama.cpp ${AMD_LLAMA:0:12}, hrx-system ${AMD_HRX:0:12}" \
--body "Moves both submodules to the pair ROCm/ggml-staging-automation now pins.

| | from | to |
|---|---|---|
| third_party/llama.cpp (1bit-MONSTER/llama.cpp 1bit/hrx-vulkan) | \`${OURS_LLAMA:0:12}\` | \`${AMD_LLAMA:0:12}\` |
| third_party/hrx-system (ROCm/hrx-system) | \`${OURS_HRX:0:12}\` | \`${AMD_HRX:0:12}\` |

CI here builds without HRX. Before merging, on Strix Halo:
\`cmake -B build -G Ninja -DONEBIT_HRX=ON && cmake --build build --target onebit && tests/hrx_lemonade_e2e.sh build/1bit build/hrx/llama/bin/llama-server\`"
12 changes: 5 additions & 7 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# HRX + Vulkan (docs/hrx.md). Only needed with -DONEBIT_HRX=ON.
[submodule "third_party/hrx"]
path = third_party/hrx
url = https://github.com/ROCm/hrx.git
shallow = true
# HRX + Vulkan (docs/hrx.md). Only needed with -DONEBIT_HRX=ON. The pair is AMD's
# tested integration (ROCm/ggml-staging-automation); .github/workflows/bump-hrx.yml keeps it current.
[submodule "third_party/hrx-system"]
path = third_party/hrx-system
url = https://github.com/ROCm/hrx-system.git
branch = main
shallow = true
[submodule "third_party/llama.cpp"]
path = third_party/llama.cpp
url = https://github.com/bong-water-water-bong/llama.cpp.git
branch = 1bit-engine/hrx-vulkan
url = https://github.com/1bit-MONSTER/llama.cpp.git
branch = 1bit/hrx-vulkan
shallow = true
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ target_link_libraries(onebit PRIVATE lemonade-server-core)
# ── Step 2: HRX + Vulkan in one llama.cpp build (docs/hrx.md) ─────────────
# Off by default: it needs TheRock/ROCm and the three HRX submodules, and it
# only runs on AMD GPUs. `1bit lemonade` then uses this llama-server for both
# the llamacpp-hrx recipe (HRX20) and the llamacpp recipe's Vulkan backend.
option(ONEBIT_HRX "Build HRX2 + Vulkan llama-server and wire it into Lemonade" OFF)
# the llamacpp-hrx recipe (HRX0) and the llamacpp recipe's Vulkan backend.
option(ONEBIT_HRX "Build HRX + Vulkan llama-server and wire it into Lemonade" OFF)
if(ONEBIT_HRX)
include(cmake/hrx.cmake)
add_dependencies(onebit llama_hrx)
target_compile_definitions(onebit PRIVATE ONEBIT_HRX_SERVER="${ONEBIT_HRX_SERVER}")
target_compile_definitions(onebit PRIVATE ONEBIT_HRX_SERVER="${ONEBIT_HRX_SERVER}" ONEBIT_HRX_LIBHSA="${ONEBIT_HRX_LIBHSA}")
add_test(NAME hrx_lemonade_e2e
COMMAND ${CMAKE_SOURCE_DIR}/tests/hrx_lemonade_e2e.sh $<TARGET_FILE:onebit> ${ONEBIT_HRX_SERVER})
endif()
Expand Down
12 changes: 8 additions & 4 deletions app/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ void usage(FILE* out) {
}

#ifdef ONEBIT_HRX_SERVER
// Points Lemonade at this build's llama-server (HRX2 + Vulkan in one binary,
// docs/hrx.md): the llamacpp-hrx recipe runs Q4NX on HRX20, and the llamacpp
// recipe runs GGUF on Vulkan0, the faster device for standard quants. The
// Points Lemonade at this build's llama-server (HRX + Vulkan in one binary,
// docs/hrx.md): the llamacpp-hrx recipe runs on HRX0 (AMD's ggml-hrx), and the
// llamacpp recipe runs GGUF on Vulkan0, the faster device for standard quants. The
// config arrives merged with Lemonade's defaults, so only default values
// ("builtin", "auto", unset) are replaced; anything else the user set wins.
void use_engine_hrx_build(nlohmann::json& config) {
Expand All @@ -82,10 +82,14 @@ void use_engine_hrx_build(nlohmann::json& config) {
if (!sec.contains(key) || sec[key] == "" || sec[key] == default_value) sec[key] = value;
};
set_default("hrx", "hrx_bin", "builtin", ONEBIT_HRX_SERVER);
set_default("hrx", "device", "", "HRX20");
set_default("hrx", "device", "", "HRX0");
set_default("llamacpp", "vulkan_bin", "builtin", ONEBIT_HRX_SERVER);
set_default("llamacpp", "backend", "auto", "vulkan");
set_default("llamacpp", "device", "", "Vulkan0");
// HRX dlopens the HSA runtime; the distro's rejects gfx1151's PM4-emulation
// probe and HRX registers no device. llama-server inherits this environment,
// so point it at TheRock's unless the user already chose one.
setenv("IREE_HAL_AMDGPU_LIBHSA_PATH", ONEBIT_HRX_LIBHSA, /*overwrite=*/0);
}
#endif

Expand Down
39 changes: 0 additions & 39 deletions cmake/hrx-config.cmake.in

This file was deleted.

123 changes: 32 additions & 91 deletions cmake/hrx.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,114 +13,55 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# HRX + Vulkan in one llama.cpp build (docs/hrx.md). Three pinned sources,
# each cloned from its submodule into the build tree and patched there, so
# the submodules stay clean:
# HRX + Vulkan in one llama.cpp build (docs/hrx.md). Two pinned sources, the pair
# AMD's integration repo (ROCm/ggml-staging-automation) builds and tests together:
#
# hrx_runtime ROCm/hrx 0bc22fb + patches/hrx/0001..0003: libhrx, libloomc,
# the Loom AMDGPU binding, assembled into ${ONEBIT_HRX_PREFIX}
# loom_link ROCm/hrx-system 6743075f + patches/hrx/0002: the loom-link the
# fork's kernel catalog is linked with (the only version that
# still has --mode=selective; its artifacts are byte-identical
# to the working build's)
# llama_hrx bong-water-water-bong/llama.cpp 1bit-engine/hrx-vulkan with
# GGML_HRX2 and GGML_VULKAN: one llama-server exposing HRX20
# and Vulkan0
# third_party/llama.cpp 1bit-MONSTER/llama.cpp 1bit/hrx-vulkan: AMD's
# hrx-graph-develop-v2 (ggml-hrx) on ggml-org llama.cpp
# third_party/hrx-system ROCm/hrx-system: libhrx, loomc and the Loom tools
#
# llama.cpp's ggml-hrx builds hrx-system itself when given HRX_SOURCE_DIR, with
# the compilers of this build, so the only inputs are the two trees and TheRock.
# IREE_ROCM_PATH is deliberately not passed: it switches hrx-system to "package"
# mode, which requires TheRock's own aqlprofile-sdk headers (absent from our
# /opt/rocm-therock); unset, hrx-system fetches its pinned HSA/AQL headers.
# .github/workflows/bump-hrx.yml moves both pins when AMD moves its pair.
include(ExternalProject)
find_package(Git REQUIRED)

set(ONEBIT_HRX_TOOLCHAIN "/opt/rocm-therock" CACHE PATH "ROCm/TheRock root whose amdclang builds the HRX runtime")
set(ONEBIT_HRX_PREFIX "${CMAKE_BINARY_DIR}/hrx/prefix")
set(_hrx_patches "${CMAKE_SOURCE_DIR}/patches/hrx")
set(ONEBIT_HRX_TOOLCHAIN "/opt/rocm-therock" CACHE PATH "ROCm/TheRock root: its amdclang builds llama.cpp and HRX")

foreach(_sub hrx hrx-system llama.cpp)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/third_party/${_sub}/.git")
foreach(_sub hrx-system llama.cpp)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/third_party/${_sub}/CMakeLists.txt")
message(FATAL_ERROR "ONEBIT_HRX needs third_party/${_sub}: git submodule update --init third_party/${_sub}")
endif()
endforeach()

# Clone a submodule into the build tree at its pinned commit, then apply patches.
function(_hrx_fetch_command out submodule)
set(_src "${CMAKE_SOURCE_DIR}/third_party/${submodule}")
execute_process(COMMAND ${GIT_EXECUTABLE} -C "${_src}" rev-parse HEAD
OUTPUT_VARIABLE _rev OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY)
set(_cmd ${CMAKE_COMMAND} -E rm -rf <SOURCE_DIR>
COMMAND ${GIT_EXECUTABLE} clone --quiet --shared --no-checkout "${_src}" <SOURCE_DIR>
COMMAND ${GIT_EXECUTABLE} -C <SOURCE_DIR> checkout --quiet ${_rev})
foreach(_patch ${ARGN})
list(APPEND _cmd COMMAND ${GIT_EXECUTABLE} -C <SOURCE_DIR> apply "${_hrx_patches}/${_patch}")
endforeach()
set(${out} ${_cmd} PARENT_SCOPE)
endfunction()

# The HRX build configuration of the working Strix Halo setup, verbatim.
set(_hrx_flags
-DCMAKE_C_COMPILER=${ONEBIT_HRX_TOOLCHAIN}/bin/amdclang
-DCMAKE_CXX_COMPILER=${ONEBIT_HRX_TOOLCHAIN}/bin/amdclang++
-DCMAKE_ASM_COMPILER=${ONEBIT_HRX_TOOLCHAIN}/bin/amdclang
-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
-DHRX_ENABLE_IPO=OFF -DHRX_INSTALL_TESTS=OFF
-DIREE_ALLOCATOR_SYSTEM=libc -DIREE_BUILD_BENCHMARKS=OFF -DIREE_BUILD_DOCS=OFF
-DIREE_BUILD_PYTHON_BINDINGS=OFF -DIREE_BUILD_SAMPLES=OFF -DIREE_BUILD_TESTS=OFF
-DIREE_DEPENDENCY_MODE=pinned -DIREE_DEV_MODE=OFF -DIREE_ENABLE_ASSERTIONS=OFF
-DIREE_ENABLE_LIBBACKTRACE=OFF -DIREE_ENABLE_LLD=OFF -DIREE_ENABLE_POSITION_INDEPENDENT_CODE=ON
-DIREE_ENABLE_RUNTIME_TRACING=OFF -DIREE_ENABLE_WERROR_FLAG=OFF
-DIREE_HAL_AMDGPU_DEVICE_BINARY_BUILD_MODE=prebuilt -DIREE_HAL_AMDGPU_LIBHSA_STATIC=OFF
"-DIREE_HAL_AMDGPU_TARGETS=gfx9-generic|gfx90a|gfx9-4-generic|gfx10-1-generic|gfx10-3-generic|gfx11-generic|gfx12-generic"
-DIREE_HAL_DRIVER_AMDGPU=ON -DIREE_HAL_DRIVER_DEFAULTS=OFF -DIREE_HAL_DRIVER_TASK=ON
-DIREE_HAL_DRIVER_LOCAL_TASK=ON -DIREE_HAL_DRIVER_VULKAN=OFF -DIREE_HAL_DRIVER_WEBGPU=OFF
-DIREE_HAL_EXECUTABLE_LOADER_DEFAULTS=ON -DIREE_VISIBILITY_HIDDEN=ON
-DLIBHRX_BUILD_CTS=OFF -DLIBHRX_BUILD_CUDA_BINDING=OFF -DLIBHRX_BUILD_HIP_BINDING=ON
-DLIBHRX_BUILD_PASSTHROUGH=ON
-DLOOM_BUILD=ON -DLOOM_EMIT_AMDGPU=OFF -DLOOM_EMIT_LLVMIR=OFF -DLOOM_EMIT_SPIRV=OFF -DLOOM_EMIT_WASM=OFF
-DLOOM_EXECUTE_DEFAULTS=ON -DLOOM_EXECUTE_IREE_HAL=ON -DLOOM_IMPORT_MLIR=OFF -DLOOM_IMPORT_TILELANG=OFF
-DLOOM_TARGET_AMDGPU=ON -DLOOM_TARGET_AMDGPU_TARGETS=loom_defaults -DLOOM_TARGET_ARCH_AMDGPU=OFF
-DLOOM_TARGET_ARCH_LLVMIR=OFF -DLOOM_TARGET_ARCH_SPIRV=OFF -DLOOM_TARGET_ARCH_WASM=OFF
-DLOOM_TARGET_ARCH_X86=OFF -DLOOM_TARGET_DEFAULTS=ON -DLOOM_TARGET_LLVMIR=ON -DLOOM_TARGET_SPIRV=ON
-DLOOM_TARGET_WASM=OFF -DLOOM_TARGET_X86=ON)

_hrx_fetch_command(_fetch_runtime hrx
0001-libhrx-skip-install-export.patch
0002-loomc-drop-export-restriction.patch
0003-amdgpu-tolerate-missing-pm4-emulation-probe.patch)
ExternalProject_Add(hrx_runtime
PREFIX ${CMAKE_BINARY_DIR}/hrx/runtime
DOWNLOAD_COMMAND ${_fetch_runtime}
LIST_SEPARATOR |
CMAKE_GENERATOR Ninja
CMAKE_ARGS ${_hrx_flags} -DLIBHRX_BUILD=ON
# Only what llama.cpp's ggml-hrx2 links; the full tree has unrelated targets.
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target
libhrx_src_libhrx_hrx loomc_shared loom_binding_c_target_amdgpu_amdgpu.objects
INSTALL_COMMAND ${CMAKE_COMMAND} -DSRC=<SOURCE_DIR> -DBIN=<BINARY_DIR> -DPREFIX=${ONEBIT_HRX_PREFIX}
-DAR=${CMAKE_AR} -DCONFIG_IN=${CMAKE_SOURCE_DIR}/cmake/hrx-config.cmake.in
-P ${CMAKE_SOURCE_DIR}/cmake/hrx_assemble_prefix.cmake
USES_TERMINAL_BUILD ON)

_hrx_fetch_command(_fetch_system hrx-system 0002-loomc-drop-export-restriction.patch)
ExternalProject_Add(loom_link
PREFIX ${CMAKE_BINARY_DIR}/hrx/loom-link
DOWNLOAD_COMMAND ${_fetch_system}
LIST_SEPARATOR |
CMAKE_GENERATOR Ninja
CMAKE_ARGS ${_hrx_flags} -DLIBHRX_BUILD=OFF
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target loom_tools_loom-link_loom-link
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy <BINARY_DIR>/loom/src/loom/tools/loom-link/loom-link
${ONEBIT_HRX_PREFIX}/bin/loom-link
USES_TERMINAL_BUILD ON)
# HRX dlopens the HSA runtime. The distro's libhsa-runtime64 rejects the
# HSA_AMD_AGENT_INFO_PM4_EMULATION probe on gfx1151, so HRX registers no device;
# TheRock's answers it. `1bit lemonade` passes this path to llama-server as
# IREE_HAL_AMDGPU_LIBHSA_PATH (docs/hrx.md).
file(GLOB_RECURSE _hrx_libhsa "${ONEBIT_HRX_TOOLCHAIN}/*/libhsa-runtime64.so.1")
list(SORT _hrx_libhsa)
list(GET _hrx_libhsa 0 _hrx_libhsa_first)
if(NOT _hrx_libhsa_first)
message(FATAL_ERROR "ONEBIT_HRX: no libhsa-runtime64.so.1 under ONEBIT_HRX_TOOLCHAIN=${ONEBIT_HRX_TOOLCHAIN}")
endif()
set(ONEBIT_HRX_LIBHSA "${_hrx_libhsa_first}" CACHE FILEPATH "TheRock HSA runtime HRX loads (IREE_HAL_AMDGPU_LIBHSA_PATH)")
message(STATUS "ONEBIT_HRX: HSA runtime ${ONEBIT_HRX_LIBHSA}")

set(ONEBIT_HRX_SERVER "${CMAKE_BINARY_DIR}/hrx/llama/bin/llama-server")
ExternalProject_Add(llama_hrx
SOURCE_DIR ${CMAKE_SOURCE_DIR}/third_party/llama.cpp
BINARY_DIR ${CMAKE_BINARY_DIR}/hrx/llama
DOWNLOAD_COMMAND ""
CMAKE_GENERATOR Ninja
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release -Dhrx_DIR=${ONEBIT_HRX_PREFIX}/cmake/hrx
-DGGML_HRX2=ON -DGGML_VULKAN=ON -DGGML_CUDA=OFF -DGGML_HIP=OFF -DGGML_NATIVE=ON -DGGML_CPU=ON
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER=${ONEBIT_HRX_TOOLCHAIN}/bin/amdclang
-DCMAKE_CXX_COMPILER=${ONEBIT_HRX_TOOLCHAIN}/bin/amdclang++
-DHRX_SOURCE_DIR=${CMAKE_SOURCE_DIR}/third_party/hrx-system
-DGGML_HRX=ON -DGGML_VULKAN=ON -DGGML_CUDA=OFF -DGGML_HIP=OFF -DGGML_NATIVE=ON -DGGML_CPU=ON
-DLLAMA_BUILD_SERVER=ON -DLLAMA_CURL=OFF
-DGGML_HRX2_LOOM_LINK_EXECUTABLE=${ONEBIT_HRX_PREFIX}/bin/loom-link
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target llama-server llama-bench
INSTALL_COMMAND ""
BUILD_ALWAYS ON
DEPENDS hrx_runtime loom_link
USES_TERMINAL_BUILD ON)
Loading
Loading