deploy: f65876903c
This commit is contained in:
2
404.html
2
404.html
@@ -16,7 +16,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"design_architecture.md\":\"D8TKjkhM\",\"design_compilation.md\":\"DgqTpBDl\",\"design_header-context.md\":\"EUdQ-Lzo\",\"design_index.md\":\"BgicbTS7\",\"design_template-resolver.md\":\"IYEsm7Dh\",\"dev_build.md\":\"DZvjJota\",\"dev_contribution.md\":\"D-EaJs3t\",\"guide_configuration.md\":\"BSfrI2TP\",\"guide_quick-start.md\":\"B3b6j6Mp\",\"guide_what-is-clice.md\":\"q1sqlvBr\",\"index.md\":\"B80amafG\",\"zh_design_architecture.md\":\"BVcDWyLW\",\"zh_design_compilation.md\":\"DfE77o6C\",\"zh_design_header-context.md\":\"BZN78X54\",\"zh_design_index.md\":\"DHNbht8F\",\"zh_design_template-resolver.md\":\"BdV6FoQY\",\"zh_dev_build.md\":\"DUD9OdOI\",\"zh_dev_contribution.md\":\"UxN4TV1f\",\"zh_guide_configuration.md\":\"BnQR4J3z\",\"zh_guide_quick-start.md\":\"BZnA1cly\",\"zh_guide_what-is-clice.md\":\"DFkS8WKr\",\"zh_index.md\":\"DOAh-Isq\"}");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\":\"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\":\"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\":false}");</script>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"design_architecture.md\":\"D8TKjkhM\",\"design_compilation.md\":\"DgqTpBDl\",\"design_header-context.md\":\"EUdQ-Lzo\",\"design_index.md\":\"BgicbTS7\",\"design_template-resolver.md\":\"IYEsm7Dh\",\"dev_build.md\":\"BPdhy5jH\",\"dev_contribution.md\":\"DlEIMhd5\",\"dev_test-and-debug.md\":\"B85mthGc\",\"guide_configuration.md\":\"BSfrI2TP\",\"guide_quick-start.md\":\"B3b6j6Mp\",\"guide_what-is-clice.md\":\"q1sqlvBr\",\"index.md\":\"B80amafG\",\"zh_design_architecture.md\":\"BVcDWyLW\",\"zh_design_compilation.md\":\"DfE77o6C\",\"zh_design_header-context.md\":\"BZN78X54\",\"zh_design_index.md\":\"DHNbht8F\",\"zh_design_template-resolver.md\":\"BdV6FoQY\",\"zh_dev_build.md\":\"TwBXt4g8\",\"zh_dev_contribution.md\":\"DTCatoP3\",\"zh_dev_test-and-debug.md\":\"C2WjDAQj\",\"zh_guide_configuration.md\":\"BnQR4J3z\",\"zh_guide_quick-start.md\":\"BZnA1cly\",\"zh_guide_what-is-clice.md\":\"DFkS8WKr\",\"zh_index.md\":\"DOAh-Isq\"}");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\":\"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\":\"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\":false}");</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const o=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"dev/build.md","filePath":"en/dev/build.md"}'),e={name:"dev/build.md"};function t(h,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`<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><h2 id="supported-platforms" tabindex="-1">Supported Platforms <a class="header-anchor" href="#supported-platforms" aria-label="Permalink to "Supported Platforms""></a></h2><ul><li>Windows</li><li>Linux</li><li>MacOS</li></ul><h2 id="prerequisites" tabindex="-1">Prerequisites <a class="header-anchor" href="#prerequisites" aria-label="Permalink to "Prerequisites""></a></h2><p>This section introduces the prerequisites for compiling clice.</p><h3 id="toolchain" tabindex="-1">Toolchain <a class="header-anchor" href="#toolchain" aria-label="Permalink to "Toolchain""></a></h3><ul><li>clang >= 19</li><li>c++23 compatible standard library <ul><li>MSVC STL >= 19.44(VS 2022 17.4)</li><li>GCC libstdc++ >= 14</li><li>Clang libc++ >= 20</li></ul></li></ul><p>clice uses C++23 as the language standard. Please ensure you have an available clang 19 or above compiler, as well as a standard library compatible with C++23.</p><blockquote><p>clice can currently only be compiled with clang. In the future, we will improve this to allow compilation with gcc and msvc.</p></blockquote><h3 id="llvm-libs" tabindex="-1">LLVM Libs <a class="header-anchor" href="#llvm-libs" aria-label="Permalink to "LLVM Libs""></a></h3><ul><li>20.1.5 <= llvm libs < 21</li></ul><p>Due to the complexity of C++ syntax, writing a new parser from scratch is unrealistic. clice calls clang's API to parse C++ source files and obtain AST, which means it needs to link llvm/clang libs. Additionally, since clice uses clang's private headers, these private headers are not available in llvm's binary release, so you cannot directly use the system's llvm package.</p><p>If you can find the llvm commit corresponding to your system's llvm package, copy the following three files from that commit:</p><ul><li><code>clang/lib/Sema/CoroutineStmtBuilder.h</code></li><li><code>clang/lib/Sema/TypeLocBuilder.h</code></li><li><code>clang/lib/Sema/TreeTransform.h</code></li></ul><p>Copy them to <code>LLVM_INSTALL_PATH/include/clang/Sema/</code>.</p><p>Besides this method, there are two other ways to obtain the llvm libs required by clice:</p><ol><li>Use our precompiled version</li></ol><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:#6A737D;--shiki-dark:#6A737D;"># .github/workflows/cmake.yml</span></span>
|
||||
import{_ as s,c as a,o as l,ae as e}from"./chunks/framework.U1Gow_7P.js";const c=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"dev/build.md","filePath":"en/dev/build.md"}'),n={name:"dev/build.md"};function t(h,i,p,k,r,o){return l(),a("div",null,i[0]||(i[0]=[e(`<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><h2 id="supported-platforms" tabindex="-1">Supported Platforms <a class="header-anchor" href="#supported-platforms" aria-label="Permalink to "Supported Platforms""></a></h2><ul><li>Windows</li><li>Linux</li><li>MacOS</li></ul><h2 id="prerequisites" tabindex="-1">Prerequisites <a class="header-anchor" href="#prerequisites" aria-label="Permalink to "Prerequisites""></a></h2><p>This section introduces the prerequisites for compiling clice.</p><h3 id="toolchain" tabindex="-1">Toolchain <a class="header-anchor" href="#toolchain" aria-label="Permalink to "Toolchain""></a></h3><ul><li>clang >= 19</li><li>c++23 compatible standard library <ul><li>MSVC STL >= 19.44(VS 2022 17.4)</li><li>GCC libstdc++ >= 14</li><li>Clang libc++ >= 20</li></ul></li></ul><p>clice uses C++23 as the language standard. Please ensure you have an available clang 19 or above compiler, as well as a standard library compatible with C++23.</p><blockquote><p>clice can currently only be compiled with clang. In the future, we will improve this to allow compilation with gcc and msvc.</p></blockquote><h3 id="llvm-libs" tabindex="-1">LLVM Libs <a class="header-anchor" href="#llvm-libs" aria-label="Permalink to "LLVM Libs""></a></h3><ul><li>20.1.5 <= llvm libs < 21</li></ul><p>Due to the complexity of C++ syntax, writing a new parser from scratch is unrealistic. clice calls clang's API to parse C++ source files and obtain AST, which means it needs to link llvm/clang libs. Additionally, since clice uses clang's private headers, these private headers are not available in llvm's binary release, so you cannot directly use the system's llvm package.</p><p>If you can find the llvm commit corresponding to your system's llvm package, copy the following three files from that commit:</p><ul><li><code>clang/lib/Sema/CoroutineStmtBuilder.h</code></li><li><code>clang/lib/Sema/TypeLocBuilder.h</code></li><li><code>clang/lib/Sema/TreeTransform.h</code></li></ul><p>Copy them to <code>LLVM_INSTALL_PATH/include/clang/Sema/</code>.</p><p>Besides this method, there are two other ways to obtain the llvm libs required by clice:</p><ol><li>Use our precompiled version</li></ol><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:#6A737D;--shiki-dark:#6A737D;"># .github/workflows/cmake.yml</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Linux precompiled binary require glibc 2.35 (build on ubuntu 22.04)</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mkdir</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
@@ -11,33 +11,11 @@ import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const o
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Windows precompiled binary only MD runtime support</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -O</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/x64-windows-msvc-release.7z"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 7z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> x64-windows-msvc-release.7z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "-o.llvm"</span></span></code></pre></div><div class="important custom-block github-alert"><p class="custom-block-title">IMPORTANT</p><p></p><p>For debug versions of llvm libs, we enabled address sanitizer during build, and address sanitizer depends on compiler rt, which is very sensitive to compiler versions. So if using debug versions, please ensure your clang's compiler rt version is <strong>strictly consistent</strong> with what we used during build.</p><ul><li>Windows currently has no debug build of llvm libs because it doesn't support building clang as a dynamic library. Related progress can be found <a href="https://discourse.llvm.org/t/llvm-is-buildable-as-a-windows-dll/87748" target="_blank" rel="noreferrer">here</a></li><li>Linux uses clang20</li><li>MacOS uses homebrew llvm@20, definitely don't use apple clang</li></ul></div><ol start="2"><li>Compile llvm/clang from scratch</li></ol><p>This is the most recommended approach, ensuring environment consistency and avoiding crash issues caused by ABI inconsistencies. We provide a script for building the llvm libs required by clice: <a href="https://github.com/clice-io/clice/blob/main/scripts/build-llvm-libs.py" target="_blank" rel="noreferrer">build-llvm-libs.py</a>.</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> llvm-project</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> python3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">clic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/scripts/build-llvm-libs.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span></span></code></pre></div><p>You can also refer to llvm's official build tutorial <a href="https://llvm.org/docs/CMake.html" target="_blank" rel="noreferrer">Building LLVM with CMake</a>.</p><h3 id="gcc-toolchain" tabindex="-1">GCC Toolchain <a class="header-anchor" href="#gcc-toolchain" aria-label="Permalink to "GCC Toolchain""></a></h3><p>clice requires <code>GCC libstdc++ >= 14</code>. You could use a different GCC toolchain and also link statically against its <code>libstdc++</code>:</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;">cmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ..</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> python3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">clic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/scripts/build-llvm-libs.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span></span></code></pre></div><p>You can also refer to llvm's official build tutorial <a href="https://llvm.org/docs/CMake.html" target="_blank" rel="noreferrer">Building LLVM with CMake</a>.</p><h3 id="gcc-toolchain" tabindex="-1">GCC Toolchain <a class="header-anchor" href="#gcc-toolchain" aria-label="Permalink to "GCC Toolchain""></a></h3><p>clice requires GCC libstdc++ >= 14. You could use a different GCC toolchain and also link statically against its libstdc++:</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;">cmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ..</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_CXX_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_EXE_LINKER_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"-static-libgcc -static-libstdc++"</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">## Building</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">After</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> handling</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> prerequisites,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> you</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> can</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> start</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> building</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice.</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> We</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> provide</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> two</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> methods:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake/xmake.</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">### CMake</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Below</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> are</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> parameters</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> supported</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> by</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice:</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> \`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">LLVM_INSTALL_PATH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> specifies</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> installation</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> of</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> llvm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> libs</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> \`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">CLICE_ENABLE_TEST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> whether</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice's unit tests</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">For example:</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`\`\`bash</span></span>
|
||||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">$ cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_INSTALL_PATH="./.llvm" -DCLICE_ENABLE_TEST=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++</span></span>
|
||||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">$ cmake --build build</span></span></code></pre></div><h3 id="xmake" tabindex="-1">Xmake <a class="header-anchor" href="#xmake" aria-label="Permalink to "Xmake""></a></h3><p>Use the following command to build clice:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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;"> --dev=true</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=debug</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --toolchain=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --llvm=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./.llvm"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --enable_test=true</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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><blockquote><p>--llvm is optional. If not specified, xmake will automatically download our precompiled binary</p></blockquote><h2 id="run-tests" tabindex="-1">Run Tests <a class="header-anchor" href="#run-tests" aria-label="Permalink to "Run Tests""></a></h2><p>clice has two forms of tests: unit tests and integration tests.</p><ul><li>Run unit tests:</li></ul><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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/unit_tests</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --test-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./tests/data"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --resource-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"<LLVM_INSTALL_PATH>/lib/clang/20"</span></span></code></pre></div><p>Or, run unit tests through xmake:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span></code></pre></div><ul><li>Run integration tests:</li></ul><p>We recommend using <a href="https://github.com/astral-sh/uv" target="_blank" rel="noreferrer">uv</a> to manage Python dependencies and versions. If you don't want to download uv, please refer to <code>pyproject.toml</code> to download the required Python version and dependencies.</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/bin/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --resource-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"<LLVM_INSTALL_PATH>/lib/clang/20"</span></span></code></pre></div><blockquote><p>resource-dir is clang's built-in header file folder</p></blockquote><p>Or, if you use xmake as the build system, you can directly run tests through 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:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> integration_tests/default</span></span></code></pre></div><p>Or, if you use xmake build the project and do not have uv installed, you can use the following script:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest-asyncio</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> f</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> && </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/linux/x86_64/debug/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --resource-dir=./build/linux/x86_64/debug/lib/clang/20/</span></span></code></pre></div><h2 id="building-docker-image" tabindex="-1">Building Docker Image <a class="header-anchor" href="#building-docker-image" aria-label="Permalink to "Building Docker Image""></a></h2><p>Use the following command to build docker image:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span></code></pre></div><p>Run docker image by running the following command:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_EXE_LINKER_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"-static-libgcc -static-libstdc++"</span></span></code></pre></div><h2 id="building" tabindex="-1">Building <a class="header-anchor" href="#building" aria-label="Permalink to "Building""></a></h2><p>After handling the prerequisites, you can start building clice. We provide two build methods: cmake/xmake.</p><h3 id="cmake" tabindex="-1">CMake <a class="header-anchor" href="#cmake" aria-label="Permalink to "CMake""></a></h3><p>Below are the cmake parameters supported by clice:</p><ul><li><code>LLVM_INSTALL_PATH</code> specifies the installation path of llvm libs</li><li><code>CLICE_ENABLE_TEST</code> whether to build clice's unit tests</li></ul><p>For example:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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;"> -DCMAKE_BUILD_TYPE=Debug</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DLLVM_INSTALL_PATH=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./.llvm"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCLICE_ENABLE_TEST=ON</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_COMPILER=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_CXX_COMPILER=clang++</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span></span></code></pre></div><h3 id="xmake" tabindex="-1">Xmake <a class="header-anchor" href="#xmake" aria-label="Permalink to "Xmake""></a></h3><p>Use the following command to build clice:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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;"> --dev=true</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=debug</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --toolchain=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --llvm=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./.llvm"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --enable_test=true</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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><blockquote><p>--llvm is optional. If not specified, xmake will automatically download our precompiled binary</p></blockquote><h2 id="building-docker-image" tabindex="-1">Building Docker Image <a class="header-anchor" href="#building-docker-image" aria-label="Permalink to "Building Docker Image""></a></h2><p>Use the following command to build docker image:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span></code></pre></div><p>Run docker image by running the following command:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">OVERVIEW:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> new</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> generation</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> of</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> language</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> C/C++</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">...</span></span></code></pre></div><p>The directory structure of the docker image is as follows:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/opt/clice</span></span>
|
||||
<span class="line"><span>├── bin</span></span>
|
||||
@@ -45,4 +23,4 @@ import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const o
|
||||
<span class="line"><span>├── include</span></span>
|
||||
<span class="line"><span>├── lib</span></span>
|
||||
<span class="line"><span>├── LICENSE</span></span>
|
||||
<span class="line"><span>├── README.md</span></span></code></pre></div><p>Hint: launch clice in the docker container by running the following command:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --entrypoint</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span></span></code></pre></div>`,53)]))}const c=i(e,[["render",t]]);export{o as __pageData,c as default};
|
||||
<span class="line"><span>├── README.md</span></span></code></pre></div><p>Hint: launch clice in the docker container by running the following command:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --entrypoint</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span></span></code></pre></div>`,46)]))}const F=s(n,[["render",t]]);export{c as __pageData,F as default};
|
||||
1
assets/dev_build.md.BPdhy5jH.lean.js
Normal file
1
assets/dev_build.md.BPdhy5jH.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as s,c as a,o as l,ae as e}from"./chunks/framework.U1Gow_7P.js";const c=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"dev/build.md","filePath":"en/dev/build.md"}'),n={name:"dev/build.md"};function t(h,i,p,k,r,o){return l(),a("div",null,i[0]||(i[0]=[e("",46)]))}const F=s(n,[["render",t]]);export{c as __pageData,F as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const o=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"dev/build.md","filePath":"en/dev/build.md"}'),e={name:"dev/build.md"};function t(h,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n("",53)]))}const c=i(e,[["render",t]]);export{o as __pageData,c as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as t,c as a,o,ae as i}from"./chunks/framework.U1Gow_7P.js";const b=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"dev/contribution.md","filePath":"en/dev/contribution.md"}'),n={name:"dev/contribution.md"};function r(l,e,s,c,d,u){return o(),a("div",null,e[0]||(e[0]=[i('<h1 id="contribution" tabindex="-1">Contribution <a class="header-anchor" href="#contribution" aria-label="Permalink to "Contribution""></a></h1><p>We welcome any contributions!</p><p>Please refer to <a href="./build.html">build</a> to build clice.</p><h2 id="code-style" tabindex="-1">Code Style <a class="header-anchor" href="#code-style" aria-label="Permalink to "Code Style""></a></h2><p>Naming:</p><ul><li>Variable names: lowercase with underscores</li><li>Class names, enum names: PascalCase</li></ul>',6)]))}const m=t(n,[["render",r]]);export{b as __pageData,m as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as t,c as a,o,ae as i}from"./chunks/framework.U1Gow_7P.js";const b=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"dev/contribution.md","filePath":"en/dev/contribution.md"}'),n={name:"dev/contribution.md"};function r(l,e,s,c,d,u){return o(),a("div",null,e[0]||(e[0]=[i("",6)]))}const m=t(n,[["render",r]]);export{b as __pageData,m as default};
|
||||
1
assets/dev_contribution.md.DlEIMhd5.js
Normal file
1
assets/dev_contribution.md.DlEIMhd5.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as t,c as a,o,ae as n}from"./chunks/framework.U1Gow_7P.js";const _=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"dev/contribution.md","filePath":"en/dev/contribution.md"}'),i={name:"dev/contribution.md"};function r(l,e,s,c,d,u){return o(),a("div",null,e[0]||(e[0]=[n('<h1 id="contribution" tabindex="-1">Contribution <a class="header-anchor" href="#contribution" aria-label="Permalink to "Contribution""></a></h1><p>We welcome any contributions!</p><p>Please refer to <a href="./build.html">build</a> to build clice, refer to <a href="./test-and-debug.html">test and debug</a> to test and debug clice.</p><h2 id="code-style" tabindex="-1">Code Style <a class="header-anchor" href="#code-style" aria-label="Permalink to "Code Style""></a></h2><p>Naming:</p><ul><li>Variable names: lowercase with underscores</li><li>Class names, enum names: PascalCase</li></ul>',6)]))}const m=t(i,[["render",r]]);export{_ as __pageData,m as default};
|
||||
1
assets/dev_contribution.md.DlEIMhd5.lean.js
Normal file
1
assets/dev_contribution.md.DlEIMhd5.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as t,c as a,o,ae as n}from"./chunks/framework.U1Gow_7P.js";const _=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"dev/contribution.md","filePath":"en/dev/contribution.md"}'),i={name:"dev/contribution.md"};function r(l,e,s,c,d,u){return o(),a("div",null,e[0]||(e[0]=[n("",6)]))}const m=t(i,[["render",r]]);export{_ as __pageData,m as default};
|
||||
14
assets/dev_test-and-debug.md.B85mthGc.js
Normal file
14
assets/dev_test-and-debug.md.B85mthGc.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import{_ as i,c as e,o as t,ae as a}from"./chunks/framework.U1Gow_7P.js";const r=JSON.parse('{"title":"Test and Debug","description":"","frontmatter":{},"headers":[],"relativePath":"dev/test-and-debug.md","filePath":"en/dev/test-and-debug.md"}'),n={name:"dev/test-and-debug.md"};function l(h,s,p,o,d,c){return t(),e("div",null,s[0]||(s[0]=[a(`<h1 id="test-and-debug" tabindex="-1">Test and Debug <a class="header-anchor" href="#test-and-debug" aria-label="Permalink to "Test and Debug""></a></h1><h2 id="run-tests" tabindex="-1">Run Tests <a class="header-anchor" href="#run-tests" aria-label="Permalink to "Run Tests""></a></h2><p>clice has two types of tests: unit tests and integration tests.</p><ul><li>Run unit tests</li></ul><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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/unit_tests</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --test-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./tests/data"</span></span></code></pre></div><ul><li>Run integration tests</li></ul><p>We use pytest to run integration tests. Please refer to <code>pyproject.toml</code> to install the required Python libraries.</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/bin/clice</span></span></code></pre></div><p>If you use xmake as your build system, you can run the tests directly 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:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> integration_tests/default</span></span></code></pre></div><h2 id="debug" tabindex="-1">Debug <a class="header-anchor" href="#debug" aria-label="Permalink to "Debug""></a></h2><p>If you want to attach a debugger to clice for debugging, it is recommended to first start clice in socket mode independently, and then connect the client to it.</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=socket</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --port=50051</span></span></code></pre></div><p>After the server starts, you can connect a client to the server in the following two ways:</p><ul><li>Connect by running a specific test with pytest</li></ul><p>You can run a single integration test case to connect to a running clice instance. This is very useful for reproducing and debugging specific scenarios.</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration/test_file_operation.py::test_did_open</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=socket</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --port=50051</span></span></code></pre></div><ul><li>Use VS Code for practical testing</li></ul><p>You can also connect to a running clice service by configuring the clice-vscode extension, allowing you to debug in a real-world usage scenario.</p><ol><li><p>Download the <a href="https://marketplace.visualstudio.com/items?itemName=ykiko.clice-vscode" target="_blank" rel="noreferrer">clice-vscode</a> extension from the Marketplace.</p></li><li><p>Configure <code>settings.json</code>: Create a <code>.vscode/settings.json</code> file in your project's root directory and add the following content:</p><div class="language-jsonc vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">jsonc</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Point this to the clice binary you downloaded.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clice.executable"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/path/to/your/clice/executable"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Enable socket mode.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clice.mode"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"socket"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clice.port"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">50051</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Optional: Set this to an empty string to turn off the clangd.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clangd.path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p>Reload Window: After modifying the configuration, execute the <code>Developer: Reload Window</code> command in VS Code for the settings to take effect. The extension will automatically connect to the clice instance listening on port 50051.</p></li></ol><p>If you need to modify or debug the clice-vscode extension itself, follow these steps:</p><ol><li><p>Clone and install dependencies:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/clice-io/clice-vscode</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice-vscode</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span></code></pre></div></li><li><p>Open the extension project with VS Code: Open the <code>clice-vscode</code> folder in a new VS Code window.</p></li><li><p>Create debug configuration: In the <code>clice-vscode</code> project, also create a <code>.vscode/settings.json</code> file with the same content as above.</p></li><li><p>Press <code>F5</code>. This will launch an [Extension Development Host] window. This is a new VS Code window with your local clice-vscode extension code loaded. Open your C++ project in this new window, and it should automatically connect to clice.</p></li></ol>`,22)]))}const g=i(n,[["render",l]]);export{r as __pageData,g as default};
|
||||
1
assets/dev_test-and-debug.md.B85mthGc.lean.js
Normal file
1
assets/dev_test-and-debug.md.B85mthGc.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as i,c as e,o as t,ae as a}from"./chunks/framework.U1Gow_7P.js";const r=JSON.parse('{"title":"Test and Debug","description":"","frontmatter":{},"headers":[],"relativePath":"dev/test-and-debug.md","filePath":"en/dev/test-and-debug.md"}'),n={name:"dev/test-and-debug.md"};function l(h,s,p,o,d,c){return t(),e("div",null,s[0]||(s[0]=[a("",22)]))}const g=i(n,[["render",l]]);export{r as __pageData,g as default};
|
||||
@@ -1,49 +0,0 @@
|
||||
import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const c=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/build.md","filePath":"zh/dev/build.md"}'),t={name:"zh/dev/build.md"};function h(e,s,p,k,F,r){return l(),a("div",null,s[0]||(s[0]=[n(`<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><h2 id="supported-platforms" tabindex="-1">Supported Platforms <a class="header-anchor" href="#supported-platforms" aria-label="Permalink to "Supported Platforms""></a></h2><ul><li>Windows</li><li>Linux</li><li>MacOS</li></ul><h2 id="prerequisite" tabindex="-1">Prerequisite <a class="header-anchor" href="#prerequisite" aria-label="Permalink to "Prerequisite""></a></h2><p>本小节介绍编译 clice 的前置依赖。</p><h3 id="toolchain" tabindex="-1">Toolchain <a class="header-anchor" href="#toolchain" aria-label="Permalink to "Toolchain""></a></h3><ul><li>clang >= 19</li><li>c++23 compitable standard library <ul><li>MSVC STL >= 19.44(VS 2022 17.4)</li><li>GCC libstdc++ >= 14</li><li>Clang libc++ >= 20</li></ul></li></ul><p>clice 使用 C++23 作为语言标准 ,请确保有可用的 clang 19 以及以上的编译器,以及兼容 C++23 的标准库。</p><blockquote><p>clice 暂时只能使用 clang 编译,在未来我们会改进这一点,使其能使用 gcc 和 msvc 编译。</p></blockquote><h3 id="llvm-libs" tabindex="-1">LLVM Libs <a class="header-anchor" href="#llvm-libs" aria-label="Permalink to "LLVM Libs""></a></h3><ul><li>20.1.5 <= llvm libs < 21</li></ul><p>由于 C++ 的语法太过复杂,自己编写一个新的 parser 是不现实的。clice 调用 clang 的 API 来 parse C++ 源文件获取 AST,这意味它需要链接 llvm/clang libs。另外由于 clice 使用了 clang 的私有头文件,这些私有头文件在 llvm 发布的 binary release 中是没有的,所以不能直接使用系统的 llvm package。</p><p>如果你能找到系统的 llvm package 对应的 llvm commit,将该 commit 下的如下三个文件</p><ul><li><code>clang/lib/Sema/CoroutineStmtBuilder.h</code></li><li><code>clang/lib/Sema/TypeLocBuilder.h</code></li><li><code>clang/lib/Sema/TreeTransform.h</code></li></ul><p>拷贝到 <code>LLVM_INSTALL_PATH/include/clang/Sema/</code> 中即可。</p><p>除了这种方法以外,还有两种办法获取 clice 所需的 llvm libs:</p><ol><li>使用我们提供的预编译版本</li></ol><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:#6A737D;--shiki-dark:#6A737D;"># .github/workflows/cmake.yml</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Linux precompiled binary require glibc 2.35 (build on ubuntu 22.04)</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mkdir</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/x86_64-linux-gnu-release.tar.xz"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tar</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -xJ</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># MacOS precompiled binary require macos15+</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mkdir</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/arm64-macosx-apple-release.tar.xz"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tar</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -xJ</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Windows precompiled binary only MD runtime support</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -O</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/x64-windows-msvc-release.7z"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 7z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> x64-windows-msvc-release.7z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "-o.llvm"</span></span></code></pre></div><div class="important custom-block github-alert"><p class="custom-block-title">IMPORTANT</p><p></p><p>对于 debug 版本的 llvm libs,构建的时候我们开启了 address sanitizer,而 address sanitizer 依赖于 compiler rt,它对编译器版本十分敏感。所以如果使用 debug 版本,请确保你的 clang 的 compiler rt 版本和我们构建的时候<strong>严格一致</strong>。</p><ul><li>Windows 暂时无 debug 构建的 llvm libs,因为它不支持将 clang 构建为动态库,相关的进展可以在 <a href="https://discourse.llvm.org/t/llvm-is-buildable-as-a-windows-dll/87748" target="_blank" rel="noreferrer">这里</a> 找到</li><li>Linux 使用 clang20</li><li>MacOS 使用 homebrew llvm@20,一定不要使用 apple clang</li></ul></div><ol start="2"><li>自己从头编译 llvm/clang</li></ol><p>这是最推荐的方式,可以保证环境一致性,避免因为 ABI 不一致而导致的崩溃问题。我们提供了一个脚本,用于构建 clice 所需要的 llvm libs:<a href="https://github.com/clice-io/clice/blob/main/scripts/build-llvm-libs.py" target="_blank" rel="noreferrer">build-llvm-libs.py</a>。</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> llvm-project</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> python3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">clic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/scripts/build-llvm-libs.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span></span></code></pre></div><p>也可以参考 llvm 的官方构建教程 <a href="https://llvm.org/docs/CMake.html" target="_blank" rel="noreferrer">Building LLVM with CMake</a>。</p><h3 id="gcc-toolchain" tabindex="-1">GCC Toolchain <a class="header-anchor" href="#gcc-toolchain" aria-label="Permalink to "GCC Toolchain""></a></h3><p>clice 要求 <code>GCC libstdc++ >= 14</code> 。以下命令使用不同的 GCC 工具链并静态链接其 <code>libstdc++</code>:</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;">cmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ..</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_CXX_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_EXE_LINKER_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"-static-libgcc -static-libstdc++"</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">## Building</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">在处理好前置依赖之后,可以开始构建</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 了,我们提供</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake/xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 两种构建方式。</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">### CMake</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">下面是</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 支持的</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 参数</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> \`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">LLVM_INSTALL_PATH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> 用于指定</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> llvm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> libs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 的安装路径</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> \`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">CLICE_ENABLE_TEST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> 是否构建</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 的单元测试</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">例如</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`\`\`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bach</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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;">-DCMAKE_BUILD_TYPE=Debug</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DLLVM_INSTALL_PATH=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./.llvm" </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">-DCLICE_ENABLE_TEST=ON</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_COMPILER=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_CXX_COMPILER=clang++</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cmake </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">--build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span></span></code></pre></div><h3 id="xmake" tabindex="-1">Xmake <a class="header-anchor" href="#xmake" aria-label="Permalink to "Xmake""></a></h3><p>使用如下的命令即可构建 clice</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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;"> --dev=true</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=debug</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --toolchain=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --llvm=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./.llvm"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --enable_test=true</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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><blockquote><p>--llvm 是可选的,如果不指定的话,xmake 会自动下载我们编译好的预编译二进制</p></blockquote><h2 id="run-tests" tabindex="-1">Run Tests <a class="header-anchor" href="#run-tests" aria-label="Permalink to "Run Tests""></a></h2><p>clice 有两种形式的测试,单元测试和集成测试。</p><ul><li>运行单元测试</li></ul><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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/unit_tests</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --test-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./tests/data"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --resource-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"<LLVM_INSTALL_PATH>/lib/clang/20"</span></span></code></pre></div><p>或者, 使用 xmake 启动单元测试:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span></code></pre></div><ul><li>运行集成测试</li></ul><p>我们推荐使用 <a href="https://github.com/astral-sh/uv" target="_blank" rel="noreferrer">uv</a> 管理 python 依赖和版本。如果不想下载 uv,请参考 <code>pyproject.toml</code> 下载所需的 python 版本和依赖。</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/bin/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --resource-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"<LLVM_INSTALL_PATH>/lib/clang/20"</span></span></code></pre></div><blockquote><p>resource-dir 是 clang 的内置头文件文件夹</p></blockquote><p>如果你使用 xmake 作为构建系统,可以直接通过 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:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> integration_tests/default</span></span></code></pre></div><p>在使用 xmake 构建和不使用 uv 的情况下, 启动 debug 模式的测试:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest-asyncio</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> f</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> && </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/linux/x86_64/debug/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --resource-dir=./build/linux/x86_64/debug/lib/clang/20/</span></span></code></pre></div><h2 id="building-docker-image" tabindex="-1">Building Docker Image <a class="header-anchor" href="#building-docker-image" aria-label="Permalink to "Building Docker Image""></a></h2><p>使用以下命令构建 docker 镜像:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span></code></pre></div><p>运行 docker 镜像:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">OVERVIEW:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> new</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> generation</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> of</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> language</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> C/C++</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">...</span></span></code></pre></div><p>docker 镜像的目录结构如下:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/opt/clice</span></span>
|
||||
<span class="line"><span>├── bin</span></span>
|
||||
<span class="line"><span>│ ├── clice -> /usr/local/bin/clice</span></span>
|
||||
<span class="line"><span>├── include</span></span>
|
||||
<span class="line"><span>├── lib</span></span>
|
||||
<span class="line"><span>├── LICENSE</span></span>
|
||||
<span class="line"><span>├── README.md</span></span></code></pre></div><p>提示:可以使用以下命令进入 clice 容器:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --entrypoint</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span></span></code></pre></div>`,53)]))}const g=i(t,[["render",h]]);export{c as __pageData,g as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const c=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/build.md","filePath":"zh/dev/build.md"}'),t={name:"zh/dev/build.md"};function h(e,s,p,k,F,r){return l(),a("div",null,s[0]||(s[0]=[n("",53)]))}const g=i(t,[["render",h]]);export{c as __pageData,g as default};
|
||||
26
assets/zh_dev_build.md.TwBXt4g8.js
Normal file
26
assets/zh_dev_build.md.TwBXt4g8.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const o=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/build.md","filePath":"zh/dev/build.md"}'),e={name:"zh/dev/build.md"};function t(h,s,p,k,r,c){return l(),a("div",null,s[0]||(s[0]=[n(`<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><h2 id="supported-platforms" tabindex="-1">Supported Platforms <a class="header-anchor" href="#supported-platforms" aria-label="Permalink to "Supported Platforms""></a></h2><ul><li>Windows</li><li>Linux</li><li>MacOS</li></ul><h2 id="prerequisite" tabindex="-1">Prerequisite <a class="header-anchor" href="#prerequisite" aria-label="Permalink to "Prerequisite""></a></h2><p>本小节介绍编译 clice 的前置依赖。</p><h3 id="toolchain" tabindex="-1">Toolchain <a class="header-anchor" href="#toolchain" aria-label="Permalink to "Toolchain""></a></h3><ul><li>clang >= 19</li><li>c++23 compitable standard library <ul><li>MSVC STL >= 19.44(VS 2022 17.4)</li><li>GCC libstdc++ >= 14</li><li>Clang libc++ >= 20</li></ul></li></ul><p>clice 使用 C++23 作为语言标准 ,请确保有可用的 clang 19 以及以上的编译器,以及兼容 C++23 的标准库。</p><blockquote><p>clice 暂时只能使用 clang 编译,在未来我们会改进这一点,使其能使用 gcc 和 msvc 编译。</p></blockquote><h3 id="llvm-libs" tabindex="-1">LLVM Libs <a class="header-anchor" href="#llvm-libs" aria-label="Permalink to "LLVM Libs""></a></h3><ul><li>20.1.5 <= llvm libs < 21</li></ul><p>由于 C++ 的语法太过复杂,自己编写一个新的 parser 是不现实的。clice 调用 clang 的 API 来 parse C++ 源文件获取 AST,这意味它需要链接 llvm/clang libs。另外由于 clice 使用了 clang 的私有头文件,这些私有头文件在 llvm 发布的 binary release 中是没有的,所以不能直接使用系统的 llvm package。</p><p>如果你能找到系统的 llvm package 对应的 llvm commit,将该 commit 下的如下三个文件</p><ul><li><code>clang/lib/Sema/CoroutineStmtBuilder.h</code></li><li><code>clang/lib/Sema/TypeLocBuilder.h</code></li><li><code>clang/lib/Sema/TreeTransform.h</code></li></ul><p>拷贝到 <code>LLVM_INSTALL_PATH/include/clang/Sema/</code> 中即可。</p><p>除了这种方法以外,还有两种办法获取 clice 所需的 llvm libs:</p><ol><li>使用我们提供的预编译版本</li></ol><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:#6A737D;--shiki-dark:#6A737D;"># .github/workflows/cmake.yml</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Linux precompiled binary require glibc 2.35 (build on ubuntu 22.04)</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mkdir</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/x86_64-linux-gnu-release.tar.xz"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tar</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -xJ</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># MacOS precompiled binary require macos15+</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mkdir</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/arm64-macosx-apple-release.tar.xz"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tar</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -xJ</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./.llvm</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Windows precompiled binary only MD runtime support</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -O</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://github.com/clice-io/llvm-binary/releases/download/20.1.5/x64-windows-msvc-release.7z"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 7z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> x64-windows-msvc-release.7z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "-o.llvm"</span></span></code></pre></div><div class="important custom-block github-alert"><p class="custom-block-title">IMPORTANT</p><p></p><p>对于 debug 版本的 llvm libs,构建的时候我们开启了 address sanitizer,而 address sanitizer 依赖于 compiler rt,它对编译器版本十分敏感。所以如果使用 debug 版本,请确保你的 clang 的 compiler rt 版本和我们构建的时候<strong>严格一致</strong>。</p><ul><li>Windows 暂时无 debug 构建的 llvm libs,因为它不支持将 clang 构建为动态库,相关的进展可以在 <a href="https://discourse.llvm.org/t/llvm-is-buildable-as-a-windows-dll/87748" target="_blank" rel="noreferrer">这里</a> 找到</li><li>Linux 使用 clang20</li><li>MacOS 使用 homebrew llvm@20,一定不要使用 apple clang</li></ul></div><ol start="2"><li>自己从头编译 llvm/clang</li></ol><p>这是最推荐的方式,可以保证环境一致性,避免因为 ABI 不一致而导致的崩溃问题。我们提供了一个脚本,用于构建 clice 所需要的 llvm libs:<a href="https://github.com/clice-io/clice/blob/main/scripts/build-llvm-libs.py" target="_blank" rel="noreferrer">build-llvm-libs.py</a>。</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> llvm-project</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> python3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">clic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/scripts/build-llvm-libs.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> debug</span></span></code></pre></div><p>也可以参考 llvm 的官方构建教程 <a href="https://llvm.org/docs/CMake.html" target="_blank" rel="noreferrer">Building LLVM with CMake</a>。</p><h3 id="gcc-toolchain" tabindex="-1">GCC Toolchain <a class="header-anchor" href="#gcc-toolchain" aria-label="Permalink to "GCC Toolchain""></a></h3><p>clice 要求 GCC libstdc++ >= 14。以下命令使用不同的 GCC 工具链并静态链接其 libstdc++:</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;">cmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ..</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_C_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_CXX_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"--gcc-toolchain=/usr/local/gcc-14.3.0/"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -DCMAKE_EXE_LINKER_FLAGS=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"-static-libgcc -static-libstdc++"</span></span></code></pre></div><h2 id="building" tabindex="-1">Building <a class="header-anchor" href="#building" aria-label="Permalink to "Building""></a></h2><p>在处理好前置依赖之后,可以开始构建 clice 了,我们提供 cmake/xmake 两种构建方式。</p><h3 id="cmake" tabindex="-1">CMake <a class="header-anchor" href="#cmake" aria-label="Permalink to "CMake""></a></h3><p>下面是 clice 支持的 cmake 参数</p><ul><li><code>LLVM_INSTALL_PATH</code> 用于指定 llvm libs 的安装路径</li><li><code>CLICE_ENABLE_TEST</code> 是否构建 clice 的单元测试</li></ul><p>例如</p><div class="language-bach vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bach</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>$ cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_INSTALL_PATH="./.llvm" -DCLICE_ENABLE_TEST=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++</span></span>
|
||||
<span class="line"><span>$ cmake --build build</span></span></code></pre></div><h3 id="xmake" tabindex="-1">Xmake <a class="header-anchor" href="#xmake" aria-label="Permalink to "Xmake""></a></h3><p>使用如下的命令即可构建 clice</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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;"> --dev=true</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=debug</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --toolchain=clang</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --llvm=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./.llvm"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --enable_test=true</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 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><blockquote><p>--llvm 是可选的,如果不指定的话,xmake 会自动下载我们编译好的预编译二进制</p></blockquote><h2 id="building-docker-image" tabindex="-1">Building Docker Image <a class="header-anchor" href="#building-docker-image" aria-label="Permalink to "Building Docker Image""></a></h2><p>使用以下命令构建 docker 镜像:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span></code></pre></div><p>运行 docker 镜像:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">OVERVIEW:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> new</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> generation</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> of</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> language</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> C/C++</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">...</span></span></code></pre></div><p>docker 镜像的目录结构如下:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/opt/clice</span></span>
|
||||
<span class="line"><span>├── bin</span></span>
|
||||
<span class="line"><span>│ ├── clice -> /usr/local/bin/clice</span></span>
|
||||
<span class="line"><span>├── include</span></span>
|
||||
<span class="line"><span>├── lib</span></span>
|
||||
<span class="line"><span>├── LICENSE</span></span>
|
||||
<span class="line"><span>├── README.md</span></span></code></pre></div><p>提示:可以使用以下命令进入 clice 容器:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --entrypoint</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice</span></span></code></pre></div>`,46)]))}const F=i(e,[["render",t]]);export{o as __pageData,F as default};
|
||||
1
assets/zh_dev_build.md.TwBXt4g8.lean.js
Normal file
1
assets/zh_dev_build.md.TwBXt4g8.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as i,c as a,o as l,ae as n}from"./chunks/framework.U1Gow_7P.js";const o=JSON.parse('{"title":"Build from Source","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/build.md","filePath":"zh/dev/build.md"}'),e={name:"zh/dev/build.md"};function t(h,s,p,k,r,c){return l(),a("div",null,s[0]||(s[0]=[n("",46)]))}const F=i(e,[["render",t]]);export{o as __pageData,F as default};
|
||||
1
assets/zh_dev_contribution.md.DTCatoP3.js
Normal file
1
assets/zh_dev_contribution.md.DTCatoP3.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,c as a,o,ae as i}from"./chunks/framework.U1Gow_7P.js";const h=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/contribution.md","filePath":"zh/dev/contribution.md"}'),n={name:"zh/dev/contribution.md"};function r(l,t,d,c,s,u){return o(),a("div",null,t[0]||(t[0]=[i('<h1 id="contribution" tabindex="-1">Contribution <a class="header-anchor" href="#contribution" aria-label="Permalink to "Contribution""></a></h1><p>我们欢迎任何贡献!</p><p>请参考 <a href="./build.html">build</a> 来构建 clice,参考 <a href="./test-and-debug.html">test and debug</a> 来测试和调试 clice。</p><h2 id="code-style" tabindex="-1">Code Style <a class="header-anchor" href="#code-style" aria-label="Permalink to "Code Style""></a></h2><p>命名</p><ul><li>变量名:小写下换线</li><li>类名,枚举名:大驼峰</li></ul>',6)]))}const b=e(n,[["render",r]]);export{h as __pageData,b as default};
|
||||
1
assets/zh_dev_contribution.md.DTCatoP3.lean.js
Normal file
1
assets/zh_dev_contribution.md.DTCatoP3.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,c as a,o,ae as i}from"./chunks/framework.U1Gow_7P.js";const h=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/contribution.md","filePath":"zh/dev/contribution.md"}'),n={name:"zh/dev/contribution.md"};function r(l,t,d,c,s,u){return o(),a("div",null,t[0]||(t[0]=[i("",6)]))}const b=e(n,[["render",r]]);export{h as __pageData,b as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as e,c as o,o as a,ae as i}from"./chunks/framework.U1Gow_7P.js";const h=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/contribution.md","filePath":"zh/dev/contribution.md"}'),n={name:"zh/dev/contribution.md"};function r(l,t,c,d,s,u){return a(),o("div",null,t[0]||(t[0]=[i('<h1 id="contribution" tabindex="-1">Contribution <a class="header-anchor" href="#contribution" aria-label="Permalink to "Contribution""></a></h1><p>我们欢迎任何贡献!</p><p>请参考 <a href="./build.html">build</a> 来构建 clice</p><h2 id="code-style" tabindex="-1">Code Style <a class="header-anchor" href="#code-style" aria-label="Permalink to "Code Style""></a></h2><p>命名</p><ul><li>变量名:小写下换线</li><li>类名,枚举名:大驼峰</li></ul>',6)]))}const p=e(n,[["render",r]]);export{h as __pageData,p as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as e,c as o,o as a,ae as i}from"./chunks/framework.U1Gow_7P.js";const h=JSON.parse('{"title":"Contribution","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/contribution.md","filePath":"zh/dev/contribution.md"}'),n={name:"zh/dev/contribution.md"};function r(l,t,c,d,s,u){return a(),o("div",null,t[0]||(t[0]=[i("",6)]))}const p=e(n,[["render",r]]);export{h as __pageData,p as default};
|
||||
14
assets/zh_dev_test-and-debug.md.C2WjDAQj.js
Normal file
14
assets/zh_dev_test-and-debug.md.C2WjDAQj.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.U1Gow_7P.js";const r=JSON.parse('{"title":"Test and Debug","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/test-and-debug.md","filePath":"zh/dev/test-and-debug.md"}'),l={name:"zh/dev/test-and-debug.md"};function n(p,s,h,k,d,c){return e(),a("div",null,s[0]||(s[0]=[t(`<h1 id="test-and-debug" tabindex="-1">Test and Debug <a class="header-anchor" href="#test-and-debug" aria-label="Permalink to "Test and Debug""></a></h1><h2 id="run-tests" tabindex="-1">Run Tests <a class="header-anchor" href="#run-tests" aria-label="Permalink to "Run Tests""></a></h2><p>clice 有两种形式的测试,单元测试和集成测试。</p><ul><li>运行单元测试</li></ul><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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/unit_tests</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --test-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./tests/data"</span></span></code></pre></div><ul><li>运行集成测试</li></ul><p>我们使用 pytest 来运行集成测试,请参考 <code>pyproject.toml</code> 安装依赖的 python 库</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/bin/clice</span></span></code></pre></div><p>如果你使用 xmake 作为构建系统,可以直接通过 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:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> integration_tests/default</span></span></code></pre></div><h2 id="debug" tabindex="-1">Debug <a class="header-anchor" href="#debug" aria-label="Permalink to "Debug""></a></h2><p>如果想在 clice 上附加调试器并进行调试,推荐先单独以 socket 模式启动 clice,然后再将客户端连接到 clice 上</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=socket</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --port=50051</span></span></code></pre></div><p>在服务器启动之后,可以通过以下两种方式启动客户端连接到服务器</p><ul><li>使用 pytest 运行特定测试进行连接</li></ul><p>你可以运行一个单独的集成测试用例来连接正在运行的 clice。这对于复现和调试特定场景非常有用。</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration/test_file_operation.py::test_did_open</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=socket</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --port=50051</span></span></code></pre></div><ul><li>使用 vscode 进行实际的测试</li></ul><p>你也可以通过配置 clice-vscode 插件来连接正在运行的 clice 服务,从而在实际使用场景中进行调试。</p><ol><li><p>在插件市场下载插件 <a href="https://marketplace.visualstudio.com/items?itemName=ykiko.clice-vscode" target="_blank" rel="noreferrer">clice-vscode</a></p></li><li><p>配置 <code>settings.json</code>: 在你的项目根目录下创建 <code>.vscode/settings.json</code> 文件,并填入以下内容:</p><div class="language-jsonc vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">jsonc</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Point this to the clice binary you downloaded.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clice.executable"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/path/to/your/clice/executable"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Enable socket mode.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clice.mode"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"socket"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clice.port"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">50051</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Optional: Set this to an empty string to turn off the clangd.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clangd.path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p>重新加载窗口:修改配置后,在 vscode 中执行 Developer: Reload Window 命令使配置生效。插件会自动连接到正在 50051 端口监听的 clice。</p></li></ol><p>如果你需要修改或调试 clice-vscode 插件本身,可以按以下步骤操作:</p><ol><li><p>克隆并安装依赖:</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;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/clice-io/clice-vscode</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice-vscode</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span></code></pre></div></li><li><p>使用 vscode 打开插件项目:用一个新的 vscode 窗口打开 clice-vscode 文件夹</p></li><li><p>创建调试配置:在 clice-vscode 项目中,也创建一个 <code>.vscode/settings.json</code> 文件,内容与上方相同</p></li><li><p>按下 <code>F5</code> 键。这会启动一个【扩展开发宿主】窗口。这是一个加载了你本地 clice-vscode 插件代码的新的 vscode 窗口,在这个新窗口中打开你的 C++ 项目,它应该会自动连接到 clice</p></li></ol>`,22)]))}const g=i(l,[["render",n]]);export{r as __pageData,g as default};
|
||||
1
assets/zh_dev_test-and-debug.md.C2WjDAQj.lean.js
Normal file
1
assets/zh_dev_test-and-debug.md.C2WjDAQj.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.U1Gow_7P.js";const r=JSON.parse('{"title":"Test and Debug","description":"","frontmatter":{},"headers":[],"relativePath":"zh/dev/test-and-debug.md","filePath":"zh/dev/test-and-debug.md"}'),l={name:"zh/dev/test-and-debug.md"};function n(p,s,h,k,d,c){return e(),a("div",null,s[0]||(s[0]=[t("",22)]))}const g=i(l,[["render",n]]);export{r as __pageData,g as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
38
dev/test-and-debug.html
Normal file
38
dev/test-and-debug.html
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"design_architecture.md":"D8TKjkhM","design_compilation.md":"DgqTpBDl","design_header-context.md":"EUdQ-Lzo","design_index.md":"BgicbTS7","design_template-resolver.md":"IYEsm7Dh","dev_build.md":"DZvjJota","dev_contribution.md":"D-EaJs3t","guide_configuration.md":"BSfrI2TP","guide_quick-start.md":"B3b6j6Mp","guide_what-is-clice.md":"q1sqlvBr","index.md":"B80amafG","zh_design_architecture.md":"BVcDWyLW","zh_design_compilation.md":"DfE77o6C","zh_design_header-context.md":"BZN78X54","zh_design_index.md":"DHNbht8F","zh_design_template-resolver.md":"BdV6FoQY","zh_dev_build.md":"DUD9OdOI","zh_dev_contribution.md":"UxN4TV1f","zh_guide_configuration.md":"BnQR4J3z","zh_guide_quick-start.md":"BZnA1cly","zh_guide_what-is-clice.md":"DFkS8WKr","zh_index.md":"DOAh-Isq"}
|
||||
{"design_architecture.md":"D8TKjkhM","design_compilation.md":"DgqTpBDl","design_header-context.md":"EUdQ-Lzo","design_index.md":"BgicbTS7","design_template-resolver.md":"IYEsm7Dh","dev_build.md":"BPdhy5jH","dev_contribution.md":"DlEIMhd5","dev_test-and-debug.md":"B85mthGc","guide_configuration.md":"BSfrI2TP","guide_quick-start.md":"B3b6j6Mp","guide_what-is-clice.md":"q1sqlvBr","index.md":"B80amafG","zh_design_architecture.md":"BVcDWyLW","zh_design_compilation.md":"DfE77o6C","zh_design_header-context.md":"BZN78X54","zh_design_index.md":"DHNbht8F","zh_design_template-resolver.md":"BdV6FoQY","zh_dev_build.md":"TwBXt4g8","zh_dev_contribution.md":"DTCatoP3","zh_dev_test-and-debug.md":"C2WjDAQj","zh_guide_configuration.md":"BnQR4J3z","zh_guide_quick-start.md":"BZnA1cly","zh_guide_what-is-clice.md":"DFkS8WKr","zh_index.md":"DOAh-Isq"}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
38
zh/dev/test-and-debug.html
Normal file
38
zh/dev/test-and-debug.html
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user