ラベル athrill の投稿を表示しています。 すべての投稿を表示
ラベル athrill の投稿を表示しています。 すべての投稿を表示

2020年10月4日日曜日

Athrill2 の deb パッケージ作成を git-buildpackage で管理する

前回、 Athrill の deb パッケージ作成手順を確立したので、今回はそれを git-buildpackage で管理するための手順を確認する。

作業用コンテナ立ち上げ

cowbuilder 実行の権限を渡すために --privileged オプションを付けてコンテナ起動。

docker run -it --rm -v "$(pwd):/work" --workdir="/work" --privileged ubuntu:18.04

deb パッケージの作成に必要な環境を構築

# deb パッケージビルドに必要な環境変数を設定
export DEBFULLNAME="mikoto2000"
export DEBMAIL=mikoto2000@gmail.com
export LONGNAME="mikoto2000"
export USER="mikoto2000"

# tzdata の configuration が走るので、 Azia/Tokyo を選択して(Geographic area: 6, Time zone: 79)
export TZ=Asia/Tokyo
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 必要なパッケージのインストール
apt-get update
apt-get install -y build-essential dh-make git-buildpackage fakeroot devscripts pbuilder cdbs git vim cowbuilder

git config --global user.name "mikoto2000"
git config --global user.email "mikoto2000@gmail.com"

deb パッケージビルドに必要なファイル群の取得・生成

# deb パッケージ用のディレクトリ作成
mkdir athrill-rh850f1x
cd athrill-rh850f1x
git init
git commit --allow-empty -m 'Initial commit.'

# オリジナルのソースコード取得
git submodule add https://github.com/toppers/athrill.git
git submodule add https://github.com/toppers/athrill-target-rh850f1x.git
git commit -m 'Added upstream sources.'

# 作業用ブランチ作成
git checkout -b add_debian_directory

# deb パッケージに必要なファイル群を生成
dh_make --createorig -s -e ${DEBMAIL} -p athrill-rh850f1x_0.A.0 -y
git add debian
git commit -m 'Added debian directory.'

