Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

hsdisをMacでビルドする

Java Day Tokyo 2016に出たところ、hsdisをもうProject Kenaiからダウンロードしてはいけない、古いビルドだから新しいCPUに対応していないということを聞きました。 そのため、帰宅してすぐビルドしました。簡単でした。

まずhsdisディレクトリに移動します。

$ cd jdkd9-b81/hotspot/src/share/tools/hsdis

binutilsをダウンロードします。 http://ftp.gnu.org/gnu/binutils/で最新のバージョン番号を調べてからwgetします。

$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.gz                                                                                                                                                        jdk1.8.0_65 ruby-2.0.0
--2016-05-25 15:26:52--  http://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.gz
Connecting to 10.5.81.33:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 34832117 (33M) [application/x-gzip]
Saving to: 'binutils-2.26.tar.gz'

binutils-2.26.tar.gz                                       100%[==========================================================================================================================================>]  33.22M   256KB/s   in 2m 35s 

2016-05-25 15:29:28 (219 KB/s) - 'binutils-2.26.tar.gz' saved [34832117/34832117]

binutilsを解凍します。

$ tar xzf binutils-2.26.tar.gz
$ sed -ri 's/development=.*/development=false/' ./binutils-2.26/bfd/development.sh # set development to false

Ubuntuでは、以下のインストールが必要です。

sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev g++-multilib mercurial texinfo

makeします。

$ make BINUTILS=binutils-2.26 ARCH=amd64
[ -d build/macosx-amd64 ] || mkdir -p build/macosx-amd64
...
hsdis.c:137:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
hsdis.c:207:11: warning: enumeration value 'dis_noninsn' not handled in switch [-Wswitch]
  switch (itype) {
          ^
2 warnings generated.

2つ警告は出ましたが、makeできました。

$ ls -lat build/macosx-amd64/
total 4152
drwxr-xr-x   12 jyukutyo  staff      408  5 25 15:34 .
-rwxr-xr-x    1 jyukutyo  staff  1676824  5 25 15:34 hsdis-amd64.dylib
drwxr-xr-x   29 jyukutyo  staff      986  5 25 15:34 opcodes
drwxr-xr-x  107 jyukutyo  staff     3638  5 25 15:34 bfd
drwxr-xr-x   23 jyukutyo  staff      782  5 25 15:34 zlib
drwxr-xr-x   79 jyukutyo  staff     2686  5 25 15:33 libiberty
drwxr-xr-x    8 jyukutyo  staff      272  5 25 15:33 intl
-rw-r--r--    1 jyukutyo  staff   381609  5 25 15:33 Makefile
-rw-r--r--    1 jyukutyo  staff    23885  5 25 15:33 config.log
-rwxr-xr-x    1 jyukutyo  staff    31257  5 25 15:32 config.status
-rw-r--r--    1 jyukutyo  staff       13  5 25 15:32 serdep.tmp
drwxr-xr-x    3 jyukutyo  staff      102  5 25 15:32 ..

このhsdis-amd64.dylibをJava 8までなら$JAVA_HOME/jre/lib/amd64に、Java 9以降なら$JAVA_HOME/libに配置します。