Руководство по компиляции и отладке OpenJDK (Ubuntu 16.04 + MacOS 10.15)

Java

Эта статья в основном знакомит сMacOSсистема иUbuntuКак скомпилировать в системеOpenJDKкод проекта и использоватьIDEинструментJetBrains CLion(именуемый в дальнейшемCLion) для запуска/отладкиOpenJDK. Включены только определенные версии двух операционных систем (MacOS 10.15иUbuntu 16.04), в разных версиях могут быть небольшие отличия. Надеюсь иметь некоторую справочную ценность для читателей.

В целом, составлениеOpenJDK11В обеих системах не так много препятствий, а сложность ниже, чемOpenJDK8. компилироватьOpenJDK8существуетUbuntuотносительно просто, вMacOSсложнее.

Основные шаги для компиляции и отладки OpenJDK

Компиляция и отладкаOpenJDKПроцесс можно разделить на следующие этапы:

  1. ПолучатьOpenJDKИсходный код проекта
  2. Скачать подходящую версиюJDKв видеBootJDK
  3. Загрузите необходимый набор инструментов, включая компиляторы, отладчики, инструменты сборки и т. д.
  4. Скачать необходимые зависимости
  5. Running Configure(конфигурация)
  6. Running Make(Построить)
  7. ИмпортироватьCLionи выполнятьRun/Debugнастроить

Среди них 3-6 шагов разные для разных операционных систем и разныхOpenJDKРазница между версиями велика, а разница между другими шагами невелика, поэтому порядок этой статьи таков: сначала подробно представить три части 1-2, 7 и некоторые предварительные знания. После определенных сценариев (разные ОС + разныеOpenJDKВерсия) для специальных инструкций, которые только делают различия между этими частями.

до начала

Как я могу получить исходный код OpenJDK?

Первым шагом в компиляции и отладке, конечно же, является получениеOpenJDKЕсть три основных способа получить исходный код:

1. ПройтиOpenJDKОфициальныйMercurialСклад скачать

OpenJDKофициальное использованиеMercurialдля контроля версий.MercurialАдрес склада:hg.openjdk.java.net/, основной адрес проекта:

проект адрес
jdk hg.openjdk.java.net/jdk/jdk
jdk8u Korea.open JDK.Java.net/JDK8U/JDK8U…
jdk11u Korea.open JDK.java.net/JDK-updates…

Чтобы скачать исходный код таким способом, его нужно сначала установитьMercurialинструменты и использоватьhg clone <url>Загрузите исходный код. например скачатьjdk8uИспользуйте следующую команду:

hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/

Этот метод загружается медленнее, и будут прерывания.Не рекомендуется.

2. ОтзеркаливаниемGitЗагрузка со склада

Официальный представитель OpenJDK вGitHubПо адресу главной страницы размещено складское изображение проекта JDK:github.com/openjdk, основной адрес проекта:

проект адрес
jdk github.com/openjdk/jdk
jdk11u GitHub.com/openJDK/JDK…
jdk12u GitHub.com/openJDK/JDK…

но в официальномgitна складе не виделjdk11следующие версии.

Кроме того, есть несколько неофициальных зеркал.Gitсклад. НапримерAdoptOpenJDKПроект, адрес домашней страницы:GitHub.com/adopt открыть JD…, основной адрес проекта:

проект адрес
jdk GitHub.com/adopt открыть JD…
jdk8u GitHub.com/adopt открыть JD…
jdk11u GitHub.com/adopt открыть JD…

Используйте этот способ, который вам нужно установитьgitинструменты и использоватьgit clone <url>Загрузите исходный код. например скачатьjdk8uИспользуйте следующую команду:

git clone https://github.com/AdoptOpenJDK/openjdk-jdk8u

gitИнструмент прост в использовании и лучше, чем официальныйMercurialЗагрузка со склада происходит намного быстрее,Рекомендуемое использование.

3. СкачатьMercurialсклад илиGitфайл пакета склада

Кроме,OpenJDKОфициальныйMercurialХранилище также предоставляет запись для прямой загрузки сжатого пакета, запись находится в левой части каждой страницы проекта.bz2,zip,gzТри ссылки, нажмите, чтобы скачать. Как показано ниже:

Также вGitHubКаждый элемент можно скачатьZIPформатировать пакетный файл. Как показано ниже:

Очевидно, что недостатком этого метода является отсутствие возможности контроля версий, если вы вносите изменения в код проекта, вы не можете восстановить его, и вы не можете легко получить последние изменения кода, но он быстрее загружается, чем первые два метода. ., и без всяких дополнительных инструментов.

