Files
clice/dev/build.html
2026-01-03 08:23:38 +00:00

40 lines
28 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Build from Source | clice</title>
<meta name="description" content="a powerful and modern C++ language server">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.C0Yaiv_5.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.DQoL_1fX.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CLpq7zWO.js">
<link rel="modulepreload" href="/assets/chunks/framework.l7bN90nj.js">
<link rel="modulepreload" href="/assets/dev_build.md.BMRSQYou.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-24511351><!--[--><!--]--><!--[--><span tabindex="-1" data-v-83a3f712></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-83a3f712>Skip to content</a><!--]--><!----><header class="VPNav" data-v-24511351 data-v-8d64a174><div class="VPNavBar" data-v-8d64a174 data-v-fa22aa31><div class="wrapper" data-v-fa22aa31><div class="container" data-v-fa22aa31><div class="title" data-v-fa22aa31><div class="VPNavBarTitle has-sidebar" data-v-fa22aa31 data-v-4392cbaa><a class="title" href="/" data-v-4392cbaa><!--[--><!--]--><!----><span data-v-4392cbaa>clice</span><!--[--><!--]--></a></div></div><div class="content" data-v-fa22aa31><div class="content-body" data-v-fa22aa31><!--[--><!--]--><div class="VPNavBarSearch search" data-v-fa22aa31><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-fa22aa31 data-v-4fbe08f7><span id="main-nav-aria-label" class="visually-hidden" data-v-4fbe08f7> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-4fbe08f7 data-v-27efe891><!--[--><span data-v-27efe891>Home</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-fa22aa31 data-v-3eed34a3 data-v-134c4b98><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-134c4b98><span class="text" data-v-134c4b98><span class="vpi-languages option-icon" data-v-134c4b98></span><!----><span class="vpi-chevron-down text-icon" data-v-134c4b98></span></span></button><div class="menu" data-v-134c4b98><div class="VPMenu" data-v-134c4b98 data-v-3b514283><!----><!--[--><!--[--><div class="items" data-v-3eed34a3><p class="title" data-v-3eed34a3>English</p><!--[--><div class="VPMenuLink" data-v-3eed34a3 data-v-cd255f6d><a class="VPLink link" href="/zh/dev/build" data-v-cd255f6d><!--[--><span data-v-cd255f6d>简体中文</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-fa22aa31 data-v-687fd4c1><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-687fd4c1 data-v-c8168445 data-v-35846bb7><span class="check" data-v-35846bb7><span class="icon" data-v-35846bb7><!--[--><span class="vpi-sun sun" data-v-c8168445></span><span class="vpi-moon moon" data-v-c8168445></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-fa22aa31 data-v-84f3cb2c data-v-0a01d640><!--[--><a class="VPSocialLink no-icon" href="https://discord.gg/PA3UxW2VA3" aria-label="discord" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/clice-io/clice" aria-label="github" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-fa22aa31 data-v-20cb852c data-v-134c4b98><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-134c4b98><span class="vpi-more-horizontal icon" data-v-134c4b98></span></button><div class="menu" data-v-134c4b98><div class="VPMenu" data-v-134c4b98 data-v-3b514283><!----><!--[--><!--[--><div class="group translations" data-v-20cb852c><p class="trans-title" data-v-20cb852c>English</p><!--[--><div class="VPMenuLink" data-v-20cb852c data-v-cd255f6d><a class="VPLink link" href="/zh/dev/build" data-v-cd255f6d><!--[--><span data-v-cd255f6d>简体中文</span><!--]--></a></div><!--]--></div><div class="group" data-v-20cb852c><div class="item appearance" data-v-20cb852c><p class="label" data-v-20cb852c>Appearance</p><div class="appearance-action" data-v-20cb852c><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-20cb852c data-v-c8168445 data-v-35846bb7><span class="check" data-v-35846bb7><span class="icon" data-v-35846bb7><!--[--><span class="vpi-sun sun" data-v-c8168445></span><span class="vpi-moon moon" data-v-c8168445></span><!--]--></span></span></button></div></div></div><div class="group" data-v-20cb852c><div class="item social-links" data-v-20cb852c><div class="VPSocialLinks social-links-list" data-v-20cb852c data-v-0a01d640><!--[--><a class="VPSocialLink no-icon" href="https://discord.gg/PA3UxW2VA3" aria-label="discord" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/clice-io/clice" aria-label="github" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-fa22aa31 data-v-017f7456><span class="container" data-v-017f7456><span class="top" data-v-017f7456></span><span class="middle" data-v-017f7456></span><span class="bottom" data-v-017f7456></span></span></button></div></div></div></div><div class="divider" data-v-fa22aa31><div class="divider-line" data-v-fa22aa31></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-24511351 data-v-d5903e19><div class="container" data-v-d5903e19><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-d5903e19><span class="vpi-align-left menu-icon" data-v-d5903e19></span><span class="menu-text" data-v-d5903e19>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-d5903e19 data-v-4b731308><button data-v-4b731308>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-24511351 data-v-1489031f><div class="curtain" data-v-1489031f></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-1489031f><span class="visually-hidden" id="sidebar-aria-label" data-v-1489031f> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-06590693><section class="VPSidebarItem level-0 collapsible" data-v-06590693 data-v-7098a323><div class="item" role="button" tabindex="0" data-v-7098a323><div class="indicator" data-v-7098a323></div><h2 class="text" data-v-7098a323>Design</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-7098a323><span class="vpi-chevron-right caret-icon" data-v-7098a323></span></div></div><div class="items" data-v-7098a323><!--[--><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/architecture" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Architecture</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/compilation" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Compilation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/header-context" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Header Context</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/template-resolver" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Template Resolver</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-06590693><section class="VPSidebarItem level-0 collapsible has-active" data-v-06590693 data-v-7098a323><div class="item" role="button" tabindex="0" data-v-7098a323><div class="indicator" data-v-7098a323></div><h2 class="text" data-v-7098a323>Development</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-7098a323><span class="vpi-chevron-right caret-icon" data-v-7098a323></span></div></div><div class="items" data-v-7098a323><!--[--><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/build" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Build from Source</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/contribution" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Contribution</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/extension" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Extension</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/test-and-debug" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Test and Debug</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-06590693><section class="VPSidebarItem level-0 collapsible" data-v-06590693 data-v-7098a323><div class="item" role="button" tabindex="0" data-v-7098a323><div class="indicator" data-v-7098a323></div><h2 class="text" data-v-7098a323>Guide</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-7098a323><span class="vpi-chevron-right caret-icon" data-v-7098a323></span></div></div><div class="items" data-v-7098a323><!--[--><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/guide/configuration" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/guide/quick-start" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Quick Start</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/guide/what-is-clice" data-v-7098a323><!--[--><p class="text" data-v-7098a323>What is clice?</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-24511351 data-v-5cfd54a6><div class="VPDoc has-sidebar has-aside" data-v-5cfd54a6 data-v-bbef34fe><!--[--><!--]--><div class="container" data-v-bbef34fe><div class="aside" data-v-bbef34fe><div class="aside-curtain" data-v-bbef34fe></div><div class="aside-container" data-v-bbef34fe><div class="aside-content" data-v-bbef34fe><div class="VPDocAside" data-v-bbef34fe data-v-606ad2c6><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-606ad2c6 data-v-52cb4cd4><div class="content" data-v-52cb4cd4><div class="outline-marker" data-v-52cb4cd4></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-52cb4cd4>On this page</div><ul class="VPDocOutlineItem root" data-v-52cb4cd4 data-v-6c15f963><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-606ad2c6></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-bbef34fe><div class="content-container" data-v-bbef34fe><!--[--><!--]--><main class="main" data-v-bbef34fe><div style="position:relative;" class="vp-doc _dev_build" data-v-bbef34fe><div><h1 id="build-from-source" tabindex="-1">Build from Source <a class="header-anchor" href="#build-from-source" aria-label="Permalink to &quot;Build from Source&quot;"></a></h1><p>clice depends on C++23 features and requires a modern C++ toolchain. We also need to link against LLVM/Clang to parse ASTs. To speed up builds, the default configuration downloads our published <a href="https://github.com/clice-io/clice-llvm" target="_blank" rel="noreferrer">clice-llvm</a> prebuilt package. This assumes your local environment matches the prebuilt environment closely (especially when enabling Address Sanitizer or LTO).</p><p>To simplify setup and keep builds reproducible, we <strong>strongly recommend</strong> <a href="https://pixi.prefix.dev/latest" target="_blank" rel="noreferrer">pixi</a> to manage the development environment. Dependency versions are pinned in <code>pixi.toml</code>.</p><p>If you prefer not to use pixi, see <a href="#manual-build">Manual Build</a> below.</p><h2 id="quick-start" tabindex="-1">Quick Start <a class="header-anchor" href="#quick-start" aria-label="Permalink to &quot;Quick Start&quot;"></a></h2><p>Install pixi following the <a href="https://pixi.prefix.dev/latest/installation" target="_blank" rel="noreferrer">official guide</a>.</p><p>We ship several tasks; the commands below configure, build, and run tests:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># configure &amp;&amp; build (default RelWithDebInfo)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># unit &amp;&amp; integration</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>For finer-grained tasks (first argument sets the build type):</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake-config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Debug</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake-build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Debug</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit-test</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Debug</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> integration-test</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Debug</span></span></code></pre></div><div class="tip custom-block github-alert"><p class="custom-block-title">TIP</p><p>If you want to develop directly with <code>cmake</code>, <code>ninja</code>, <code>clang++</code>, etc., run <code>pixi shell</code> to enter a shell with all env vars configured.</p></div><h3 id="xmake" tabindex="-1">XMake <a class="header-anchor" href="#xmake" aria-label="Permalink to &quot;XMake&quot;"></a></h3><p>We also support building with XMake:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># config &amp; build (default releasedbg)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># unit &amp; integration</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pixi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake-test</span></span></code></pre></div><h2 id="manual-build" tabindex="-1">Manual Build <a class="header-anchor" href="#manual-build" aria-label="Permalink to &quot;Manual Build&quot;"></a></h2><p>If you plan to build manually, first ensure your toolchain matches the versions defined in <code>pixi.toml</code>.</p><blockquote><p>Compatibility: In theory clice does not rely on compiler-specific extensions, so mainstream compilers (GCC/Clang/MSVC) should work. However, CI only guarantees specific versions of Clang. Other compilers or versions are supported on a <strong>best-effort</strong> basis. Please open an issue or PR if you hit problems.</p></blockquote><h3 id="cmake" tabindex="-1">CMake <a class="header-anchor" href="#cmake" aria-label="Permalink to &quot;CMake&quot;"></a></h3><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cmake</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -B</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -G</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Ninja</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_BUILD_TYPE=RelWithDebInfo</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain.cmake</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCLICE_ENABLE_TEST=ON</span></span></code></pre></div><blockquote><p>Note: <code>CMAKE_TOOLCHAIN_FILE</code> is optional. If your toolchain exactly matches ours, you can use the predefined <code>cmake/toolchain.cmake</code>; otherwise remove that flag.</p></blockquote><p>Optional build options:</p><table tabindex="0"><thead><tr><th>Option</th><th>Default</th><th>Effect</th></tr></thead><tbody><tr><td>LLVM_INSTALL_PATH</td><td>&quot;&quot;</td><td>Build clice with LLVM from a custom path</td></tr><tr><td>CLICE_ENABLE_TEST</td><td>OFF</td><td>Build clice unit tests</td></tr><tr><td>CLICE_USE_LIBCXX</td><td>OFF</td><td>Build clice with libc++ (adds <code>-std=libc++</code>); if enabled, ensure the LLVM libs are also built with libc++</td></tr><tr><td>CLICE_CI_ENVIRONMENT</td><td>OFF</td><td>Enable the <code>CLICE_CI_ENVIRONMENT</code> macro; some tests only run in CI</td></tr></tbody></table><h3 id="xmake-1" tabindex="-1">XMake <a class="header-anchor" href="#xmake-1" aria-label="Permalink to &quot;XMake&quot;"></a></h3><p>Build clice with:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> f</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -c</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=releasedbg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --toolchain=clang</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --all</span></span></code></pre></div><p>Optional build options:</p><table tabindex="0"><thead><tr><th>Option</th><th>Default</th><th>Effect</th></tr></thead><tbody><tr><td>--llvm</td><td>&quot;&quot;</td><td>Build clice with LLVM from a custom path</td></tr><tr><td>--enable_test</td><td>false</td><td>Build clice unit tests</td></tr><tr><td>--ci</td><td>false</td><td>Enable <code>CLICE_CI_ENVIRONMENT</code></td></tr></tbody></table><h2 id="about-llvm" tabindex="-1">About LLVM <a class="header-anchor" href="#about-llvm" aria-label="Permalink to &quot;About LLVM&quot;"></a></h2><p>clice calls Clang APIs to parse C++ code, so it must link against LLVM/Clang. Because clice uses Clang&#39;s private headers (usually absent from distro packages), the system LLVM package cannot be used directly.</p><p>Two ways to satisfy this dependency:</p><ol><li>We publish prebuilt binaries of the LLVM version we use at <a href="https://github.com/clice-io/clice-llvm/releases" target="_blank" rel="noreferrer">clice-llvm</a> for CI and release builds. During builds, cmake and xmake download these LLVM libs by default.</li></ol><div class="important custom-block github-alert"><p class="custom-block-title">IMPORTANT</p><p></p><p>For debug LLVM builds, we enable address sanitizer, which depends on compiler-rt and is very sensitive to compiler version. If you use a debug build, ensure your clang compiler-rt version matches the one defined in <code>pixi.toml</code>.</p></div><ol start="2"><li>Build LLVM/Clang yourself to match your environment. If the default prebuilt binaries fail due to ABI or library version mismatches, or you need a custom debug build, use this approach. We provide <code>scripts/build-llvm.py</code> to build the required LLVM libs, or refer to LLVM&#39;s official guide <a href="https://llvm.org/docs/CMake.html" target="_blank" rel="noreferrer">Building LLVM with CMake</a>.</li></ol></div></div></main><footer class="VPDocFooter" data-v-bbef34fe data-v-3de8f80a><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-3de8f80a><span class="visually-hidden" id="doc-footer-aria-label" data-v-3de8f80a>Pager</span><div class="pager" data-v-3de8f80a><a class="VPLink link pager-link prev" href="/design/template-resolver" data-v-3de8f80a><!--[--><span class="desc" data-v-3de8f80a>Previous page</span><span class="title" data-v-3de8f80a>Template Resolver</span><!--]--></a></div><div class="pager" data-v-3de8f80a><a class="VPLink link pager-link next" href="/dev/contribution" data-v-3de8f80a><!--[--><span class="desc" data-v-3de8f80a>Next page</span><span class="title" data-v-3de8f80a>Contribution</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"design_architecture.md\":\"B-ctAdqa\",\"design_compilation.md\":\"CgLBgVWN\",\"design_header-context.md\":\"CLeWGHwo\",\"design_index.md\":\"Buyl5Jmv\",\"design_template-resolver.md\":\"BNn_jKB5\",\"dev_build.md\":\"BMRSQYou\",\"dev_contribution.md\":\"DhEkIBdN\",\"dev_extension.md\":\"XVgKd8kt\",\"dev_test-and-debug.md\":\"Cd8ZNQsd\",\"guide_configuration.md\":\"D4nmP_A7\",\"guide_quick-start.md\":\"CTAi4GI0\",\"guide_what-is-clice.md\":\"D2ebPDnR\",\"index.md\":\"BIyS1X5z\",\"zh_design_architecture.md\":\"Dtjvys6J\",\"zh_design_compilation.md\":\"spz_aNkl\",\"zh_design_header-context.md\":\"ySoc9rIE\",\"zh_design_index.md\":\"C7K-QRDi\",\"zh_design_template-resolver.md\":\"DDSv4CNK\",\"zh_dev_build.md\":\"25ZHlRiJ\",\"zh_dev_contribution.md\":\"DxaaX3ax\",\"zh_dev_extension.md\":\"CNVomHxL\",\"zh_dev_test-and-debug.md\":\"Cv4TROgb\",\"zh_guide_configuration.md\":\"z9oxX9Dn\",\"zh_guide_quick-start.md\":\"B-Yy5Njn\",\"zh_guide_what-is-clice.md\":\"CEXKoZ_c\",\"zh_index.md\":\"Ddga0o0y\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"clice\",\"description\":\"a powerful and modern C++ language server\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/\"}],\"sidebar\":{\"/zh/\":[{\"text\":\"Design\",\"collapsed\":false,\"items\":[{\"text\":\"Architecture\",\"link\":\"/zh/design/architecture\"},{\"text\":\"Compilation\",\"link\":\"/zh/design/compilation\"},{\"text\":\"Header Context\",\"link\":\"/zh/design/header-context\"},{\"text\":\"Template Resolver\",\"link\":\"/zh/design/template-resolver\"}]},{\"text\":\"Development\",\"collapsed\":false,\"items\":[{\"text\":\"Build from Source\",\"link\":\"/zh/dev/build\"},{\"text\":\"Contribution\",\"link\":\"/zh/dev/contribution\"},{\"text\":\"Extension\",\"link\":\"/zh/dev/extension\"},{\"text\":\"Test and Debug\",\"link\":\"/zh/dev/test-and-debug\"}]},{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/zh/guide/configuration\"},{\"text\":\"Quick Start\",\"link\":\"/zh/guide/quick-start\"},{\"text\":\"What is clice?\",\"link\":\"/zh/guide/what-is-clice\"}]}],\"/\":[{\"text\":\"Design\",\"collapsed\":false,\"items\":[{\"text\":\"Architecture\",\"link\":\"/design/architecture\"},{\"text\":\"Compilation\",\"link\":\"/design/compilation\"},{\"text\":\"Header Context\",\"link\":\"/design/header-context\"},{\"text\":\"Template Resolver\",\"link\":\"/design/template-resolver\"}]},{\"text\":\"Development\",\"collapsed\":false,\"items\":[{\"text\":\"Build from Source\",\"link\":\"/dev/build\"},{\"text\":\"Contribution\",\"link\":\"/dev/contribution\"},{\"text\":\"Extension\",\"link\":\"/dev/extension\"},{\"text\":\"Test and Debug\",\"link\":\"/dev/test-and-debug\"}]},{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/guide/configuration\"},{\"text\":\"Quick Start\",\"link\":\"/guide/quick-start\"},{\"text\":\"What is clice?\",\"link\":\"/guide/what-is-clice\"}]}]},\"socialLinks\":[{\"icon\":\"discord\",\"link\":\"https://discord.gg/PA3UxW2VA3\"},{\"icon\":\"github\",\"link\":\"https://github.com/clice-io/clice\"}],\"outline\":\"deep\"},\"locales\":{\"root\":{\"label\":\"English\"},\"zh\":{\"label\":\"简体中文\"}},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>