とりあえず、 atk2-sc1 のバイナリ作成に成功する cfg バイナリの作成に成功したので作業記録を残す。
環境
- OS: Windows 10 Pro
- 使用する docker image: kanetugu2015/athrill_asp3:ver4.0
※ cfg のビルド自体は ubuntu イメージでもできるはず。あとで確認しなきゃ...。
必要なファイルのダウンロードと展開
TOPPERSプロジェクトの cfg ダウンロードページ から、 1.9.6 をダウンロードして展開する。
文字コード、改行コード変換
テキストファイルが EUC, CRLF となっているので、 UTF-8, LF に変換する。
find ./ -type d -name ".git" -prune -or -type f -print0 | xargs -0 nkf -w -Lu --overwrite
ビルド環境を作成
docker を使ってビルド環境を作っていく。
docker run -it --rm -v "$(pwd):/cfg" kanetugu2015/athrill_asp3:ver4.0
docker コンテナ内の作業。
apt-get update
apt-get -y upgrade
apt-get install -y g++ make libboost-dev libboost-regex-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libxerces-c-dev
インストールされるライブラリのバージョンが cfg リリース時点のものと違いますね。 とりあえずこのままやっちゃいましょう。
ビルド
cd /cfg
./configure --with-libraries=/usr/lib/x86_64-linux-gnu --with-xml
make
はい。
g++ -O2 -DHAS_CFG_XML=1 -I/usr/include -I.. -c -o builtin_function.o builtin_function.cpp
In file included from ../toppers/macro_processor.hpp:55,
from builtin_function.cpp:46:
../toppers/text.hpp: In member function 'void toppers::basic_text<Container, CharT, Traits, Allocator>::init(const toppers::basic_text<Container, CharT, Traits, Allocator>::const_iterator&, const toppers::basic_te
xt<Container, CharT, Traits, Allocator>::const_iterator&)':
../toppers/text.hpp:731:25: error: 'next' is not a member of 'boost'
std::copy( boost::next( first ).get_row(), last.get_row(), std::back_inserter( container_ ) );
^~~~
../toppers/text.hpp:731:25: note: suggested alternative: 'get'
std::copy( boost::next( first ).get_row(), last.get_row(), std::back_inserter( container_ ) );
^~~~
get
...(略)
boost::next
は、配置場所が変わったのでマイグレーションが必要らしいですね。
置換していきましょう。
boost::next
対応
使っているファイルの確認。
$ find ./ -type f -name "*.cpp" -or -name "*.hpp" -print0 | xargs -0 grep "boost/utility.hpp"
./cfg/cfg.hpp:#include <boost/utility.hpp>
./toppers/cpp.hpp:#include <boost/utility.hpp>
./toppers/csv.hpp:#include <boost/utility.hpp>
./toppers/text.hpp:#include <boost/utility.hpp>
この 4 つだけみたいですね、それじゃぁ置換します。
$ find ./ -type f -name "*.cpp" -or -name "*.hpp" -print0 | xargs -0 sed -i -e 's/boost\/utility.hpp/boost\/next_prior.hpp/'
ビルド再挑戦
make
はい。ワーニング出てますが、ビルド自体は成功しているっぽいので動作確認しましょうか。
動作確認
$ cp /cfg/cfg/cfg /athrill/sample/os/atk2-sc1_1.4.2/cfg/cfg/
$ cd /athrill/sample/os/atk2-sc1_1.4.2/OBJ
$ make
...(略)
{ "EXEC kernel.tf"(), }
{ "ASSOCIATE TASK"(), }
{ "ASSOCIATE ISR"(), }
{ "ASSOCIATE ALARM"(), }
{ "ASSOCIATE SCHTBL"(), }
{ "ISR CHECK"(), }
{ "RESOURCE CHECK"(), }
{ "TASK CHECK"(), }
{ "EVENT CHECK"(), }
{ "COUNTER CHECK"(), }
{ "ALARM CHECK"(), }
{ "SCHEDULETABLE CHECK"(), }
{ "OUTPUT FILES"(), }
Makefile:340: recipe for target 'Os_Lcfg.timestamp' failed
make: *** [Os_Lcfg.timestamp] Segmentation fault
oh...。セグフォか...。ワーニング消していかなきゃダメですかね?
とりあえず、最適化外してみる。
最適化を外す
sed -i -e 's/OPTIMIZE = -O2/OPTIMIZE = -O0/' Makefile
最適化なしでのビルド
cd /cfg
make clean all
最適化なしでの実行
$ cp /cfg/cfg/cfg /athrill/sample/os/atk2-sc1_1.4.2/cfg/cfg/
$ cd /athrill/sample/os/atk2-sc1_1.4.2/OBJ
$ make clean all
...(略)
v850-elf-objcopy -O srec -S atk2-sc1 atk2-sc1.srec
../cfg/cfg/cfg --pass 3 --kernel atk2 -I. -I../include -I../arch -I.. -I../target/v850esfk3_gcc -I..//arc
h/v850esfk3_gcc -I..//arch/gcc \
--rom-image atk2-sc1.srec --symbol-table atk2-sc1.syms \
-T ../target/v850esfk3_gcc/target_check.tf --api-table ../kernel/kernel.csv --cfg1
-def-table ../kernel/kernel_def.csv --ini-file ../kernel/kernel.ini --cfg1-def-table ..//arch/v850esfk3_g
cc/prc_def.csv sample1.arxml ..//arch/v850esfk3_gcc/uart.arxml ../target/v850esfk3_gcc/target_hw_counter.a
rxml
v850-elf-objdump -d atk2-sc1 > atk2-sc1.dump
ふむ、成功しました。
手順は省略するけど athrill での実行もできました。
とりあえず今回はここまで。
最適化かけたときだけ落ちるって...、これどういうアプローチしていこうかしら?
0 件のコメント:
コメントを投稿