Как скачать JDK?

Парадоксально, но перед компиляцией JDK нам нужен уже скомпилированныйJDKв видеBoot JDK.一般需要的JDKВерсия является предыдущей версией скомпилированной версииJDK, такие как компиляцияJDK8необходимостьJDK7, скомпилироватьJDK11необходимостьJDK10. Есть несколько способов скачатьJDK:

  1. существуетофициальный сайт ОраклскачатьOracle JDK. Для скачивания требуется учетная запись
  2. скачатьOpenJDK
    • существуетjdk.java.net/можно найтиOracleпредусмотрено на основеOpenJDKэталонная реализация. Но в основном толькоLinuxВерсия
    • Вы также можете использовать предварительно скомпилированные файлы других организаций.OpenJDK. НапримерAdoptOpenJDK,ноjdk8следующие версии
  3. существуетLinuxПод системой вы также можете использовать менеджер пакетов (например,Ubuntuвнизapt,Centosвнизyum)Загрузить и установитьJDK

JSON Compilation Database

CLionправильноCMakeПоддержка проекта сборки является дружественной, ноOpenJDKПроект основан наMakeПостроен, для использованияMakeпостроенный проект,CLionвсе еще проходитCompilation Databaseимпортировать проект, не изменяя его вCMakeпроект. также может пройтиCompilation DatabaseРеализовать анализ кода, прыжок и другие функции, которые нам очень помогают при отладке кода.

оCompilation DatabaseДля введения вы можете обратиться к этим статьям:

на основеMakeпостроенOpenJDKДля проектов есть несколько инструментов для генерацииCompilation Database, например:

Обычно генерируется по умолчаниюCompilation DatabaseЯвляетсяcompile_commands.jsonдокумент.

Кроме того, вOpenJDK 11uи более поздние версии,OpenJDKОфициально предусмотреноIDEподдержки, вы можете использоватьmake compile-commandsгенерация командCompilation Database, не нужно использовать дополнительные инструменты, конкретные команды можно посмотреть в каталоге исходного кода\doc\ide.md

Как импортировать проект OpenJDK в CLion и запускать/отлаживать

Читатели могут сначала пропустить этот раздел, а затем следовать этому разделу для импорта и отладки после выполнения предыдущих шагов.

На сколькоCLionНа базе в управленииMakeпостроенный проект,CLionВ официальной справочной документации есть подробное введение:Managing Makefile Projects.

Ссылаясь на вышеуказанную документацию, в этом подразделе кратко описывается, какCLionимпортировать вOpenJDKметоды проекта и запуска/отладки. Обратите внимание, что диаграммы, показанные в этом подразделе, основаны наUbuntu 16.04система +CLion 2020.1.1В окружающей среде шаги операции в основном также применимы кMacOS 系统та же версия нижеCLion.

  1. Загрузить и установитьCLionи установитьMakefile Supportплагин. Рекомендуется использовать последнюю версию, более старые версии не поддерживаются.MakeСтроительство проекта.

  2. 导入项目。 ОткрытымCLion,выберитеOpen Or Import, выберите в каталоге проектаcompile_commands.jsonфайл, всплывающее окно выбораOpen as Project, дождитесь завершения индексации файла.

    compile_commands.jsonСпособ генерации и место генерацииOpenJDKВерсия немного отличается, пожалуйста, обратитесь к введению конкретной сцены ниже для конкретного места.

  3. Создать пользовательский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Просто будьте последовательны.

  4. создать пользовательский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Вход.

  5. нажмите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"
      
  6. СотрудничатьFile WatchersPlug-In Auto-UpdateCompilation Database(по желанию)

    Если код проекта изменен, его необходимо сгенерировать заново.Compilation Database, в общем, надо переделывать.

    Если вы не хотите каждый раз перестраиваться вручную, вы можете использоватьFiles WatcherПлагины для автоматической регенерации изменений мониторинга. Видеть:Ооо, ооо .jet brains.com/help/C Lion/ ...

Среда Ubuntu 16.04

OpenJDK 8

1. Загрузите исходный код OpenJDK8.

Здесь мы выбираем изAdoptOpenJDKизGitHubРепозиторий для загрузки исходного кода.

# 首先需要安装git工具(如果没有的话)
sudo apt-get install git
# 克隆项目代码,可能耗时较长
git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git

2. Установите набор инструментов и зависимости

# 首先需要下载安装 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

3. Конфигурация и сборка

# 首先进入 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файл и не пустой.

