Cross-compile chromium/Win

chromium

chromium クロスコンパイル(Linux で Windows の実行ファイルをビルドする)

chromium クロスコンパイル (Windows 実行ファイルを Linux でビルド)
Cross-compiling chrome/win” を参照してビルドします。

ところでCross-compiling chrome/Win を参照すると、多くの開発者は Linux/Mac で開発を行っているようです。クロスコンパイル環境でビルドする理由は一つのソースで実行するOSが複数あるだと思います。従って、本格的に chromium から派生したソースでブラウザを開発する際はクロスコンパイル環境は必須になると思われます。

制限事項

クロスコンパイル環境にはいくつかの制限事項が存在します。以下以外にもあるかも知れません。

  • js2gtest が省略されます。
  • macでは 32bit 実行ファイルがビルドされません。

[Linux] .gclient setup

1. linux 環境側で一度ビルドする際に作成された .gclient の最後に target_os = [‘win’] を追加します。

solutions = [
  {
    "name": "src",
    "url": "https://chromium.googlesource.com/chromium/src.git",
    "managed": False,
    "custom_deps": {},
    "custom_vars": {},
  },
]
target_os = ['win']

2. gclient sync を実行します。

[Windows] VisualStudioとWindowsSDKをパッケージ化

Windows 環境側で chromium がビルド可能になる状況まで構築します。
以下のインストールが必要ですが、詳細は こちら を参照してください。

  • VisualStudio 2022 のインストール
  • Windows SDK のインストール
  • depot_tools のインストール
  • chromium ソースコードの fetch

DOS プロンプトで以下のコマンドを実行します。

C:\>cd C:\src\depot_tools\win_toolchain
C:\src\depot_tools\win_toolchain>python3 package_from_installed.py 2022 ^
-w 10.0.22621.0 --noarm

–noarm の意味は x64/x86 のWindows(ARMではないということ)を指定しています。また、もしエラーが発生する場合は “C:\Program Files (x86)\Microsoft Visual Studio\Installer” を環境変数 Path へ追加します。

この処理が終了すると 63bb628662.zip のような zip ファイルが生成されています。63bb628662の部分はハッシュ値を表しています。このファイルをクロスコンパイル環境であるLinuxへ配置した後、以下の二つの環境変数を設定します。

  • 一つ目の環境変数は 63bb628662.zip の配置先です。ここで配置先は /home/ichino/win_toolchain とします。
  • 二つ目はクロスコンパイル環境と 63bb628662.zip のつなぎ合わせです。 TOOL_CHAIN_HASHは chromium/src/build/vs_toolchain.py にハードコーディングされていますので、その値をそのまま使用します。
# Linux のクロスコンパイル環境で以下の環境変数を設定する
#export DEPOT_TOOLS_WIN_TOOLCHAIN_BASE_URL=<base url>
#export GYP_MSVS_HASH_<TOOLCHAIN_HASH>=<bash value>

# 私の環境 一度実行した後で .bashrc に追加しておきます。
$ export DEPOT_TOOLS_WIN_TOOLCHAIN_BASE_URL=63bb628662
$ export GYP_MSVS_HASH_27370823e7=63bb628662

環境変数が設定できたら gclient sync を実行して、クロスコンパイル環境へ適用させます。なお、実行する際のフォルダは src のある個所で行います。

以下が実行時のログです。使用しないソースがあることの WARNING が出ていますが、一旦無視します。

$ ~/chromium gclient sync
Updating depot_tools...
Syncing projects: 100% (163/16), done.

WARNING: 'src/buildtools/clang_format/script' is no longer part of this client.
It is recommended that you manually remove it or use 'gclient sync -D' next time.

WARNING: 'src/third_party/centipede/src' is no longer part of this client.
It is recommended that you manually remove it or use 'gclient sync -D' next time.

WARNING: 'src/third_party/pefile' is no longer part of this client.
It is recommended that you manually remove it or use 'gclient sync -D' next time.
Running hooks: 100% (145/145), done.     

[Linux] .gn ファイルをクロスコンパイル用に生成する

gn コマンドでコンパイル環境へ実行時のOSとCPUを指示します。具体的には以下のコマンドラインを実行します。

$ cd ~/chromium/src
$ gn gen out/gnwin --args='target_os="win" target_cpu="x64"'

[Linux] windows の mini_installer.exe をビルドする

以下のコマンドで mini_installer.exe をビルドします。

$ ninja -C out/gnwin mini_installer

もしビルドを中断することがあった場合は、再度 gclient sync を実行した後に改めて以下のコマンドを実行します。

ビルドが正常に終了していることを確認したら、out/gnwin に mini_installer.exe が生成されています。これを windows へもっていき、インストールすることで linux でクロスコンパイルした windows 用の chromium が使えるようになります。