關於 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_DIR
及 fuchsia.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"]
}
}
}
Visual Studio Code 設置
VS Code 設置上比較簡單,基本上只要把 vscode-clangd 安裝起來並確保 Fuchsia 自帶的 clangd
可以在 PATH
裡找到就可以用了。使用速度上雖然比起 Vim 遲鈍了一些,但整體流暢度還是可是在我可以接受的範圍。