# 1. commit 规则 - 每个人 fork 自己的 branch, 从自己的 branch 做 PR,review 完再 commit # 2. code format ## 2.1. C 推荐使用 clang-format,公共配置放在源码里面 xce/.clang-format (理论上直接使用源码里面 xce/.clang-format 文件格式不会变) ### 2.1.1. vscode 可以在配置中加上如下内容 ``` "C_Cpp.clang_format_style": "WebKit", "C_Cpp.clang_format_fallbackStyle": "WebKit", ``` ### 2.1.2. vim & emacs clang-format -style="{BasedOnStyle: webkit}" -i XX.c ## 2.2. golang 使用默认 gofmt # 3. build environment and build (example of ubuntu) ## 3.1 build environment - Install nix package management tool ```sh sh <(curl -L https://nixos.org/nix/install) --daemon ``` - Edit /etc/nix/nix.conf to make sure ``` experimental-features = nix-command flakes sandbox = true sandbox-fallback = false substituters = https://mirrors.ustc.edu.cn/nix-channels/store https://cache.nixos.org https://cache.nixos.org/ trusted-users = root ``` make sure that you have restarted nix-daemon service after you have changed /etc/nix/nix.conf - Install socat and config ssh (for clone by ssh protocol) ```sh nix profile add nixpkgs#socat ``` .ssh/config ``` Host gitea.shenrs.eu HostName gitea.shenrs.eu IdentityFile ~/.ssh/id_ed25519 ProxyCommand socat - openssl-connect:gitea.shenrs.eu:2022,snihost=gitea.shenrs.eu,verify=0 ``` ## 3.2 checkout source code ```sh git clone ssh://forgejo@gitea.shenrs.eu/rshen/xce.git cd xce ``` (参考第 1 节,fork 自己的 branch 再提交 PR) ## 3.3 build (for package and release) ```sh cd xce/src # for build debug version nix build --option sandbox false .#xcecore_debug # for normal build nix build --option sandbox false .#xcecore ``` You can find the generated binaries at =result= directory ## 3.4 build (for daily develop) 日常开发推荐直接使用 `src/tools/xce-build.sh`(若在 Claude Code 中开发,对应的是 `/xce-build` skill), 它会执行 `meson setup` / `meson compile`,并在 `asan` profile 下跑测试。**注意它自己不会进入 `nix develop` 环境**,需要先手动 `nix develop`,或者用 `nix develop --command` 包一层: ```sh cd xce/src nix develop tools/xce-build.sh # 全部组件 + 全部测试 (asan profile, 输出到 xce.build/) tools/xce-build.sh controller # 只构建/测试 controller (lib + controller + xce_test) tools/xce-build.sh worker # 只构建 worker tools/xce-build.sh scheduler # 只构建/测试 scheduler tools/xce-build.sh apiserver # 只构建/测试 apiserver + xcecli (Go) ``` 或者不进入交互式 shell,直接一条命令跑: ```sh cd xce/src nix develop --command tools/xce-build.sh controller ``` 支持三种 profile(`tools/xce-build.sh [component] [profile]`): - `asan`(默认):debug + AddressSanitizer,输出目录 `xce.build/`,会运行测试 - `debug`:`-O0 -g3` 无 sanitizer,输出目录 `build.dbg/`,仅编译,用于 gdb 调试 - `release`:`-O3` 无 sanitizer,输出目录 `build.release/`,仅编译,用于 soak/性能测试 注意:单组件构建默认会先 `rm -rf` 对应的 build 目录再重新配置,若同一目录下已有其他组件的产物会被清掉; 需要在同一目录下累积多个组件时加 `--incremental`(增量 reconfigure,不清空目录)。 也可以手动执行底层的 nix + meson 命令(`xce-build.sh` 实际上就是对下面步骤的封装): ```sh cd xce/src nix develop # using meson to generated build configuration (debug and address sanitize) meson setup xce.build --buildtype=debug -Db_sanitize=address # run meson to build meson compile -C xce.build # The generated files will be in xce.build/ ``` ## 3.5 build AppImage package ```sh cd xce/src nix bundle --bundler github:ralismark/nix-appimage --option sandbox false .#xce ``` This will create all in one AppImage file which contains everything for package delivery. # 4. misc ## 4.1. Windows remap ctrl and alt key create a reg file, e.g. remapkey.reg ``` Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,05,00,00,00,38,00,1d,00,1d,00,38,00,38,e0,1d,e0,1d,e0,38,e0,00,00,00,00 ``` then double click remapkey.reg to import it. Restart OS.