關於 Fuchsia

Fuchsia 是 Google 開發中的新作業系統,它的底層原始碼可以到 https://fuchsia.googlesource.com 公開下載。雖然 Google 對外宣稱 Fuchsia 是個實驗性質的專案,但蠻多人認為它有潛力成為 Google 的大一統 OS,慢慢取代掉 Android 或 Chrome OS,姑且不論這是否會發生,對於喜歡研究系統軟體或嵌入式軟體技術的開發人員,Fuchsia 可以讓你一窺如何打造一個現代化的 OS。

Fuchsia 的開發環境

目前 Fuchsia OS 可以在 Linux 或 macOS 上編譯,這篇主要是分享在 macOS 上建置 C++ 的 OS 開發環境的經驗,包括:

  • 基本的編輯器 (Vim 及 Visual Studio Code) 設置
  • Code completion 的設置
  • 使用 direnv 來實現設置自動化

編輯器選擇

我的環境建置基本是根據這份官方提供的 C++ Editor/IDE Setup 指南,裡面有提到 CLion, Vim, 以及 Visual Studio Code,試用過後個人推薦 Vim > VS Code >> CLion,主要還是因為個人開發時通常只會需要修改全部 code base 的極小一部份,小巧的編輯器使用體驗會比較流暢,也不會耗用太多的機器資源去處理不會修改的部份。

而開發必備的 code completion 功能,個人推薦使用 compilation database + clangd 的設置。

Vim 設置

Vim 版本

推薦使用 Vim >= 8.1 或是最新的 Neovim (我目前用 v0.3.7)。

FUCHSIA_DIRfuchsia.vim

Fuchsia 預設提供了一些 Vim 專用的設定,在 ~/.vimrc 裡套用這些設定的修改如下:

if $FUCHSIA_DIR != ""
  source $FUCHSIA_DIR/scripts/vim/fuchsia.vim
endif

我不喜歡每次手動設置 export FUCHSIA_DIR=/path/to/fuchsia-dir,也不喜歡直接修改 ~/.bashrc,所以用 direnv (直接用 Homebrew 安裝) 在進目錄時自動套用設定。

path/to/fuchsia-dir/.envrc 加入:

# For VIM to find fuchsia.vim
export FUCHSIA_DIR=`pwd`

之後 cd 進去就會幫你把 FUCHSIA_DIR 的環境變量設定好了。

Code Completion 設置

前置準備

確認 fx build 是成功的,然後使用 fx compdb 產生 compile_commands.json

Language Server clangd

同樣利用 direnv 來套用 PATH 的修改,因此新增這一行到 path/to/fuchsia-dir/.envrc :

export PATH=$FUCHSIA_DIR/buildtools/mac-x64/clang/bin:$PATH

目的是讓 Vim 優先使用 Fuchsia 自帶的 clangd,否則使用其他版本的 clangd 可能會有 C++ 編譯的問題產生。

Conquer of Completion (CoC)

因為 YCM 其實有點肥大,安裝上也比較麻煩,我現在比較喜歡用 Coc,Coc 的詳細配置可以參考 How to Set Up Code-Completion for Vim in macOS

基本上在 Vim 裡執行 :CocConfig 把以下配置填上應該就行了。

{
  "languageserver": {
    "clangd": {
      "command": "clangd",
      "rootPatterns": ["compile_flags.txt", "compile_commands.json", ".vim/", ".git/", ".hg/"],
      "filetypes": ["c", "cc", "cpp", "objc", "objcpp"]
    }
  }
}

簡單示範

Code completion 運作的狀況:

Visual Studio Code 設置

VS Code 設置上比較簡單,基本上只要把 vscode-clangd 安裝起來並確保 Fuchsia 自帶的 clangd 可以在 PATH 裡找到就可以用了。使用速度上雖然比起 Vim 遲鈍了一些,但整體流暢度還是可是在我可以接受的範圍。