2018년 5월 15일 화요일

Redhat ppc64le 환경에서의 OpenJDK 9과 OpenJFX의 build

앞선 posting은 OpenJDK 8에서 OpenJFX를 올린 것이었습니다만, 현재 OpenJFX의 current version은 JDK 9부터 지원됩니다.   이번 posting에서는 OpenJDK 9을 ppc64le 환경에서 build하고, 그를 지원하는 OpenJFX도 build해보겠습니다.

사전에 필요한 rpm package는 전과 동일하게 설치합니다.

[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

OpenJFX의 current version에서는 gradle 4.3이 필요합니다.

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

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

[ibm@centos01 files]$ cd gradle-4.3/bin

[ibm@centos01 bin]$ ./gradle --version

------------------------------------------------------------
Gradle 4.3
------------------------------------------------------------

Build time:   2017-10-30 15:43:29 UTC
Revision:     c684c202534c4138b51033b52d871939b8d38d72

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_161 (Oracle Corporation 25.161-b14)
OS:           Linux 3.10.0-693.11.6.el7.ppc64le ppc64le


이제 JDK 9 부터 build 합니다.

[ibm@centos01 ~]$ mkdir ~/openjdkathome && cd ~/openjdkathome

[ibm@centos01 openjdkathome]$ git clone https://github.com/hgomez/obuildfactory.git

다음과 같이 명령을 내리면 hg 명령을 통해 source를 추가로 download 받는 것부터 compile까지 일괄적으로 이루어집니다.  hg download 과정이 특히 오래 걸리고 compile도 무척 많은 CPU를 사용하며 오래 걸린다는 점에 유의하십시요.

[ibm@centos01 openjdkathome]$ XUSE_NEW_BUILD_SYSTEM=true XBUILD=true ./obuildfactory/openjdk9/linux/standalone-job.sh
...
Creating jre jimage
Creating jdk jimage
WARNING: Using incubator modules: jdk.incubator.httpclient
WARNING: Using incubator modules: jdk.incubator.httpclient
Stopping sjavac server
Finished building target 'images' in configuration 'linux-x86-normal-server-release'
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.ibm.openjdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.ibm.openjdk9, mixed mode)
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.ibm.openjdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.ibm.openjdk9, mixed mode)
~/openjdkathome/sources/openjdk9/build/linux-x86-normal-server-release/images ~/openjdkathome
produced tarball files under /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9
-rw-rw-r--. 1 ibm ibm 337406797 May 14 10:36 /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9/jdk-ppc64le-b94-20180514.tar.bz2
-rw-rw-r--. 1 ibm ibm 188142592 May 14 10:37 /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9/jre-ppc64le-b94-20180514.tar.bz2
~/openjdkathome

생선된 tar ball은 아래 directory에 있습니다.  JDK와 JRE가 각각 하나씩 만들어집니다.

[ibm@centos01 openjdkathome]$ ls -l OBF_DROP_DIR/openjdk9
total 513236
-rw-rw-r--. 1 ibm ibm 337406797 May 14 10:36 jdk-ppc64le-b94-20180514.tar.bz2
-rw-rw-r--. 1 ibm ibm 188142592 May 14 10:37 jre-ppc64le-b94-20180514.tar.bz2

우리는 여기서 JDK를 설치할 것입니다.  다음과 같이 /usr/local에 풀어놓고 JAVA_HOME 및 PATH를 설정해주시면 됩니다.

[ibm@centos01 openjdkathome]$ cd /usr/local

[ibm@centos01 local]$ sudo tar -jxvf ~/openjdkathome/OBF_DROP_DIR/openjdk9/jdk-ppc64le-b94-20180514.tar.bz2

[ibm@centos01 local]$ export JAVA_HOME=/usr/local/jdk
[ibm@centos01 local]$ export PATH=$JAVA_HOME/bin:/home/ibm/files/gradle-4.3/bin:$PATH

[ibm@centos01 local]$ java -fullversion
openjdk full version "9-internal+0-adhoc.ibm.openjdk9"

이제 open JFX의 source code를 받아옵니다.  Mericurial의 hg 명령을 써서 가져오는데, 처음 몇 분 정도는 source를 전혀 못 가져오고 hang만 걸려 있는 것처럼 보이지만 한 10~20분 기다리니 결국은 받아오니 인내심을 가지시기 바랍니다.   또는 지난 번처럼 github에서 받아오셔도 됩니다.  github에서 받아오는 것이 훨씬 빠릅니다.

