mac編譯openjdk8記錄
阿新 • • 發佈:2018-12-30
電腦配置:
電腦安裝的jdk: jdk1.8.0_151
準備工作:
1、關閉rootless:開機的時候長按command+R,等出來進度條走了,放開,然後進入恢復模式,開啟終端,執行 csrutil disable,成功後重啟
2、Openjdk8下載:
http://www.java.net/download/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip
3、XCode :直接從appstroe下載的
4、安裝XQuartz
安裝好後執行 ln -s /opt/X11/include/X11 /usr/local/include/X11
5、安裝freetype
brew install freetype
安裝ccache提高編譯速度
$ brew install ccache
6、link llvm-gcc和llvm-g++(不確定是否必須,保險起見加上):
sudo ln -s /usr/bin/llvm-g++ /Applications/Xcode.app/Contents/Developer/usr/bin/llvm-g++
sudo ln -s /usr/bin/llvm-gcc /Applications/Xcode.app/Contents/Developer/usr/bin/llvm-gcc
7、修改原始碼:
# 1. 修改generated-configure.sh(路徑:common/autoconf/generated-configure.sh)
註釋20061行
// as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5
註釋21640行
// as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5
# 2. 修改relocInfo.hpp(路徑:hotspot/src/share/vm/code/relocInfo.hpp)
修改367行
inline friend relocInfo prefix_relocInfo(int datalen);
修改472 行
inline relocInfo prefix_relocInfo(int datalen = 0) {
assert(relocInfo::fits_into_immediate(datalen), "datalen in limits");
return relocInfo(relocInfo::data_prefix_tag, relocInfo::RAW_BITS, relocInfo::datalen_tag | datalen);
}
# 3. 修改openjdk/hotspot/src/share/vm/opto/loopPredicate.cpp
修改775行為
assert(rng->Opcode() == Op_LoadRange || _igvn.type(rng)->is_int()->_lo >= 0, "must be");
# 4.修改openjdk/hotspot/src/share/vm/runtime/virtualspace.cpp
修改331行為
if (base() != 0) {
開始編譯:
1、改資料夾許可權
為了防止中間有許可權問題,我直接給整個openjdk的資料夾受了777許可權
chmod -R 777 openjdk
2、執行configure
sh configure --with-debug-level=slowdebug --with-target-bits=64 --with-jvm-variants=server --with-jdk-variant=normal --with-milestone=internal --with-update-version=b25 --with-build-number=b25 --with-num-cores=2 --with-jobs=2 CC=clang CXX=clang++ --with-freetype-include=/usr/local/include/freetype2 --with-freetype-lib=/usr/local/lib/ --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home --enable-ccache
3、執行make
make COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' CC=clang USE_CLANG=true LP64=1
4、成功
最後
前面寫的準備工作基本上把我中間遇到的問題都包括了,那些要修改的原始碼就是問題的解決。