本篇文章主要介紹在MacOS
系統和Ubuntu
系統上如何編譯OpenJDK
項目代碼,並使用IDE
工具JetBrains CLion
(下文簡稱CLion
)來運行/調試OpenJDK
。文中僅包含兩種操做系統的特定版本(MacOS 10.15
和Ubuntu 16.04
)下的方法,不一樣版本下可能會略有差別。但願對讀者有必定的參考價值。html
整體來講,編譯OpenJDK11
在兩種系統上都沒有太大的阻礙,難度低於OpenJDK8
。編譯OpenJDK8
在Ubuntu
上比較簡單,在MacOS
上比較繁瑣複雜。java
完成編譯並實現調試OpenJDK
流程能夠分爲如下幾個步驟:python
OpenJDK
項目源代碼JDK
做爲BootJDK
Running Configure
(配置)Running Make
(構建)CLion
並進行Run/Debug
配置其中3-6步對於不一樣操做系統和不一樣OpenJDK
版本差別較大,其他步驟差別較小,因此本文的行文順序是先將1-二、7三部分以及一些前置知識作詳細介紹。在以後的具體場景(不一樣操做系統 + 不一樣OpenJDK
版本)中針對對這些部分只作差別點的特殊說明。linux
編譯調試的第一步固然是獲取到OpenJDK
的源代碼,獲取方式主要有如下三種:c++
OpenJDK
官方的Mercurial
倉庫下載OpenJDK
官方使用Mercurial
來進行版本控制。Mercurial
倉庫地址:hg.openjdk.java.net/,主要項目地址:git
項目 | 地址 |
---|---|
jdk | hg.openjdk.java.net/jdk/jdk |
jdk8u | hg.openjdk.java.net/jdk8u/jdk8u… |
jdk11u | hg.openjdk.java.net/jdk-updates… |
經過這種方式下載源代碼,須要先安裝Mercurial
工具,並使用hg clone <url>
下載源代碼。好比下載 jdk8u
使用以下命令:github
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/ 複製代碼
這種方式下載比較慢,並且會有中斷的狀況,不推薦使用。shell
Git
倉庫下載OpenJDK官方在GitHub
上有JDK項目的倉庫鏡像,主頁地址:github.com/openjdk,主要項目地址:macos
項目 | 地址 |
---|---|
jdk | github.com/openjdk/jdk |
jdk11u | github.com/openjdk/jdk… |
jdk12u | github.com/openjdk/jdk… |
但在官方git
倉庫中沒有看到 jdk11
如下的版本。json
除此以外還有一些非官方的鏡像Git
倉庫。好比AdoptOpenJDK
項目,主頁地址:github.com/AdoptOpenJD…,主要項目地址:
項目 | 地址 |
---|---|
jdk | github.com/AdoptOpenJD… |
jdk8u | github.com/AdoptOpenJD… |
jdk11u | github.com/AdoptOpenJD… |
使用這種方式須要安裝git
工具,並使用git clone <url>
下載源代碼。好比下載jdk8u
使用以下命令:
git clone https://github.com/AdoptOpenJDK/openjdk-jdk8u 複製代碼
git
工具使用方便,而且比從官方Mercurial
倉庫下載要快不少,推薦使用。
Mercurial
倉庫或者Git
倉庫 打包文件除此以外,OpenJDK
官方的Mercurial
倉庫還提供了直接下載壓縮包的入口,入口在各個項目頁面左側bz2
,zip
,gz
三個連接,點擊便可下載。以下圖所示:
一樣在GitHub
上的每一個項目均可如下載ZIP
格式的打包文件。以下圖所示:
顯然這種方式的缺點是缺乏版本控制的能力,若是對項目代碼進行了改動想要恢復是作不到的,也不可以方便地獲取最新代碼改動,可是相比前兩種方式更下載更快,也不要任何額外工具。
讓人以爲矛盾的是,編譯JDK以前咱們須要一個已經編譯好的JDK
做爲Boot JDK
。通常須要的JDK
版本是編譯版本前一版本的JDK
,好比編譯JDK8
須要JDK7
,編譯JDK11
須要JDK10
。 有幾種途徑能夠下載JDK
:
Oracle JDK
。下載須要登陸帳號OpenJDK
Oracle
提供的基於OpenJDK
的參考實現。但大部分只有Linux
版本
OpenJDK
。好比AdoptOpenJDK,可是沒有jdk8
如下版本Linux
系統下,還能夠經過軟件包管理器(好比Ubuntu
下的apt
,Centos
下的yum
)下載安裝JDK
CLion
對CMake
構建的項目支持很友好,但OpenJDK
項目是基於Make
構建的,對於使用Make
構建的項目,CLion
仍然能夠經過Compilation Database
來導入項目,而不用將其修改成CMake
項目。同時也能經過Compilation Database
實現代碼的分析、跳轉等功能,這對於咱們進行代碼調試頗有幫助。
有關於Compilation Database
的介紹能夠參考這幾篇文章:
Clang
官方的Compilation Database
介紹頁面:JSON Compilation Database Format Specification — Clang 11 documentationCompilation database
的各類工具:Compilation database — Sarcasm notebookCLion
的幫助頁面簡要介紹了Compilation Database
,以及在CLion
的使用:Compilation Database - Help | CLion對於基於Make
構建的OpenJDK
項目來講,有一些工具能夠生成Compilation Database
,好比下面幾個:
一般默認生成的Compilation Database
是一個compile_commands.json
文件。
除此以外,在OpenJDK 11u
及以後版本中,OpenJDK
官方提供了對於IDE
的支持,可使用make compile-commands
命令生成Compilation Database
,不須要使用額外的工具,具體命令能夠查看看源代碼目錄下的\doc\ide.md
讀者能夠選擇先跳過本小節,而後在完成前面幾個步驟以後再來根據本小節進行導入調試。
對於如何在CLion
中管理基於Make
構建的項目,CLion
的官方幫助文檔中有詳細的介紹: Managing Makefile Projects。
參考上述文檔,本小節簡要介紹瞭如何在CLion
中導入OpenJDK
項目並運行/調試的方法。請注意小節中所展現的圖示是基於Ubuntu 16.04
系統 + CLion 2020.1.1
環境下的,操做步驟基本也適用於MacOS 系統
下同版本的CLion
。
下載安裝CLion
,並安裝Makefile Support
插件。建議使用最新版本,比較老的版本是不支持Make
構建的項目的。
導入項目。打開CLion
,選擇Open Or Import
,選擇項目目錄中的compile_commands.json
文件,彈出框選擇Open as Project
,等待文件索引完成。
compile_commands.json
的生成方法及生成位置根據不一樣的OpenJDK
版本略有不一樣,具體位置請看下文具體場景的介紹。
建立自定義Build Target
。點擊File
菜單欄,Settings | Build, Execution, Deployment | Custom Build Targets
,點擊+
新建一個 Target
。
Name
:Target
的名字,以後在建立Run/Debug
配置的時候會看到這個名字Build
或者Clean
右邊的三點,彈出框中點擊+
新建兩個External Tool
配置以下:# 第一個配置以下,用來指定構建指令 # Program 和 Arguments 共同構成了所要執行的命令 "make all" Name: make Program: make Arguments: all Working directory: {項目的根目錄} # 第二個配置以下,用來清理構建輸出 # Program 和 Arguments 共同構成了所要執行的命令 "make clean" Name: make clean Program: make Arguments: clean Working directory: {項目的根目錄} 複製代碼
ToolChain
選擇Default
;Build
選擇make
(上面建立的第一個External Tool
);Clean
選擇make clean
(上面建立的第二個External Tool
)其中兩個
External Tool
配置中make
的參數能夠根據須要改變。通常狀況用於Build
的配置與執行構建時make
的target
保持一致便可。
建立自定義的Run/Debug configuration
。點擊Run
菜單欄,Edit Configurations
, 點擊+
,選擇Custom Build Application
,配置以下:
# Executable 和 Program arguments 能夠根據須要調試的信息自行選擇 # NameL:Configure 的名稱 Name: linux-x86_64-normal-server-slowdebug # Target:選擇上一步建立的 「Custom Build Target」 Target: linux-x86_64-normal-server-slowdebug # Executable:程序執行入口,也就是須要調試的程序 Executable: 這裏咱們調試`java`,選擇`{source_root}/build/{build_name}/jdk/bin/java`。 # Program arguments: 與 「Executable」 配合使用,指定其參數 Program arguments: 這裏咱們選擇`-version`,簡單打印一下`java`版本。 複製代碼
若是不想每次運行/調試前都執行Build
操做(在這裏就是Make
構建過程,比較耗時),能夠在編輯頁下方Before launch
框中刪除Build
條目。
點擊Run
/Debug
開始運行/調試。
gdb
(Ubuntu
下默認),調試的時候可能會發現gdb
報錯:Signal: SIGSEGV (Segmentation fault)
。解決辦法是,建立用戶家目錄建立.gdbinit
,內容以下:handle SIGSEGV pass noprint nostop
handle SIGBUS pass noprint nostop
複製代碼
lldb
(MacOS
下默認),調試的時候可能會發現lldb
報錯:SIGSEGV (signal SIGSEGV)
。解決辦法是,在用戶家目錄建立.lldbinit
,內容以下:break set -n main -C "process handle --pass true --stop false SIGSEGV" -C "process handle --pass true --stop false SIGBUS" 複製代碼
配合File Watchers
插件自動更新Compilation Database
(可選)
若是修改了項目代碼,須要從新生成Compilation Database
,通常狀況須要從新構建才能夠。
若是不想每次都從新手動構建,可使用Files Watcher
插件來實現監聽變動自動從新生成。詳見:www.jetbrains.com/help/clion/…
咱們這裏選擇從AdoptOpenJDK
的GitHub
倉庫下載源代碼。
# 首先須要安裝git工具(若是沒有的話) sudo apt-get install git # 克隆項目代碼,可能耗時較長 git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git 複製代碼
# 首先須要下載安裝 JDK7 做爲 BootJDK 方法見上文 # 安裝編譯器及構建工具 sudo apt-get install gcc g++ gdb make # 下載安裝依賴包 sudo apt-get install libasound2-dev libfreetype6-dev libcups2-dev libfontconfig1-dev libxext-dev libxrender-dev libxtst-dev libxt-dev 複製代碼
# 首先進入 OpenJDK8 源碼目錄 # 配置 sh ./configure --with-debug-level=slowdebug --disable-zip-debug-info --with-target-bits=64 --with-boot-jdk=/home/jiajiawang/software/jdk/jdk1.7.0_80 --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu/ 複製代碼
configure
參數說明:
參數 | 含義 |
---|---|
--with-debug-level | 調試信息的級別,可選值有release ,fastdebug ,slowdebug |
--disable-zip-debug-info | 禁止壓縮調試信息,設置爲true有助於調試 |
--with-target-bits | 選擇32位或者64位,根據操做系統選擇 |
--with-boot-jdk | BootJDK 的位置 |
--with-freetype-include --with-freetype-lib |
指定freetype 依賴位置,若是提示找不到freetype ,須要配置這兩個參數 |
參數的更多說明及更多參數請參考:OpenJDK 8 Build README - Configure
咱們可使用兩種工具來生成Compilation Database
# 下載Bear工具 sudo apt-get install bear # 構建,並使用bear工具生成Compilation Database bear make all 複製代碼
# 須要保證有python環境 # 安裝pip sudo apt-get install python-pip # pip安裝 compiledb pip install compiledb # 構建,並使用compiledb工具生成Compilation Database compiledb make all 複製代碼
更多make
的target
請參考OpenJDK 8 Build README - Make
若是沒有報錯,完成以後應該能夠在./build/linux-x86_64-normal-server-slowdebug/jdk
目錄下找到編譯以後的JDK
,驗證一下是否成功
~: cd build/linux-x86_64-normal-server-slowdebug/jdk/bin/ ~: ./java -version openjdk version "1.8.0-internal-debug" ...... 複製代碼
同時項目根目錄下應該同時有一個compile_commands.json
文件,而且不爲空。
步驟參見上文
# 首先須要安裝git工具(若是沒有的話) sudo apt-get install git # 克隆項目代碼,可能耗時較長 git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git 複製代碼
# 須要下載安裝 JDK10 做爲 BootJDK 方法見上文 # 安裝編譯器及構建工具 sudo apt-get install gcc g++ gdb make autoconf # 下載安裝依賴包 sudo apt-get install libfreetype6-dev libcups2-dev sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev sudo apt-get install libasound2-dev libffi-dev sudo apt-get install libfontconfig1-dev 複製代碼
# 配置 sh ./configure --with-debug-level=slowdebug --with-native-debug-symbols=internal --with-target-bits=64 --with-boot-jdk=/home/jiajiawang/software/jdk/jdk-10.0.2 複製代碼
若是不成功,通常多是缺乏部分依賴,根據腳本給出的提示安裝相應依賴便可。
configure
參數說明:
參數 | 含義 |
---|---|
--with-debug-level | 調試信息的級別,可選值有release ,fastdebug ,slowdebug |
--with-native-debug-symbols | 指定如何構建debug symbol ,可選值有none ,internal , external , zipped ,設置爲internal 能夠更好地調試 |
--with-target-bits | 選擇32位或者64位,根據操做系統選擇 |
--with-boot-jdk | bootjdk 位置 |
--with-freetype-include --with-freetype-lib |
指定freetype 依賴位置。若是提示找不到freetype ,須要配置這兩個參數 |
參數的更多說明及更多參數請參考:OpenJDK 11 Build README - Configure
# 生成Compilation Database make compile-commands # 構建 make all 複製代碼
更多make
的target
請參考OpenJDK 11 Build README - Make
完成以後應該能夠在./build/linux-x86_64-normal-server-slowdebug/jdk
目錄下找到編譯以後的jdk,驗證一下是否成功
~: cd build/linux-x86_64-normal-server-slowdebug/jdk/bin/ ~: ./java -version openjdk version "11.0.8-internal" 2020-07-14 ...... 複製代碼
同時在/build/linux-x86_64-normal-server-slowdebug/
目錄下會有compile_commands.json
文件,而且不爲空。
大體步驟與前文介紹相同。 須要注意的是在選擇/build/linux-x86_64-normal-server-slowdebug/
目錄下的compile_commands.json
文件導入項目以後須要更改項目的根目錄爲源碼的根目錄
(這裏也就是openjdk-11u
目錄)。點擊菜單Tools | Compilation Database | Change Project Root
,選擇源碼根目錄
(openjdk-11u
),等待從新索引完成。
MacOS 10.15.5
環境下構建OpenJDK
與Linux
下步驟類似,可是因爲OpenJDK 8
版本較老,其中一些依賴在MacOS 10.15.5
版本中已經沒法找到,致使在配置構建過程當中會出現各類問題,本文給出了一種比較簡單方便的辦法。
咱們選擇從AdoptOpenJDK
的github
倉庫下載源代碼
git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git 複製代碼
jdk7
做爲bootjdk
,方法見文章開頭。HomeBrew
。Homebrew
是一款MacOS
系統上的軟件包管理系統。/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 複製代碼
Xcode
。能夠直接在App Store
搜索安裝,也能夠在developer.apple.com/download/mo…下載離線安裝包安裝。可使用xcodebuild
命令驗證是否安裝成功,正確輸出版本號則代表正確安裝。xcodebuild -version
複製代碼
若是是離線安裝的話,可能會報xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
錯誤,這是由於xcodebuild
找不到新安裝的Xcode
,只須要執行下面這個命令便可。sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
複製代碼
# 安裝構建工具 brew install make 複製代碼
# 安裝freetype brew install freetype 複製代碼
若是不對代碼進行修改,在執行configure
的時候,會報各類錯誤。網上也有不少針對每種錯誤來修改源文件來解決報錯的方法, 這裏給出一種更爲方便的方法。
GitHub
上的stooke/jdk8u-xcode10這個項目,提供了對openjdk8
的代碼進行修改的patch
文件,對代碼修改以後,就能夠正常地configure
。
git clone git@github.com:stooke/jdk8u-xcode10.git 複製代碼
這個項目自己提供了腳原本完成下載源碼、下載依賴、代碼修改、配置、編譯、測試等工做,但咱們這裏只使用其中的修改代碼這部分。原項目中的README
可能已通過時了,經過查看其源代碼中的build8.sh
文件,可以大概瞭解其中的執行邏輯,據此我將其中的修改OpenJDK8
代碼的部分抽取出來,簡化以下:
新建一個shell
腳本patch.sh
,內容以下:
#!/bin/bash # JDK8 源碼所在目錄 JDK_DIR=`pwd` # 下載的jdk8u-xcode10項目所在目錄 PATCH_DIR="$(dirname $JDK_DIR)/jdk8u-xcode10" PATCH_DIR="$PATCH_DIR/jdk8u-patch" applypatch() { cd "$JDK_DIR/$1" echo "applying $1 $2" patch -p1 <$2 } patchjdkbuild() { echo "patch jdk" # JDK-8019470: Changes needed to compile JDK 8 on MacOS with clang compiler applypatch . "$PATCH_DIR/jdk8u-8019470.patch" # JDK-8152545: Use preprocessor instead of compiling a program to generate native nio constants # (fixes genSocketOptionRegistry build error on 10.8) applypatch jdk "$PATCH_DIR/jdk8u-jdk-8152545.patch" # fix WARNINGS_ARE_ERRORS handling applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-8241285.patch" # fix some help messages and Xcode version checks applypatch . "$PATCH_DIR/jdk8u-buildfix1.patch" # use correct C++ standard library #applypatch . "$PATCH_DIR/jdk8u-libcxxfix.patch" # misc clang-specific cleanup applypatch . "$PATCH_DIR/jdk8u-buildfix2.patch" # misc clang-specific cleanup; doesn't apply cleanly on top of 8019470 # (use -g1 for fastdebug builds) #applypatch . "$PATCH_DIR/jdk8u-buildfix2a.patch" # fix for clang crash if base has non-virtual destructor applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-8244878.patch" applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-mac.patch" # libosxapp.dylib fails to build on Mac OS 10.9 with clang applypatch jdk "$PATCH_DIR/jdk8u-jdk-8043646.patch" applypatch jdk "$PATCH_DIR/jdk8u-jdk-minversion.patch" } patchjdkbuild 複製代碼
而後執行這個腳本:
bash patsh.sh
複製代碼
sh ./configure MAKE=/usr/bin/make --with-toolchain-type=clang --with-debug-level=slowdebug --disable-zip-debug-info --with-target-bits=64 --with-boot-jdk=/Users/jiajiawang/Software/jdk/jdk1.7.0_80.jdk/Contents/Home/ --with-freetype-include=/usr/local/Cellar/freetype/2.10.2/include/freetype2 --with-freetype-lib=/usr/local/Cellar/freetype/2.10.2/lib/ 複製代碼
MAKE=/usr/bin/make
是可選的,若是下文使用Bear
來生成Compilation Database
,能夠不加這個參數。
configure
部分參數說明以下:
參數 | 含義 |
---|---|
--with-toolchain-type | 使用的工具鏈類型,取值有gcc ,clang 等,可使用--help 來查看全部可選值 |
--with-debug-level | 調試信息的級別,可選值有release ,fastdebug ,slowdebug |
--disable-zip-debug-info | 禁止壓縮調試信息,設置爲true能夠更好地調試 |
--with-target-bits | 選擇32位或者64位,根據操做系統選擇 |
--with-boot-jdk | bootjdk 位置 |
--with-freetype-include --with-freetype-lib |
指定freetype 依賴位置,在執行configure 時若是找不到freetype ,須要指定這兩個參數 |
參數的更多說明及更多參數請參考:OpenJDK 8 Build README - Configure
一樣咱們仍然可使用bear
或者compiledb
來生成Compilation Database
,可是使用bear
過程當中遇到一些問題比較繁瑣,推薦使用compiledb
。
# 1. 請先確保安裝了Python及pip 方法請自行搜索 # 2. 安裝compiledb工具 pip install compiledb # 3. 構建,並使用compiledb工具生成Compilation Database compiledb make all COMPILER_WARNINGS_FATAL=false # 可使用 LOG=debug 選項來輸出更爲詳細的信息 # compiledb make all LOG=debug COMPILER_WARNINGS_FATAL=false 複製代碼
使用compiledb
可能會存在的問題是生成的compile_commands.json
文件中全部項的directory
項都是項目的根目錄,致使一個頭文件沒法找到,導入CLion
時報錯,代碼定義及跳轉無效。緣由是在MacOS
平臺,編譯構建使用的多是gmake
,而compiledb
對gmake
切換路徑的操做沒法捕捉到,致使路徑所有都是根目錄。解決辦法就是顯示指定使用make
而不是gmake
,指定方法就是上一小節中在Configure
時指定的MAKE=/usr/bin/make
參數。
上面咱們使用compiledb
工具來生成Compilation Database
,一樣也可使用bear
工具來生成:
# 1. 首先須要關閉SIP,不然生成的 Compilation Database 可能會是空的 關閉SIP的方法請自行搜索 # 2. 安裝bear brew install bear # 3. 構建,並使用bear工具生成Compilation Database bear make all COMPILER_WARNINGS_FATAL=false # 可使用 LOG=debug 選項來輸出更爲詳細的信息 # compiledb make all LOG=debug COMPILER_WARNINGS_FATAL=false 複製代碼
若是遇到執行命令遇到報錯/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/stdio.h:107:15: fatal error: 'stdio.h' file not found
能夠嘗試執行以下命令:
sudo mount -uw /
sudo cp -R /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include /usr
複製代碼
更多make
的target
請參考OpenJDK 8 Build README - Make
若是沒有報錯,完成以後應該能夠在./build/macosx-x86_64-normal-server-slowdebug/jdk
目錄下找到編譯以後的JDK
,驗證一下是否成功
~: cd build/macosx-x86_64-normal-server-slowdebug/jdk/bin/ ~: ./java -version openjdk version "1.8.0-internal-debug" ...... 複製代碼
同時項目根目錄下應該同時有一個compile_commands.json
文件,而且不爲空。
須要注意在建立Custom Build Targets
時,新建的用於Build
的External Tool
中make
的參數中也要加上COMPILER_WARNINGS_FATAL=false
git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git 複製代碼
jdk10
做爲bootjdk
,方法見文章開頭。HomeBrew
。Homebrew
是一款MacOS
系統上的軟件包管理系統。/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 複製代碼
Xcode
。能夠直接在App Store
搜索Xcode
安裝,也能夠在developer.apple.com/download/mo…下載離線安裝包安裝。可使用xcodebuild
命令驗證是否安裝成功,正確輸出版本號則代表正確安裝。xcodebuild -version
複製代碼
若是是離線安裝的話,可能會報xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
錯誤,這是由於xcodebuild
找不到新安裝的Xcode
,只須要執行下面這個命令便可。sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
複製代碼
brew install autoconf
brew install make
複製代碼
# 安裝freetype brew install freetype 複製代碼
# 配置 sh ./configure --with-debug-level=slowdebug --with-native-debug-symbols=internal --with-target-bits=64 --with-boot-jdk=/Users/jiajiawang/Software/jdk/jdk-10.0.2+13/Contents/Home 複製代碼
configure
參數說明:
參數 | 含義 |
---|---|
--with-debug-level | 調試信息的級別,可選值有release ,fastdebug ,slowdebug |
--with-native-debug-symbols | 指定如何構建debug symbol ,可選值有none ,internal , external , zipped ,設置爲internal 能夠更好地調試 |
--with-target-bits | 選擇32位或者64位,根據操做系統選擇 |
--with-boot-jdk | bootjdk 位置 |
--with-freetype-include --with-freetype-lib |
指定freetype 依賴位置,在執行configure 時若是找不到freetype ,須要指定這兩個參數 |
參數的更多說明及更多參數請參考:OpenJDK 11 Build README - Configure
# 生成Compilation Database make compile-commands # 構建 make all 複製代碼
完成以後,應該在/build/linux-x86_64-normal-server-slowdebug/
目錄下會有compile_commands.json
文件。
更多make
的target
請參考OpenJDK 11 Build README - Make
完成以後應該能夠在./build/macosx-x86_64-normal-server-slowdebug/jdk
目錄下找到編譯以後的jdk,驗證一下是否成功
~: cd build/macosx-x86_64-normal-server-slowdebug/jdk/bin/ ~: ./java -version openjdk version "11.0.8-internal" 2020-07-14 ...... 複製代碼
同時在./build/macosx-x86_64-normal-server-slowdebug/
目錄下會有compile_commands.json
文件,而且不爲空。
大體步驟與前文介紹相同。 須要注意的是在選擇/build/macosx-x86_64-normal-server-slowdebug/
目錄下的compile_commands.json
文件導入項目以後須要更改項目的根目錄爲源碼的根目錄
(這裏也就是openjdk-11u
目錄)。點擊菜單Tools | Compilation Database | Change Project Root
,將項目的根目錄設置爲源碼根目錄
(openjdk-11u
),等待從新索引完成。