トップ 追記

Route 477

過去の日記


2014-12-09

[types] MacでSML#を動かす

ちょっと手元でSML#を動かしたかったのだけど、オフィシャルにはMacPortsのパッケージしかなかった。
そこでhomebrewと組み合わせて自前でのコンパイルを試みた。

brew + コンパイル

SML# 2.0.0のコンパイルにはLLVM 3.4が必要である。普通にbrew install llvmすると3.5が入ってしまうので、何らかの工夫が必要になる。
brewで古いバージョンを入れる方法はいろいろあるようだが、ここではhomebrew-versionsを使ってみた。

$ brew install homebrew/versions/llvm34
$ cd /usr/local/opt/llvm34/bin/
$ ln -s llvm-config-3.4 llvm-config
$ cd ~/somewhere/smlsharp-2.0.0
$ ./configure --with-llvm=/usr/local/opt/llvm34 --enable-native=x86-darwin && make
(中略)
g++  -L/usr/local/Cellar/llvm34/3.4.2/lib/llvm-3.4/lib \
      src/runtime/smlsharp_entry.o \
      precompiled/x86.o \
      src/llvm/main/llvm_support.o src/llvm/main/SMLSharpGC.o \
      src/runtime/libsmlsharp.a \
      -ldl -lgmp -lm  -lLLVMLTO -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMIRReader -lLLVMBitReader -lLLVMAsmParser -lLLVMMCDisassembler -lLLVMMCParser -lLLVMInstrumentation -lLLVMInterpreter -lLLVMMCJIT -lLLVMJIT -lLLVMCodeGen -lLLVMObjCARCOpts -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lz -lpthread -lffi -lcurses -lm \
      -o minismlsharp
ld: warning: ignoring file precompiled/x86.o, file was built for i386 which is not the architecture being linked (x86_64): precompiled/x86.o
Undefined symbols for architecture x86_64:
  "__SMLmain", referenced from:
      _main in smlsharp_entry.o
  "__SMLstackmap", referenced from:
      _sml_control_init in libsmlsharp.a(control.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [minismlsharp] Error 1

うーん、うまく行かない。

Ubuntuを試す

VMWare上にUbuntuの環境があるので、そっちも試してみた。

  • Ubuntu 14.04 trustyを使っている
  • smlsharp-2.0.0-2_ubuntu-amd64.debを入れようとするとlib32gmp-devが必要と言われる
  • そのようなパッケージは見つからない

ということで

ちょっと触りたいだけならDockerで動かすのが一番簡単っぽい。

$ docker run -i -t mzpi/smlsharp  /bin/bash
(イメージのダウンロード部分は中略)
root@528ee3cd7f3e:/# smlsharp 
SML# 2.0.0 (2014-04-04 11:47:08 JST) for i686-unknown-linux-gnu with LLVM 3.4
# 1;
val it = 1 : int 

2014-11-05

[memo][mac][docker] MacにDockerを入れた

まだ入れただけ。

  • とりあえずbrew install docker boot2docker
  • boot2docker initしてみたけど、VirtualBox 4.2だとなんかうまく動かなかった
  • Virtual 4.3を入れて、boot2docker delete → boot2docker init → boot2docker up でうまく行った *1
% VBoxManage -v
4.3.18r96516

boot2docker upが成功すると以下のようになる。

% boot2docker up
Waiting for VM and Docker daemon to start...
.o
Started.
Writing /Users/yhara/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/yhara/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/yhara/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/yhara/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

ので、下の3行のexportを~/.zshrcに追加してsource ~/.zshrcする。このIPはboot2dockerで起動したVirtualBox VMのもの *2

docker versionで以下のような表示が出たら、ちゃんとVirtualBox VM上のdocker serverに接続できている。

% docker version
Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): darwin/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

*1 間でbrew uninstall/installとかしたかも

*2 なのでlocalhostとかに書き換えてはいけない


2014-10-22

[misc] VMWare上のWindows 7にHDDを追加する

最近VMWare Fusion上のWindows 7を再インストールしたんだけど、仮想HDDの追加にちょっと手間取ったので手順をメモっておく。

  1. まずVMWareのVMの設定から「デバイスの追加」を選び、「新規ハードディスク」を追加する。(このとき仮想マシンはいったんシャットダウンしておかないと追加できない)
  2. Windowsを起動する。
  3. ここでエクスプローラを起動して、新しいHDDが見えてたりすると便利なのだけど、C:ドライブしかない。
  4. コントロールパネル→管理ツール→コンピュータの管理→ディスクの管理 を選択。
  5. ディスク0の他にディスク1があるはずなので、右クリックからフォーマットを選ぶ。
  6. あとは全部デフォルトを選べばNTFSでクイックフォーマットされ、使えるようになるはず。今回はE:ドライブとして見えるようになった。

2014-10-21

[golang] unknown flag -trimpath

このgoji-wikiを手元で動かそうとしたら表題のようなエラーが。

$ hub clone https://github.com/mattn/goji-wiki/
$ cd goji-wiki
$ go get
(しばらく待つ)
$ go build
# github.com/flosch/pongo2
/usr/local/Cellar/go/1.2.1/libexec/pkg/tool/darwin_amd64/6g: unknown flag -trimpath
(略)

エラーメッセージで検索すると、「GOROOTとGOPATHが正しいかgo envで見てみろ」との情報が
試しにgo envしてみたら、GOROOTが1.2.1のものになっていた。さっきgo 1.3にアップグレードしたはずだからこれはおかしい。

.zshrcの設定を見ると確かにGOROOTを1.2.1にしている。設定を以下のようにすれば、goをバージョンアップしても.zshrcを直さなくて良いらしい。便利。

export GOROOT=/usr/local/opt/go/libexec

2014-09-24

[mac] MacBookにRを入れてグラフ描いてみた

ちょっとグラフが欲しくなって、Rを入れてみた。*1

基本的にはhomebrewで入れたんだけど、最近は単にbrew install rでは入らないみたい。先にbrew tap homebrew/scienceする必要がある。

あとX11が要るので、brew caskかなんかでxquartsをインストールしておく。

R言語のことは全く分かってないんだけど、read.csvとかでCSVファイルが読めるみたいです。

まとめ

$ brew tap homebrew/science
# xquartsを入れる(僕の環境には既に入っていたのでスキップ)
$ brew install r
$ /usr/local/bin/r  (← r をrailsコマンドにエイリアスしているのでフルパス指定…)
> a <- read.csv("a.csv")
> plot(a)
これでXが起動してグラフが出るはず。

*1 gnuplotも試したんだけど、なんかうまく期待したものが出なくて挫折


過去の日記