[ibm@centos01 files]$ hg clone http://hg.openjdk.java.net/openjfx/jfx-dev/rt
destination directory: rt
requesting all changes
adding changesets
adding manifests
adding file changes
added 10923 changesets with 178749 changes to 85736 files
updating to branch default
31760 files updated, 0 files merged, 0 files removed, 0 files unresolved

[ibm@centos01 files]$ cd ../rt

[ibm@centos01 rt]$ ls -ltr
total 300
-rw-rw-r--.  1 ibm ibm    116 May 14 10:13 README
-rw-rw-r--.  1 ibm ibm  19274 May 14 10:13 LICENSE
-rw-rw-r--.  1 ibm ibm   1522 May 14 10:13 ASSEMBLY_EXCEPTION
-rw-rw-r--.  1 ibm ibm   2114 May 14 10:13 ADDITIONAL_LICENSE_INFO
drwxrwxr-x.  7 ibm ibm    102 May 14 10:13 apps
-rw-rw-r--.  1 ibm ibm   3166 May 14 10:13 build.properties
-rw-rw-r--.  1 ibm ibm 232809 May 14 10:13 build.gradle
drwxrwxr-x.  5 ibm ibm     60 May 14 10:13 dependencies
drwxrwxr-x.  4 ibm ibm    272 May 14 10:13 buildSrc
drwxrwxr-x. 26 ibm ibm   4096 May 14 10:13 netbeans
-rw-rw-r--.  1 ibm ibm   2176 May 14 10:13 gradlew.bat
-rw-rw-r--.  1 ibm ibm   5296 May 14 10:13 gradlew
-rw-rw-r--.  1 ibm ibm  13404 May 14 10:13 gradle.properties.template
drwxrwxr-x.  4 ibm ibm     34 May 14 10:13 gradle
drwxrwxr-x.  2 ibm ibm     49 May 14 10:13 doc-files
-rw-rw-r--.  1 ibm ibm   2275 May 14 10:13 settings.gradle
drwxrwxr-x.  6 ibm ibm    123 May 14 10:13 tests
drwxrwxr-x. 12 ibm ibm    215 May 14 10:13 modules
drwxrwxr-x.  4 ibm ibm     36 May 14 10:13 tools

지난번 posting에서처럼, 여기서도 gradle에게 ppc64le도 지원하는 아키텍처라고 인식시키도록 다음 file을 살짝 수정해줍니다.  그러지 않을 경우 "FAIL: Unknown and unsupported build architecture: ppc64le" error를 만나시게 됩니다.

[ibm@centos01 rt]$ vi 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")
}


이제 grale을 수행해 보시면 잘 됩니다.

[ibm@centos01 rt]$ gradle
...
:zipSourceFilesStandaloneLinux
:buildModules
:createTestArgfilesLinux
:sdkLinux
:sdk

BUILD SUCCESSFUL in 2m 31s
111 actionable tasks: 111 executed

Build된 SDK는 build/modular-sdk 밑에 들어있습니다.

[ibm@centos01 rt]$ ls build/modular-sdk
make  modules  modules_conf  modules_legal  modules_libs  modules_src

다음과 같이 이 SDK가 제대로 build된 것인지 테스트해보겠습니다.

[ibm@centos01 rt]$ gradle :base:test
...
:sdk
:base:compileShimsJava UP-TO-DATE
:base:processShimsResources NO-SOURCE
:base:copyGeneratedShims UP-TO-DATE
:base:compileTestJava UP-TO-DATE
:base:processTestResources NO-SOURCE
:base:testClasses UP-TO-DATE
:base:test UP-TO-DATE

BUILD SUCCESSFUL in 10s
115 actionable tasks: 8 executed, 107 up-to-date

잘 됩니다.

[ibm@centos01 rt]$ du -sm .
1440    .

이제 이 rt directory를 tar로 돌돌 말면 됩니다.

[ibm@centos01 rt]$ cd ..

[ibm@centos01 files]$ tar -zcf openjfs.tgz rt

이 openjfs.tgz와 저 위에서 build한 jdk-ppc64le-b94-20180514.tar.bz2, jre-ppc64le-b94-20180514.tar.bz2은 아래 google drive에 올려두겠습니다.

openjfs.tgz    https://drive.google.com/open?id=1DYj_ZqzXsqSGNZ5cOuJVl9Dn9apJMCoo 

jdk-ppc64le-b94-20180514.tar.bz2   https://drive.google.com/open?id=17AVhSwUlPMLv7q975HpBE_wUc5bf-FdY

jre-ppc64le-b94-20180514.tar.bz2    https://drive.google.com/open?id=1On0UVyYOocDyImWxl28mDB2kopzsCVcE

댓글 없음:

댓글 쓰기