coins memo no.4
前回の記事はこちら
coins関係はこちら
まず,コンパイルする環境を整える.
流れとしては
cソース -> coinsで最適化 -> アセンブラ(macならgas)ソース -> gccでアセンブルとリンク -> 実行ファイル
となる.で,めんどいのでcoins/classes下にtest_srcディレクトリとtest_logディレクトリを作る.
$ cd coins/classes
$ mkdir test_src test_log
test_srcフォルダにテストに使うファイルを置く事にする.
さらにこんなスクリプトを作る.
# coins/classes/compile.sh
#!/bin/bash SRCDIR="./test_src" LOGDIR="./test_log" COINSLOG="coins.log" GCCLOG="gcc.log" ASOUT="asm.s" OUT="a.out" SSAOPT="divex" echo $0 start compile echo for i in $@ do echo target : $i TARGETLOG=$LOGDIR/$(date +%y%m%d-%H%M%S)-$i if ! mkdir -p $TARGETLOG then echo mkdir:cannot create the log directory. exit 1 fi echo "java coins.driver.Driver -coins:assembler=as,ssa-opt=$SSAOPT,target=x86_64-mac -I../lang/c/include -S -o $ASOUT $SRCDIR/$i &>$TARGETLOG/$ASLOG" if ! java coins.driver.Driver -coins:assembler=as,ssa-opt=$SSAOPT,target=x86_64-mac -I../lang/c/include -S -o $ASOUT $SRCDIR/$i &>$TARGETLOG/$COINSLOG then echo java:compile error exit 1 fi echo "gcc -arch x86_64 -lm -o $OUT $ASOUT &>$TARGETLOG/$GCCLOG" if ! gcc -arch x86_64 -lm -o $OUT $ASOUT &>$TARGETLOG/$GCCLOG then echo gcc:compile error mv $ASOUT $TARGETLOG/$ASOUT exit 1 fi mv $OUT $TARGETLOG/$OUT mv $ASOUT $TARGETLOG/$ASOUT echo $i is done echo done echo compile was completed
これでとりあえず自動的にログとってコンパイルできる.
その実行はこう../test_srcディレクトリにtest1.cとtest2.cがあるなら,
$ chmod +x compile.sh
$ ./compile.sh test1.c test2.c
./compile.sh start compiletarget : test1.c
java coins.driver.Driver -coins:assembler=as,ssa-opt=divex,target=x86_64-mac -I../lang/c/include -S -o asm.s ./test_src/test.c &>./test_log/090118-225300-test1.c/
gcc -arch x86_64 -lm -o a.out asm.s &>./test_log/090118-225300-test1.c/gcc.log
test1.c is donetarget : test2.c
java coins.driver.Driver -coins:assembler=as,ssa-opt=divex,target=x86_64-mac -I../lang/c/include -S -o asm.s ./test_src/test.c &>./test_log/090118-225388-test2.c/
gcc -arch x86_64 -lm -o a.out asm.s &>./test_log/090118-225388-test2.c/gcc.log
test2.c is donecompile was completed
こんなかんじ.
出来上がったアセンブラファイルとか実行ファイルはtest_logディレクトリの夫々のディレクトリに移される.
うーん,一旦ここまで.