40 lines
28 KiB
HTML
40 lines
28 KiB
HTML
<!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 "Build from Source""></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 "Quick Start""></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 && 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 && 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 "XMake""></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 & 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 & 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 "Manual Build""></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 "CMake""></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>""</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 "XMake""></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>""</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 "About LLVM""></a></h2><p>clice calls Clang APIs to parse C++ code, so it must link against LLVM/Clang. Because clice uses Clang'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'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> |