0
|
1 # SML#をMacにインストールした時のメモ
|
|
2
|
|
3 ## SML#とは
|
|
4 SML#は東北大学天気通信研究所が開発を進めているプログラミング言語。
|
|
5
|
|
6 SML#ではStandard MLとの後方互換性, C言事の直接連携, マルチコアCPU上のネイティブスレッドサポートなどの特徴があるプログラミング言語。バックエンドにLLVMを使用している。
|
|
7
|
|
8 [SML#ホームページ](http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/)
|
|
9
|
|
10 ## SML#のインストール
|
|
11
|
|
12 SML#のインストールには 32bitのGMP(https://gmplib.org )とLLVM3.4(http://llvm.org/releases )が必要
|
|
13
|
|
14 ### GMPの32bit版インストール
|
|
15 ```
|
|
16 % ./configure ABI=32 --prefix=インストール先
|
|
17 % make -j
|
|
18 % make install
|
|
19 ```
|
|
20
|
|
21 既存のGMPライブラリとの衝突を防ぐために --prefix オプションをつけると良い.
|
|
22
|
|
23 ### LLVM3.4の32bit版インストール
|
|
24 configure時に
|
|
25
|
|
26 ```
|
|
27 % ./configure CC='gcc -m32' CXX='g++ -m32' .....
|
|
28 ```
|
|
29
|
|
30 とつけるそれ以外は基本的に[[LLVM]] を参照
|
|
31
|
|
32 ### SML#のインストール
|
|
33 ソースは公式ホームページに公開している([ダウンロード先](http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/?Download))
|
|
34 ```
|
|
35 % ./configure CC='gcc -m32' CXX='g++ -m32' LD='ld -m elf_i386' LDFLAG="-L/インストールしたGMPのlibへのPATH" --prefix=
|
|
36 % make -j
|
|
37 % make install
|
|
38 ```
|
|
39
|
|
40 でprefix先に bin, libが出来る
|
|
41
|
|
42 ```
|
|
43 % prefix/bin/smlsharp
|
|
44 ```
|
|
45 でsml#の対話モードが立ち上がる
|
|
46
|
|
47 ```
|
|
48 % prefix/bin/smlsharp example.sml
|
|
49 ```
|
|
50 でsml#プログラムをコンパイルできる
|
|
51
|
|
52 ## lldbで追う(Cで書かれている部分だけ)
|
|
53 SML#のコンパイラはSML#で書かれているため、lldbでは追うことができない。
|
|
54
|
|
55 ランタイムLibraryはCで書かれているためそれは追うことが可能。
|
|
56
|
|
57 ```
|
|
58 % lldb prefix/bin/smlsharp int.sml
|
|
59 (lldb) target create "../build/bin/smlsharp"
|
|
60 maiCurrent executable set to '../build/bin/smlsharp' (i386).
|
|
61 (lldb) settings set -- target.run-args "int.sml"
|
|
62 (lldb) b main
|
|
63 Breakpoint 1: where = smlsharp`main + 12 at main.c:16, address = 0x0000270c
|
|
64 (lldb) r
|
|
65 Process 1939 launched: '../build/bin/smlsharp' (i386)
|
|
66 Process 1939 stopped
|
|
67 * thread #1: tid = 0x1dcb20, 0x0000270c smlsharp`main(argc=2, argv=0xbffff9fc) + 12 at main.c:16, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
|
|
68 frame #0: 0x0000270c smlsharp`main(argc=2, argv=0xbffff9fc) + 12 at main.c:16
|
|
69 13 int
|
|
70 14 main(int argc, char **argv)
|
|
71 15 {
|
|
72 - > 16 sml_init(argc, argv);
|
|
73 17 _SMLmain();
|
|
74 18 sml_finish();
|
|
75 19 return 0;
|
|
76 ```
|