4. Введение и отладка CLion

См. шаги выше

OpenJDK 11

1. Загрузите исходный код OpenJDK11.

# 首先需要安装git工具(如果没有的话)
sudo apt-get install git
# 克隆项目代码,可能耗时较长
git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git

2. Установите набор инструментов и зависимости

# 需要下载安装 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

3. Конфигурация и сборка

# 配置
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файл и не пустой.

4. Импортируйте CLion и отладьте

Общие шаги аналогичны описанным выше. Следует учитывать, что при выборе/build/linux-x86_64-normal-server-slowdebug/в каталогеcompile_commands.jsonПосле импорта файла в проект необходимо изменить корневой каталог проекта на源码的根目录(тут тожеopenjdk-11uсодержание). нажмите менюTools | Compilation Database | Change Project Root,выберите源码根目录(openjdk-11u) и дождитесь завершения переиндексации.

MacOS 10.15 Окружающая среда

OpenJDK 8

MacOS 10.15.5Строительство окружающей средыOpenJDKиLinuxДальнейшие действия аналогичны, но посколькуOpenJDK 8Старые версии, некоторые из которых зависят отMacOS 10.15.5Не удалось найти версию, что привело к различным проблемам в процессе настройки и сборки.В этой статье представлен относительно простой и удобный способ.

1. Загрузите исходный код OpenJDK8.

Мы выбираем изAdoptOpenJDKизgithubСклад Скачать исходный код

git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git

2. Установите набор инструментов и зависимости

  1. Сначала нужно скачать и установитьjdk7в видеbootjdk, см. способ в начале статьи.
  2. УстановитьHomeBrew.HomebrewЭтоMacOSСистема управления пакетами в системе.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    
  3. Установить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/
    
  4. Установить инструменты сборки
    # 安装构建工具
    brew install make
    
  5. Установите необходимые зависимости
    # 安装freetype
    brew install freetype
    

3. Конфигурация и сборка

3.1 Изменить код

Если вы не изменяете код, выполните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

3.2 Конфигурация

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

3.3 Сборка

Опять же, мы все еще можем использоватьbearилиcompiledbгенерироватьCompilation Database, но используяbearНекоторые проблемы, возникающие в процессе, более сложны, рекомендуется использоватьcompiledb.

использовать скомпилированныйb
# 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платформа, сборка сборки может использоватьgmakecompiledbправильно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файл и не пустой.

4. Импортируйте CLion и отладьте

нужно обратить внимание при созданииCustom Build Targets, вновь созданныйBuildизExternal ToolсерединаmakeТакже добавьте в параметрCOMPILER_WARNINGS_FATAL=false

OpenJDK 11

1. Загрузите исходный код OpenJDK11.

git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git

2. Установите набор инструментов и зависимости

  1. Сначала нужно скачать и установитьjdk10в видеbootjdk, см. способ в начале статьи.
  2. УстановитьHomeBrew.HomebrewэтоMacOSСистема управления пакетами в системе.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    
  3. Установить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/
    
  4. Установить инструменты сборки
    brew install autoconf
    brew install make
    
  5. Установите необходимые зависимости
    # 安装freetype
    brew install freetype
    

3. Конфигурация и компиляция

# 配置
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файл и не пустой.

4. Импортируйте CLion и отладьте

Общие шаги аналогичны описанным выше. Следует учитывать, что при выборе/build/macosx-x86_64-normal-server-slowdebug/в каталогеcompile_commands.jsonПосле импорта файла в проект необходимо изменить корневой каталог проекта на源码的根目录(вотopenjdk-11uсодержание). нажмите менюTools | Compilation Database | Change Project Root, установите корневой каталог проекта в源码根目录(openjdk-11u) и дождитесь завершения переиндексации.

Ссылаться на

  1. OpenJDK
  2. OpenJDK 8 Build README
  3. OpenJDK 11 Build README
  4. rizsotto/Bear: Bear is a tool that generates a compilation database for clang tooling
  5. nickdiego/compiledb: Tool for generating Clang's JSON Compilation Database files for make-based build systems.
  6. Managing Makefile Projects
  7. Dealing with Makefile Projects in CLion: Status Update
  8. Tips & Tricks: Develop OpenJDK in CLion with Pleasure
  9. Debugging OpenJDK - DZone DevOps
  10. База компиляций — Блокнот сарказма
  11. More Software Downloads - Apple Developer
  12. stooke/jdk8u-xcode10: How to compile JDK 8u with Xcode 9, 10 or 11 on macOS.