段階的な手順:Windows 10でソースからJDK9をビルドする

最近、WindowsのJDKアセンブリにより、すべてが快適になりました。そのため、私は喜びを分かち合い、その方法に署名します。

Windowsの下で何かを構築しようとする2人に1人は、深い心理的トラウマを受け、事前にアセンブリから次の感情を期待します。



JDKについては、ジンジャーブレッドパスを離れなければ、この手順とまったく同じようになります。問題はありません。 考えられる問題は本文に示されています。

何が起こっているかの一般的な意味:コンパイラー(JDK8、Visual Studio 2013)、ビルド環境(GNU / Cygwin)、およびそのための標準パッケージのセットをインストールし、Freetypeソースから収集し、JDKリポジトリーに入力し、構成し、作成し、javaバージョンを作成します。

JavaとC ++を収集します(この記事を読んでいるので、おそらく既に知っているでしょう)。したがって、電子レンジでアセンブリを行わない方が良いでしょう。 プロジェクトのアセンブリディレクトリには、通常のプロセッサと、できればハードディスクではなくSSDを備えたワークステーションまたはラップトップが必要です。 アセンブリに加えて、ソースのダウンロードとVisual Studioのインストールに時間がかかります。

インターネット接続とWindows管理者権限が必要です。 これがすべてではない企業インフラストラクチャのユーザーの問題は、ここでは考慮されません。

  1. JDK8をインストールする


    ブタ用。

    ダウンロードリンク

  2. Visual Studio 2013をインストールする


    (Expressバージョンでも可能です)。

    ダウンロードリンク 。 フルバージョンをインストールする場合、インストール中にコンポーネントの選択肢が表示されます。C++およびWindows SDKに関連するコンポーネントのみをインストールするだけで十分です。

    Expressをインストールする場合、選択の余地はありません。幸いなことに、必要なものがインストールされます。 次のようになります。




    インストール後、オペレーティングシステムを確実に再起動する必要があります。

    重要 :Visual Studio 2013をインストールする必要があります。2013バージョンはBuild Readmeに記載されているため、これより低くすることはできません。 Visual Studio 2015をインストールした状態でビルドしようとすると、JDKコレクターにコンパイラーが表示されますが、エラーで中断するため、高くありません。

    C compiler cannot create executables 

    config.logを見ると、理由が明らかになります。

     LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib' 

    愚かなことをすれば

     export LINK="/NODEFAULTLIB:libcmt.lib" 

    その後、それはバラバラになります:

     unresolved external symbol mainCRTStartup. 

    コメントの誰かがこのエラーを簡単に修正し、2015年に開始する方法を知っている場合、私は非常に感謝します。 たとえそれが無料であっても、古いバージョンのコンパイラにロックされるのは不快です。

  3. Cygwinをインストールします。


    ダウンロードリンク

    重要 :現在、Cygwinの代わりにmsys2を使用するのが習慣です。 残念ながら、JDKビルドはそこでクラッシュします。

     configure: error: /usr/bin/bash /x/git/openjdk9/common/autoconf/build-aux/config.sub x86_64-pc-msys failed 

    Cygwinが登録されているのと同じ方法でmsysを登録しようとすると、エラーが変わります。

     unsupported operating system msys 

    コメントのヒーローがmsysを正しく登録する方法を教えてくれたら、それは素晴らしいことです。

  4. Cygwinのパッケージをインストールする

    Build Readmeで説明されています。

    パッケージのカテゴリは、カッコ内の「-」記号の後に示されています。
    各実行可能ファイルの目的はマナで読むことができますが、これを収集するために知る必要はありません。

    • binutils(開発)-ar.exe
    • make(開発)-make.exe
    • m4(インタープリター)-m4.exe
    • cpio(utils)-cpio.exe
    • gawk(ベース、インタープリター)-gawk.exe
    • ファイル(ベース)-file.exe
    • zip(アーカイブ)-zip.exe
    • unzip(アーカイブ)-unzip.exe
    • procps-ng(システム)-free.exe


    このような多数の依存関係にinしている人のために-PythonとRubyをインストールする必要がないことを感謝します! :)

    Cygwinに出会ったことがない人のために、いくつかのポイント:
    • パッケージのインストールは次のようになります。

    • たとえば、名前にbinutilsという単語が含まれるパッケージが多数あります。
      リストのグループに対応するリストから、リストの名前と完全に一致するパッケージを選択する必要があります。 (もちろん、あなたがやっていることを正確に知っているなら、あなたの意志:))
    • Cygwinのグループへの所属は時々変わります。 特に、このリストにリストされているグループは、ビルドReadmeのグループと一致しなくなりました。 リストからグループが存在しない場合は、適切なグループを選択します(このメッセージを更新して、この指示を更新します)。
    • インストール時に、インストールディレクトリを指定するように求められます。 C:/ cygwinおよびC:/ cygpackなど、できるだけ短い名前でパスを設定してください。 または、一般的にc:/ cwおよびc:/ cp。 これにより、Windowsエクスプローラーで処理できないほど長いファイル名のエラーを回避できます(NTFSでは処理できる場合がありますが、エクスプローラーでは処理できない場合があります)。
    • 初期インストール後、Cygwin自体にはパッケージマネージャーはありません。 追加のパッケージをインストールするには、setup.exeを再度実行する必要があります。 このプログラムはCygwinをゼロからインストールするのではなく、正しいもののみをダウンロードします。 再起動の間、ディレクトリへのパスは保持されます。
    • ミラーの選択は速度に影響しますが、ダウンロードするパッケージはごくわずかであるため、選択するものは平均してすべて同じです。 リストの最初のミラーを選択します。
    • パッケージをインストールするためのGUIは少し奇妙ですが、あなたはそれを理解するでしょう:)
      • 検索フィールドにパッケージ名を入力するとすぐに、対応するリストが自動的に再描画されます。Enterを入力する必要はありません。
      • パッケージをインストールするには、ステータスボタンを何度もクリックする必要があります(ウロボロスで碑文がスキップされているか、その他の矢印が閉じている)。これにより、ステータスラベルがインストールされるパッケージのバージョンに変更されます。
      • インストーラーがさまざまな形で悪くなることがあります。 パニックにならないでください。 インストールが途中でハングした場合、すべてを元に戻す最も簡単な方法は、C:/ Cygwin、またはそこにインストールした場所を削除することです。 壊れた不完全なパケットのチェックサムのチェッカーが故障を見つけられることを望んでいない方が良いでしょう。それを自分で完全に削除することで修正します。


  5. makeを個別にダウンロードする必要はありません


    以前の手順では、メイクをダウンロードして作成することを想定していました。 最新の観察によると、これを行うのは意味がありません。Cygwinにパッケージをインストールしたメーカーで十分です。

    さらに、公式サイトには古いバージョンのmakeが含まれているため、次のようなエラーが発生します。

     The specified make (by MAKE=/cygdrive/c/Program Files (x86)/GnuWin32/bin/make.exe) is not GNU make 4.0 or newer. 

    つまり、手動で構成するか、または疑わしいファイルクリーナーで既に組み立てられているものを探す必要があります。

    本当に独自のmakeが必要な場合、それを使用するには、configureパラメーターでMAKE=///make.exeを指定する必要があります。 はい、他のパラメータは-で始まります。たとえば、-with-freetypeですが、MAKEはその形式である必要があります。

  6. DirectX SDKをインストールする必要はありません


    本当に必要な場合(Java 3D?)、あなたはそれを知っており、あなたは何をすべきかを知っています。 ここに指示はありません。

  7. FreeTypeの収集


    FreeTypeを収集することは、あなたが本当に望んでおらず、個人的には必要ない場合でも必須です。

    1. ダウンロードリンク

      ダウンロードには2つのグループがあります:上部に2つ(完全なパッケージとソース)、下部に6つ(バイナリ...元のソース)。 Sources要素は両方のグループにあります。 2番目のグループからSources要素のzipnikをダウンロードする必要があります。

      注:百年を振る、何をすべきか? 何もする必要はありません、これはSorsforgeです。 ロードタイマーが表示されたら、別のミラーリンクを試してみて、フランスで何かを選択してみてください。 フランス人は速度に依存しません。

    2. src / freetype / 2.3.5 / freetype-2.3.5 / libディレクトリを作成します

    3. src / freetype / 2.3.5 / freetype-2.3.5 / builds / win32 / visualディレクトリ内は、Studioのソリューションです。

    4. 開けます。 複数のスタジオがある場合は、2013年に罪から開放する方が良いでしょう。2015年からアセンブリを試しましたが、それも機能します。

    5. ソリューションを開くと、Studioは一方向のアップグレードを要求します。 同意します(リスト内のいくつかの項目が表示される場合、すべてに同意します)。

    6. その後、Studioはタイトにハングアップし、Dispatcherで同時に表示されなくなります。 Windowsタスク。 Sysinternals Process Explorerが助けになります。
      technet.microsoft.com/ru-ru/sysinternals/processexplorer.aspx

      ツリーでdevenv.exeを見つけ、最初にそのすべての子孫を殺す必要があります。 その後、devenv.exe自体を強制終了できます(その前は、単に死ぬコマンドに応答しません)。

    7. Configuration Managerに移動し、Platformドロップダウンで、New、New platform:x64、Copy settings from:Win32、OK、Closeを選択します。







    8. そこで、アセンブリのタイプを選択します-マルチスレッドを解放します(デバッグがデフォルトです)



    9. ソリューションエクスプローラーで、freetypeプロジェクトのプロパティを右クリックします。



    10. 出力ディレクトリを指定します:src / freetype / 2.3.5 / freetype-2.3.5 / lib(ディレクトリはダウンロードしたFreeTypeのルートに相対的です)。 構成タイプが静的ライブラリ(.lib)に設定されていることを確認します。



    11. freetypeプロパティページウィンドウを閉じます。 ビルド→ビルドソリューションを通じてプロジェクトを収集します。



    12. ここで、アセンブリをlibからdllに変更する必要があります。

      手順を繰り返します。

      ソリューションエクスプローラーで、freetypeプロジェクトのプロパティを右クリックします。 出力ディレクトリを指定します:src / freetype / 2.3.5 / freetype-2.3.5 / lib。 構成タイプが動的ライブラリ(.dll)に設定されていることを確認します

      freetypeプロパティページウィンドウを閉じます。 ビルド→ビルドソリューションを通じてプロジェクトを収集します。

    13. エクスプローラでsrc / freetype / 2.3.5 / freetype-2.3.5 / libディレクトリを開き、ファイルの構成を確認します:freetype.dll、freetype.lib、freetype.exp。

      ここで重要な事実は次のとおりです。1つのルートディレクトリにインクルード(src / freetype / 2.3.5 / freetype-2.3.5 / include)とライブラリがあります(src / freetype / 2.3.5 / freetype-2.3.5) (src / freetype / 2.3.5 / freetype-2.3.5 / lib)。

    14. できた! 今、私たちは悲惨な600キロバイトを持っていますが、そのために過去10分間苦しめられました。
  8. リポジトリからJDKソースを入力します


    1. Mercurial(TortoiseHg)をダウンロードしてインストールします: tortoisehg.bitbucket.org/download/index.html

    2. Mercurialのツリー拡張機能をダウンロードする

      ファイル:

      gist.githubusercontent.com/olegchir/8267049ed48f7975aa8ef7d7c1515349/raw/fbe90ac1c639f6c209bc7cebbdcc7ebbd848c734/trees.py

      ダウンロードした場所を覚えています(例:C:/opt/trees.py)

      重要! ここからの指示に従って:

      openjdk.java.net/projects/code-tools/trees

      このファイルをダウンロードする必要があります。

      hg.openjdk.java.net/code-tools/trees/raw-file/tip/trees.py

      残念ながら、この記事を書いている時点では、この拡張機能とMercurialの新しいバージョンとの統合は壊れています。 パッチが添付された以下のバグがあります。

      bugs.openjdk.java.net/browse/CODETOOLS-7901672

      自分でツリーにパッチを適用しないように、パッチを適用して、ここに投稿しました。

      gist.githubusercontent.com/olegchir/8267049ed48f7975aa8ef7d7c1515349/raw/fbe90ac1c639f6c209bc7cebbdcc7ebbd848c734/trees.py

      将来、このチケットが閉じられると、メインバージョンを使用する価値があります。 チケットが既に閉じられているときにこの指示を読んだ場合-私に書いて、私はこの項目を修正します。

    3. ユーザーのホームディレクトリに.hgrcファイルを作成します(%USERPROFILE%\。Hgrc)。

      Windowsはドットで始まるファイルの作成が苦手なので、最も簡単な方法は、Cygwinコンソールを開いてコマンドを実行することです。

       touch /cygdrive/c/Users/olegchir/.hgrc 

      ファイル内に次のように記述します。

       [extensions] purge = trees = C:\opt\trees.py 

      pyファイルへのパスのスラッシュは逆です。

    4. コンソール(cmd.exe)を開き、ソースを保存するディレクトリに移動します(cd C:\ git)

    5. リポジトリのクローンを作成します。

       hg tclone http://hg.openjdk.java.net/jdk9/dev 9dev 

      これには非常に長い時間がかかります。



      重要! 将来、リンクは変更される可能性があります。 こちらの新しいリンクをご覧ください: openjdk.java.net/guide/repositories.html

      重要! C:/ hgなど、できるだけ短い名前でパスを設定してください。 これにより、Windowsエクスプローラーで処理できないほど長いファイル名のエラーを回避できます(NTFSでは処理できる場合がありますが、エクスプローラーでは処理できない場合があります)。 すでにリポジトリのクローンを作成しているときに愚かな状況に陥らないようにするのに役立ちますが、まだ削除することはできません。

      不快に 。 「中止:ストリームが予期せず終了しました」というエラーが発生した場合。 最初にhg tcloneをさらに数回再起動してください。 エラーが繰り返し発生する場合は、手間のかかる作業が面倒です。 どのプロジェクトが最後までアンロードされなかったかを覚えておいてください(たとえば、langtools)。 この引数ですべてを再起動します。

       hg tclone -r 100 http://hg.openjdk.java.net/jdk9/dev 9dev 

      これにより、100個のチップセットのみがロードされ、tclone操作が完了します。
      その直後に、開始しなかったプロジェクトのディレクトリ(langtoolsなど)に移動し、hg tpull -u 1000を実行します。

      そして、それぞれ1000個のチップセットを追加します。

      hg tpull -u 1000
      hg tpull -u 2000
      hg tpull -u 3000

      リビジョンが終了したら、ルート(9dev)に移動して、「hg tpull -u」コマンドを(リビジョンの数を指定せずに)実行する必要があります。

      この後、同じプロジェクトが失敗した場合、そのプロジェクトに戻り、小さなステップで残りのリビジョンを正確に最後まで正確にダウンロードし、ルートに戻り、引数なしでhg tpull -uを繰り返します。

      この別のプロジェクトが失敗した場合、そのディレクトリに移動し、すべてが最後まで曲がるまで繰り返します。


  9. JDKの収集


    1. Cygwinコンソール(cmd.exeではない)を開き、クローンソースのあるディレクトリに移動します。
    2. コマンドを実行します:

       ./configure --enable-debug --with-target-bits=64 --with-boot-jdk=/cygdrive/c/opt/Java/jdk1.8.0_111 --with-freetype=/cygdrive/c/my/opt/java/freetype-2.3.5-1-src/src/freetype/2.3.5/freetype-2.3.5 

      ファイルへのパスは、命令の実行中に受け取ったパスと一致する必要があります。
      --with-boot-jdkは、JDK8をダウンロードしたディレクトリを指します
      --with-freetypeは、サブディレクトリincludeおよびlibが存在するfreetypeソース内のディレクトリを指し、libでは、.dllおよび.libを64ビットfreypeでコンパイルしました

      ファイルへのパスはネイティブである必要はありませんが、/ cygdriveで始まります。
    3. 構成中は長時間待機します。 エラーはないはずです。

      唯一予期されるエラーは、Visual Studio Expressを使用している場合です。

       Cannot locate a valid Visual Studio or Windows SDK installation on disk 

      通常、それは小さな汚いハックで修正できます。 MSVSインストールディレクトリに移動します(通常、これはC:/ Program Files(x86)/ Microsoft Visual Studio 12.0 / VCです)。

      amd64ディレクトリはありませんが、x86_amd64があります。
      新しい名前amd64でコピーします。

      amd64内に移動し、vcvarsx86_amd64.batファイルを新しい名前vcvars64.batでコピーします
      新しいオプション--with-tools-dirでconfigureを再起動します:

       ./configure --enable-debug --with-target-bits=64 --with-boot-jdk=/cygdrive/c/opt/Java/jdk1.8.0_111 --with-freetype=/cygdrive/c/my/opt/java/freetype-2.3.5-1-src/src/freetype/2.3.5/freetype-2.3.5 --with-tools-dir="/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64" 

    4. configureの結果、次のテキストが表示されます。



      構成の概要:
      *デバッグレベル:fastdebug
      * HSデバッグレベル:fastdebug
      * JDKバリアント:通常
      * JVMオプション:サーバー
      * OpenJDKターゲット:OS:Windows、CPUアーキテクチャ:x86、アドレス長:64
      *バージョン文字列:9-internal + 0-adhoc.olegchir.openjdk9(9-internal)

      ツールの概要:
      *環境:cygwinバージョン2.6.1(0.305 / 5/3)(root / / cygdrive / c / cygwin)
      *起動JDK:Javaバージョン "1.8.0_111" Java(TM)SEランタイム環境(ビルド1.8.0_111-b14)Java HotSpot(TM)64ビットサーバーVM(ビルド25.111-b14、混合モード)(at / cygdrive / c / opt / Java / jdk1.8.0_111)
      *ツールチェーン:microsoft(Microsoft Visual Studio 2013)
      * Cコンパイラ:バージョン18.00.40629(/cygdrive/c/progra~2/micros~2.0/vc/bin/amd64/cl)
      * C ++コンパイラ:バージョン18.00.40629(/cygdrive/c/progra~2/micros~2.0/vc/bin/amd64/cl)

      ビルドパフォーマンスの概要:
      *使用するコア:8
      *メモリ制限:20447 MB
    5. コマンドを実行します:make
    6. 集まるまで長い間待ちます。 現在、多くのリソースがコンピューターに費やされています。別のコンピューターを使用するか、お茶に出かける価値があります。
  10. 起動を確認する


    ディレクトリbuilds / windows-x86_64-normal-server-fastdebugは、ソースを含むディレクトリ内に表示されます

    コンソール(cmd.exe)を使用して、次のようなディレクトリに移動します。
    X:\ git \ openjdk9 \ build \ windows-x86_64-normal-server-fastdebug \ jdk \ bin

    コマンドを実行します:java -version

    バージョン9-internalを印刷する必要があります。



  11. トラブルシューティング


    オープンソースでは誰もあなたの悲鳴を聞くことができません

    画像

  12. 利益

Source: https://habr.com/ru/post/J319078/


All Articles