TiMidity++ をWindows用にコンパイルする方法 1.Msys環境下でMingwでコンパイル 2.Msys環境下でBoraland C++でコンパイル 3.Msys環境下でOpenWatcomでコンパイル 4.Msys環境下でVisual C++でコンパイル 1.Msys環境下でMingwでコンパイル (1)MingwとMSYSのセットアップ 1)MingwとMSYSのセットアップ(http://sourceforge.net/projects/mingw/ http://mingw.sourceforge.net/MinGWiki/)) 日本語版のインストールにはMingw-jp(http://sourceforge.jp/projects/mingw-jp)を使うとよい。 少なくともリソースコンパイラはMingw-jpのものでないといけない。 このリソースコンパイラを使うにはWindowsの環境変数で CLANG=C-SJIS と設定しないといけない。(MSYSの環境変数ではだめ) (2)使用されるライブラリ達のセットアップ 2−0)dllファイルからインポートライブラリを作る方法 (pexportsはmingw-utils-0.3.tar.gzに含まれている) pexports xxxx.dll >xxxx.def dlltool --dllname xxxx.dll --input-def xxxx.def --output-lib libxxxx.a 2−1)pcurses "pdcurses-2.6.0-2003.07.21-1.exe"をMingwのサイトからとってきて設定する。 2−2)oggvorbis(http://www.vorbis.com/) "OggVorbis-win32sdk-1.0.1.zip”をとってくる dllファイルからインポートライブラリをつくる include\ogg\os_type.hの29行目を書き換える (os_types.h) 29 # if !defined(__GNUC__) || defined(__MINGW32__) 起動用バッチファイルにエントリをつけたす REM OggVorbis set PATH=\usr\local\oggvorbis-win32sdk-1.0.1\bin;\usr\local\oggvorbis-win32sdk-1.0.1\lib;%PATH% set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/include:%C_INCLUDE_PATH set LD_LIBRARY_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/lib:%LD_LIBRARY_PATH% 2−3)午後のコーダー(http://www.marinecat.net/mct_top.htm) Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。 dllファイルからインポートライブラリを作る。 move gogo.h gogo\include\gogo move gogo.dll libgogo.a gogo\lib 起動用バッチファイルにエントリをつけたす REM GOGO set PATH=\usr\local\gogo\bin;\usr\local\gogo\lib;%PATH% set C_INCLUDE_PATH=/usr/local/gogo/include:%C_INCLUDE_PATH% set LD_LIBRARY_PATH=/usr/local/gogo/lib:%LD_LIBRARY_PATH% 2−4)flac(http://flac.sourceforge.net/) flac-1.1.0-win.zipをとってくる。 Change include\*\export.hの23行目をすべて以下のように変更 (export.h) 23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \ || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) 起動用バッチファイルにエントリをつけたす REM FLAC set PATH=\usr\local\flac-1.1.0-win\bin;;%PATH% set C_INCLUDE_PATH=/usr/local/flac-1.1.0-win/include:%C_INCLUDE_PATH% set LD_LIBRARY_PATH=/usr/local/flac-1.1.0-win/bin:%LD_LIBRARY_PATH% 2−5)portaudio(http://www.portaudio.com/) portaudio v1.18をとってきてコンパイルする asioについてはcallasio(http://www.audiomulch.com/~rossb/code/calliasio/)のHPに情報がある。 portaudio.dllをそれぞれpa_asio.dll、pa_win_ds.dll、pa_win_wmme.dllのように名前をかえとく。 portaudio.hさえあればTiMidity++はコンパイルできる。 2−6)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) (ここでは使わない) (3)TiMIdity++のコンパイル 3-1)timw32g.exe (configure) CFLAGS="-O2" configure --enable-network --enable-w32gui \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make strip timidity.exe mv timidity.exe timw32g.exe 3-2)twsyng.exe (configure) CFLAGS="-O2" configure --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make strip timidity.exe mv timidity.exe twsyng.exe 3-3)twsynsrv.exe (configure) CFLAGS="-O2" configure --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio add config.h following line #define TWSYNSRV 1 (make) make strip timidity.exe mv timidity.exe twsynsrv.exe 3-4)timidity.exe (configure) CFLAGS="-O2" configure --enable-interface=ncurses,vt100,winsyn --enable-network \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make strip timidity.exe 2.Msys環境下でBoraland C++でコンパイル (1)Borland CとMSYSのセットアップ 1)BorlandCのセットアップ C++Buldercompiler(http://www.borland.com/products/downloads/download_cbuilder.html#)をダウンロードしてくる。 readme.tetにしたがってbcc32.cfg とilink 32.cfgをつくる (bcc32.cfg) -I"C:\Borland\Bcc55\include" -L"C:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\PSDK" -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 (ilink32.cfg ) -L"C:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\PSDK" 2)MSYSのセットアップ(http://sourceforge.net/projects/mingw/ http://mingw.sourceforge.net/MinGWiki/)) "/etc/fstab"からMINGWのパスの設定の行を消す "msys.bat"から"bcc_env.bat"を呼ぶようにする。 (msys.batの先頭行) call c:\borland\bcc55\bin\bcc_env.bat (bcc_env.batの内容) @echo off set PATH=c:\borland\bcc55\bin;%PATH% Set INCLUDE=c:\usr\local\pdcurses_bcc\include;%INCLUDE% (続く) ---- (2)使用されるライブラリ達のセットアップ 2−0−1)dllファイルからインポートライブラリを作る方法 implib -a -c xxx.lib xxx.dll 2−0−2)VCのLIBファイルからBCのLIBファイルを作る方法 coff2omf xxxx.lib xxx_bcpp.lib 2−1)pcurses "pdcurses-2.6.0-src.tar.bz2"をMingwのサイトからとってきてコンパイルする。 pccurses.libはlibpdcuses.libに名前を変えないといけない。 起動バッチファイルとilink32.cfgにエントリを書き込む 2−2)oggvorbis(http://www.vorbis.com/) "OggVorbis-win32sdk-1.0.1.zip”をとってくる dllファイルからインポートライブラリをつくる 起動バッチファイルとilink32.cfgにエントリを書き込む 2−3)午後のコーダー(http://www.marinecat.net/mct_top.htm) Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。 dllファイルからインポートライブラリを作る。 move gogo.h gogo\include\gogo move gogo.dll libgogo.a gogo\lib 起動バッチファイルとilink32.cfgにエントリを書き込む 2−4)flac(http://flac.sourceforge.net/) flac-1.1.0-win.zipをとってくる。 Change include\*\export.hの23行目をすべて以下のように変更 (export.h) 23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \ || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) include\FLAC\ordinals.hの39行目を変更 39 #if defined(_MSC_VER) || defined(__BORLANDC__) 起動バッチファイルとilink32.cfgにエントリを書き込む 2−5)portaudio(http://www.portaudio.com/) コンパイルの仕方はわからないが portaudio.hさえあればTiMidity++はコンパイルできる。 2−6)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) (ここでは使わない) (3)TiMIdity++のコンパイル 3-0-1) perl -pe 's/CC\s-o\s\S\S*\s/CC /g' configure >configure_bc (configure中の -o xxxx はBCCが受け付けないため) 3-0-2)rm_float.sh を timidity/timidity ディレクトリの中で起動する。 数値定数のあとの f , F, l and L を取り除くスクリプト( 123.45f -> 123.45 ) -------------------- from here ----------------------- #!/bin/sh for foo in `ls *.c` `ls *.h`;do perl -pe 's/(%[0-9]*\.[0-9]+f)/$1f/g' $foo|perl -pe 's/(\.[0-9]+)f/$1/g' - |perl -pe 's/(\.[0-9]+)F/$1/g' - |perl -pe 's/(\.[0-9]+)l/$1/g' - |perl -pe 's/(\.[0-9]+)L/$1/g' - |perl -pe 's/(0x[0-9a-f]+)l/$1/g' - |perl -pe 's/(0x[0-9a-f]+)L/$1/g' - >$foo.rm mv $foo.rm $foo done -------------------- to here ------------------------- 3-1)timw32g.exe (configure) CC="bcc32" CPP="cpp32" CFLAGS="" ./configure_bc --enable-w32gui \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make mv timidity.exe timw32g.exe 3-2)twsyng.exe (configure) CC="bcc32" CPP="cpp32" CFLAGS="" \ ./configure_bc --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make mv timidity.exe twsyng.exe 3-3)twsynsrv.exe (configure) CC="bcc32" CPP="cpp32" CFLAGS=""\ ./configure_bc --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio add config.h following line #define TWSYNSRV 1 (make) make mv timidity.exe twsynsrv.exe 3-4)timidity.exe (configure) CC="bcc32" CPP="cpp32" CFLAGS="" \ ./configure_bc --enable-interface=vt100,winsyn,ncurses --enable-network \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make 3.Msys環境下でOpenWatcomでコンパイル (1)OpenWatcomとMSYSのセットアップ 1)OpenWatcomのセットアップ(http://www.openwatcom.org) 1−1)OpenWatcomをダウンロードしてくる。 2−1)Microsoft Platform SDKからrc.exeを取ってきてさしかえる。 (OpenWatomのrc.exeは使えない) 2)MSYSのセットアップ(http://sourceforge.net/projects/mingw/ http://mingw.sourceforge.net/MinGWiki/)) "/etc/fstab"からMINGWのパスの設定の行を消す "msys.bat"から"wcc_env.bat"を呼ぶようにする。 (msys.batの先頭行) call wcc_env.bat (wcc_env.batの内容) @echo off set LIB= set INCLUDE= call i:\watcom\setvars.bat REM OggVorbis set PATH=\usr\local\oggvorbis-win32sdk-1.0.1_wcc\bin;\usr\local\oggvorbis-win32sdk-1.0.1_wcc\lib;%PATH% set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1_wcc/include:%C_INCLUDE_PATH set LIB=\usr\local\oggvorbis-win32sdk-1.0.1_wcc\lib:%LIB% (続く) ---- (2)使用されるライブラリ達のセットアップ 2−0)dllファイルからインポートライブラリを作る方法 mlib -n -b out.lib in.dll 2−1)pcurses "pdcurses-2.5.0"をGnuWin32(http://sourceforge.net/projects/gnuwin32/)のサイトからとってくる dllファイルからインポートライブラリを作る。 pccurses.libはlibpdcuses.libに名前を変えないといけない。 起動バッチファイルにエントリを書き込む 2−2)oggvorbis(http://www.vorbis.com/) "OggVorbis-win32sdk-1.0.1.zip”をとってくる include\ogg\os_types.hを編集する。 (os_types.h) 29 # if defined(__WATCOMC__) 30 /* MSVC/Borland */ 31 typedef __int64 ogg_int64_t; 32 typedef int ogg_int32_t; 33 typedef unsigned int ogg_uint32_t; 34 typedef short ogg_int16_t; 35 typedef unsigned short ogg_uint16_t; 36 # else ----- 52 # endif dllファイルからインポートライブラリをつくる 起動バッチファイルにエントリを書き込む 2−3)午後のコーダー(http://www.marinecat.net/mct_top.htm) Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。 dllファイルからインポートライブラリを作る。 move gogo.h gogo\include\gogo move gogo.dll libgogo.a gogo\lib 起動バッチファイルにエントリを書き込む 2−4)flac(http://flac.sourceforge.net/) flac-1.1.0-win.zipをとってくる。 Change include\*\export.hの23行目をすべて以下のように変更 (export.h) 23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \ || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) include\FLAC\ordinals.hの39行目を変更 39 #if defined(_MSC_VER) || defined(__BORLANDC__) dllファイルからインポートライブラリをつくる 起動バッチファイルにエントリを書き込む 2−5)portaudio(http://www.portaudio.com/) コンパイルの仕方はわからないが portaudio.hさえあればTiMidity++はコンパイルできる。 2−6)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) (ここでは使わない) (3)TiMIdity++のコンパイル 3-0)wcc386_w.sh ( scripts/ディレクトリにある ) Wcc386 はGNUのauto Toolと仲が悪いのでラッパーをつくった。 パスの通ったディレクトリに移動させておいて。 wcc386.exeのかわりにwcc386_w.shを呼び出して使う。 3-1)timw32g.exe (configure) CC="wcc386_w.sh" CPP="wcc386_w.sh -p" CFLAGS="-d0 -obll+riemcht" \ ./configure --enable-network --enable-w32gui \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \ --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest (make) make mv timidity.exe timw32g.exe 3-2)twsyng.exe (configure) CC="wcc386_w.sh" CPP="wcc386_w.sh -p" CFLAGS="-d0 -obll+riemcht" \ ./configure --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \ --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest (make) make mv timidity.exe twsyng.exe 3-3)twsynsrv.exe (configure) CC="wcc386_w.sh" CPP="wcc386_w.sh -p" CFLAGS="-d0 -obll+riemcht" \ ./configure --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \ --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest add config.h following line #define TWSYNSRV 1 (make) make mv timidity.exe twsynsrv.exe 3-4)timidity.exe (configure) CC="wcc386_w.sh" CPP="wcc386_w.sh -p" CFLAGS="-d0 -obll+riemcht" \ ./configure --enable-interface=ncurses,vt100,winsyn --enable-network \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \ --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest (make) make 4.Msys環境下でVisual C++でコンパイル (1)Visual C++とMSYSのセットアップ 1)VisualC++のセットアップ Microsoft Visual C++ Toolkit 2003 Microsoft.NET SDK Microsoft Platform SDK をダウンロードしてインストールする。 ======= CAUTION !! =========== Microsoft Visual C++ Toolkit 2003でコンパイルしたバイナリはライセンス上配布できない。 配布するバイナリは、"Visual C++" か "Visual Studio"で作成する必要がある。 その際は、-MT オプションではなく -MD オプションを使い、libcmt.lib ではなく msvcrt.libをリンクすること ============================== 2)MSYSのセットアップ(http://sourceforge.net/projects/mingw/ http://mingw.sourceforge.net/MinGWiki/)) "/etc/fstab"からMINGWのパスの設定の行を消す "msys.bat"から"vcc_env.bat"を呼ぶようにする。 (msys.batの先頭行) call vcc_env.bat (vcc_env.batの内容) @echo off call i:\"Program Files\Microsoft Visual C++ Toolkit 2003"\vcvars32.bat call i:\"Program Files\Microsoft SDK"\SetEnv.Bat /RETAIL call i:\"Program Files\Microsoft.NET\SDK\v1.1\bin"\sdkvars.bat Set INCLUDE=c:\DXSDK\include;%INCLUDE% Set LIB=c:\DXSDK\lib;%LIB% (続く) ---- (2)使用されるライブラリ達のセットアップ 2−1)pcurses "pdcurses-2.6.0-src.tar.bz2"をMingwのサイトからとってきてコンパイルする。 pccurses.libはlibpdcuses.libに名前を変えないといけない。 起動バッチファイルにエントリを書き込む 2−2)oggvorbis(http://www.vorbis.com/) "OggVorbis-win32sdk-1.0.1.zip”をとってくる 起動バッチファイルにエントリを書き込む 2−3)午後のコーダー(http://www.marinecat.net/mct_top.htm) Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。 move gogo.h gogo\include\gogo move gogo.dll libgogo.a gogo\lib 起動バッチファイルにエントリを書き込む 2−4)flac(http://flac.sourceforge.net/) flac-1.1.0-win.zipをとってくる。 Change include\*\export.hの23行目をすべて以下のように変更 (export.h) 23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \ || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) include\FLAC\ordinals.hの39行目を変更 39 #if defined(_MSC_VER) || defined(__BORLANDC__) 起動バッチファイルにエントリを書き込む 2−5)portaudio(http://www.portaudio.com/) コンパイルの仕方はわからないが portaudio.hさえあればTiMidity++はコンパイルできる。 2−6)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) (ここでは使わない) (3)TiMIdity++のコンパイル 3-1)timw32g.exe (configure) CC="cl" CPP="cl.exe -EP" CFLAGS="-O2" \ ./configure --enable-network --enable-w32gui \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make mv timidity.exe timw32g.exe 3-2)twsyng.exe (configure) CC="cl" CPP="cl.exe -EP" CFLAGS="-O2" \ ./configure --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make mv timidity.exe twsyng.exe 3-3)twsynsrv.exe (configure) CC="cl" CPP="cl.exe -EP" CFLAGS="-O2"\ ./configure --enable-network --enable-winsyng \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio add config.h following line #define TWSYNSRV 1 (make) make mv timidity.exe twsynsrv.exe 3-4)timidity.exe (configure) CC="cl" CPP="cl.exe -EP" CFLAGS="-O2" \ ./configure --enable-interface=ncurses,vt100,winsyn --enable-network \ --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio (make) make 2004.5.28 末永 圭司(skeishi@mutt.freemail.ne.jp)