FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LLVM本サポートサイトにけるLLVMリポジトリとの対応表の作成を自動化する

LLVM+RISC-V本のサポートが最近できていなくてIssueが溜まっていたのだが、いくつかLLVM側の実装ミスがあり、サンプルコードをリビルドする必要が生じた。

LLVMサンプルリポジトリは、作業の分岐などを全く発生させずにストレートに伸ばしている。 また、実装部分を明快にするためにバグがあったとしても個別のコミットを生成せずに、そのバグに関連するコミットを一度作り直している。 これにより、実装コミットには、基本的にはバグが存在せず、後続のバグコミットを検索しなくても良いようにしている。

問題は、もしバグがあってそれに関連する実装コミットごと作り直した場合、リビジョンIDがすべて更新されてしまうことだ。 これにより、今まで使用していたGitのリビジョンIDがすべて失われてしまう。 これが、本書において実装コミットのリビジョンIDを記載しなかった理由だ。

しかしサポートサイト側には、本書における実装とそれに相当するサンプルリポジトリのリビジョンIDを記載している。

github.com

このページに記載しているリビジョンIDは、LLVMリポジトリを作り直すたびに更新しなければならない。 これを自動化するためのスクリプトを作っておいた。

やっていることは単純で、コミットメッセージをページ内から検索して、該当するメッセージをLLVMリポジトリから探し出してリビジョンIDを抜き出し、ページを置き換えるだけだ。

  if line =~ /revision:/ then
    message = line.gsub('- revision:','').gsub(/^ +/, '').gsub(/\n/, '')
    puts message
    command = "cd ../llvm-myriscvx120 && git log --oneline --grep=\"#{message}\""
    git_log = `#{command}`
    revision = git_log.split(' ')[0]
    puts revision
    o.puts line.gsub(/revision:.+/, "`#{revision.to_s}`")
  else
    o.puts line
  end

いままで面倒だった更新作業が、これでだいぶ楽になるはずだ。