ChakraCoreが公開されました。
早速ビルドしてみましょう。
ChakraCoreはMicrosoft EdgeのJavaScriptエンジンのコア部分です。
短い結論
- プラットフォームを
x64
かx86
に変更 - 3ファイルの文字コードをBOM付きUTF-8に変更
- Releaseビルドに変更
環境
- VMware Fusion 8
- Windows 7 Professinal 64 bit
- Visual Studio Community 2015 Update1
手順
チェックアウト
git clone https://github.com/Microsoft/ChakraCore.git
ソリューションを開く
Build\Chakra.Core.sln
をVisual Studioで開きます。
Visual C++用セットアップ
Visual C++ 用のコンポーネントがない場合は、次の警告が出ます。
インストール コンポーネントがないため、プロジェクト 'ch' を読み込めませんでした。修正するには、以下の選択をして Visual Studio セットアップを起動してください:
Install Visual C++ 2015 Tools for Windows Desktop
対策
ファイル(F)
> 新規作成(N)
> プロジェクト(P)
からテンプレート
> Visual C++
> Install Visual C++ 2015 Tools for Windows Desktop
を選びます。
参考リンク
C++/Visual Studio 2015 プログラミング
ビルドのプラットフォーム
ARM用にビルドするにはWindows 10 SDK
が必要です。
x64
またはx86
に変更します。
参考リンク
Building ChakraCore · Microsoft/ChakraCore Wiki
文字コード
この節の情報は古いです。最新のmasterは修正済みです。
Microsoftらしからぬことに文字コードがBOM無しUTF-8です。
日本語OSでは文字コードをCP932
に判定されるファイルがあります。
その場合は以下の警告が出ます。
警告 C4819 ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
同時に次のエラーが出てビルドに失敗します。
エラー C2220 警告をエラーとして扱いました。'object' ファイルは生成されません。
対策1か対策2のどちらかを行います。
対策1 対象ファイルをBOM付きUTF-8で保存
CP932
に判定されなくなります。
変更ファイルが次の三つで少ないのでこちらがおすすめです。
- lib/Runtime/Library/ArgumentsObject.h
- lib/Runtime/Library/MathLibrary.cpp
- lib/common/Memory/PageAllocator.h
対策2 対象プロジェクトのビルドオプションを変更する
対象プロジェクトから/WX
フラグを消します。
対象プロジェクトが多いので大変です。
参考リンク
本家対応済み
文字コードのissue。
Compiler Error under Windows 7 SP1 32-bit Chinese Simplified · Issue #99 · Microsoft/ChakraCore
Pull Request、マージ済み。
Fix #99: Compiler Error under Windows 7 SP1 32-bit Chinese Simplified due to Encoding issue. by leejingbo · Pull Request #100 · Microsoft/ChakraCore
ASCIIでない記号が入っているため、文字コードをCP932
(OSの標準)として判定してしまうようです。
https://github.com/Microsoft/ChakraCore/pull/100/files
ビルドの構成
次の エラーが出ます。
エラー (アクティブ) この定数式には、必要な型 "unsigned long long" ではなく型 "Js::OpCode" が指定されています
デバッグ用のコードです。
# if DBG_DUMP
uint byteCodeDataSize;
uint byteCodeAuxiliaryDataSize;
uint byteCodeAuxiliaryContextDataSize;
uint byteCodeHistogram[OpCode::ByteCodeLast];
uint32 forinCache;
uint32 forinNoCache;
# endif
対策
ビルドの構成をRelease
に変更します。