2015年03月18日

C4droid(2) -- perl4

気が変わってもうすこし、tcc & gcc の整備をしようと思う。せっかくなので何かビルドしたいのだ。
... いろいろ考えたのだが、perl にしようと思う。... といっても現バージョンではない。perl 4 である。

http://www.cpan.org/src/unsupported/4.036/

元にするのは、ここのやつ。なんと日付は 1994/1/31 -- 20年以上前のものである。この 4.036 は、FreeBSD-2.2.8R にも採用されたもの。4 の最終バージョンでもある。

ftp://ftp.tw.freebsd.org/pub/releases/i386/
FreeBSD は、ここにソースを含めたものが置いてあった。なんと 1.1.5.1 まである。

何故 perl かというと、システムの api を相当数使用しているため。perl が tcc でビルドできるようになれば、tcc のために用意した include の整備が進むだろう ... というのが目論見。実際に動かすのは今のところ優先度は高くない。

そもそも ... perl4 の使い方を知ってる人は少ないかも知れない。サブセットなわけで、perl に詳しい人でも、どの機能が使えるのか分からないかも。FreeBSD の オンライン manpage はある。山のような セクションがある perl5 とは違って perl.1 のみ -- そして 、日本語に翻訳されたものもある。ただし、日本語版はダウンロードするものしか見つけられなかった。

  ・英語版 perl.1
   日本語版 http://www.jp.freebsd.org/man-jp/get.html (2.2.8 あたり)
  ・日本語版 FreeBSD ハンドブック (おまけ)

日本語版 のマニュアルがあるものの、cat した変換済みのものである。文字コードが EUC で今の一般的な環境と違う。また、漢字1文字分戻るのに ^H^H になっているようだ。perl のテスト・練習を兼ねて html 変換スクリプトを作って見るのも良いかも知れない。

実は既に tcc でビルドできるところまで行った。結構苦労したのだが、細かいところは端折ってメモを残そうと思う。

移植の手順


1) セルフの gcc でビルドできるようにする。
(Configure で作ったものから修正していく。)
2) ビルドできたら、build-gcc.sh を作成し make を使わないようにする。
3) ファイルを必要なもののみになるように整理。
4) build-tcc.sh を作成し、gcc の include を借りてビルドできるようにする。
5) tcclib/include を整備して tcc で完結するようにする。

大変だったのは、1) なのだが、基本的に エラーが起きたら削るという作業。削ったものの中には移植可能なものがあったかも知れない。

さて、ビルドの時間の比較

gcc -O2 tcc
real 1m9.300s 0m1.899s
user 1m6.610s 0m1.300s
sys 0m1.510s 0m0.280s

さすが、tcc は高速。だが、最適化なしなので、サイズは大きくなってしまっている。

gcc -O2 tcc
bytes 347483 509704

まとめ


 ・perl-4.036-android-150318.tar.gz -- perl4 ソース+バイナリ
 ・tcc-0.9.26-android-150318.tar.gz -- tcc ソース+バイナリ
 ・tcc-android-150318.tar.gz -- tcc バイナリ
 ・sqlite-bin.tar.gz -- おまけ

今日の成果物。作った perl4 は、完成度が低いと思われるので、バイナリのみは提供しない。tcc は perl4 をビルドできるよう include を足しただけ。sqlite は、拾ってきたバイナリ。perl と組み合わせて使うとなにかと便利かも。ちなみに、perl という名前で生成しているが、/system/xbin/perl4 に置くつもり。

変更元は、素の perl-4.036 でセキュリティパッチも当ててない。変更点を調べる場合は、diff を取って欲しい。あと、sys-api.txt というファイルが置いてあるが単に 外部シンボルを調べただけのもの。

おわりに


次は、vi をなんとかしたいのと、scp が欲しい。出来るかどうか分からないが。

付録 gcc 環境作成のメモ


メモだけ残しておく。とりあえず loop デバイスで /usr に mount して 使うようにした。/data/local 使うのが良いのかも知れないが、端末の初期化で消えてしまう。/usr にしても boot.img を直さない限り mountポイントを作らないとダメで面倒ではある。
今の認識では、gcc 環境は借り物で、使うときにだけあれば良い。tcc での簡易開発環境を /system に仕込むというのが目的で、公開するものは、tcc でビルド可能にすると思う。

# dd if=/dev/zero of=/sdcard/usr.img bs=1024K count=300
# losetup /dev/block/loop0 /sdcard/usr.img
losetup: /dev/block/loop0: Bad file number
# losetup /dev/block/loop7 /sdcard/usr.img
# mke2fs -T ext4 /dev/block/loop7
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
19200 inodes, 76800 blocks
3840 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=79691776
3 block groups
32768 blocks per group, 32768 fragments per group
6400 inodes per group
Superblock backups stored on blocks:
32768

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount -o remount,rw / /
# mkdir /usr
# mount -o noatime -t ext4 /dev/block/loop7 /usr
posted by すz at 22:29| Comment(0) | TrackBack(0) | android
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/115217356
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック