第16回 自作OSもくもく会 - カーネル開発でのcompilation database活用
https://gyazo.com/910c108c87c522911754601e7a2b2162
$ whoami
芦原渉(あしはらわたる)
wataash(わたあしゅ)
#osdev_moku2 初参加
2016年4月にISPに新卒入社、NetBSDを使ったルーターの開発チームに入る
Cチョットデキナイ
C歴 ≈ 社会人歴
配属後の研修で、「staticって何ですか?」と聞いて先輩たちを震撼させる()
kernel複雑すぎてコードジャンプしんどい問題
ソース構造
code:hs
~/src/netbsd/src/sys/ kernelソース
~/src/netbsd/src/sys/dev/usb/ehci.c 今回ちょっと読むソース
~/src/netbsd/obj.amd64/ ビルド生成物
code:dev/usb/ehci.c
<machine/endian.h> がどこにあるのか探してみる
demo
code:sh
# kernelのcscope.out生成
cd ~/src/netbsd/src/sys/
cscope -R -b # cscope.out 199MiB
spacemacs dev/usb/ehci.c
code:hs
helm-cscope-find-this-file
arch/hpc/stand/include/machine/endian.h
arch/hpcmips/stand/include/machine/endian.h
hpcじゃなくてamd64なのですが…?
code:sh
# なんと <machine/endian.h> はビルド生成物のシンボリックリンクを指している
find -L ~/src/netbsd/obj.amd64/machine/endian.h
# ~/src/netbsd/obj.amd64/sys/arch/amd64/compile/GENERIC/machine/endian.h
ls -Fl ~/src/netbsd/obj.amd64/sys/arch/amd64/compile/GENERIC/machine
# symlink to ~/src/netbsd/src/sys/arch/amd64/include/
build-netbsd
# x86_64--netbsd-gcc -mcmodel=kernel ... -I. -c /home/wsh/src/netbsd/src/sys/dev/usb/ehci.c -o ehci.o
# このときcwdは ~/src/netbsd/obj.amd64/sys/arch/amd64/compile/GENERIC/ なので、
# <machine/endian.h> は ./machine/endian.h になる
compilation database
demo
compile_commands.json デカすぎ問題
linux kernelはかなりキツい
クロスプラットフォーム開発で compile_commands.json 作るのダルすぎ問題
vim・emacs・その他テキストエディタでcompiledbを使っている方がいたら、ノウハウを教えて頂きたく、良ければこの後教えて下さい m(_ _)m