# サンプルファイル類削除
rm -rf debian/*.ex
rm -rf debian/*.EX
rm -rf debian/README.*
rm -rf debian/athrill-rh850f1x-docs.docs

メタデータ編集

debian/control

Source: athrill-rh850f1x
Section: misc
Priority: optional
Maintainer: kanetugu2015 <kanetugu2015@gmail.com>
Bugs: https://github.com/toppers/athrill-target-rh850f1x
Build-Depends: cdbs, debhelper (>= 10)
Standards-Version: 4.1.2
Homepage: https://github.com/toppers/athrill-target-rh850f1x

Package: athrill-rh850f1x
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Athrill emulator for RH850F1x.
 Athrill core version: 1.1.1

コピーライト修正

debian/copyright

TOPPERS ライセンスに修正。

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: athrill-terget-rh850f1x
Source: https://github.com/toppers/athrill-target-rh850f1x

Files: *
Copyright: 2019 by Center for Embedded Computing Systems
                     Graduate School of Informatics, Nagoya Univ., JAPAN
           2019 by ESM, Inc.
License: TOPPERS License
 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
 再配布(以下,利用と呼ぶ)することを無償で許諾する.
 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     表示,この利用条件および下記の無保証規定が,そのままの形でソース
     コード中に含まれていること.
 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     証規定を掲載すること.
 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     できない形で再配布する場合には,次のいずれかの条件を満たすこと.
   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
       権表示,この利用条件および下記の無保証規定を掲載すること.
   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
       告すること.
 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.

 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
 びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
 る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
 により直接的または間接的に生じたいかなる損害に関しても,その責任を負
 わない.

ビルドスクリプト修正

debian/rules

#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk

install/athrill-rh850f1x::
    install -pd $(DEB_DESTDIR)/usr/bin
    install -pm 755 athrill/bin/linux/athrill2 $(DEB_DESTDIR)/usr/bin/athrill2-rh850f1x
    install -pd athrill-target-rh850f1x/params/rh850f1k/* $(DEB_DESTDIR)/usr/share/doc/athrill/params/rh850f1k

build/athrill-rh850f1x::
    cd athrill-target-rh850f1x/build_linux; make

バイナリファイルのホワイトリスト作成

debian/source/include-binaries

athrill/bin/linux/athrill2

changelog を修正

debian/changelog

athrill-rh850f1x (0.A.0-1) unstable; urgency=medium

  * Initial release.

 -- mikoto2000 <mikoto2000@gmail.com>  Sun, 04 Oct 2020 10:14:22 +0900

メンテナースクリプトの作成

debian/postinst

インストール後に、 update-alternativesathrill2 コマンドを登録

update-alternatives --install /usr/bin/athrill2 athrill2 /usr/bin/athrill2-rh850f1x 10

debian/prerm

アンインストール前に、 update-alternatives で登録した athrill2 設定を削除

update-alternatives --install /usr/bin/athrill2 athrill2 /usr/bin/athrill2-rh850f1x 10

修正をコミット

git add .
git commit -m 'Update debian directory for athrill.'
dpkg-source --commit

ビルド

cowbuilder でクリーンなビルド環境を作って、その中でビルド。

# ビルド環境を作る
cowbuilder --create --basepath /var/cache/pbuilder/bionic.cow --distribution bionic

# ビルド
gbp buildpackage -us -uc --git-pristine-tar-commit --git-pbuilder --git-pbuilder-options=" --basepath /var/cache/pbuilder/bionic.cow --source-only-changes" --git-tag --git-ignore-new --git-upstream-tag=add_debian_directory
  • add_debian_directory: deb パッケージを作る際の元ネタに使うブランチを指定

ビルドが実行され、以下 3 つが生成される。

  • athrill_0.A.0-1_amd64.deb
  • タグ debian/0.A.0-1
  • ブランチ pristine-tar

マージ, push

  1. add_debian_directorymaster へマージ(GitHub なら Pull Request 出したり)
  2. リモートリポジトリがあるならタグ・ブランチを push
    • debian/0.A.0-1
    • pristine-tar

この作業で作ったリポジトリが以下。

mikoto2000/athrill-target-rh850f1x-deb: athrill-target-rh850f1x deb package.

おまけ

以上。

参考資料

2019年2月9日土曜日

Renesas V850 64bit Linux 版ツールチェインの Docker イメージを作る

Dockerfile の作り方

基本的に前回の記事を Dockerfile に落とし込むだけ。

記事からの変更点は以下の通り。

  • ダウンロードする場所を最初から / にした

cd は、 RUN ではなくて Dockerfile の WORKDIR コマンドで行う。

実行環境の構築

追加の作業として、ビルドした成果物のバイナリとライブラリのみを実行用環境にコピーする。

こうすることで、実行環境のコンテナイメージのサイズ削減ができる

使用ライブラリの特定

ldd を使って、各バイナリがどのライブラリを使用しているか確認する。

# ldd /usr/local/bin/* | grep ".so" | cut -d '(' -f -1 | sort -u
        /lib64/ld-linux-x86-64.so.2
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6
        linux-vdso.so.1
# ldd /lib64/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/x86_64-linux-gnu/libm.so.6 /lib/x86_64-linux-gnu/libstdc++.so.6 | grep ".so" | cut -d '(' -f -1 | sort -u
        /lib64/ld-linux-x86-64.so.2
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
        linux-vdso.so.1

ということで、この辺があれば良さそう。

  • /lib64/ld-linux-x86-64.so.2
  • /lib/x86_64-linux-gnu/libc.so.6
  • /lib/x86_64-linux-gnu/libdl.so.2
  • /lib/x86_64-linux-gnu/libgcc_s.so.1
  • /lib/x86_64-linux-gnu/libm.so.6
  • /lib/x86_64-linux-gnu/libstdc++.so.6

buster-slim には全部入っている。

完成した Dockerfile

# ビルド環境を構築してビルド
FROM debian:buster-slim as build-env

LABEL maintainer "mikoto2000 <mikoto2000@gmail.com>"
LABEL version="v14.01"
LABEL description "Runesas V850 Toolchain v14.01(fromhttps://gcc-renesas.com/ja/v850/v850-download-toolchains/)"

RUN apt-get update \
    && apt-get -y install \
        build-essential \
        libgmp-dev \
        libmpfr-dev \
        libmpc-dev \
        texinfo \
        wget \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# ツールチェインのソース取得
WORKDIR /
RUN wget https://gcc-renesas.com/downloads/d.php?f=v850/binutils/14.01/binutils-2.24_v850_v14.01.tar.bz2 -O binutils-2.24_v850_v14.01.tar.bz2
RUN tar xf binutils-2.24_v850_v14.01.tar.bz2
RUN wget https://gcc-renesas.com/downloads/d.php?f=v850/gcc/14.01/gcc-4.9.2_v850_v14.01.tar.bz2 -O gcc-4.9.2_v850_v14.01.tar.bz2
RUN tar xf gcc-4.9.2_v850_v14.01.tar.bz2
RUN wget https://gcc-renesas.com/downloads/d.php?f=v850/newlib/14.01/newlib-2.1.0_v850_v14.01.tar.bz2 -O newlib-2.1.0_v850_v14.01.tar.bz2
RUN tar xf newlib-2.1.0_v850_v14.01.tar.bz2

# binutils のビルド
RUN mkdir -p /build/binutils
WORKDIR /build/binutils
RUN ../../binutils-2.24/configure --target=v850-elf --prefix=/usr/local --enable-soft-float
RUN make CFLAGS="-Wno-cast-function-type -Wno-implicit-fallthrough -Wno-shift-negative-value -Wno-unused-value -Wno-pointer-compare"
RUN make install


# gcc のビルド
RUN mkdir -p /build/gcc
WORKDIR /build/gcc
RUN ../../gcc-4.9.2/configure --target=v850-elf --prefix=/usr/local --enable-languages=c,c++ --disable-nls --disable-multilib --disable-libssp --with-newlib --with-headers=/newlib-2.1.0/newlib/libc/include
RUN make CXXFLAGS="-std=c++03"
RUN make install


# newlib のビルド
RUN mkdir -p /build/newlib
WORKDIR /build/newlib
RUN ../../newlib-2.1.0/configure --target=v850-elf --prefix=/usr/local
RUN make
RUN make install


# 実行環境を構築してビルド環境からバイナリをコピー
FROM debian:buster-slim

LABEL maintainer "mikoto2000 <mikoto2000@gmail.com>"
LABEL version="v14.01"
LABEL description "Runesas V850 Toolchain v14.01(fromhttps://gcc-renesas.com/ja/v850/v850-download-toolchains/)"

# build-env から必要なファイルをコピー
COPY --from=build-env \
    /usr/local \
    /usr/local

# make くらい必要でしょ?
RUN apt-get update \
    && apt-get -y install \
        make \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

イメージのビルド

cd /PATH/TO/Dockerfile
docker build -t mikoto2000/v850-toolchain:latest .

動作確認

# cd /athrill/sample/barmetal/step2/
# make clean all
rm -f start.o vector.o training.o main.o test_suite.o test_instruction.o test_main.elf *.map
v850-elf-gcc -c -I. -I../common -I../../../trunk/src/config/target/v850esfk3 -O0 -mdisable -callt -mno-app-regs -mtda=0 -gdwarf-2 -Wall -Wno-unused-label -Wpointer-arith  -mv850e2 -Wa,-mno-bcond17 -Wa,-mwarn-signed-overflow -Wa,-mwarn-unsigned-overflow start.S
/usr/local/libexec/gcc/v850-elf/4.9-GNUV850_v14.01/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
make: *** [../build/v850esfk3/Makefile.common:35: start.o] Error 1

おや?ここにも実行ファイルがあったんですね。依存ライブラリ確認。

# cd /usr/local/libexec/gcc/v850-elf/4.9-GNUV850_v14.01/
# ldd cc1 cc1plus coll
ect2 liblto_plugin.so.0.0.0
cc1:
        linux-vdso.so.1 (0x00007ffdcfdd8000)
        libmpc.so.3 => not found
        libmpfr.so.6 => not found
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ff060af8000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff060af3000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff060970000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff0607ed000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff0607d1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff060610000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff061877000)
cc1plus:
        linux-vdso.so.1 (0x00007ffeb59b3000)
        libmpc.so.3 => not found
        libmpfr.so.6 => not found
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f5c57a0d000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5c57a08000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5c57885000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5c57702000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5c576e6000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5c57525000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5c588f6000)
collect2:
        linux-vdso.so.1 (0x00007fff6cf2a000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6c99fde000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6c99e5b000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6c99e41000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6c99c80000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6c9a1de000)
liblto_plugin.so.0.0.0:
        linux-vdso.so.1 (0x00007ffc407a1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92edef9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f92ee0d1000)

これが無い。

  • libmpc.so.3 => not found
  • libmpfr.so.6 => not found

さっき作ったビルド用コンテナイメージでライブラリの場所を確認して Dockerfile に追加。

COPY --from=build-env \
    /usr/lib/x86_64-linux-gnu/libmpc.so.3 \
    /usr/lib/x86_64-linux-gnu/libmpc.so.3
COPY --from=build-env \
    /usr/lib/x86_64-linux-gnu/libmpfr.so.6 \
    /usr/lib/x86_64-linux-gnu/libmpfr.so.6

...gmp はどこいった? 対処療法っぽいけどまぁその辺は後々問題が出たら対応で。

docker イメージを再ビルドする。

動作確認再挑戦

# cd /athrill/sample/barmetal/step2/
# make clean all

OK.

Docker Hub に公開した

以上。

更新履歴

日付 更新内容
2019/2/9 新規作成
2019/3/11 gcc のビルド時、『s/--with-header/--with-headers/ で target-libstdc++-v3 のビルドエラーは解消できる』という指摘を反映

2019年1月31日木曜日

Renesas V850 GCC を 64bit Linux でビルドする

Renesas V850 64bit Linux版gccコンパイラ - Qiitaの追試をしようと思ったのだけど、前回の差分を見るに、特にコード修正しなくても対応できそうなので試した。

結果、コード修正なしでも athrill のサンプルがビルドできるものが出来上がった。

環境

  • OS: Windows 10 Pro
  • docker: Docker version 18.09.1, build 4c52b90
  • 使ったコンテナ: debian:buster-slim

ubuntu:bionic, ubuntu:xenial でも同じ手順でビルドできるはず。

コンテナ起動

docker run -it --rm -v "$(pwd)\athrill:/athrill" debian:buster-slim

動作確認用に athrill のディレクトリをマウントしておく。

V850 ツールチェインビルド環境をととのえる

apt-get update
apt-get -y upgrade
apt-get install -y build-essential libgmp-dev libmpfr-dev libmpc-dev texinfo wget

必要なソースコードのダウンロードと展開

mkdir /toolchain
cd /toolchain
wget https://gcc-renesas.com/downloads/d.php?f=v850/binutils/14.01/binutils-2.24_v850_v14.01.tar.bz2 -O binutils-2.24_v850_v14.01.tar.bz2
tar xfv binutils-2.24_v850_v14.01.tar.bz2
mv binutils-2.24 /binutils
wget https://gcc-renesas.com/downloads/d.php?f=v850/gcc/14.01/gcc-4.9.2_v850_v14.01.tar.bz2 -O gcc-4.9.2_v850_v14.01.tar.bz2
tar xfv gcc-4.9.2_v850_v14.01.tar.bz2
mv gcc-4.9.2 /gcc
wget https://gcc-renesas.com/downloads/d.php?f=v850/newlib/14.01/newlib-2.1.0_v850_v14.01.tar.bz2 -O newlib-2.1.0_v850_v14.01.tar.bz2
tar xfv newlib-2.1.0_v850_v14.01.tar.bz2
mv newlib-2.1.0 /newlib

最初は展開した場所を指定して configure したが、 make に失敗するのでルートに配置しなおすことにした。

binutils のビルド

mkdir -p /build/binutils
cd /build/binutils
../../binutils/configure --target=v850-elf --prefix=/usr/local --enable-soft-float
make CFLAGS="-Wno-cast-function-type -Wno-implicit-fallthrough -Wno-shift-negative-value -Wno-unused-value -Wno-pointer-compare"
make install

gcc のビルド

mkdir -p /build/gcc
cd /build/gcc
../../gcc/configure --target=v850-elf --prefix=/usr/local --enable-languages=c,c++ --disable-nls --disable-multilib --disable-libssp --with-newlib --with-headers=/newlib/newlib/libc/include
# xenial なら make のみで OK.
make CXXFLAGS="-std=c++03"
make install

c++11 から invalid になった構文(?)が使われているらしく、デフォルト設定だとビルドできないため、 -std=c++03 を指定。

newlib のビルド

mkdir -p /build/newlib
cd /build/newlib
../../newlib/configure --target=v850-elf --prefix=/usr/local
make
make install

動作確認

cd /athrill/sample/barmetal/step2
make clean all
../../../bin/linux/athrill -c1 -m memory.txt -d device_config.txt -t 500 test_main.elf

OK.

あとは docker のマルチステージビルドでバイナリだけコピーすればいい感じになるのではないでしょうか? これは後でやる。

参考資料

更新履歴

日付 更新内容
2019/1/29 新規作成
2019/3/11 gcc のビルド時、『s/--with-header/--with-headers/ で target-libstdc++-v3 のビルドエラーは解消できる』という指摘を反映

2019年1月21日月曜日

athrill のミニマム docker image を作成する

docker image は、 kanetsugu2015/athrill_asp3 があるが、 athrill 本体以外もいろいろ入っていてでかい。

Dockerfile も公開されていないので、自分でミニマムな環境を作っていく。

環境

  • OS: Windows 10 Pro
  • docker: Docker version 18.09.1, build 4c52b90

必要な作業の確認

手作業での環境構築

ベースは debian:buster-slim で行きます。

docker pull debian:buster-slim
docker run -it --rm debian:buster-slim

以降は docker container 内での作業。

apt-get update
apt-get -y upgrade

# athrill のダウンロード・ビルドに使うパッケージたち
apt-get install make gcc git

# ソースのクローン
git clone https://github.com/tmori/athrill.git /athrill

# make
cd /athrill/trunk/src/build/target/linux_v850e2m/
make
cd /athrill/trunk/src/build/target/linux_v850esfk3/
make
cd /athrill/trunk/src/remote/remote_cui_client/
make -f Makefile.linux

動作確認

cd /athrill/sample/os/asp3/OBJ/
../../../../bin/linux/athrill2 -c1 -i -m memory.txt -d device_config.txt asp
...(略)

OK.

必要なファイル群の確認

athrill, athrill2, athrill_remote に必要なライブラリを特定する。

# ldd athrill
        linux-vdso.so.1 (0x00007ffc3871c000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f602747c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f60272bb000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f602d43e000)
# ldd athrill2
        linux-vdso.so.1 (0x00007ffcb0fb4000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0a84231000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0a84070000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0a8997f000)
# ldd athrill_remote
        linux-vdso.so.1 (0x00007ffe5dfaf000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc57d2f2000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc57d131000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc57d31e000)

この辺をコピーすればよいはず。 ...と思ったが、debian:buster-slim にはすべてそろっていた。

Dockerfile の作成

じゃぁ先ほどの手順を Dockerfile に落とし込んでいきます。

# ビルド環境を構築してビルド
FROM debian:buster-slim as build-env

LABEL maintainer "mikoto2000 <mikoto2000@gmail.com>"
LABEL version="d7db0e00cc67932a8385c56bebbfcf07a9f87b75"
LABEL description "athrill: d7db0e00cc67932a8385c56bebbfcf07a9f87b75"

RUN apt-get update && apt-get -y install \
    make \
    gcc \
    git \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/tmori/athrill.git /athrill \
    && cd /athrill \
    && git checkout d7db0e00cc67932a8385c56bebbfcf07a9f87b75 \
    && cd /athrill/trunk/src/build/target/linux_v850e2m/ \
    && make \
    && cd /athrill/trunk/src/build/target/linux_v850esfk3/ \
    && make \
    && cd /athrill/trunk/src/remote/remote_cui_client/ \
    && make -f Makefile.linux

# 実行環境を構築してビルド環境からバイナリをコピー
FROM debian:buster-slim

LABEL maintainer "mikoto2000 <mikoto2000@gmail.com>"
LABEL version="d7db0e00cc67932a8385c56bebbfcf07a9f87b75"
LABEL description "athrill: d7db0e00cc67932a8385c56bebbfcf07a9f87b75"

# build-env から必要なファイルをコピー
COPY --from=build-env \
    /athrill/bin/linux/athrill \
    /usr/local/bin
COPY --from=build-env \
    /athrill/bin/linux/athrill2 \
    /usr/local/bin
COPY --from=build-env \
    /athrill/bin/linux/athrill_remote \
    /usr/local/bin

ビルドします。

cd /PATH/TO/Dockerfile
docker build -t mikoto2000/athrill:20190121 .

しばらく待っているとイメージが出来上がるはず。

動作確認

cd /PATh/TO/athrill/sample/os/asp3/OBJ
docker run -it --rm -v "$(pwd):/asp3" --workdir "/asp3" mikoto2000/athrill:20190121 athrill -i -m memory.txt -d device_config.txt asp
...(略)

動いた、OK.

サイズ比較

> docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
mikoto2000/athrill               20190121            fbdac9b0c9ef        8 minutes ago       71.5MB
kanetugu2015/athrill_asp3        ver4.0              e3faeec7fa1a        5 weeks ago         1.59GB

うん、いい感じじゃないでしょうか?

2018年12月25日火曜日

athrill を MSYS2 環境でビルドする

次の現場で tmori/athrill を使いそうなのでとりあえず環境構築までやってみる。

しかし、 athrill リポジトリに格納されているバイナリが、MinGW 用と Linux 用の 2 種類のようで、 そのまま MSYS2 環境で使えない。(何かの共有ライブラリを入れれば動くかもしれないが...)

なので、MSYS2 の gcc を使ってビルドしなおす。

ちなみに、 WSL か docker コンテナを使うのが推奨されているっぽいです。

環境

MSYS2 のベース環境アップグレード

pacman -Syu

MSYS2 MinGW 64bit を再起動してもう一度 pacman -Syu

pacman -Syu

必要パッケージのインストール

pacman -S make mingw-w64-x86_64-gcc git

athrill の取得とビルド

取得

git clone https://github.com/tmori/athrill.git

ビルド

athrill, athrill2, athrill_remote をビルドする。

cd athrill

# athrill のビルド
cd trunk/src/build/target/v850esfk3
make

# athrill2 のビルド
cd ../v850e2m
make

# athrill_remote のビルド
cd ../../../remote/remote_cui_client/
make

動作確認

athrill/bin/windows 内の athrill, athrill2, athrill_remote を叩いてみる。

$ cd PATH/TO/athrill/bin/windows

$ ./athrill
Usage:athrill -m <memory config file> [OPTION]... <load_file>
 -i                             : execute on the interaction mode. if -i is not set, execute on the background mode.
 -r                             : execute on the remote mode. this option is valid on the interaction mode.
 -t<timeout>                    : set program end time using <timeout> clocks. this option is valid on the background mode.
 -m<memory config file>         : set athrill memory configuration. rom, ram region is configured on your system.
 -d<device config file>         : set device parameter.

$ ./athrill2
Usage:athrill -m <memory config file> [OPTION]... <load_file>
 -i                             : execute on the interaction mode. if -i is not set, execute on the background mode.
 -r                             : execute on the remote mode. this option is valid on the interaction mode.
 -t<timeout>                    : set program end time using <timeout> clocks. this option is valid on the background mode.
 -m<memory config file>         : set athrill memory configuration. rom, ram region is configured on your system.
 -d<device config file>         : set device parameter.

$ ./athrill_remote
Usage: athrill_remote <athrill debug command>

ヘルプメッセージが表示されれば OK.

...athrill2 もヘルプの表記は athrill なんですね。

以上。 とりあえず実行可能な状態にはなったのでこれまで。