Files
clice/docs/zh/dev/build.md
ykiko c14b8de18f chore: remove xmake, clean up unused files, simplify CLI parsing (#392)
## Summary
- **Remove xmake build system**: delete `xmake.lua`, `test-xmake.yml`
workflow, and all xmake-related pixi tasks
- **Migrate packaging to CMake**: `publish-clice.yml` now uses `cmake
-DCLICE_RELEASE=ON` instead of xmake pack
- **Clean up**: remove unused `tests/uv.lock`, `.xmake/` from
`.gitignore`, xmake references from docs
- **Benchmark CI**: change trigger from `pull_request` to
`workflow_dispatch` (manual only)
- **Simplify CLI parsing**: use `DecoKV(style =
KVStyle::JoinedOrSeparate)` in `clice.cc` and `unit_tests.cc`, replacing
verbose `DecoKVStyled` with manual `static_cast` bitmask; use comma
separators; explicit `names` only for underscore fields

## Test plan
- [x] `pixi run cmake-build RelWithDebInfo` compiles successfully
- [x] Verify `pixi run test` passes
- [x] Verify `pixi run package` produces correct archives via CMake
release build
- [x] Verify benchmark workflow can be triggered manually via `gh
workflow run benchmark`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Consolidated CI workflows; some automated triggers converted to manual
invocation
* Standardized shell for workflow steps and removed legacy build
workflow
* Switched packaging/build tasks to a CMake/Ninja flow and updated
artifact paths
  * Adjusted ignore rules to include previously-ignored build metadata

* **Documentation**
* Removed XMake-specific build and test instructions; docs now reflect
the CMake-based workflow

* **Style**
* Updated CLI option declaration style (no user-facing flag name
changes)

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 17:33:20 +08:00

4.3 KiB
Raw Blame History

Build from Source

clice 依赖 C++23 特性,需要使用高版本的 C++ 编译器。同时,我们需要链接 LLVM/Clang 库来解析 AST。为了加快构建速度默认配置会下载我们发布的 clice-llvm 预编译包。这要求你的本地环境与预编译环境保持较高的一致性(尤其是开启 Address Sanitizer 或 LTO 时)。

为了简化环境设置并保证可复现性,我们强烈推荐使用 pixi 来管理开发环境。所有的依赖版本均严格定义在 pixi.toml 中。

如果你不想使用 pixi请参考下方的 Manual Build 章节。

Quick Start

请参考 pixi 官方指南安装 pixi。

我们内置了一系列任务,以下命令可直接完成编译并运行测试:

# configure && build (default RelWithDebInfo)
pixi run build

# unit && integration
pixi run test

细粒度任务:上述命令由多个子任务组成,你也可以单独运行它们,并支持通过第一个参数指定构建类型:

pixi run cmake-config Debug
pixi run cmake-build Debug
pixi run unit-test Debug
pixi run integration-test Debug

Tip

如果你想直接使用 cmake, ninja, clang++ 等命令进行开发,请运行 pixi shell 进入已配置好环境变量的终端

Manual Build

如果你打算手动构建,请务必先确认你的工具链满足 pixi.toml 中定义的版本要求。

兼容性说明:理论上 clice 不依赖特定编译器的扩展可以使用主流编译器GCC/Clang/MSVC编译。但我们仅在 CI 中保证特定版本的 Clang 能通过测试。对于其他编译器或版本,我们提供尽力而为 (Best Effort) 的支持。如果遇到问题,欢迎提交 Issue 或 PR

CMake

cmake -B build -G Ninja \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain.cmake \
    -DCLICE_ENABLE_TEST=ON

注意:CMAKE_TOOLCHAIN_FILE 是可选的。如果你使用的工具链与我们完全一致,可以使用预定义的 cmake/toolchain.cmake,否则请移除该选项

可选的构建选项:

选项 默认值 效果
LLVM_INSTALL_PATH "" 使用自定义路径的 LLVM 库来构建 clice
CLICE_ENABLE_TEST OFF 是否构建 clice 的单元测试
CLICE_USE_LIBCXX OFF 是否使用 libc++ 来构建 clice添加 -std=libc++),如果开启,请确保 LLVM 库也是使用 libc++ 编译的
CLICE_CI_ENVIRONMENT OFF 是否打开 CLICE_CI_ENVIRONMENT 这个宏,有些测试在 CI 环境才会执行

About LLVM

clice 调用 Clang API 来解析 C++ 代码,因此必须链接 LLVM/Clang 库。由于 clice 使用了 Clang 的私有头文件(这些文件通常不包含在发行版中),不能直接使用系统安装的 LLVM 包。

主要有两种方式解决这个依赖问题:

  1. 我们在 clice-llvm 上会发布使用的 LLVM 版本的预编译二进制,用于 CI 或者 release 构建。在构建时 cmake 默认会从此处下载 LLVM 库然后使用。

Important

对于 debug 版本的 LLVM 库,构建的时候我们开启了 address sanitizer而 address sanitizer 依赖于 compiler rt它对编译器版本十分敏感。所以如果使用 debug 版本,请确保你的 clang 的 compiler rt 版本与 pixi.toml 中的定义严格一致。

  1. 自行构建一套与当前环境一致的 LLVM/Clang。如果默认的预编译二进制文件在你的系统上因 ABI 或库版本不兼容而运行失败,或者你需要一个自定义的 Debug 版本,那么我们推荐你使用此方法从头编译 LLVM 库。我们提供了一个脚本 scripts/build-llvm.py 用于构建所需要的 LLVM 库,也可以参考 LLVM 的官方构建教程 Building LLVM with CMake