BETA

CoreCLRのソースをVisual Studio 2017で読む

投稿日:2019-03-23
最終更新:2019-03-23

https://github.com/dotnet/coreclr をVisual Studio 2017でいい感じに読む方法がどこにも書いてないようなので書いておく。

まず、Build CoreCLR on Windowsを参考にVisual Studio 2017用のビルド環境を作る。PythonはVisual Studio Installerでもインストールできる。32bitを選択するのとPATHを通すのを忘れずに。

Visual Studio 2017のファイル→開く→CMakeで、トップにあるCMakeLists.txtを開く。ただし、このCMakeLists.txtbuild.cmdからキックされるのが前提なのでビルドが失敗する。

ビルドを通すには、CMake→CMakeの設定を変更→CMakeLists.txt→x64-Debugを選ぶと作成される、CMakeSettings.jsonに以下の設定を記入する。

"cmakeCommandArgs": "-DCLR_CMAKE_HOST_ARCH=x64 -DFEATURE_EVENT_TRACE=OFF",  

CLR_CMAKE_HOST_ARCHbuild.cmdから渡されるホストアーキテクチャで、必ず指定しないといけない。FEATURE_EVENT_TRACEはこれを有効にしたままビルドを通す方法がわからなかったので、とりあえずオフに。これでビルドは通る。

実際にC++のコードを読んでみると、コードの多くがデッドコードになっていることがわかる。これはDACCESS_COMPILEシンボルが定義されているせいであり、トップにあるdac.cmakeの内容をコメントアウトすると防げる。

# Contains the dac build specific definitions. Included by the leaf dac cmake files.  
#[[  
add_definitions(-DDACCESS_COMPILE)  
if(WIN32)      
    add_definitions(-MT)  
endif(WIN32)  
remove_definitions(-DPROFILING_SUPPORTED)  
add_definitions(-DPROFILING_SUPPORTED_DATA)  
]]  

DACCESS_COMPILEは、CLRとは別プロセスで動く、CLRと対になるデバッグ用のコンポーネント(DAC)をビルドする際に定義されるシンボルである。CLRのソースを読む際には不要なので、dac.cmakeをコメントアウトすることで無効にする。

そもそもdac.cmakeはDACをビルドするフォルダのCMakeLists.txtにしか読み込まれないのに、Visual Studioがそれ以外のフォルダでDACCESS_COMPILEを有効にしてしまうのがおかしい。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@fujiedaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!