Meson /ˈmɛ.sɒn/ は、ビルド自動化のためのソフトウェアです。Meson は直接ソフトウェアをビルドするのではなく、Linux では Ninja のビルドファイルを生成します。
今回は、Linux 上で Meson を使ってビルドするプログラムを、Windows 上でも使えるように Linux 上でクロスコンパイルをして、Wine で動作確認をした例を紹介します。
使用した OS 環境は下記の通りです。
Fedora Workstation 32 | x86_64 |
インストールの詳細は割愛しますが、Meson, Vala が使えることに加えて、mingw-w64(以下、MinGW64)のクロスコンパイル環境が使えることを前提としています。
※ sudo dnf install mingw64-* で MinGW64 の関係パッケージを全部インストールして、約 3GB です。
Vala の電卓プログラム
今回も github にある下記の Vala の電卓プログラムをサンプルとして使用します。
具体的には次のようにしてクローンし、クローンしたディレクトリ vala-calculator で作業をすることにします。
[bitwalk@fedora-pc Projects]$ git clone https://github.com/bitwalk123/vala-calculator.git Cloning into 'vala-calculator'... remote: Enumerating objects: 60, done. remote: Counting objects: 100% (60/60), done. remote: Compressing objects: 100% (47/47), done. remote: Total 60 (delta 23), reused 47 (delta 10), pack-reused 0 Receiving objects: 100% (60/60), 80.79 KiB | 424.00 KiB/s, done. Resolving deltas: 100% (23/23), done. [bitwalk@fedora-pc Projects]$ cd vala-calculator [bitwalk@fedora-pc vala-calculator]$ ls README.md data meson.build mingw64.ini vala-calculator.vala [bitwalk@fedora-pc vala-calculator]$
Meson でクロスビルド
クロスコンパイルの設定ファイル
MinGW64 のクロスコンパイル用に、下記のような設定ファイル mingw64.ini を使います [1]。この設定ファイルが、クロスコンパイルの要になります。
クロスビルドとインストール
次のようにビルドして、ユーザーアカウント内の $HOME/test へインストールします。
[bitwalk@fedora-pc vala-calculator]$ meson --cross-file mingw64.ini builddir The Meson build system Version: 0.55.0 Source dir: /home/bitwalk/Projects/vala-calculator Build dir: /home/bitwalk/Projects/vala-calculator/builddir Build type: cross build Project name: Vala Calculator Project version: 0.1 C compiler for the build machine: ccache cc (gcc 10.2.1 "cc (GCC) 10.2.1 20200723 (Red Hat 10.2.1-1)") C linker for the build machine: cc ld.bfd 2.34-4 Vala compiler for the build machine: valac (valac 0.48.8) C compiler for the host machine: x86_64-w64-mingw32-gcc (gcc 9.2.1 "x86_64-w64-mingw32-gcc (GCC) 9.2.1 20190827 (Fedora MinGW 9.2.1-6.fc32)") C linker for the host machine: x86_64-w64-mingw32-gcc ld.bfd 2.32 Vala compiler for the host machine: valac (valac 0.48.8) Build machine cpu family: x86_64 Build machine cpu: x86_64 Host machine cpu family: x86_64 Host machine cpu: x86_64 Target machine cpu family: x86_64 Target machine cpu: x86_64 Found pkg-config: /usr/bin/x86_64-w64-mingw32-pkg-config (0.28) Run-time dependency glib-2.0 found: YES 2.63.5 Run-time dependency gobject-2.0 found: YES 2.63.5 Run-time dependency gtk+-3.0 found: YES 3.24.13 Build targets in project: 2 Found ninja-1.10.0 at /usr/bin/ninja [bitwalk@fedora-pc vala-calculator]$ DESTDIR=$HOME/test ninja -C builddir install ninja: Entering directory `builddir' [6/7] Installing files. Installing libcalculator.dll to /home/bitwalk/test/usr/local/bin Installing libcalculator.dll.a to /home/bitwalk/test/usr/local/lib Installing calculator.h to /home/bitwalk/test/usr/local/include Installing calculator-1.0.vapi to /home/bitwalk/test/usr/local/share/vala/vapi Installing calculator.exe to /home/bitwalk/test/usr/local/bin [bitwalk@fedora-pc vala-calculator]$
コンパイラなどのビルドツールが変わっただけで、Linux ネイティブなアプリをビルドするときと流れは同じです。
Wine で動作確認
環境変数 PATH の設定
ビルドしたバイナリの動作確認をする前に、MinGW64 のランタイムライブラリ (DLL) へのパスを通しておく必要があります。
まず winepath コマンドで、MinGW64 の bin ディレクトリ (/usr/x86_64-w64-mingw32/sys-root/mingw/bin) が Wine 上のパスでどのように表現されるのかを確認します。
[bitwalk@fedora-pc vala-calculator]$ winepath -w /usr/x86_64-w64-mingw32/sys-root/mingw/bin 002c:fixme:winediag:__wine_start_process Wine Staging 5.14 is a testing version containing experimental patches. 002c:fixme:winediag:__wine_start_process Please mention your exact version when filing bug reports on winehq.org. Z:\usr\x86_64-w64-mingw32\sys-root\mingw\bin [bitwalk@fedora-pc vala-calculator]$
Wine のレジストリエディタ (regedit) を起動して、HKEY_CURRENT_USER\Environment に環境変数 PATH を設定し、調べたパスを入力します。
日本語環境の特有な事情だと思いますが、バックスラッシュ \ は、Wine では表示上 ¥ になります。
※ 環境によっては、もしかするとバックスラッシュとして表示した文字の方が円記号に表示されてしまっているかもしれません。
ビルドしたバイナリの動作確認
インストールした先に作業ディレクトリを移して、ビルドした calculator.exe を実行してみます。
[bitwalk@fedora-pc vala-calculator]$ cd $HOME/test [bitwalk@fedora-pc test]$ ls usr [bitwalk@fedora-pc test]$ cd usr [bitwalk@fedora-pc usr]$ ls local [bitwalk@fedora-pc usr]$ cd local/bin [bitwalk@fedora-pc bin]$ ls calculator.exe libcalculator.dll [bitwalk@fedora-pc bin]$ ./calculator.exe 002c:fixme:winediag:__wine_start_process Wine Staging 5.14 is a testing version containing experimental patches. 002c:fixme:winediag:__wine_start_process Please mention your exact version when filing bug reports on winehq.org. 00b8:fixme:dwmapi:DwmIsCompositionEnabled 000000000031F1CC
コンソール上にはなにやらメッセージが出ますが電卓の GUI が表示されました。
Windows 用に配布する際はどうするか?
ただ動作させるだけであれば、MinGW64 のランタイム DLL をごっそりコピーしてパスを通せば、とりあえず出来そうです。しかし、オープンソースの配布条件に、理解できる可能な限り、沿った方法にしたいこと、また、アプリが必要な DLL だけをピックアップしたいことの二点に対応したいので、調査、準備をしてから、あらためて後日、ブログ記事にします。
ちなみに、クロスコンパイラ関係のパッケージを、例えば binutils と Cross をキーワードにして確認すると、多くのアーキテクチャのものが表示されて、その数の多さに驚きます。
[bitwalk@fedora-pc ~]$ sudo dnf search binutils Cross
メタデータの期限切れの最終確認: 0:30:07 時間前の 2020年08月16日 21時07分21秒 に実施しました。
=============================================== Name & Summary 一致: Cross, binutils ===============================================
cross-binutils-common.noarch : Cross-build binary utility documentation and translation files
arm-none-eabi-binutils-cs.x86_64 : GNU Binutils for cross-compilation for arm-none-eabi target
avr-binutils.x86_64 : Cross Compiling GNU binutils targeted at avr
mingw32-binutils.x86_64 : Cross-compiled version of binutils for the Win32 environment
mingw64-binutils.x86_64 : Cross-compiled version of binutils for the Win64 environment
binutils-aarch64-linux-gnu.x86_64 : Cross-build binary utilities for aarch64-linux-gnu
binutils-alpha-linux-gnu.x86_64 : Cross-build binary utilities for alpha-linux-gnu
binutils-arc-linux-gnu.x86_64 : Cross-build binary utilities for arc-linux-gnu
binutils-arm-linux-gnu.x86_64 : Cross-build binary utilities for arm-linux-gnu
binutils-avr32-linux-gnu.x86_64 : Cross-build binary utilities for avr32-linux-gnu
...
(以下省略)
...
参考サイト
にほんブログ村
0 件のコメント:
コメントを投稿