Header Ads

[CMAKE][Windows10]Windows10でJuman++をビルドするCMAKE環境を構築する

最近、Juman++をWindows10でビルドする必要があったので、
構築手順をメモしておくことにした。


(過程1)
Windows10でJuman++をビルドするためには、CMAKEを実行できる環境が必要となる。

※CMAKEの環境整備には、Visual Studio Community 2019を使用する。

MicrosoftのVisualStudio無償版をダウンロードする。
vs_Community.exeを実行すると、ダウンロードが始まるので、
ダウンロード後、インストールを行い、再起動する。

Visual Studio Installerを起動して、
Visual Studio Community 2019の変更を選択。

○ワークロードで必要なもの
ユニバーサルWindowsプラットフォーム開発
これをインストールしなければ、
イニシャライズのコマンド実行時に下記エラーが発生する。
「the c compiler identification is unknown」
「the cxx compiler identification is unknown」

C++によるデスクトップ開発
これをインストールしなければ、
イニシャライズのコマンド実行時に下記エラーが発生する。
「WindowsSDKDir プロパティが定義されていません」

○個別のコンポーネントでインストールしたもの
・Windows 用 C++ CMake ツール
・MSBuild
・MSVC v142 - VS 2019 C++ x64/x86 ビルド ツール (v14.27)

最初は、個別コンポーネントのみで構築できるかと思って試したが、
結局、ワークロードのコンポーネントが必要になったので、
ワークロードのコンポーネントの方からインストールすべきだった。



(過程2)
Juman++の入手とビルド。
GitHubより、jumanpp-2.0.0-rc3を入手した。

ビルド環境は、Cドライブ直下にworkフォルダを作成、
jumanpp-2.0.0-rc3を解凍し、格納。

過程1でVisualStudio経由でCMAKEが使用可能となったので、
Windowsのコマンドプロンプトではなく、
アプリ一覧に追加された「Developer Command Prompt for VS 2019」を使用して
Juman++をビルドする。


・プロンプトで実行するコマンド
下記の順番でコマンドを実行することで、exeファイルを生成できる。

※現在、Developer Command Prompt for VS 2019で、
C:\work\jumanpp-2.0.0-rc3に移動したところとする。


mkdir cmake-build-dir

ビルド用ディレクトリ(フォルダ)の作成コマンド、
フォルダ名は参考にさせて頂いた情報より。

↓

cd cmake-build-dir

ビルド用ディレクトリへの移動コマンド。

↓

cmake -G "Visual Studio 16 2019" ..

今回、Visual Studio Community 2019を使用するので上記となる。
ビルドを行う前のイニシャライズ処理となる。

この過程で、エラーが出ると次の過程には進めない。

↓

MSBuild jumanpp.sln /t:build /p:Configuration=RelWithDebInfo;Platform="x64"

MSビルドの実行。
使用しているPCの処理性能にも依存するが、
多数のビルドを行うので、一瞬で終わることはない。

ワーニングは出るが、基本的にエラーが出ない限り問題ない。
成功すると、「jumanpp_v2.exe」をはじめとするexeファイルが生成される。


(過程2でのイニシャライズエラー等の回避策について)
'pthread.h':No such file or directory
何とか対策できないものかと、VisualStudioのlib、bin、includeに、
ftp://sourceware.org/pub/pthreads-win32/dll-latest/
からダウンロードして、x64、x86フォルダに格納しましたが、
結局該当のメッセージは解決しませんでした。

気になりましたが、今回のビルドでは、対策をしなくて問題なかったです。


Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR)
これは、GitHubからprotobuf 3.0 windowsの最新版をダウンロードして、
protoc-3.13.0-win64.zipを入手。

これを解凍して、
「C:\Program Files\protoc-3.13.0-win64\bin」に格納。

その後で、
システムの詳細設定→環境変数→Pathに「C:\Program Files\protoc-3.13.0-win64\bin」を追加することで対策。


