Friday, 26 July 2019

cmake sub project

cmake は、普通に使ってる分には簡単で良いんですが、

  xv6 の cross compile build に使う

さすがに、いろいろ混迷。mkfs は普通のコマンドだったりするし。

cross compiler の指定とかは cmake コマンドライン オプションで渡すのが良いらしい。CMakeList.txt の実装依存が少し減るので。

まあ、でも、あまり意味はないんですけどね。

usr command の compiler option は kernel のとは別。

さらに、link の command line は、さらに特別。

なので、これらすべてを生成する perl script を書いて、cmake を呼び出すことに。

で、だいたい動いたんですが、

  user command を含む fs.img を作って、それを kernel にlinkする方式

なんだけど、kernel が先に作られてしまう。add_subdirectory した sub project への dependency はどうするの?

なんですが、生成された Makefile を見ると、top の Makefileに

  fs.img : ....

とか書いてある。make fs.img とかすると作りにいく。ってことは、

  add_custom_command {
    DEPENDS fs.img
    ...

で良いらしい。add で定義された TARGET は、top level の Makefile に全部定義されるわけね。

あと、BINARY_DIR とかをちゃんと参照してなくて、off the shelf な build でない。つまり、

   mkdir build
   (cd build ; cmake ../xv6-source)

みたいな使い方ができないみたい。cmake . だけ。

しかし、うっかり cmake 使ってしまいましたが、それが正解だったかどうかは... 疲れる〜

No comments: