諦め悪く bcc に拘る。
ちゃんと動いたら、これを利用して C++Builder で Windows プログラムを作成する構想(妄想?)があるので。
MakeFile に手を入れる:
「実行ファイルがデカい」は、リンカが大きなライブラリを組み込んでいる?
bcc32 経由をやめ、ilink32 で直接ライブラリ指定する
syro.mk
#########################################
# Makefile SYRO SDK SAMPLE #
# For Boaland Make #
#########################################
TARGET = SYRO
MKCMD = $(TARGET).mk
EXENM = $(TARGET).exe
CC = bcc32
CCFLG = -pc -WC -a4 -c -K -w
LK = ilink32
LKFLG = /ap
STARTUP = c0x32
LIBS = cw32 import32
HEAD1 = korg_syro_comp.h\
korg_syro_func.h\
korg_syro_type.h\
korg_syro_volcasample.h\
OBJS = korg_syro_comp.obj\
korg_syro_func.obj\
korg_syro_volcasample.obj\
korg_syro_volcasample_exsample.obj\
.C.OBJ:
$(CC) $(CCFLG) $< > CERR
type CERR
$(EXENM): $(OBJS)
$(LK) $(LKFLG) $(STARTUP) $(OBJS), $(EXENM),,$(LIBS) > LERR
type LERR
korg_syro_comp.obj : korg_syro_comp.c $(MKCMD) $(HEAD1)
korg_syro_func.obj : korg_syro_func.c $(MKCMD) $(HEAD1)
korg_syro_volcasample.obj : korg_syro_volcasample.c $(MKCMD) $(HEAD1)
korg_syro_volcasample_exsample.obj : korg_syro_volcasample_exsample.c $(MKCMD) $(HEAD1)
変わらない (T_T)
2014/12/07 21:45 22,528 example.exe
2014/12/30 00:14 67,584 SYRO.exe
「Windows(GUI) プログラム前提のライブラリがリンクされるので大きくなってしまう」
って事にして次へ行こう。
前ページから:
[パチもん.exe]での syro stream 生成
「全プリセットパターンデータは、問題なく生成出来た」が、
「全プリセットサンプルデータは、あからさまにサイズが違う」のはなぜ?
-- 調べるのでしばらく更新中断 --
-- 更新再開 --
C++Builder IDE から作成:
・IDE 「コマンドラインアプリケーションプロジェクト」を新規作成。
・IDE サンプルソースを全て追加
・IDE コンパイル
・!!祝!! 同じ syro stream を生成する .exe が完成♪ 当たり前か…
・[MakeFile を出力]で、Text の .mak を出力
・先に作った(上記) コマンドライン用 syro.mk と比較
・違う部分を削ったり付け加えたりして syro.mk を変更
「コマンドラインから Make 起動」での [パチもん.exe] 作成を試す:
・「ランライム DLL がないから、走らないよ テヘ」などと言われたりする orz
・IDE に戻り、プロジェクトオプションを「ランライム DLL 不要」に変更
・動作 (syro stream 生成、比較)確認して、Text MakeFile を出力
・再度、syro.mk を変更 [パチもん.exe] 作成
・.exe サイズは小さくならない 上記のとおり「結合ライブラりの違い」としておく
・[パチもん.exe] で syro stream を生成
・[本家.exe] で生成した syro stream と比較
「自分のコンパイラ環境で、KORG提供のソースから実行用ファイルを作成」まで終わりっ
実行用ファイル作成
syro.mk
#########################################
# Makefile SYRO SDK SAMPLE #
# For Boaland Make #
#########################################
TARGET = syro
MKCMD = $(TARGET).mk
EXENM = $(TARGET).exe
CC = bcc32
CCFLG = -tWC -a4 -c -w
LK = ilink32
LKFLG = -ap -Tpe -x -Gn -v
STARTUP = c0x32
LIBS = import32 cw32
HEAD1 = korg_syro_comp.h\
korg_syro_func.h\
korg_syro_type.h\
korg_syro_volcasample.h\
OBJS = korg_syro_comp.obj\
korg_syro_func.obj\
korg_syro_volcasample.obj\
korg_syro_volcasample_exsample.obj\
.C.OBJ:
$(CC) $(CCFLG) $< > CERR
type CERR
$(EXENM): $(OBJS) $(MKCMD)
$(LK) $(LKFLG) $(STARTUP) $(OBJS), $(EXENM),,$(LIBS) > LERR
type LERR
dir *.exe
korg_syro_comp.obj : korg_syro_comp.c $(MKCMD) $(HEAD1)
korg_syro_func.obj : korg_syro_func.c $(MKCMD) $(HEAD1)
korg_syro_volcasample.obj : korg_syro_volcasample.c $(MKCMD) $(HEAD1)
korg_syro_volcasample_exsample.obj : korg_syro_volcasample_exsample.c $(MKCMD) $(HEAD1)
以下、実行結果
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>mk -B
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>make -fsyro.mk -B
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -tWC -a4 -c -w korg_syro_comp.c > CERR
type CERR
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
korg_syro_comp.c:
警告 W8004 korg_syro_comp.c 595: 'srccount' に代入した値は使われていない(関数 SyroComp_Comp )
bcc32 -tWC -a4 -c -w korg_syro_func.c > CERR
type CERR
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
korg_syro_func.c:
警告 W8071 korg_syro_func.c 79: 変換によって有効桁が失われる(関数 SyroFunc_CalculateCrc16 )
警告 W8071 korg_syro_func.c 104: 変換によって有効桁が失われる(関数 SyroFunc_CalculateEcc )
警告 W8071 korg_syro_func.c 138: 変換によって有効桁が失われる(関数 SyroFunc_CalculateEcc )
bcc32 -tWC -a4 -c -w korg_syro_volcasample.c > CERR
type CERR
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
korg_syro_volcasample.c:
警告 W8071 korg_syro_volcasample.c 299: 変換によって有効桁が失われる(関数 SyroVolcaSample_MakeData )
bcc32 -tWC -a4 -c -w korg_syro_volcasample_exsample.c > CERR
type CERR
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
korg_syro_volcasample_exsample.c:
警告 W8071 korg_syro_volcasample_exsample.c 166: 変換によって有効桁が失われる(関数 get_commandline_number )
警告 W8071 korg_syro_volcasample_exsample.c 248: 変換によって有効桁が失われる(関数 setup_file_sample )
ilink32 -ap -Tpe -x -Gn -v c0x32 korg_syro_comp.obj korg_syro_func.obj korg_syro_volcasample.obj korg_syro_vo
lcasample_exsample.obj, syro.exe,,import32 cw32 > LERR
type LERR
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
dir *.exe
2014/12/07 21:45 22,528 example.exe
2015/01/02 13:32 67,584 SYRO.exe
Windows プログラム用ランタイム.lib・スタートアップ.obj 等々色々差異はあったけど、
「生成された syro stream のサイズが違う」の主原因は、コンパイラオプション '-K' だった。
・'-K': デフォルトで 'char' を 'unsigned char' として扱う(大意)
・TurboC 時代からずっとつかっていたオプション
・文字列中で漢字(Shift-JIS)を比較する時には 'unsigned char' の方が便利
・それはそうとして、「Unicode」に移行しないとマズいかな [C++BuilderXE5]含めて
・SDK ソース(alldata 処理)中に 「'singed char' として比較」がある? 今後調べる
※ 今、気付いた! 「Boaland」じゃなくて「Borland」だった。
誤表記、容赦
前の分、修正しなくていいよね?
syro stream 生成とテスト
バッチ test.bat
syro sample.wav ac:preset.asp
fc /B sample.wav sample_.wav
syro pattern.wav p1:p01.dat p2:p02.dat p3:p03.dat p4:p04.dat p5:p05.dat p6:p06.dat p7:p07.datp 8:p08.dat p9:p09.dat p10:p10.dat
fc /B pattern.wav pattern_.wav
実行結果
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>test
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>syro sample.wav ac:preset.asp
Input data 1 : Sample All(Compress bit=16), ok.
Complete to convert.
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>fc /B sample.wav sample_.wav
ファイル sample.wav と SAMPLE_.WAV を比較しています
FC: 相違点は検出されませんでした
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>syro pattern.wav p1:p01.dat p2:p02.dat p3:p03.dat p4:p04.dat p5:p05.dat p6:p06.
dat p7:p07.dat p8:p08.dat p9:p09.dat p10:p10.dat
Input data 1 : Pattern, number = 1, ok.
Input data 2 : Pattern, number = 2, ok.
Input data 3 : Pattern, number = 3, ok.
Input data 4 : Pattern, number = 4, ok.
Input data 5 : Pattern, number = 5, ok.
Input data 6 : Pattern, number = 6, ok.
Input data 7 : Pattern, number = 7, ok.
Input data 8 : Pattern, number = 8, ok.
Input data 9 : Pattern, number = 9, ok.
Input data 10 : Pattern, number = 10, ok.
Complete to convert.
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>fc /B pattern.wav pattern_.wav
ファイル pattern.wav と PATTERN_.WAV を比較しています
FC: 相違点は検出されませんでした
次へ:04 ソースを弄る(1)