file DOWNLOAD HASH mismatch
for file: [C:/work/jumanpp-2.0.0-rc3/cmake-build-dir/libs/eigen.tar.bz2]
file RENAME given incorrect number of arguments.

これらは、少し面倒だったので、
C:/work/jumanpp-2.0.0-rc3/libs/CMakeLists.txtを編集。
赤字部分が強引に書き換えたところ。


set(libs3p_catch_header ${CMAKE_CURRENT_SOURCE_DIR}/catch.hpp PARENT_SCOPE)
file(GLOB_RECURSE pegtl_headers_raw ${CMAKE_CURRENT_SOURCE_DIR}/pegtl/ *.hpp)
set(libs3p_pegtl_headers ${pegtl_headers_raw} PARENT_SCOPE)
set(BACKWARD_headers ${CMAKE_CURRENT_SOURCE_DIR}/backward.hpp PARENT_SCOPE)
set(JPP_LIBS_DIR ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)

set(EIGEN_VERSION "3.3.8")
set(EIGEN_HASH "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")

if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/eigen3)
  message("-- Eigen3... OK")
else()
  file(DOWNLOAD
    "https://gitlab.com/libeigen/eigen/-/archive/3.3.8/eigen-${EIGEN_VERSION}.tar.bz2"
    "${CMAKE_CURRENT_BINARY_DIR}/eigen.tar.bz2"
    EXPECTED_HASH SHA256=${EIGEN_HASH}
    )

  set(EIGEN_TMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/eigen_tmp")

  file(REMOVE_RECURSE ${EIGEN_TMP_DIR})
  file(MAKE_DIRECTORY ${EIGEN_TMP_DIR})

  execute_process(
    COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_CURRENT_BINARY_DIR}/eigen.tar.bz2"
    WORKING_DIRECTORY ${EIGEN_TMP_DIR}
    RESULT_VARIABLE EIGEN_EXTRACT_OK
  )

  if (NOT EIGEN_EXTRACT_OK EQUAL 0)
    message("Failed to extract Eigen.")
  endif()

#  file(GLOB EIGEN_DIRNAMES "${EIGEN_TMP_DIR}/*")
#  file(RENAME ${EIGEN_DIRNAMES} ${CMAKE_CURRENT_SOURCE_DIR}/eigen3)
   file(RENAME ${EIGEN_TMP_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/eigen3)
endif()

add_subdirectory(pathie-cpp EXCLUDE_FROM_ALL)


上記の書き換えをすることで、イニシャライズ時のエラーは回避できました。
ビルドする為だけの即席の暫定対応なので、現実的にはあまり良い対応ではありません。

従って、もちろん、そのままでは、MSBuildを実行した際に、
eigen3関連の参照ができませんので、エラーとなります。
私が実行した際には、eigen3の関連する箇所のみエラーとなりました。

そこで、またまた簡単な即席対応として、
本来eigen3が格納されていなければならないパス
「C:\work\jumanpp-2.0.0-rc3\libs\eigen3」にeigen-3.3.8.zipを
eigen配布元からダウンロードし、
解凍して、フォルダの中身のファイル一式を格納しました。

結果、イニシャライズで発生していたエラーを解消した上で、
MSBuildも実行できるようになりました。

凄く雑な対応なのですが、目的は、Windows10でJuman++をビルドできるようにすることでしたので、ご容赦ください。
こんな対応方法もあるのかくらいの参考になれば幸いです。

※11月3日追記
私が苦労したのは、jumanpp-2.0.0-rc3.zip(約1MB)をダウンロードしてビルドしようとしていたという点もあるようです。

辞書ファイルがなかったので、改めてGitHubを確認したところ、
jumanpp-2.0.0-rc3.tar.xz(約300MB)にengen3や辞書ファイル一式を含むものがありました。
とりあえず、上記に記載した手順で生成した「jumanpp_v2.exe」でも正常に動作しましたので、良しとします。

そのうち、後者を使用して、別のPCでも1から環境構築を試してみようと思いました。

0 件のコメント