Sunday, January 31, 2010

Emacs pretest 23.1.92

NTEmacs 23.1.92

予定どおりに 23.1.92 が出たようです。

bzr を使って追っかけするのにもだいぶ慣れてきました。

が、やっぱ、なにをするにも遅いんだよなぁ。
Cygwin 1.7 の bzr は 2.0.0 なんですけど、これが遅いんですかね?なんだろうな。

公式で git を使えるようになったらすぐに乗り換えると思います。

一応、有志による git ミラーは以下にあります。

さて、こないだから MinGW + MSYS でビルドするようになったので、そこらへんを少しだけ。

うちでは Windows 7 Enterprise x64, MinGW 5.1.6, MSYS 1.0.13-2, gcc 4.4.0 でビルドしています。

$ msysinfo
msysinfo-1.3: Send this to the MSYS support list:

MSYS 1.0.13(0.47/3/2) 2010-01-27 23:29 i686 unknown; targ=MINGW32
GNU bash, version 3.1.17(1)-release (i686-pc-msys); ENV=.profile
GNU Make 3.81This program built for i686-pc-msys; MAKE_MODE=unix
gcc.exe (GCC) 4.4.0; targ=MINGW32
GNU ld (GNU Binutils) 2.20
00 2010-01-28 13:31:10.000000000 +0900 /bin/msys-1.0.dll
92 2009-07-11 15:34:34.000000000 +0900 /bin/msys-bz2-1.dll
74 2010-01-06 19:46:31.000000000 +0900 /bin/msys-lzma-1.dll
52 2009-11-08 10:09:15.000000000 +0900 /bin/make.exe
2009-06-23 11:46:39.000000000 +0900 /c/MinGW/bin/gcc.exe
8 2009-10-24 09:13:00.000000000 +0900 /c/MinGW/bin/ld.exe
HOME=/c/Users/yu-ji/home
Sysname=MINGW32_NT-6.1  OSTYPE=msys  TERM=cygwin
PATH=.:/usr/local/bin:/mingw/bin:/bin:/usr/bin:/c/MinGW/bin:/c/Windows/system32:/c/Windows

普段使いの環境は Cygwin 1.7 に合わせてあるので、msys.bat で MinGW + MSYS 用の環境を調整しています。Emacs をビルドするときには、cmd でも bash でも大丈夫ですが、なんとなく bash からやってます。

$ diff msys.bat~ msys.bat
1a2,3
> set Path=C:\msys\1.0\bin;C:\MinGW\bin;%SystemRoot%\system32;%SystemRoot%
> set LANG=C

間違って Cygwin 環境でやっちゃうとややこしいことになるので、configure と make はそれぞれシェルスクリプトをかませてやっています。

emacs.config.sh とかファイル名つけて…、

#!/bin/sh
if [[ $MSYSTEM != "MINGW32" ]]; then
    echo emacs.config.sh must run under the MSYS shell;
    exit;
fi
export LANG=C
time $COMSPEC /c \
    'configure.bat --with-gcc --no-cygwin --no-debug --prefix=C:/emacs/23' \
    2>&1 | tee config.log.yu-ji;

引数とか忘れますしね。

以下は emacs.make.sh とかファイル名つけて…、

#!/bin/sh
if [[ $MSYSTEM != "MINGW32" ]]; then
    echo emacs.make.sh must run under the MSYS shell;
    exit;
fi
export LANG=C
time make \
    --jobs=4 XMFLAGS="--jobs=3" \
    ARCH_CFLAGS="-c -mno-cygwin -march=native -O3 -fno-tree-vectorize -mfpmath=sse -mthreads -pipe" \
    $1 $2 $3 $4 $5 \
    2>&1 | tee make.log.yu-ji;

うちの CPU は一昨年くらいの Core 2 Duo です。-O3 だけだと temacs をダンプするとき(だったと思う)にこけるので optimization 関係のオプションを調整した結果 -O3 -fno-tree-vectorize になりました。これが何を意味するかは知りませんし、他のマシンにバイナリを持っていくことも考えてません…。
※追記参照のこと

普段追っかけるときには、以下のようにやってます。ローカルのリポジトリの持ち方によって違う気がします。ワーキングコピーに merge してから diff して commit するほうが通信量も少ない気がします。

$ cd ~/src/wc/emacs/trunk/
(emacs のワーキングコピーに移動)
$ bzr merge --preview | lv
(変更点を眺めてみる)
$ bzr merge --pull
(変更点を取り込む)
$ cd nt
$ ../../../emacs.make.sh all
(上に載せたシェルスクリプトです)
$ ../../../emacs.make.sh recompile EMACS=../src/oo-spd/i386/emacs.exe
(lisp/ 以下に変更があったときにはこれやらないと .elc が古いままです)
$ ../../../emacs.make.sh install
(いんすこ)

なにかおかしくなったら、ワーキングコピーを綺麗にして bootstrap からやりなおします。

$ ../../../emacs.make.sh realclean
$ ../../../emacs.make.sh distclean
$ ../../../emacs.config.sh
$ ../../../emacs.make.sh bootstrap

こんな感じで。

MinGW-w64 で x64 Emacs はビルドできるんですかねえ。画像用の DLL 作るあたりが鬼門そうだ…。

追記Sun Feb 14 02:39:06 2010

@dnerkxさんが -O3 -fno-tree-vectorize の件を調べてくれました。thx!

No comments:

Post a Comment