Upload
fd0
View
1.029
Download
6
Embed Size (px)
Citation preview
Crystal on cygwin (WIP)
@fd0 東京 Crystal 勉強会 #2 in 渋谷 (2015/10/23)
1
Introduction
• twitter : fd0 / github : fd00
• 技術ブログで有名らしい会社から来ました
• Crystal 歴 : ほぼゼロ
2
Motivation
• Crystal は 2015/10/23 時点で mac と linux しかサポートしてない (windows branch とかあるけどよく読んでない…)
• Crystal の backend は LLVM
• ということは target に x86_64-unknown-cygwin を指定すれば cygwin 向け *.o を吐ける?
3
Trial & Error
• 「hello world でも build してみるかな」
• undefined constant がたくさんでてくる
• src/**/*.cr には ifdef darwin や ifdef linux で分けられた OS 毎の定義が存在する
• そこに片っ端から ifdef cygwin を追加する
• https://gist.github.com/fd00/8dd9b9b0d7f96dd453ee
4
Compilation
(mac)
$ echo ‘puts “Hello, world!”’ > helloworld.cr
$ crystal —single-module —cross-compile cygwin -target x86_64-unknown-windows helloworld.cr
$ file helloworld.o
helloworld.o: ACB Archive data
5
Linkage
(cygwin)
$ gcc helloworld.o -levent -lgc -lpcl —lpcre
$ ./a.exe
[1] 2584 segmentation fault (core dumped) ./a.exe
6
Debug
$ gdb ./a.exe GNU gdb (GDB) 7.8 Reading symbols from ./a.exe...done. (gdb) run Starting program: /cygdrive/e/crystal/a.exe [New Thread 1296.0x5b8] [New Thread 1296.0x95c] [New Thread 1296.0x358]
Program received signal SIGSEGV, Segmentation fault. 0x000000010040156e in __crystal_main () (gdb) where #0 0x000000010040156e in __crystal_main () #1 0x000000010040d6a0 in main ()
7
__crystal_main?
• compiler/crystal/codegen あたりで LLVM を使って生成されてる関数っぽい
• それ以上のことは未調査
8
Conclusion
• cygwin 向けの crystal 環境を目指して調査した
• 簡単な executable をつくるまでは到達した
• SEGV の原因は codegen のコードを読んで調べたい (気が向いたら)
9