2018년 5월 14일 월요일

Redhat ppc64le 환경에서 OpenJFX build하기 (OpenJDK 8)

먼저, 이 posting은 아래 OpenJFX install guide를 기본으로 따라한 것입니다.   저 link에 있는 좀 더 최신 버전의 JFX는 java 9을 필요로 하더군요.  아마 아직 Java 9보다는 java 8이 표준인 것 같아 OpenJDK 8 기준으로 이걸 작성했습니다.   OpenJDK 8을 지원하는 JFX는 8u 버전이며, 이는 또 gradle 버전 1.8만 지원합니다. 

https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX#BuildingOpenJFX-OracleEnterpriseLinux7andFedora21

먼저 필요 fileset들을 설치합니다.

[ibm@centos01 ~]$ sudo yum install mercurial bison flex gperf ksh pkgconfig libpng12-devel libjpeg-devel libxml2-devel libxslt-devel systemd-devel glib2-devel  gtk2-devel pango-devel freetype-devel ant alsa-lib-devel freetype-devel cups-devel libXtst-devel libXt-devel libXrender-devel libXi-devel libX11-devel libXext-devel libffi-devel ccache make gcc gcc-c++ libstdc++-devel giflib-devel curl rpm-build gpg rpmbuild rpm-sign

gradle 1.8을 download 합니다.

[ibm@centos01 files]$ wget https://services.gradle.org/distributions/gradle-1.8-all.zip

[ibm@centos01 files]$ unzip gradle-1.8-all.zip

[ibm@centos01 files]$ export PATH=~/files/gradle-1.8/bin:$PATH

[ibm@centos01 files]$ which gradle
~/files/gradle-1.8/bin/gradle

이제 source code를 download 받습니다.

[ibm@centos01 files]$ git clone https://github.com/javafxports/openjdk-jfx.git

[ibm@centos01 files]$ cd openjdk-jfx

그리고 OpenJDK 8을 지원하는 버전 중 비교적 최신인 8u51-b09로 checkout 합니다.

[ibm@centos01 openjdk-jfx]$ git checkout tags/8u51-b09

이제 gradle을 이용하여 JFX를 build합니다.  그러나 첫 시도는 아래와 같이 error로 끝납니다.

[ibm@centos01 openjdk-jfx]$ gradle
...
FAILURE: Build failed with an exception.

* Where:
Build file '/home/ibm/files/openjdk-jfx/build.gradle' line: 250

* What went wrong:
A problem occurred evaluating root project 'openjdk-jfx'.
> FAIL: Unknown and unsupported build architecture: ppc64le

이는 다음과 같이 ppc64le일 경우도 그냥 build하도록 308번째 line을 바꿔주면 해결됩니다.


[ibm@centos01 openjdk-jfx]$ vi /home/ibm/files/openjdk-jfx/build.gradle
...
// } else if (IS_LINUX && OS_ARCH != "i386" && OS_ARCH != "amd64") {
} else if (IS_LINUX && OS_ARCH != "ppc64le" && OS_ARCH != "amd64") {
    fail("Unknown and unsupported build architecture: $OS_ARCH")
}

이제 다시 gradle을 수행합니다.   다음과 같이 잘 됩니다.

[ibm@centos01 openjdk-jfx]$ gradle
...
:swt:assemble
:systemTests:compileJava UP-TO-DATE
:systemTests:processResources UP-TO-DATE
:systemTests:classes UP-TO-DATE
:systemTests:jar
:systemTests:assemble
:web:assemble
:jfxrtLinux
:jfxrtIndexLinux
:jfxswtLinux
:jfxswtIndexLinux
:jmxLinux
:copySources SKIPPED
:zipSources SKIPPED
:src SKIPPED
:sdkLinux
modules/graphics/build/libs/font/linux/libjavafx_font.so
modules/graphics/build/libs/prism/linux/libprism_common.so
modules/graphics/build/libs/prismSW/linux/libprism_sw.so
modules/graphics/build/libs/prismES2/linux/libprism_es2.so
modules/graphics/build/libs/glass/linux/libglass.so
modules/graphics/build/libs/iio/linux/libjavafx_iio.so
modules/graphics/build/libs/fontFreetype/linux/libjavafx_font_freetype.so
modules/graphics/build/libs/fontPango/linux/libjavafx_font_pango.so
:sdk

BUILD SUCCESSFUL

Total time: 3 mins 44.846 secs

이렇게 build된 binary들은 build/sdk에 생성되며, 물론 ppc64le용으로 만들어진 것입니다.

[ibm@centos01 openjdk-jfx]$ ls build/sdk
bin  lib  man  rt

[ibm@centos01 openjdk-jfx]$ ls build/sdk/bin
javafxpackager  javapackager

[ibm@centos01 openjdk-jfx]$ file build/sdk/rt/lib/ppc64le/libglass.so
build/sdk/rt/lib/ppc64le/libglass.so: ELF 64-bit LSB shared object, 64-bit PowerPC or cisco 7500, version 1 (SYSV), dynamically linked, BuildID[sha1]=aba660bd5a3247c07b783eeede8ea6ce685f9070, not stripped

저 build directory를 통째로 tar로 말아 둡니다.

[ibm@centos01 openjdk-jfx]$ tar -zcvf openjdk-jfx.tgz build

[ibm@centos01 openjdk-jfx]$ ls -l openjdk-jfx.tgz
-rw-rw-r--. 1 ibm ibm 15540240 May 14 17:10 openjdk-jfx.tgz

위 파일을 아래 google drive에 올려두었습니다.

https://drive.google.com/open?id=19yjDL37nI-UecGaPirkwOSTws4fBgwJT

댓글 없음:

댓글 쓰기