9
Crystal on cygwin (WIP) @fd0 東京 Crystal 勉強会 #2 in 渋谷 (2015/10/23) 1

Crystal on cygwin (WIP)

  • Upload
    fd0

  • View
    1.029

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Crystal on cygwin (WIP)

Crystal on cygwin (WIP)

@fd0 東京 Crystal 勉強会 #2 in 渋谷 (2015/10/23)

1

Page 2: Crystal on cygwin (WIP)

Introduction

• twitter : fd0 / github : fd00

• 技術ブログで有名らしい会社から来ました

• Crystal 歴 : ほぼゼロ

2

Page 3: Crystal on cygwin (WIP)

Motivation

• Crystal は 2015/10/23 時点で mac と linux しかサポートしてない (windows branch とかあるけどよく読んでない…)

• Crystal の backend は LLVM

• ということは target に x86_64-unknown-cygwin を指定すれば cygwin 向け *.o を吐ける?

3

Page 4: Crystal on cygwin (WIP)

Trial & Error

• 「hello world でも build してみるかな」

• undefined constant がたくさんでてくる

• src/**/*.cr には ifdef darwin や ifdef linux で分けられた OS 毎の定義が存在する

• そこに片っ端から ifdef cygwin を追加する

• https://gist.github.com/fd00/8dd9b9b0d7f96dd453ee

4

Page 5: Crystal on cygwin (WIP)

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

Page 6: Crystal on cygwin (WIP)

Linkage

(cygwin)

$ gcc helloworld.o -levent -lgc -lpcl —lpcre

$ ./a.exe

[1] 2584 segmentation fault (core dumped) ./a.exe

6

Page 7: Crystal on cygwin (WIP)

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

Page 8: Crystal on cygwin (WIP)

__crystal_main?

• compiler/crystal/codegen あたりで LLVM を使って生成されてる関数っぽい

• それ以上のことは未調査

8

Page 9: Crystal on cygwin (WIP)

Conclusion

• cygwin 向けの crystal 環境を目指して調査した

• 簡単な executable をつくるまでは到達した

• SEGV の原因は codegen のコードを読んで調べたい (気が向いたら)

9